Ok, I think I'm losing my mind.
I knocked out a quick extension for my home game to hide initiaitive and insight rolls from the players.
I'm sure it was working, but as of last week it's not hiding the rolls, they are visible to all.
I basically added the following to the initiative function
rRoll.bSecret = true;
rRoll.bTower = true
The script is posted below, what have I done wrong ?
Code:
function onInit()
ActionsManager.registerModHandler("skill", modRoll);
ActionsManager.registerModHandler("init", HideInit);
end
function modRoll(rSource, rTarget, rRoll)
local aAddDesc = {};
local aAddDice = {};
local nAddMod = 0;
local bADV = false;
local bDIS = false;
if rRoll.sDesc:match(" %[ADV%]") then
bADV = true;
rRoll.sDesc = rRoll.sDesc:gsub(" %[ADV%]", "");
end
if rRoll.sDesc:match(" %[DIS%]") then
bDIS = true;
rRoll.sDesc = rRoll.sDesc:gsub(" %[DIS%]", "");
end
if rSource then
local bEffects = false;
-- Get ability used
local sActionStat = nil;
local sAbility = string.match(rRoll.sDesc, "%[CHECK%] (%w+)");
local sSkill = StringManager.trim(string.match(rRoll.sDesc, "%[SKILL%] ([^[]+)"));
if not sAbility and sSkill then
sAbility = string.match(rRoll.sDesc, "%[MOD:(%w+)%]");
if sAbility then
sAbility = DataCommon.ability_stol[sAbility];
else
local sSkillLower = sSkill:lower();
if sSkillLower=="insight" then
rRoll.bSecret = true;
rRoll.bTower = true
end
for k, v in pairs(DataCommon.skilldata) do
if k:lower() == sSkillLower then
sAbility = v.stat;
end
end
end
end
if sAbility then
sAbility = string.lower(sAbility);
end
-- Build filters
local aCheckFilter = {};
if sAbility then
table.insert(aCheckFilter, sAbility);
end
local aSkillFilter = {};
if sSkill then
table.insert(aSkillFilter, sSkill:lower());
end
-- Get roll effect modifiers
local nEffectCount;
aAddDice, nAddMod, nEffectCount = EffectManager5E.getEffectsBonus(rSource, {"CHECK"}, false, aCheckFilter);
if (nEffectCount > 0) then
bEffects = true;
end
local aSkillAddDice, nSkillAddMod, nSkillEffectCount = EffectManager5E.getEffectsBonus(rSource, {"SKILL"}, false, aSkillFilter);
if (nSkillEffectCount > 0) then
bEffects = true;
for _,v in ipairs(aSkillAddDice) do
table.insert(aAddDice, v);
end
nAddMod = nAddMod + nSkillAddMod;
end
-- Get condition modifiers
if EffectManager5E.hasEffectCondition(rSource, "ADVSKILL") then
bADV = true;
bEffects = true;
elseif #(EffectManager5E.getEffectsByType(rSource, "ADVSKILL", aSkillFilter)) > 0 then
bADV = true;
bEffects = true;
elseif EffectManager5E.hasEffectCondition(rSource, "ADVCHK") then
bADV = true;
bEffects = true;
elseif #(EffectManager5E.getEffectsByType(rSource, "ADVCHK", aCheckFilter)) > 0 then
bADV = true;
bEffects = true;
end
if EffectManager5E.hasEffectCondition(rSource, "DISSKILL") then
bDIS = true;
bEffects = true;
elseif #(EffectManager5E.getEffectsByType(rSource, "DISSKILL", aSkillFilter)) > 0 then
bDIS = true;
bEffects = true;
elseif EffectManager5E.hasEffectCondition(rSource, "DISCHK") then
bDIS = true;
bEffects = true;
elseif #(EffectManager5E.getEffectsByType(rSource, "DISCHK", aCheckFilter)) > 0 then
bDIS = true;
bEffects = true;
end
if EffectManager5E.hasEffectCondition(rSource, "Frightened") then
bDIS = true;
bEffects = true;
end
if EffectManager5E.hasEffectCondition(rSource, "Intoxicated") then
bDIS = true;
bEffects = true;
end
if EffectManager5E.hasEffectCondition(rSource, "Poisoned") then
bDIS = true;
bEffects = true;
end
if StringManager.contains({ "strength", "dexterity", "constitution" }, sAbility) then
if EffectManager5E.hasEffectCondition(rSource, "Encumbered") then
bEffects = true;
bDIS = true;
end
end
-- Get ability modifiers
local nBonusStat, nBonusEffects = ActorManager2.getAbilityEffectsBonus(rSource, sAbility);
if nBonusEffects > 0 then
bEffects = true;
nAddMod = nAddMod + nBonusStat;
end
-- Get exhaustion modifiers
local nExhaustMod, nExhaustCount = EffectManager5E.getEffectsBonus(rSource, {"EXHAUSTION"}, true);
if nExhaustCount > 0 then
bEffects = true;
if nExhaustMod >= 1 then
bDIS = true;
end
end
-- If effects happened, then add note
if bEffects then
local sEffects = "";
local sMod = StringManager.convertDiceToString(aAddDice, nAddMod, true);
if sMod ~= "" then
sEffects = "[" .. Interface.getString("effects_tag") .. " " .. sMod .. "]";
else
sEffects = "[" .. Interface.getString("effects_tag") .. "]";
end
table.insert(aAddDesc, sEffects);
end
end
if #aAddDesc > 0 then
rRoll.sDesc = rRoll.sDesc .. " " .. table.concat(aAddDesc, " ");
end
ActionsManager2.encodeDesktopMods(rRoll);
for _,vDie in ipairs(aAddDice) do
if vDie:sub(1,1) == "-" then
table.insert(rRoll.aDice, "-p" .. vDie:sub(3));
else
table.insert(rRoll.aDice, "p" .. vDie:sub(2));
end
end
rRoll.nMod = rRoll.nMod + nAddMod;
ActionsManager2.encodeAdvantage(rRoll, bADV, bDIS);
end
function HideInit (rSource, rTarget, rRoll)
Debug.console("rRoll",rRoll)
local bADV = false;
local bDIS = false;
if rRoll.sDesc:match(" %[ADV%]") then
bADV = true;
rRoll.sDesc = rRoll.sDesc:gsub(" %[ADV%]", "");
end
if rRoll.sDesc:match(" %[DIS%]") then
bDIS = true;
rRoll.sDesc = rRoll.sDesc:gsub(" %[DIS%]", "");
end
if rSource then
local bEffects, aEffectDice, nEffectMod, bEffectADV, bEffectDIS = ActionInit.getEffectAdjustments(rSource);
if bEffects then
for _,vDie in ipairs(aEffectDice) do
if vDie:sub(1,1) == "-" then
table.insert(rRoll.aDice, "-p" .. vDie:sub(3));
else
table.insert(rRoll.aDice, "p" .. vDie:sub(2));
end
end
rRoll.nMod = rRoll.nMod + nEffectMod;
if bEffectADV then
bADV = true;
end
if bEffectDIS then
bDIS = true;
end
local sEffects = "";
local sMod = StringManager.convertDiceToString(aEffectDice, nEffectMod, true);
if sMod ~= "" then
sEffects = "[" .. Interface.getString("effects_tag") .. " " .. sMod .. "]";
else
sEffects = "[" .. Interface.getString("effects_tag") .. "]";
end
rRoll.sDesc = rRoll.sDesc .. " " .. sEffects;
end
end
rRoll.bSecret = true;
rRoll.bTower = true
ActionsManager2.encodeDesktopMods(rRoll);
ActionsManager2.encodeAdvantage(rRoll, bADV, bDIS);
end
Cheers, Steve.
*Edit* I'm pretty confident the above code was working up until the latest update to Fantasy Grounds, maybe something got changed in the way the dice tower operates?