feat: Add roll visibility option to settings

This commit is contained in:
Tealk
2026-01-21 18:08:00 +01:00
parent 82ecd64b62
commit e1943ec418
+75 -61
View File
@@ -1287,13 +1287,23 @@
<div class="grid settings widegap">
<h2>Settings</h2>
<div class="grid col4 vcol">
<select class="input" name="attr_sheet_type">
<option value="character">Character</option>
<option value="patron">Patron</option>
<option value="npc">NPC</option>
</select>
<label>Sheet Type</label>
<div class="grid col2 widegap">
<div class="grid vcol">
<select class="input" name="attr_sheet_type">
<option value="character">Character</option>
<option value="patron">Patron</option>
<option value="npc">NPC</option>
</select>
<label>Sheet Type</label>
</div>
<div class="grid vcol">
<select class="input" name="attr_roll_visibility">
<option value="public">Public</option>
<option value="gm">Game Master Only</option>
</select>
<label>Roll Visibility</label>
</div>
</div>
</div>
@@ -1756,7 +1766,7 @@
});
});
const test_list = ["difficulty","circumstances","superiority","psychic_focus"];
const test_list = ["difficulty","circumstances","superiority","psychic_focus","roll_visibility"];
const button_list = chars_list.concat(skill_list).concat(npc_chars_list);
button_list.forEach(trigger => {
on(`clicked:${trigger}`, function(eventInfo) {
@@ -1848,63 +1858,67 @@
hitloc = ` {{hitlocation=[[0]]}}`;
}
startRoll(`&{template:imtest} {{reroll=[Reroll](~${reroll})}} `
.concat(`{{name=@{character_name}}} {{skill_name=${skill_name}}} `)
.concat(`{{skill_total=[[${skill_total}]]}} {{difficulty=[[${diff_roll}]]}} `)
.concat(`{{result=[[1d100]]}}${adv_roll}${disadv_roll}${circ_roll}${dmg_roll}${dmg_info}${hitloc} `)
.concat(`{{sl=[[0]]}} {{sl_info=[[0]]}} {{critical=[[0]]}} {{fumble=[[0]]}}${adjustedsl}`)
.concat(`{{superiority=${superiority}}}`), (results) => {
const result = results.results.result.result;
let digits = result.toString().split('').map(Number);
if (digits.length == 1) {
digits.push(0);
}
const difficulty = results.results.difficulty.result;
const diff_name = diff_data[`${difficulty}`]["name"];
// account for original SL that is better/worse
let final_result = result;
let final_total = skill_total + difficulty;
let final_sl = getSl(final_total, final_result, slmod, superiority);
if (circ != 0) {
final_total += circ_bonus;
getAttrs(["roll_visibility"], function(vis) {
let rollPrefix = vis.roll_visibility === "gm" ? "/w gm " : "";
let hi_result = result == 100 ? 100 :
Math.min(...digits) * 10 + Math.max(...digits);
let hi_sl = getSl(final_total, hi_result, slmod, superiority);
let lo_result = result == 100 ? 100 :
Math.max(...digits) * 10 + Math.min(...digits);
let lo_sl = getSl(final_total, lo_result, slmod, superiority);
if ((circ > 0 && parseInt(hi_sl) >= parseInt(lo_sl)) ||
(circ < 0 && parseInt(hi_sl) <= parseInt(lo_sl))) {
final_result = hi_result;
final_sl = hi_sl;
} else if ((circ > 0 && parseInt(lo_sl) >= parseInt(hi_sl)) ||
(circ < 0 && parseInt(lo_sl) <= parseInt(hi_sl))) {
final_result = lo_result;
final_sl = lo_sl;
startRoll(`${rollPrefix}&{template:imtest} {{reroll=[Reroll](~${reroll})}} `
.concat(`{{name=@{character_name}}} {{skill_name=${skill_name}}} `)
.concat(`{{skill_total=[[${skill_total}]]}} {{difficulty=[[${diff_roll}]]}} `)
.concat(`{{result=[[1d100]]}}${adv_roll}${disadv_roll}${circ_roll}${dmg_roll}${dmg_info}${hitloc} `)
.concat(`{{sl=[[0]]}} {{sl_info=[[0]]}} {{critical=[[0]]}} {{fumble=[[0]]}}${adjustedsl}`)
.concat(`{{superiority=${superiority}}}`), (results) => {
const result = results.results.result.result;
let digits = result.toString().split('').map(Number);
if (digits.length == 1) {
digits.push(0);
}
}
let final_sl_info = getSlInfo(final_sl);
const difficulty = results.results.difficulty.result;
const diff_name = diff_data[`${difficulty}`]["name"];
let crit = critfum && final_result <= final_total && final_result % 10 == Math.floor(final_result / 10) ? 1 : 0;
let fumb = critfum && final_result > final_total && final_result % 10 == Math.floor(final_result / 10) ? 1 : 0;
let u = final_result % 10;
let hitlocation = `${u}, ${hitloc_data[u]["name"]}`;
finishRoll(
results.rollId,
{
"result": final_result,
"difficulty": diff_name,
"skill_total": final_total,
"sl": final_sl,
"sl_info": final_sl_info,
"critical": crit,
"fumble": fumb,
"hitlocation": hitlocation
let final_result = result;
let final_total = skill_total + difficulty;
let final_sl = getSl(final_total, final_result, slmod, superiority);
if (circ != 0) {
final_total += circ_bonus;
let hi_result = result == 100 ? 100 :
Math.min(...digits) * 10 + Math.max(...digits);
let hi_sl = getSl(final_total, hi_result, slmod, superiority);
let lo_result = result == 100 ? 100 :
Math.max(...digits) * 10 + Math.min(...digits);
let lo_sl = getSl(final_total, lo_result, slmod, superiority);
if ((circ > 0 && parseInt(hi_sl) >= parseInt(lo_sl)) ||
(circ < 0 && parseInt(hi_sl) <= parseInt(lo_sl))) {
final_result = hi_result;
final_sl = hi_sl;
} else if ((circ > 0 && parseInt(lo_sl) >= parseInt(hi_sl)) ||
(circ < 0 && parseInt(lo_sl) <= parseInt(hi_sl))) {
final_result = lo_result;
final_sl = lo_sl;
}
}
);
let final_sl_info = getSlInfo(final_sl);
let crit = critfum && final_result <= final_total && final_result % 10 == Math.floor(final_result / 10) ? 1 : 0;
let fumb = critfum && final_result > final_total && final_result % 10 == Math.floor(final_result / 10) ? 1 : 0;
let u = final_result % 10;
let hitlocation = `${u}, ${hitloc_data[u]["name"]}`;
finishRoll(
results.rollId,
{
"result": final_result,
"difficulty": diff_name,
"skill_total": final_total,
"sl": final_sl,
"sl_info": final_sl_info,
"critical": crit,
"fumble": fumb,
"hitlocation": hitlocation
}
);
});
});
};