mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 03:40:32 +00:00
Graphic changes, confort change, color change, add translation... dynamics bars, fix images
2737 lines
134 KiB
HTML
2737 lines
134 KiB
HTML
<!-- Custom Character Sheet ordered by Jayg3031 for D&Z Apocalypse Community -->
|
||
<!-- Made by Spirito, www.spirito.fr, Spirito#6973, spirito35220@gmail.com -->
|
||
|
||
<rolltemplate class="sheet-rolltemplate-dzapocalypse">
|
||
<div class="sheet-template-header sheet-bloc-header">
|
||
<div class="sheet-header-bloc">
|
||
<span class="sheet-headerstyle1">{{name}}</span>
|
||
<span class="sheet-headerstyle2">{{charactername}} ♦ {{category}}</span>
|
||
</div>
|
||
|
||
{{#range}}
|
||
<div id="DETAILS" class="sheet-template-rolls sheet-template-rolls4">
|
||
<span class="sheet-headerstyle3">range :</span>
|
||
<span class="sheet-headerstyle4">{{range}}</span>
|
||
</div>
|
||
{{/range}}
|
||
<!-- -->
|
||
<!-- -->
|
||
<!-- -->
|
||
<!-- -->
|
||
<!-- -->
|
||
{{#rollGreater() roll 0}}
|
||
<!-- -->
|
||
{{#standard}}
|
||
<!-- -->
|
||
<div id="STANDARD" class="sheet-template-rolls">
|
||
<div class="sheet-description2">STD</div>
|
||
<div class="sheet-roll">{{roll}}</div>
|
||
</div>
|
||
<!-- -->
|
||
{{/standard}}
|
||
<!-- -->
|
||
{{#advantage}}
|
||
<!-- -->
|
||
<div id="ADVANTAGE" class="sheet-template-rolls sheet-template-rolls2">
|
||
<div class="sheet-description2">ADV</div>
|
||
{{#rollGreater() roll1 roll2}}
|
||
<div class="sheet-roll">{{roll1}}</div>
|
||
<div class="sheet-roll sheet-allgrey">{{roll2}}</div>
|
||
{{/rollGreater() roll1 roll2}} {{#rollGreater() roll2 roll1}}
|
||
<div class="sheet-roll sheet-allgrey">{{roll1}}</div>
|
||
<div class="sheet-roll">{{roll2}}</div>
|
||
{{/rollGreater() roll2 roll1}} {{#rollTotal() roll1 roll2}}
|
||
<div class="sheet-roll">{{roll1}}</div>
|
||
<div class="sheet-roll">{{roll2}}</div>
|
||
{{/rollTotal() roll1 roll2}}
|
||
</div>
|
||
<!-- -->
|
||
{{/advantage}}
|
||
<!-- -->
|
||
{{#disadvantage}}
|
||
<!-- -->
|
||
<div id="Disadvantage" class="sheet-template-rolls sheet-template-rolls2">
|
||
<div class="sheet-description2">DIS</div>
|
||
{{#rollGreater() roll1 roll2}}
|
||
<div class="sheet-roll sheet-allgrey">{{roll1}}</div>
|
||
<div class="sheet-roll">{{roll2}}</div>
|
||
{{/rollGreater() roll1 roll2}} {{#rollGreater() roll2 roll1}}
|
||
<div class="sheet-roll">{{roll1}}</div>
|
||
<div class="sheet-roll sheet-allgrey">{{roll2}}</div>
|
||
{{/rollGreater() roll2 roll1}} {{#rollTotal() roll1 roll2}}
|
||
<div class="sheet-roll">{{roll1}}</div>
|
||
<div class="sheet-roll">{{roll2}}</div>
|
||
{{/rollTotal() roll1 roll2}}
|
||
</div>
|
||
<!-- -->
|
||
{{/disadvantage}}
|
||
<!-- -->
|
||
{{/rollGreater() roll 0}}
|
||
<!-- -->
|
||
<!-- -->
|
||
<!-- -->
|
||
<!-- -->
|
||
<!-- -->
|
||
{{#rollGreater() dmg1 0}}
|
||
<!-- -->
|
||
<div id="ONE DAMAGE" class="sheet-template-rolls">
|
||
<div class="sheet-description2">DMG</div>
|
||
<div class="sheet-roll sheet-dmg">{{dmg1}}</div>
|
||
{{#dmg1type}}
|
||
<div class="sheet-effect">{{dmg1type}}</div>
|
||
{{/dmg1type}}
|
||
</div>
|
||
<!-- -->
|
||
{{/rollGreater() dmg1 0}}
|
||
<!-- -->
|
||
|
||
{{#rollGreater() save 0}}
|
||
<!-- -->
|
||
<div id="SAVE" class="sheet-template-rolls">
|
||
<div class="sheet-description3">DD :{{save}} {{savemod}}</div>
|
||
<div class="sheet-description"><b>Description</b> : {{description}}</div>
|
||
</div>
|
||
<!-- -->
|
||
{{/rollGreater() save 0}}
|
||
<!-- -->
|
||
{{#desc}}
|
||
<div class="sheet-extra-button">{{button}}</div>
|
||
{{/desc}}
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-dzapocalypse-description">
|
||
<div class="sheet-template-header sheet-bloc-header">
|
||
{{#name}}<span class="sheet-headerstyle1">{{name}}</span>{{/name}}
|
||
<!-- -->
|
||
{{#source}}<span class="sheet-headerstyle2">{{source}}</span>{{/source}}
|
||
<!-- -->
|
||
<div id="DESCRIPTION" class="sheet-template-rolls sheet-template-rolls3">
|
||
{{#description}}<div class="sheet-description"><b>Description</b> : {{description}}</div>{{/description}}
|
||
{{#properties}}<div class="sheet-description"><b>Properties</b> : {{properties}}</div>{{/properties}}
|
||
{{#barrel}}<div class="sheet-description"><b>>Barrel</b> : {{barrel}}</div>{{/barrel}}
|
||
{{#tactical1}}<div class="sheet-description"><b>Tactical</b> : {{tactical1}}</div>{{/tactical1}}
|
||
{{#tactical2}}<div class="sheet-description"><b>Tactical</b> : {{tactical2}}</div>{{/tactical2}}
|
||
{{#scope}}<div class="sheet-description"><b>Scope</b> : {{scope}}</div>{{/scope}}
|
||
{{#magazine}}<div class="sheet-description"><b>Magazine</b> : {{magazine}}</div>{{/magazine}}
|
||
</div>
|
||
|
||
{{#charactername}}
|
||
<span class="sheet-headerstyle2 sheet-headerstyle123" style="color: var(--blackandwhite2);">{{charactername}}</span>
|
||
{{/charactername}}
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
<div class="charsheet sheet-charsheet">
|
||
<div class="sheet-maingrid-area-header1">
|
||
<!-- ----- HEADER ----- -->
|
||
<div class="sheet-main-header">
|
||
<div class="sheet-standardbox sheet-standardbox33">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-header">
|
||
|
||
<div class="sheet-main-header-charactername">
|
||
<h4 data-i18n="character_name">Character Name</h4>
|
||
<input type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_character_name" />
|
||
</div>
|
||
|
||
<div class="sheet-main-header-background">
|
||
<h4 data-i18n="background">Background</h4>
|
||
<select name="attr_background">
|
||
<option value="0" selected data-i18n="none">None</option>
|
||
<option value="burglar">Burglar</option>
|
||
<option value="mechanic">Mechanic</option>
|
||
<option value="chef">Chef</option>
|
||
<option value="geek">Computer Geek</option>
|
||
<option value="worker">Construction Worker</option>
|
||
<option value="service">Customer Service</option>
|
||
<option value="doctor">Doctor</option>
|
||
<option value="Farmer">Farmer</option>
|
||
<option value="firefighter">Firefighter / EMT</option>
|
||
<option value="military">Military</option>
|
||
<option value="musician">Musician</option>
|
||
<option value="office">Office Worker</option>
|
||
<option value="police">Police Officer</option>
|
||
<option value="scientist">Scientist</option>
|
||
<option value="student">Student</option>
|
||
<option value="teacher">Teacher</option>
|
||
</select>
|
||
</div>
|
||
|
||
<div class="sheet-main-header-bodytype">
|
||
<h4 data-i18n="body_type">Body Type</h4>
|
||
<select name="attr_body">
|
||
<option value="0" selected>-</option>
|
||
<option value="skinny">Skinny</option>
|
||
<option value="fit">Fit</option>
|
||
<option value="average">Average</option>
|
||
<option value="heavy">Heavy</option>
|
||
</select>
|
||
</div>
|
||
|
||
<div class="sheet-main-header-blood">
|
||
<h4 data-i18n="blood">Blood</h4>
|
||
<select name="attr_character_bloodtype" title="Blood type compatibility depends on your blood letter (A, B, AB, or O) and whether it's positive or negative. O negative is the universal donor — their blood can go to anyone. AB positive is the universal receiver — they can get blood from anyone. A can give to A and AB, B to B and AB, AB only to AB, and O to everyone. People with negative blood can give to both negative and positive types, but they can only receive from other negative types. The key rule is: you can’t receive blood that has parts your body doesn’t recognize.">
|
||
<option value="0" selected>-</option>
|
||
<option value="o-">O-</option>
|
||
<option value="o+">O+</option>
|
||
<option value="a-">A-</option>
|
||
<option value="a+">A+</option>
|
||
<option value="b-">B--</option>
|
||
<option value="b+">B+</option>
|
||
<option value="ab-">AB-</option>
|
||
<option value="ab+">AB+</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-header2">
|
||
<div class="sheet-main-header-playername">
|
||
<h4 data-i18n="player_name">Player Name</h4>
|
||
<input type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_character_playername" />
|
||
</div>
|
||
|
||
<div class="sheet-main-header-level">
|
||
<h4 data-i18n="level">Level</h4>
|
||
<input type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_level" />
|
||
</div>
|
||
|
||
<div class="sheet-main-header-experience">
|
||
<h4 data-i18n="xp">XP</h4>
|
||
<input type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_character_experience" />
|
||
</div>
|
||
|
||
<div class="sheet-main-header-alignment">
|
||
<h4 data-i18n="alignment">Alignment</h4>
|
||
<input type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_character_alignment" />
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ----- IMAGE ----- -->
|
||
<div class="sheet-main-image"></div>
|
||
</div>
|
||
|
||
<div class="sheet-maingrid-area-header2">
|
||
<!-- ----- MENU ----- -->
|
||
<div class="sheet-main-menu">
|
||
<div class="sheet-standardbox sheet-standardbox14">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-online">
|
||
<input type="radio" value="sheet-base" name="attr_changepage" checked />
|
||
<label class="radio-button" data-i18n="tab_base">Base</label>
|
||
</div>
|
||
<div class="sheet-online">
|
||
<input type="radio" value="sheet-vehicle" name="attr_changepage" />
|
||
<label class="radio-button" data-i18n="tab_vehicle">Vehicle</label>
|
||
</div>
|
||
<div class="sheet-online">
|
||
<input type="radio" value="sheet-notes" name="attr_changepage" />
|
||
<label class="radio-button" data-i18n="tab_notes">Notes</label>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script id="✓ CALC : Display Page" type="text/worker">
|
||
on("sheet:opened change:changepage", function () {
|
||
getAttrs(["changepage"], function (values) {
|
||
const selectedPage = values.changepage || "sheet-base";
|
||
|
||
const pageMap = {
|
||
"sheet-base": "sheet-base-display",
|
||
"sheet-vehicle": "sheet-vehicle-display",
|
||
"sheet-notes": "sheet-notes-display"
|
||
};
|
||
|
||
Object.keys(pageMap).forEach(pageKey => {
|
||
const element = $20(`.${pageMap[pageKey]}`);
|
||
if (selectedPage === pageKey) {
|
||
element.removeClass("sheet-hidden");
|
||
} else {
|
||
element.addClass("sheet-hidden");
|
||
}
|
||
});
|
||
});
|
||
});
|
||
</script>
|
||
|
||
<!-- ----- ROLL STATUS ----- -->
|
||
<div class="sheet-main-header-blank">
|
||
<div class="sheet-standardbox sheet-standardbox11 sheet-header-rollstatus-box">
|
||
<div class="sheet-oneline sheet-rollstatus-privacy">
|
||
<div class="sheet-button-holder">
|
||
<input id="public" class="sheet-globalprivacy" type="radio" value=" " name="attr_global-privacy-status" checked />
|
||
<label for="public" data-i18n="privacy_pc">PC</label>
|
||
</div>
|
||
<div class="sheet-button-holder">
|
||
<input id="to-gm" class="sheet-globalprivacy" type="radio" value="/w gm" name="attr_global-privacy-status" />
|
||
<label for="to-gm" data-i18n="privacy_gm">GM</label>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sheet-standardbox sheet-standardbox13 sheet-header-rollstatus-box">
|
||
<div class="sheet-oneline sheet-rollstatus-advantage">
|
||
<div class="sheet-button-holder">
|
||
<input id="advantage" class="input-colored2" type="radio" value="advantage" name="attr_global-advantage-status" />
|
||
<label for="advantage" data-i18n="adv">ADV</label>
|
||
</div>
|
||
<div class="sheet-button-holder">
|
||
<input id="standard" class="input-colored1" type="radio" value="standard" name="attr_global-advantage-status" checked />
|
||
<label for="standard" data-i18n="std">STD</label>
|
||
</div>
|
||
<div class="sheet-button-holder">
|
||
<input id="disadvantage" class="input-colored2" type="radio" value="disadvantage" name="attr_global-advantage-status" />
|
||
<label for="disadvantage" data-i18n="dis">DIS</label>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="sheet-maingrid-area sheet-base-display sheet-hidden">
|
||
<div class="sheet-maingrid-area-left">
|
||
<!-- ----- STATISTIQUES ----- -->
|
||
<div class="sheet-main-statistiques">
|
||
<!-- STR -->
|
||
<div class="sheet-standardbox sheet-standardbox51">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_str" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Strength}} {{roll=[[1d20+@{str}]]}} {{roll1=[[1d20+@{str}]]}} {{roll2=[[1d20+@{str}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Statistics}}"></button>
|
||
<h3 data-i18n="str">STR</h3>
|
||
</div>
|
||
<input class="sheet-inputchar2" type="number" value="10" name="attr_str_base" />
|
||
<input class="sheet-inputchar" type="number" value="0" name="attr_str" readonly />
|
||
</div>
|
||
</div>
|
||
|
||
<!-- DEX -->
|
||
<div class="sheet-standardbox sheet-standardbox32">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_str" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Dexterity}} {{roll=[[1d20+@{dex}]]}} {{roll1=[[1d20+@{dex}]]}} {{roll2=[[1d20+@{dex}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Statistics}}"></button>
|
||
<h3 data-i18n="dex">DEX</h3>
|
||
</div>
|
||
<input class="sheet-inputchar2" type="number" value="10" name="attr_dex_base" />
|
||
<input class="sheet-inputchar" type="number" value="0" name="attr_dex" readonly />
|
||
</div>
|
||
</div>
|
||
|
||
<!-- CON -->
|
||
<div class="sheet-standardbox sheet-standardbox31">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_str" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Constitution}} {{roll=[[1d20+@{con}]]}} {{roll1=[[1d20+@{con}]]}} {{roll2=[[1d20+@{con}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Statistics}}"></button>
|
||
<h3 data-i18n="con">CON</h3>
|
||
</div>
|
||
<input class="sheet-inputchar2" type="number" value="10" name="attr_con_base" />
|
||
<input class="sheet-inputchar" type="number" value="0" name="attr_con" readonly />
|
||
</div>
|
||
</div>
|
||
|
||
<!-- INT -->
|
||
<div class="sheet-standardbox sheet-standardbox34">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_str" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Intelligence}} {{roll=[[1d20+@{int}]]}} {{roll1=[[1d20+@{int}]]}} {{roll2=[[1d20+@{int}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Statistics}}"></button>
|
||
<h3 data-i18n="int">INT</h3>
|
||
</div>
|
||
<input class="sheet-inputchar2" type="number" value="10" name="attr_int_base" />
|
||
<input class="sheet-inputchar" type="number" value="0" name="attr_int" readonly />
|
||
</div>
|
||
</div>
|
||
|
||
<!-- WIS -->
|
||
<div class="sheet-standardbox sheet-standardbox42">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_str" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Wisdom}} {{roll=[[1d20+@{wis}]]}} {{roll1=[[1d20+@{wis}]]}} {{roll2=[[1d20+@{wis}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Statistics}}"></button>
|
||
<h3 data-i18n="wis">WIS</h3>
|
||
</div>
|
||
<input class="sheet-inputchar2" type="number" value="10" name="attr_wis_base" />
|
||
<input class="sheet-inputchar" type="number" value="0" name="attr_wis" readonly />
|
||
</div>
|
||
</div>
|
||
|
||
<!-- CHA -->
|
||
<div class="sheet-standardbox sheet-standardbox14">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_str" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Charisma}} {{roll=[[1d20+@{cha}]]}} {{roll1=[[1d20+@{cha}]]}} {{roll2=[[1d20+@{cha}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Statistics}}"></button>
|
||
<h3 data-i18n="cha">CHA</h3>
|
||
</div>
|
||
<input class="sheet-inputchar2" type="number" value="10" name="attr_cha_base" />
|
||
<input class="sheet-inputchar" type="number" value="0" name="attr_cha" readonly />
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script id="✓ - CALC : Caractéristiques selon Body (avec valeurs signées)" type="text/worker">
|
||
on("sheet:opened change:body", function () {
|
||
getAttrs(["body"], function(values) {
|
||
const body = (values["body"] || "").toLowerCase();
|
||
|
||
const presets = {
|
||
skinny: [-2, 4, 0, 0, 0, 0],
|
||
fit: [3, 2, 0, 0, 0, 0],
|
||
average:[1, 1, 1, 0, 0, 0],
|
||
heavy: [2, -2, 4, 0, 0, 0]
|
||
};
|
||
|
||
const [str, dex, con, int_, wis, cha] = presets[body] || [0, 0, 0, 0, 0, 0];
|
||
|
||
const formatSigned = n => (n > 0 ? `+${n}` : `${n}`);
|
||
|
||
setAttrs({
|
||
str_body: formatSigned(str),
|
||
dex_body: formatSigned(dex),
|
||
con_body: formatSigned(con),
|
||
int_body: formatSigned(int_),
|
||
wis_body: formatSigned(wis),
|
||
cha_body: formatSigned(cha)
|
||
});
|
||
});
|
||
});
|
||
</script>
|
||
|
||
<script id="✓ - CALC : Ability Modifiers from Base + Body" type="text/worker">
|
||
on("sheet:opened change:str_base change:dex_base change:con_base change:int_base change:wis_base change:cha_base change:str_body change:dex_body change:con_body change:int_body change:wis_body change:cha_body", function () {
|
||
getAttrs([
|
||
"str_base", "dex_base", "con_base",
|
||
"int_base", "wis_base", "cha_base",
|
||
"str_body", "dex_body", "con_body",
|
||
"int_body", "wis_body", "cha_body"
|
||
], function(values) {
|
||
const setObj = {};
|
||
|
||
const calculateMod = function(base, body) {
|
||
const b = parseInt(base, 10) || 0;
|
||
const bo = parseInt(body, 10) || 0;
|
||
return Math.floor((b + bo - 10) / 2);
|
||
};
|
||
|
||
setObj["str"] = calculateMod(values["str_base"], values["str_body"]);
|
||
setObj["dex"] = calculateMod(values["dex_base"], values["dex_body"]);
|
||
setObj["con"] = calculateMod(values["con_base"], values["con_body"]);
|
||
setObj["int"] = calculateMod(values["int_base"], values["int_body"]);
|
||
setObj["wis"] = calculateMod(values["wis_base"], values["wis_body"]);
|
||
setObj["cha"] = calculateMod(values["cha_base"], values["cha_body"]);
|
||
|
||
setAttrs(setObj);
|
||
});
|
||
});
|
||
</script>
|
||
|
||
<!-- ----- INSPIRATION + PASSIVE PERCEPTION ----- -->
|
||
<div class="sheet-main-inspipassiv">
|
||
<div class="sheet-main-inspiration">
|
||
<div class="sheet-standardbox sheet-standardbox11">
|
||
<div class="sheet-oneline">
|
||
<input type="checkbox" value="1" name="attr_inspiration" />
|
||
<h3 data-i18n="inspiration">Inspiration</h3>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-main-passiveperception">
|
||
<div class="sheet-standardbox sheet-standardbox52">
|
||
<div class="sheet-oneline">
|
||
<input type="number" value="0" name="attr_passiveperception" />
|
||
<h3 data-i18n="passive_per">Passive Per</h3>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ----- SAVING THROWS ----- -->
|
||
<div class="sheet-main-savingthrows">
|
||
<div class="sheet-standardbox sheet-standardbox42">
|
||
<h4 class="sheet-minititles2" data-i18n="saving_throws">Saving Throws</h4>
|
||
<div class="sheet-oneline">
|
||
<!-- STR -->
|
||
<div class="sheet-main-savingthrows-str">
|
||
<input type="checkbox" value="1" name="attr_saving_str_active" />
|
||
<input type="number" step="0.01" value="0" name="attr_saving_str_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_saving_str" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Strength Save}} {{roll=[[1d20+@{saving_str_value}]]}} {{roll1=[[1d20+@{saving_str_value}]]}} {{roll2=[[1d20+@{saving_str_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Save}}"></button>
|
||
<h4 data-i18n="strength">Strength</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- DEX -->
|
||
<div class="sheet-main-savingthrows-dex">
|
||
<input type="checkbox" value="1" name="attr_saving_dex_active" />
|
||
<input type="number" step="0.01" value="0" name="attr_saving_dex_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_saving_dex" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Dexterity Save}} {{roll=[[1d20+@{saving_dex_value}]]}} {{roll1=[[1d20+@{saving_dex_value}]]}} {{roll2=[[1d20+@{saving_dex_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Save}}"></button>
|
||
<h4 data-i18n="dexterity">Dexterity</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- CON -->
|
||
<div class="sheet-main-savingthrows-con">
|
||
<input type="checkbox" value="1" name="attr_saving_con_active" />
|
||
<input type="number" step="0.01" value="0" name="attr_saving_con_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_saving_con" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Constitution Save}} {{roll=[[1d20+@{saving_con_value}]]}} {{roll1=[[1d20+@{saving_con_value}]]}} {{roll2=[[1d20+@{saving_con_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Save}}"></button>
|
||
<h4 data-i18n="constitution">Constitution</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- INT -->
|
||
<div class="sheet-main-savingthrows-int">
|
||
<input type="checkbox" value="1" name="attr_saving_int_active" />
|
||
<input type="number" step="0.01" value="0" name="attr_saving_int_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_saving_int" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Intelligence Save}} {{roll=[[1d20+@{saving_int_value}]]}} {{roll1=[[1d20+@{saving_int_value}]]}} {{roll2=[[1d20+@{saving_int_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Save}}"></button>
|
||
<h4 data-i18n="intelligence">Intelligence</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- WIS -->
|
||
<div class="sheet-main-savingthrows-wis">
|
||
<input type="checkbox" value="1" name="attr_saving_wis_active" />
|
||
<input type="number" step="0.01" value="0" name="attr_saving_wis_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_saving_wis" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Wisdom Save}} {{roll=[[1d20+@{saving_wis_value}]]}} {{roll1=[[1d20+@{saving_wis_value}]]}} {{roll2=[[1d20+@{saving_wis_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Save}}"></button>
|
||
<h4 data-i18n="wisdom">Wisdom</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- CHA -->
|
||
<div class="sheet-main-savingthrows-cha">
|
||
<input type="checkbox" value="1" name="attr_saving_cha_active" />
|
||
<input type="number" step="0.01" value="0" name="attr_saving_cha_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_saving_cha" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Charisma Save}} {{roll=[[1d20+@{saving_cha_value}]]}} {{roll1=[[1d20+@{saving_cha_value}]]}} {{roll2=[[1d20+@{saving_cha_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Save}}"></button>
|
||
<h4 data-i18n="charisma">Charisma</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script id="✓ - CALC : Saving Throws selon Background" type="text/worker">
|
||
on("change:background", function () {
|
||
getAttrs(["background"], function (values) {
|
||
const bg = (values["background"] || "").toLowerCase();
|
||
|
||
const backgrounds = {
|
||
burglar: ["dex", "int"],
|
||
mechanic: ["int", "cha"],
|
||
chef: ["int", "wis"],
|
||
geek: ["int", "wis"],
|
||
worker: ["int", "str"],
|
||
service: ["cha", "con"],
|
||
doctor: ["wis", "con"],
|
||
farmer: ["int", "str"],
|
||
firefighter: ["str", "con"],
|
||
military: ["str", "dex"],
|
||
musician: ["cha", "dex"],
|
||
office: ["int", "cha"],
|
||
police: ["str", "dex"],
|
||
scientist: ["int", "wis"],
|
||
student: ["int", "wis"],
|
||
teacher: ["int", "wis"]
|
||
};
|
||
|
||
const allStats = ["str", "dex", "con", "int", "wis", "cha"];
|
||
const selected = backgrounds[bg] || [];
|
||
|
||
const setObj = {};
|
||
allStats.forEach(stat => {
|
||
setObj[`saving_${stat}_active`] = selected.includes(stat) ? "1" : "0";
|
||
});
|
||
|
||
setAttrs(setObj);
|
||
});
|
||
});
|
||
</script>
|
||
|
||
<script id="✓ - CALC : Saving Throws" type="text/worker">
|
||
const saves = ["str", "dex", "con", "int", "wis", "cha"];
|
||
|
||
const updateSavingThrows = () => {
|
||
const attrs = ["pb", ...saves.map(stat => `saving_${stat}_active`), ...saves];
|
||
|
||
getAttrs(attrs, function(values) {
|
||
const setObj = {};
|
||
const pb = parseInt(values.pb, 10) || 0;
|
||
|
||
saves.forEach(stat => {
|
||
const baseMod = parseInt(values[stat], 10) || 0;
|
||
const hasProf = parseInt(values[`saving_${stat}_active`], 10) === 1;
|
||
setObj[`saving_${stat}_value`] = baseMod + (hasProf ? pb : 0);
|
||
});
|
||
|
||
setAttrs(setObj);
|
||
});
|
||
};
|
||
|
||
on("sheet:opened change:pb change:str change:dex change:con change:int change:wis change:cha " +
|
||
saves.map(stat => `change:saving_${stat}_active`).join(" "), updateSavingThrows);
|
||
</script>
|
||
|
||
<!-- ----- SKILLS ----- -->
|
||
<div class="sheet-main-skills">
|
||
<div class="sheet-standardbox sheet-standardbox43">
|
||
<h4 class="sheet-minititles2" data-i18n="skills">Skills</h4>
|
||
<div class="sheet-oneline">
|
||
<!-- Acrobatics (DEX) -->
|
||
<div class="sheet-main-skills-acrobatics">
|
||
<input type="checkbox" value="1" name="attr_acrobatics_active" />
|
||
<select name="attr_acrobatics_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX" selected>DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT">INT</option>
|
||
<option value="WIS">WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_acrobatics_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_acrobatics" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Acrobatics}} {{roll=[[1d20+@{acrobatics_value}]]}} {{roll1=[[1d20+@{acrobatics_value}]]}} {{roll2=[[1d20+@{acrobatics_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="acrobatics">Acrobatics</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Animal Handling (WIS) -->
|
||
<div class="sheet-main-skills-animalhandling">
|
||
<input type="checkbox" value="1" name="attr_animalhandling_active" />
|
||
<select name="attr_animalhandling_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT">INT</option>
|
||
<option value="WIS" selected>WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_animalhandling_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_animalhandling" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Animal Handling}} {{roll=[[1d20+@{animalhandling_value}]]}} {{roll1=[[1d20+@{animalhandling_value}]]}} {{roll2=[[1d20+@{animalhandling_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="animal_handling">Animal Handling</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Athletics (STR) -->
|
||
<div class="sheet-main-skills-athletics">
|
||
<input type="checkbox" value="1" name="attr_athletics_active" />
|
||
<select name="attr_athletics_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR" selected>STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT">INT</option>
|
||
<option value="WIS">WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_athletics_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_athletics" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Athletics}} {{roll=[[1d20+@{athletics_value}]]}} {{roll1=[[1d20+@{athletics_value}]]}} {{roll2=[[1d20+@{athletics_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="athletics">Athletics</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Cooking (WIS) -->
|
||
<div class="sheet-main-skills-cooking">
|
||
<input type="checkbox" value="1" name="attr_cooking_active" />
|
||
<select name="attr_cooking_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT">INT</option>
|
||
<option value="WIS" selected>WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_cooking_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_cooking" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Cooking}} {{roll=[[1d20+@{cooking_value}]]}} {{roll1=[[1d20+@{cooking_value}]]}} {{roll2=[[1d20+@{cooking_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="cooking">Cooking</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Crafting (INT) -->
|
||
<div class="sheet-main-skills-crafting">
|
||
<input type="checkbox" value="1" name="attr_crafting_active" />
|
||
<select name="attr_crafting_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT" selected>INT</option>
|
||
<option value="WIS">WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_crafting_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_crafting" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Crafting}} {{roll=[[1d20+@{crafting_value}]]}} {{roll1=[[1d20+@{crafting_value}]]}} {{roll2=[[1d20+@{crafting_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="crafting">Crafting</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Deception (CHA) -->
|
||
<div class="sheet-main-skills-deception">
|
||
<input type="checkbox" value="1" name="attr_deception_active" />
|
||
<select name="attr_deception_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT">INT</option>
|
||
<option value="WIS">WIS</option>
|
||
<option value="CHA" selected>CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_deception_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_deception" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Deception}} {{roll=[[1d20+@{deception_value}]]}} {{roll1=[[1d20+@{deception_value}]]}} {{roll2=[[1d20+@{deception_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="deception">Deception</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Firearms (DEX) -->
|
||
<div class="sheet-main-skills-firearms">
|
||
<input type="checkbox" value="1" name="attr_firearms_active" />
|
||
<select name="attr_firearms_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX" selected>DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT">INT</option>
|
||
<option value="WIS">WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_firearms_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_firearms" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Firearms}} {{roll=[[1d20+@{firearms_value}]]}} {{roll1=[[1d20+@{firearms_value}]]}} {{roll2=[[1d20+@{firearms_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="firearms">Firearms</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- History (INT) -->
|
||
<div class="sheet-main-skills-history">
|
||
<input type="checkbox" value="1" name="attr_history_active" />
|
||
<select name="attr_history_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT" selected>INT</option>
|
||
<option value="WIS">WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_history_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_history" value="@{global-privacy-status} &{template:dzapocalypse} {{name=History}} {{roll=[[1d20+@{history_value}]]}} {{roll1=[[1d20+@{history_value}]]}} {{roll2=[[1d20+@{history_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="history">History</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Insight (WIS) -->
|
||
<div class="sheet-main-skills-insight">
|
||
<input type="checkbox" value="1" name="attr_insight_active" />
|
||
<select name="attr_insight_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT">INT</option>
|
||
<option value="WIS" selected>WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_insight_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_insight" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Insight}} {{roll=[[1d20+@{insight_value}]]}} {{roll1=[[1d20+@{insight_value}]]}} {{roll2=[[1d20+@{insight_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="insight">Insight</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Intimidation (CHA) -->
|
||
<div class="sheet-main-skills-intimidation">
|
||
<input type="checkbox" value="1" name="attr_intimidation_active" />
|
||
<select name="attr_intimidation_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT">INT</option>
|
||
<option value="WIS">WIS</option>
|
||
<option value="CHA" selected>CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_intimidation_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_intimidation" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Intimidation}} {{roll=[[1d20+@{intimidation_value}]]}} {{roll1=[[1d20+@{intimidation_value}]]}} {{roll2=[[1d20+@{intimidation_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="intimidation">Intimidation</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Investigation (INT) -->
|
||
<div class="sheet-main-skills-investigation">
|
||
<input type="checkbox" value="1" name="attr_investigation_active" />
|
||
<select name="attr_investigation_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT" selected>INT</option>
|
||
<option value="WIS">WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_investigation_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_investigation" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Investigation}} {{roll=[[1d20+@{investigation_value}]]}} {{roll1=[[1d20+@{investigation_value}]]}} {{roll2=[[1d20+@{investigation_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="investigation">Investigation</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Medicine (WIS) -->
|
||
<div class="sheet-main-skills-medicine">
|
||
<input type="checkbox" value="1" name="attr_medicine_active" />
|
||
<select name="attr_medicine_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT">INT</option>
|
||
<option value="WIS" selected>WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_medicine_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_medicine" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Medicine}} {{roll=[[1d20+@{medicine_value}]]}} {{roll1=[[1d20+@{medicine_value}]]}} {{roll2=[[1d20+@{medicine_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="medicine">Medicine</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Melee (STR) -->
|
||
<div class="sheet-main-skills-melee">
|
||
<input type="checkbox" value="1" name="attr_melee_active" />
|
||
<select name="attr_melee_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR" selected>STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT">INT</option>
|
||
<option value="WIS">WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_melee_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_melee" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Melee}} {{roll=[[1d20+@{melee_value}]]}} {{roll1=[[1d20+@{melee_value}]]}} {{roll2=[[1d20+@{melee_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="melee">Melee</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Nature (INT) -->
|
||
<div class="sheet-main-skills-nature">
|
||
<input type="checkbox" value="1" name="attr_nature_active" />
|
||
<select name="attr_nature_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT" selected>INT</option>
|
||
<option value="WIS">WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_nature_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_nature" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Nature}} {{roll=[[1d20+@{nature_value}]]}} {{roll1=[[1d20+@{nature_value}]]}} {{roll2=[[1d20+@{nature_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="nature">Nature</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Perception (WIS) -->
|
||
<div class="sheet-main-skills-perception">
|
||
<input type="checkbox" value="1" name="attr_perception_active" />
|
||
<select name="attr_perception_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT">INT</option>
|
||
<option value="WIS" selected>WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_perception_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_perception" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Perception}} {{roll=[[1d20+@{perception_value}]]}} {{roll1=[[1d20+@{perception_value}]]}} {{roll2=[[1d20+@{perception_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="perception">Perception</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Performance (CHA) -->
|
||
<div class="sheet-main-skills-performance">
|
||
<input type="checkbox" value="1" name="attr_performance_active" />
|
||
<select name="attr_performance_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT">INT</option>
|
||
<option value="WIS">WIS</option>
|
||
<option value="CHA" selected>CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_performance_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_performance" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Performance}} {{roll=[[1d20+@{performance_value}]]}} {{roll1=[[1d20+@{performance_value}]]}} {{roll2=[[1d20+@{performance_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="performance">Performance</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Persuasion (CHA) -->
|
||
<div class="sheet-main-skills-persuasion">
|
||
<input type="checkbox" value="1" name="attr_persuasion_active" />
|
||
<select name="attr_persuasion_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT">INT</option>
|
||
<option value="WIS">WIS</option>
|
||
<option value="CHA" selected>CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_persuasion_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_persuasion" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Persuasion}} {{roll=[[1d20+@{persuasion_value}]]}} {{roll1=[[1d20+@{persuasion_value}]]}} {{roll2=[[1d20+@{persuasion_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="persuasion">Persuasion</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Sleight of Hand (DEX) -->
|
||
<div class="sheet-main-skills-sleightofhand">
|
||
<input type="checkbox" value="1" name="attr_sleightofhand_active" />
|
||
<select name="attr_sleightofhand_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX" selected>DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT">INT</option>
|
||
<option value="WIS">WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_sleightofhand_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_sleightofhand" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Sleight of Hand}} {{roll=[[1d20+@{sleightofhand_value}]]}} {{roll1=[[1d20+@{sleightofhand_value}]]}} {{roll2=[[1d20+@{sleightofhand_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="sleight_of_hand">Sleight of Hand</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Stealth (DEX) -->
|
||
<div class="sheet-main-skills-stealth">
|
||
<input type="checkbox" value="1" name="attr_stealth_active" />
|
||
<select name="attr_stealth_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX" selected>DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT">INT</option>
|
||
<option value="WIS">WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_stealth_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_stealth" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Stealth}} {{roll=[[1d20+@{stealth_value}]]}} {{roll1=[[1d20+@{stealth_value}]]}} {{roll2=[[1d20+@{stealth_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="stealth">Stealth</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Survival (WIS) -->
|
||
<div class="sheet-main-skills-survival">
|
||
<input type="checkbox" value="1" name="attr_survival_active" />
|
||
<select name="attr_survival_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT">INT</option>
|
||
<option value="WIS" selected>WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_survival_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_survival" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Survival}} {{roll=[[1d20+@{survival_value}]]}} {{roll1=[[1d20+@{survival_value}]]}} {{roll2=[[1d20+@{survival_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="survival">Survival</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Technology (INT) -->
|
||
<div class="sheet-main-skills-technology">
|
||
<input type="checkbox" value="1" name="attr_technology_active" />
|
||
<select name="attr_technology_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT" selected>INT</option>
|
||
<option value="WIS">WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_technology_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_technology" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Technology}} {{roll=[[1d20+@{technology_value}]]}} {{roll1=[[1d20+@{technology_value}]]}} {{roll2=[[1d20+@{technology_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="technology">Technology</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Tinkering (INT) -->
|
||
<div class="sheet-main-skills-tinkering">
|
||
<input type="checkbox" value="1" name="attr_tinkering_active" />
|
||
<select name="attr_tinkering_proficiency_selector">
|
||
<option value="0">-</option>
|
||
<option value="STR">STR</option>
|
||
<option value="DEX">DEX</option>
|
||
<option value="CON">CON</option>
|
||
<option value="INT" selected>INT</option>
|
||
<option value="WIS">WIS</option>
|
||
<option value="CHA">CHA</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="1" name="attr_tinkering_value" readonly />
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_tinkering" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Tinkering}} {{roll=[[1d20+@{tinkering_value}]]}} {{roll1=[[1d20+@{tinkering_value}]]}} {{roll2=[[1d20+@{tinkering_value}]]}} {{charactername=@{character_name}}} {{@{global-advantage-status}=1}} {{category=Skill}}"></button>
|
||
<h4 data-i18n="tinkering">Tinkering</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script id="✓ - CALC : Skills Total Value" type="text/worker">
|
||
const skills = [
|
||
"acrobatics", "animalhandling", "athletics", "cooking", "crafting",
|
||
"deception", "firearms", "history", "insight", "intimidation",
|
||
"investigation", "medicine", "melee", "nature", "perception",
|
||
"performance", "persuasion", "sleightofhand", "stealth", "survival",
|
||
"technology", "tinkering", "computeruse", "repair"
|
||
];
|
||
|
||
const abilities = {
|
||
STR: "str",
|
||
DEX: "dex",
|
||
CON: "con",
|
||
INT: "int",
|
||
WIS: "wis",
|
||
CHA: "cha"
|
||
};
|
||
|
||
const attrs = ["pb"];
|
||
skills.forEach(skill => {
|
||
attrs.push(
|
||
`${skill}_active`,
|
||
`${skill}_proficiency_selector`,
|
||
`${skill}_value`
|
||
);
|
||
});
|
||
Object.values(abilities).forEach(stat => attrs.push(stat));
|
||
|
||
on(`sheet:opened change:${attrs.join(" change:")}`, function () {
|
||
getAttrs(attrs, function (values) {
|
||
const setObj = {};
|
||
|
||
skills.forEach(skill => {
|
||
const statKey = (values[`${skill}_proficiency_selector`] || "0").toUpperCase();
|
||
const statAttr = abilities[statKey] || "str"; // fallback
|
||
const statMod = parseInt(values[statAttr], 10) || 0;
|
||
const hasProf = parseInt(values[`${skill}_active`], 10) === 1;
|
||
const pb = parseInt(values["pb"], 10) || 0;
|
||
|
||
setObj[`${skill}_value`] = statMod + (hasProf ? pb : 0);
|
||
});
|
||
|
||
setAttrs(setObj);
|
||
});
|
||
});
|
||
</script>
|
||
|
||
|
||
<script id="✓ - CALC : Passive Perception" type="text/worker">
|
||
on("sheet:opened change:perception_value", function () {
|
||
getAttrs(["perception_value"], function(values) {
|
||
const perception = parseInt(values.perception_value, 10) || 0;
|
||
const passive = 10 + perception;
|
||
|
||
setAttrs({ passiveperception: passive });
|
||
});
|
||
});
|
||
</script>
|
||
|
||
<!-- ----- FEATURES & TRAITS ----- -->
|
||
<div class="sheet-main-features-traits">
|
||
<div class="sheet-standardbox sheet-standardbox42">
|
||
<h4 class="sheet-minititles2" data-i18n="features_traits">Features & Traits</h4>
|
||
<div class="sheet-oneline">
|
||
<fieldset class="repeating_features-traits">
|
||
<input class="sheet-hidden sheet-cogs-hideshow" type="checkbox" name="attr_sheet-cogs-hideshow" checked />
|
||
|
||
<div class="sheet-features-traits sheet-cogs-hideshow-div1">
|
||
<input class="sheet-left" type="text" placeholder="Name" data-i18n-placeholder="name" name="attr_features-names" />
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-cogs-hideshow" type="checkbox" name="attr_sheet-cogs-hideshow" />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
|
||
<input style="grid-column: 1/-1" class="sheet-left" type="text" placeholder="Source" data-i18n-placeholder="source" name="attr_features-source" />
|
||
<textarea style="grid-column: 1/-1" type="text" placeholder="Description" data-i18n-placeholder="description" 0 name="attr_features-description"></textarea>
|
||
</div>
|
||
|
||
<div class="sheet-features-traits2 sheet-cogs-hideshow-div2">
|
||
<div class="sheet-button-div-holder">
|
||
<input class="sheet-cogs-input sheet-description-hideshow" type="checkbox" name="attr_sheet-description-hideshow" />
|
||
<span class="sheet-left" data-i18n="name" type="text" placeholder="Name" name="attr_features-names"></span>
|
||
</div>
|
||
|
||
<div class="sheet-cogs-container sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_str" value="@{global-privacy-status} &{template:dzapocalypse-description} {{name=@{features-names}}} {{charactername=@{character_name}}} {{category=Description}} {{source=@{features-source}}} {{description=@{features-description}}}"></button>
|
||
<span class="sheet-cogs-icon">w</span>
|
||
</div>
|
||
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-cogs-hideshow" type="checkbox" name="attr_sheet-cogs-hideshow" />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
|
||
<input class="sheet-hidden sheet-description-hideshow" type="checkbox" name="attr_sheet-description-hideshow" />
|
||
<span style="grid-column: 1/-1" class="sheet-left" type="text" name="attr_features-source"></span>
|
||
<textarea class="sheet-description-hideshow-div" style="grid-column: 1/-1" type="text" name="attr_features-description" readonly></textarea>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ----- PROFICIENCIES ----- -->
|
||
<div class="sheet-main-proficiencies">
|
||
<div class="sheet-standardbox sheet-standardbox43">
|
||
<h4 class="sheet-minititles2" data-i18n="proficiencies">Proficiencies</h4>
|
||
<div class="sheet-oneline">
|
||
<fieldset class="repeating_proficiencies">
|
||
<input class="sheet-hidden sheet-cogs-hideshow" type="checkbox" name="attr_sheet-cogs-hideshow" checked />
|
||
<div class="sheet-proficiencies1 sheet-cogs-hideshow-div1">
|
||
<input class="sheet-left" type="text" placeholder="Source" data-i18n-placeholder="source" name="attr_proficiency-source" />
|
||
<input class="sheet-left" type="text" placeholder="Name" data-i18n-placeholder="name" name="attr_proficiency-name" />
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-cogs-hideshow" type="checkbox" name="attr_sheet-cogs-hideshow" checked />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-proficiencies2 sheet-cogs-hideshow-div2">
|
||
<input class="sheet-hidden sheet-description-hideshow" type="checkbox" name="attr_sheet-description-hideshow" checked />
|
||
|
||
<span type="text" name="attr_proficiency-source"></span>
|
||
<span type="text" name="attr_proficiency-name"></span>
|
||
|
||
<div class="sheet-cogs-container sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_str" value="@{global-privacy-status} &{template:dzapocalypse-description} {{name=@{proficiency-source}}} {{charactername=@{character_name}}} {{category=Proficiencies}} {{source=@{proficiency-name}}}"></button>
|
||
<span class="sheet-cogs-icon">w</span>
|
||
</div>
|
||
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-cogs-hideshow" type="checkbox" name="attr_sheet-cogs-hideshow" checked />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ----- ACTIVE EFFECT ----- -->
|
||
<div class="sheet-main-effects">
|
||
<div class="sheet-standardbox sheet-standardbox44">
|
||
<h4 class="sheet-minititles2" data-i18n="active_effects">Active Effects</h4>
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-effects">
|
||
<h4> </h4>
|
||
<h4 class="sheet-left" data-i18n="name">Name</h4>
|
||
<h4 data-i18n="cycle">Cycle</h4>
|
||
<h4 data-i18n="dc">DC</h4>
|
||
<h4 data-i18n="mod">Mod</h4>
|
||
</div>
|
||
<fieldset class="repeating_effects">
|
||
<div class="sheet-effects">
|
||
<button type="roll" class="sheet-button-description" name="roll_effect" value="@{global-privacy-status} &{template:dzapocalypse} {{name=@{effect-name}}} {{cycle=@{effect-time}}} {{save=[[@{effect-dc}]]}} {{savemod=@{effect-selector-display}}} {{charactername=@{character_name}}} {{category=Active Effects}} {{@{global-advantage-status}=1}} {{roll=[[1d20+@{effect-selector}]]}} {{roll1=[[1d20+@{effect-selector}]]}} {{roll2=[[1d20+@{effect-selector}]]}} {{description=@{effect-description}}}"></button>
|
||
<input class="sheet-left" type="text" placeholder="Effect Name" data-i18n-placeholder="effect_name" name="attr_effect-name" />
|
||
<input type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_effect-time" />
|
||
<input type="text" value="0" name="attr_effect-dc" />
|
||
<input class="sheet-hidden" type="text" value="0" name="attr_effect-selector" />
|
||
<select name="attr_effect-selector-display">
|
||
<option value="0">-</option>
|
||
<option value="Strength">STR</option>
|
||
<option value="Dexterity">DEX</option>
|
||
<option value="Constitution" selected>CON</option>
|
||
<option value="Intelligence">INT</option>
|
||
<option value="Wisdom">WIS</option>
|
||
<option value="Charisma">CHA</option>
|
||
</select>
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-cogs-hideshow" type="checkbox" name="attr_sheet-cogs-hideshow" />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
<input class="sheet-hidden sheet-cogs-hideshow" type="checkbox" name="attr_sheet-cogs-hideshow" />
|
||
<textarea class="sheet-left sheet-cogs-hideshow-div1" style="grid-column: 1/-1" type="text" name="attr_effect-description"></textarea>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
|
||
<script id="✓ - CALC : Effect Selector from Display (labelled)" type="text/worker">
|
||
const statMap = {
|
||
strength: "str",
|
||
dexterity: "dex",
|
||
constitution: "con",
|
||
intelligence: "int",
|
||
wisdom: "wis",
|
||
charisma: "cha"
|
||
};
|
||
|
||
on("sheet:opened change:repeating_effects:effect-selector-display", function(eventInfo) {
|
||
const match = eventInfo.sourceAttribute.match(/repeating_effects_([-a-zA-Z0-9]+)_/);
|
||
if (!match) return;
|
||
const rowId = match[1];
|
||
const prefix = `repeating_effects_${rowId}_`;
|
||
|
||
getAttrs([`${prefix}effect-selector-display`, "saving_str_value", "saving_dex_value", "saving_con_value", "saving_int_value", "saving_wis_value", "saving_cha_value"], function(values) {
|
||
const label = (values[`${prefix}effect-selector-display`] || "0").toLowerCase();
|
||
const key = statMap[label];
|
||
|
||
let updatedValue = "0";
|
||
if (key) {
|
||
updatedValue = values[`saving_${key}_value`] || "0";
|
||
}
|
||
|
||
const setObj = {};
|
||
setObj[`${prefix}effect-selector`] = updatedValue;
|
||
setAttrs(setObj);
|
||
});
|
||
});
|
||
</script>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-maingrid-area-right">
|
||
<!-- ----- LIFE ----- -->
|
||
<div class="sheet-main-life">
|
||
<!-- HIT POINT -->
|
||
<div class="sheet-standardbox sheet-standardbox51">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-skills-bloodpoints">
|
||
<div class="sheet-life-hp-panel">
|
||
<input class="sheet-hpcustom-hideshow sheet-hidden" type="checkbox" name="attr_sheet-hpcustom-hideshow" />
|
||
<div class="sheet-life-hp-values">
|
||
<div class="sheet-life-hp-group">
|
||
<input class="sheet-inputchar sheet-hpcustom-hideshow-div1" type="number" step="0.01" value="0" name="attr_hp_act" />
|
||
<input class="sheet-inputchar sheet-hpcustom-hideshow-div2" type="number" step="0.01" value="0" name="attr_hp_act-custom" />
|
||
</div>
|
||
<span class="sheet-life-hp-sep">/</span>
|
||
<div class="sheet-life-hp-group">
|
||
<input class="sheet-inputchar sheet-hpcustom-hideshow-div1" type="number" step="0.01" value="0" name="attr_hp_max" readonly />
|
||
<input class="sheet-inputchar sheet-hpcustom-hideshow-div2" type="number" step="0.01" value="0" name="attr_hp_max-custom" />
|
||
</div>
|
||
</div>
|
||
<div class="sheet-life-hp-bar-wrapper">
|
||
<div class="sheet-life-hp-bar-fill"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-main-life-subrow">
|
||
<div class="sheet-standardbox sheet-standardbox11">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-life-mini-card">
|
||
<h4 data-i18n="temp_hp">Temp HP</h4>
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_temp_hp" />
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sheet-standardbox sheet-standardbox13">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-life-mini-card">
|
||
<h4 data-i18n="mod_hp">Mod HP</h4>
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_hp_mod" />
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sheet-standardbox sheet-standardbox12">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-life-mini-card sheet-life-mini-card-toggle">
|
||
<h4 data-i18n="custom_hp">Custom HP ?</h4>
|
||
<input class="sheet-hpcustom-hideshow" type="checkbox" name="attr_sheet-hpcustom-hideshow" />
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<script id="✓ - CALC : HP Max basé sur Body/CON/Level + Mod" type="text/worker">
|
||
on("sheet:opened change:body change:con change:level change:hp_mod", function () {
|
||
getAttrs(["body", "con", "level", "hp_mod"], function(values) {
|
||
const body = (values["body"] || "").toLowerCase();
|
||
const con = parseInt(values["con"], 10) || 0;
|
||
const level = parseInt(values["level"], 10) || 1;
|
||
const hp_mod = parseInt(values["hp_mod"], 10) || 0;
|
||
|
||
let base = 0;
|
||
let progression = 0;
|
||
|
||
switch (body) {
|
||
case "skinny":
|
||
case "fit":
|
||
base = 8;
|
||
progression = 4;
|
||
break;
|
||
case "average":
|
||
base = 10;
|
||
progression = 5;
|
||
break;
|
||
case "heavy":
|
||
base = 12;
|
||
progression = 6;
|
||
break;
|
||
default:
|
||
base = 8;
|
||
progression = 4;
|
||
}
|
||
|
||
const hp_max = base + con + ((level - 1) * (progression + con)) + hp_mod;
|
||
|
||
setAttrs({ hp_max });
|
||
});
|
||
});
|
||
</script>
|
||
|
||
<script id="✓ - CALC : Blood Points Max" type="text/worker">
|
||
on("sheet:opened change:body change:con", function () {
|
||
getAttrs(["body", "con"], function(values) {
|
||
const body = (values["body"] || "").toLowerCase();
|
||
const con = parseInt(values["con"], 10) || 0;
|
||
let base = 8;
|
||
|
||
switch (body) {
|
||
case "skinny":
|
||
case "average":
|
||
base = 8;
|
||
break;
|
||
case "fit":
|
||
base = 10;
|
||
break;
|
||
case "heavy":
|
||
base = 12;
|
||
break;
|
||
}
|
||
|
||
const bp_max = base + con;
|
||
|
||
setAttrs({ bp_max });
|
||
});
|
||
});
|
||
</script>
|
||
|
||
<script id="dz-hp-bar-worker" type="text/worker">
|
||
on("sheet:opened change:hp_act change:hp_max change:hp_act-custom change:hp_max-custom change:sheet-hpcustom-hideshow", function () {
|
||
getAttrs(["hp_act", "hp_max", "hp_act-custom", "hp_max-custom", "sheet-hpcustom-hideshow"], function(values) {
|
||
const useCustom = String(values["sheet-hpcustom-hideshow"]) === "1" || String(values["sheet-hpcustom-hideshow"]).toLowerCase() === "on";
|
||
const current = parseFloat(useCustom ? values["hp_act-custom"] : values["hp_act"]) || 0;
|
||
const maximum = parseFloat(useCustom ? values["hp_max-custom"] : values["hp_max"]) || 0;
|
||
const pct = maximum > 0 ? Math.max(0, Math.min(100, Math.round((current / maximum) * 100))) : 0;
|
||
const bar = $20(".sheet-life-hp-bar-fill");
|
||
for (let i = 0; i <= 100; i++) {
|
||
bar.removeClass("sheet-bar" + i);
|
||
}
|
||
bar.addClass("sheet-bar" + pct);
|
||
});
|
||
});
|
||
</script>
|
||
|
||
<!-- ----- CHARACTERISTICS ----- -->
|
||
<div class="sheet-main-characteristics">
|
||
<!-- AC -->
|
||
<div class="sheet-standardbox sheet-standardbox44">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-skills-armorclass">
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_armorclass" readonly />
|
||
</div>
|
||
<h4 data-i18n="ac">AC</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<script id="✓ - CALC : Armor Class Totale" type="text/worker">
|
||
on(
|
||
"sheet:opened change:dex change:armorclass-mod " +
|
||
"change:clothing-head-armorclass change:clothing-face-armorclass " +
|
||
"change:clothing-chest-armorclass change:clothing-back-armorclass " +
|
||
"change:clothing-hands-armorclass change:clothing-feets-armorclass " +
|
||
"change:clothing-belt-armorclass change:clothing-legs-armorclass",
|
||
function () {
|
||
|
||
getAttrs([
|
||
"dex",
|
||
"armorclass-mod",
|
||
"clothing-head-armorclass",
|
||
"clothing-face-armorclass",
|
||
"clothing-chest-armorclass",
|
||
"clothing-back-armorclass",
|
||
"clothing-hands-armorclass",
|
||
"clothing-feets-armorclass",
|
||
"clothing-belt-armorclass",
|
||
"clothing-legs-armorclass"
|
||
], function(values) {
|
||
|
||
const base = 5;
|
||
const dex = parseInt(values.dex, 10) || 0;
|
||
const armorMod = parseInt(values["armorclass-mod"], 10) || 0;
|
||
|
||
const armorPieces = [
|
||
"clothing-head-armorclass",
|
||
"clothing-face-armorclass",
|
||
"clothing-chest-armorclass",
|
||
"clothing-back-armorclass",
|
||
"clothing-hands-armorclass",
|
||
"clothing-feets-armorclass",
|
||
"clothing-belt-armorclass",
|
||
"clothing-legs-armorclass"
|
||
];
|
||
|
||
const armorTotal = armorPieces.reduce(
|
||
(total, attr) => total + (parseInt(values[attr], 10) || 0),
|
||
0
|
||
);
|
||
|
||
setAttrs({
|
||
armorclass: base + dex + armorMod + armorTotal
|
||
});
|
||
});
|
||
}
|
||
);
|
||
</script>
|
||
|
||
<!-- INITIATIVE -->
|
||
<div class="sheet-standardbox sheet-standardbox53">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-skills-initiative">
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="1" name="attr_initiative" readonly />
|
||
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_initiative" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Initiative}} {{roll=[[1d20+@{initiative}&{tracker}]]}} {{charactername=@{character_name}}} {{standard=1}} {{category=Turn Order}}"></button>
|
||
<h4 data-i18n="initiative">Initiative</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script id="✓ - CALC : Initiative = 1 + dex" type="text/worker">
|
||
on("sheet:opened change:dex", function () {
|
||
getAttrs(["dex"], function(values) {
|
||
const dex = parseInt(values.dex) || 0;
|
||
const initiative = 1 + dex;
|
||
|
||
setAttrs({ initiative });
|
||
});
|
||
});
|
||
</script>
|
||
|
||
|
||
<!-- HIT DIE -->
|
||
<div class="sheet-standardbox sheet-standardbox12">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-skills-hitdice">
|
||
<input class="sheet-inputchar" type="text" step="0.01" value="0" name="attr_hitdie" readonly />
|
||
</div>
|
||
<div class="sheet-button-div-holder">
|
||
<button type="roll" class="sheet-button-description" name="roll_hitdie" value="@{global-privacy-status} &{template:dzapocalypse} {{name=Hit Die}} {{roll=[[@{hitdie}]]}} {{charactername=@{character_name}}} {{standard=1}} {{category=Side Roll}}"></button>
|
||
<h4 data-i18n="hit_die">Hit Die</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script id="✓ - CALC : Hit Die selon body" type="text/worker">
|
||
on("sheet:opened change:body", function () {
|
||
getAttrs(["body"], function(values) {
|
||
const body = (values["body"] || "").toLowerCase();
|
||
let hitdie = "1d10";
|
||
|
||
switch (body) {
|
||
case "skinny":
|
||
case "fit":
|
||
hitdie = "1d8";
|
||
break;
|
||
case "average":
|
||
hitdie = "1d10";
|
||
break;
|
||
case "heavy":
|
||
hitdie = "1d12";
|
||
break;
|
||
}
|
||
|
||
setAttrs({ hitdie });
|
||
});
|
||
});
|
||
</script>
|
||
|
||
<script id="✓ - CALC : Speed selon morphologie + sac" type="text/worker">
|
||
on("sheet:opened change:body change:backpack-slot-max", function () {
|
||
getAttrs(["body", "backpack-slot-max"], function(values) {
|
||
const body = (values["body"] || "").toLowerCase();
|
||
const backpackMax = parseInt(values["backpack-slot-max"], 10) || 0;
|
||
|
||
let rawSpeed = 25;
|
||
|
||
switch (body) {
|
||
case "skinny":
|
||
rawSpeed = 20;
|
||
break;
|
||
case "fit":
|
||
rawSpeed = 30;
|
||
break;
|
||
case "average":
|
||
rawSpeed = 25;
|
||
break;
|
||
case "heavy":
|
||
rawSpeed = 15;
|
||
break;
|
||
}
|
||
|
||
// Apply penalty if wearing a large backpack
|
||
if (backpackMax === 30) {
|
||
rawSpeed -= 5;
|
||
}
|
||
|
||
setAttrs({
|
||
speed: `${rawSpeed}ft.`
|
||
});
|
||
});
|
||
});
|
||
</script>
|
||
|
||
<script id="✓ - CALC : Proficiency Bonus" type="text/worker">
|
||
on("sheet:opened change:level change:nopb", function () {
|
||
getAttrs(["level","nopb"], function (values) {
|
||
const enabled = (String(values.nopb ?? "").toLowerCase() === "1") ||
|
||
(String(values.nopb ?? "").toLowerCase() === "on");
|
||
|
||
if (!enabled) { setAttrs({ pb: 0 }); return; }
|
||
|
||
const level = parseInt(values.level, 10) || 1;
|
||
let pb = 2;
|
||
if (level >= 17) pb = 6;
|
||
else if (level >= 13) pb = 5;
|
||
else if (level >= 9) pb = 4;
|
||
else if (level >= 5) pb = 3;
|
||
|
||
setAttrs({ pb });
|
||
});
|
||
});
|
||
</script>
|
||
|
||
|
||
<!-- EXHAUSTION -->
|
||
<div class="sheet-standardbox sheet-standardbox42">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-skills-exhaustion">
|
||
<input class="sheet-with-arrows sheet-inputchar" type="text" step="0.01" value="0" name="attr_exhaustion" />
|
||
</div>
|
||
<h4 data-i18n="exhaustion">Exhaustion</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- INSANITY -->
|
||
<div class="sheet-standardbox sheet-standardbox41">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-skills-insanity">
|
||
<input class="sheet-with-arrows sheet-inputchar" type="text" step="0.01" value="0" name="attr_insanity" />
|
||
</div>
|
||
<h4 data-i18n="insanity">Insanity</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-main-characteristics-minirow">
|
||
<!-- SPEED -->
|
||
<div class="sheet-standardbox sheet-standardbox11">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-skills-speed sheet-minirow-speed">
|
||
<h4 data-i18n="speed">Speed</h4>
|
||
<input class="sheet-inputchar" type="text" step="0.01" value="10" name="attr_speed" readonly />
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- PROFICIENCY BONUS -->
|
||
<div class="sheet-standardbox sheet-standardbox51">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-skills-hitdice sheet-minirow-pb">
|
||
<h4 data-i18n="prof_bonus">Prof. Bonus</h4>
|
||
<input class="sheet-nopb-toggle" type="checkbox" value="1" name="attr_nopb" checked />
|
||
<input class="sheet-inputchar" type="text" step="0.01" value="0" name="attr_pb" readonly />
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- BLOOD POINTS -->
|
||
<div class="sheet-standardbox sheet-standardbox42">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-skills-bloodpoints sheet-minirow-bp">
|
||
<h4 data-i18n="blood">Blood</h4>
|
||
<div class="sheet-doublecolumn sheet-3">
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_bp_act" />
|
||
<h4>/</h4>
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_bp_max" readonly />
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ----- NEEDS ----- -->
|
||
<div class="sheet-main-needs">
|
||
<!-- RATIONS -->
|
||
<div class="sheet-standardbox sheet-standardbox43">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-skills-rations">
|
||
<h4 data-i18n="rations">Rations</h4>
|
||
<div class="sheet-doublecolumn sheet-3">
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_rations_act" />
|
||
<h4>/</h4>
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_rations_max" />
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- WATER -->
|
||
<div class="sheet-standardbox sheet-standardbox54">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-skills-water">
|
||
<h4 data-i18n="water">Water</h4>
|
||
<div class="sheet-doublecolumn sheet-3">
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_water_act" />
|
||
<h4>/</h4>
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_water_max" />
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ----- CLOTHING ----- -->
|
||
<div class="sheet-main-clothing">
|
||
<div class="sheet-standardbox sheet-standardbox13">
|
||
<h4 class="sheet-minititles2" data-i18n="clothing">Clothing</h4>
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-clothing">
|
||
<h4> </h4>
|
||
<h4 data-i18n="type">Type</h4>
|
||
<h4 class="sheet-left" data-i18n="name">Name</h4>
|
||
<h4 data-i18n="ac">AC</h4>
|
||
<h4 style="grid-column:5/7" data-i18n="val">VAL</h4>
|
||
</div>
|
||
<!-- --->
|
||
<div class="sheet-clothing">
|
||
<div class="sheet-imgfixed sheet-imgfixed-helmet"></div>
|
||
<h4 class="sheet-left" data-i18n="head">Head</h4>
|
||
<input class="sheet-left" type="text" value="" name="attr_clothing-head" />
|
||
<input type="number" value="0" name="attr_clothing-head-armorclass" />
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_clothing-head-price" />
|
||
<h4>◘</h4>
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-head-hideshow" type="checkbox" name="attr_sheet-head-hideshow" />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
<input class="sheet-hidden sheet-head-hideshow" type="checkbox" name="attr_sheet-head-hideshow" />
|
||
<textarea class="sheet-head-hideshow-div1 sheet-left" type="text" placeholder="Description/Effects" data-i18n-placeholder="description_effects" name="attr_clothing-head-description"></textarea>
|
||
</div>
|
||
<!-- --->
|
||
<div class="sheet-clothing">
|
||
<div class="sheet-imgfixed sheet-imgfixed-face"></div>
|
||
<h4 class="sheet-left" data-i18n="face">Face</h4>
|
||
<input class="sheet-left" type="text" value="" name="attr_clothing-face" />
|
||
<input type="number" value="0" name="attr_clothing-face-armorclass" />
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_clothing-face-price" />
|
||
<h4>◘</h4>
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-face-hideshow" type="checkbox" name="attr_sheet-face-hideshow" />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
<input class="sheet-hidden sheet-face-hideshow" type="checkbox" name="attr_sheet-face-hideshow" />
|
||
<textarea class="sheet-face-hideshow-div1 sheet-left" type="text" placeholder="Description/Effects" data-i18n-placeholder="description_effects" name="attr_clothing-face-description"></textarea>
|
||
</div>
|
||
<!-- --->
|
||
<div class="sheet-clothing">
|
||
<div class="sheet-imgfixed sheet-imgfixed-chest"></div>
|
||
<h4 class="sheet-left" data-i18n="chest">Chest</h4>
|
||
<input class="sheet-left" type="text" value="" name="attr_clothing-chest" />
|
||
<input type="number" value="0" name="attr_clothing-chest-armorclass" />
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_clothing-chest-price" />
|
||
<h4>◘</h4>
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-chest-hideshow" type="checkbox" name="attr_sheet-chest-hideshow" />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
<input class="sheet-hidden sheet-chest-hideshow" type="checkbox" name="attr_sheet-chest-hideshow" />
|
||
<textarea class="sheet-chest-hideshow-div1 sheet-left" type="text" placeholder="Description/Effects" data-i18n-placeholder="description_effects" name="attr_clothing-chest-description"></textarea>
|
||
</div>
|
||
<!-- --->
|
||
<div class="sheet-clothing sheet-backpack">
|
||
<div class="sheet-imgfixed sheet-imgfixed-back"></div>
|
||
<h4 class="sheet-left" data-i18n="back">Back</h4>
|
||
<input class="sheet-left" type="text" value="" name="attr_clothing-back" />
|
||
<select name="attr_clothing-backpack-type">
|
||
<option value="none">-</option>
|
||
<option value="small">Small Pack (S)</option>
|
||
<option value="medium">Medium Pack (M)</option>
|
||
<option value="large">Large Pack (L)</option>
|
||
</select>
|
||
<input type="number" value="0" name="attr_clothing-back-armorclass" />
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_clothing-back-price" />
|
||
<h4>◘</h4>
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-back-hideshow" type="checkbox" name="attr_sheet-back-hideshow" />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
<input class="sheet-hidden sheet-back-hideshow" type="checkbox" name="attr_sheet-back-hideshow" />
|
||
<textarea class="sheet-back-hideshow-div1 sheet-left" type="text" placeholder="Description/Effects" data-i18n-placeholder="description_effects" name="attr_clothing-back-description"></textarea>
|
||
</div>
|
||
<!-- --->
|
||
<div class="sheet-clothing">
|
||
<div class="sheet-imgfixed sheet-imgfixed-hands"></div>
|
||
<h4 class="sheet-left" data-i18n="hands">Hands</h4>
|
||
<input class="sheet-left" type="text" value="" name="attr_clothing-hands" />
|
||
<input type="number" value="0" name="attr_clothing-hands-armorclass" />
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_clothing-hands-price" />
|
||
<h4>◘</h4>
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-hands-hideshow" type="checkbox" name="attr_sheet-hands-hideshow" />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
<input class="sheet-hidden sheet-hands-hideshow" type="checkbox" name="attr_sheet-hands-hideshow" />
|
||
<textarea class="sheet-hands-hideshow-div1 sheet-left" type="text" placeholder="Description/Effects" data-i18n-placeholder="description_effects" name="attr_clothing-hands-description"></textarea>
|
||
</div>
|
||
<!-- --->
|
||
<div class="sheet-clothing sheet-holster">
|
||
<div class="sheet-imgfixed sheet-imgfixed-belt"></div>
|
||
<h4 class="sheet-left" data-i18n="belt">Belt</h4>
|
||
<input class="sheet-left" type="text" value="" name="attr_clothing-belt" />
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_clothing-belt-price" />
|
||
<h4>◘</h4>
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-belt-hideshow" type="checkbox" name="attr_sheet-belt-hideshow" />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
<input class="sheet-hidden sheet-belt-hideshow" type="checkbox" name="attr_sheet-belt-hideshow" />
|
||
<textarea class="sheet-belt-hideshow-div1 sheet-left" type="text" placeholder="Description/Effects" data-i18n-placeholder="description_effects" name="attr_clothing-belt-description"></textarea>
|
||
</div>
|
||
<!-- --->
|
||
<div class="sheet-clothing">
|
||
<div class="sheet-imgfixed sheet-imgfixed-legs"></div>
|
||
<h4 class="sheet-left" data-i18n="legs">Legs</h4>
|
||
<input class="sheet-left" type="text" value="" name="attr_clothing-legs" />
|
||
<input type="number" value="0" name="attr_clothing-legs-armorclass" />
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_clothing-legs-price" />
|
||
<h4>◘</h4>
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-legs-hideshow" type="checkbox" name="attr_sheet-legs-hideshow" />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
<input class="sheet-hidden sheet-legs-hideshow" type="checkbox" name="attr_sheet-legs-hideshow" />
|
||
<textarea class="sheet-legs-hideshow-div1 sheet-left" type="text" placeholder="Description/Effects" data-i18n-placeholder="description_effects" name="attr_clothing-legs-description"></textarea>
|
||
</div>
|
||
<!-- --->
|
||
<div class="sheet-clothing">
|
||
<div class="sheet-imgfixed sheet-imgfixed-feets"></div>
|
||
<h4 class="sheet-left" data-i18n="feet">Feets</h4>
|
||
<input class="sheet-left" type="text" value="" name="attr_clothing-feets" />
|
||
<input type="number" value="0" name="attr_clothing-feets-armorclass" />
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_clothing-feets-price" />
|
||
<h4>◘</h4>
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-feets-hideshow" type="checkbox" name="attr_sheet-feets-hideshow" />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
<input class="sheet-hidden sheet-feets-hideshow" type="checkbox" name="attr_sheet-feets-hideshow" />
|
||
<textarea class="sheet-feets-hideshow-div1 sheet-left" type="text" placeholder="Description/Effects" data-i18n-placeholder="description_effects" name="attr_clothing-feets-description"></textarea>
|
||
</div>
|
||
<!-- --->
|
||
<div class="sheet-clothing sheet-holster">
|
||
<div class="sheet-imgfixed sheet-imgfixed-holster"></div>
|
||
<h4 class="sheet-left" data-i18n="holster">Holster</h4>
|
||
<input class="sheet-left" type="text" value="" name="attr_clothing-holster1" />
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_clothing-holster1-price" />
|
||
<h4>◘</h4>
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-holster1-hideshow" type="checkbox" name="attr_sheet-holster1-hideshow" />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
<input class="sheet-hidden sheet-holster1-hideshow" type="checkbox" name="attr_sheet-holster1-hideshow" />
|
||
<textarea class="sheet-holster1-hideshow-div1 sheet-left" type="text" placeholder="Description/Effects" data-i18n-placeholder="description_effects" name="attr_clothing-holster1-description"></textarea>
|
||
</div>
|
||
<!-- --->
|
||
<div class="sheet-clothing sheet-holster">
|
||
<div class="sheet-imgfixed sheet-imgfixed-holster"></div>
|
||
<h4 class="sheet-left" class="sheet-left" data-i18n="holster">Holster</h4>
|
||
<input class="sheet-left" type="text" value="" name="attr_clothing-holster2" />
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_clothing-holster2-price" />
|
||
<h4>◘</h4>
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-holster2-hideshow" type="checkbox" name="attr_sheet-holster2-hideshow" />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
<input class="sheet-hidden sheet-holster2-hideshow" type="checkbox" name="attr_sheet-holster2-hideshow" />
|
||
<textarea class="sheet-holster2-hideshow-div1 sheet-left" type="text" placeholder="Description/Effects" data-i18n-placeholder="description_effects" name="attr_clothing-holster2-description"></textarea>
|
||
</div>
|
||
<!-- --->
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ----- EQUIPMENT ----- -->
|
||
<div class="sheet-main-equipment">
|
||
<div class="sheet-standardbox sheet-standardbox12">
|
||
<h4 class="sheet-minititles2" data-i18n="pocket_backpack_slots">Pocket & Backpack Slots</h4>
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-doublecolumn">
|
||
<div class="sheet-equipment1">
|
||
<h4> </h4>
|
||
<h4> </h4>
|
||
<h4 class="sheet-left" data-i18n="name">Name</h4>
|
||
<h4 data-i18n="qty">QTY</h4>
|
||
</div>
|
||
<div class="sheet-equipment2">
|
||
<h4> </h4>
|
||
<h4 data-i18n="qty">QTY</h4>
|
||
<h4 class="sheet-right" data-i18n="name">Name</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<fieldset class="repeating_equipment">
|
||
<div class="sheet-doublecolumn">
|
||
<div class="sheet-equipment1">
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_equipment_price1" />
|
||
<h4>◘</h4>
|
||
<input class="sheet-left" type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_equipment_name1" />
|
||
<input type="number" step="0.01" value="0" name="attr_equipment_quantity1" />
|
||
<select name="attr_backpack-slot1">
|
||
<option value="0">.</option>
|
||
<option value="supplement" selected>-</option>
|
||
<option value="pocket">P</option>
|
||
<option value="backpack">BP</option>
|
||
</select>
|
||
</div>
|
||
<div class="sheet-equipment2">
|
||
<select name="attr_backpack-slot2">
|
||
<option value="0">.</option>
|
||
<option value="supplement" selected>-</option>
|
||
<option value="pocket">P</option>
|
||
<option value="backpack">BP</option>
|
||
</select>
|
||
<input type="number" step="0.01" value="0" name="attr_equipment_quantity2" />
|
||
<input class="sheet-right" type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_equipment_name2" />
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_equipment_price2" />
|
||
<h4>◘</h4>
|
||
</div>
|
||
</div>
|
||
</fieldset>
|
||
<!-- --->
|
||
<div class="sheet-equipment3">
|
||
<h4> </h4>
|
||
|
||
<div class="sheet-doublecolumn sheet-2">
|
||
<h4 class="sheet-equipment-summary-label" data-i18n="inventory_value">Inv. Value</h4>
|
||
<input class="sheet-vanilla" type="number" step="0.01" value="0" name="attr_currency-inventory" readonly />
|
||
<h4>◘</h4>
|
||
</div>
|
||
|
||
<div class="sheet-doublecolumn sheet-2">
|
||
<h4 class="sheet-equipment-summary-label" data-i18n="money">Money</h4>
|
||
<input class="sheet-vanilla" type="number" step="0.01" value="0" name="attr_currency" />
|
||
<h4>◘</h4>
|
||
</div>
|
||
|
||
<div class="sheet-doublecolumn sheet-3">
|
||
<h4 class="sheet-equipment-summary-label" data-i18n="pocket">Pocket</h4>
|
||
<input class="sheet-vanilla sheet-maxpocket" type="number" step="0.01" value="0" name="attr_pocket-slot" readonly />
|
||
<h4>/</h4>
|
||
<input class="sheet-vanilla" type="number" step="0.01" value="6" name="attr_pocket-slot-max" readonly />
|
||
</div>
|
||
|
||
<div class="sheet-doublecolumn sheet-3">
|
||
<h4 class="sheet-equipment-summary-label" data-i18n="backpack">Backpack</h4>
|
||
<input class="sheet-vanilla sheet-maxbackpack" type="number" step="0.01" value="0" name="attr_backpack-slot" readonly />
|
||
<h4>/</h4>
|
||
<input class="sheet-vanilla" type="number" step="0.01" value="0" name="attr_backpack-slot-max" readonly />
|
||
</div>
|
||
|
||
<div class="sheet-online">
|
||
<h4 class="sheet-equipment-summary-label" data-i18n="na">N/A</h4>
|
||
<input class="sheet-vanilla" type="number" step="0.01" value="0" name="attr_sup-slot" readonly />
|
||
</div>
|
||
|
||
<h4> </h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script id="✓ SCRIPTCALC : Total Equipment Value × Quantity" type="text/worker">
|
||
function updateCurrencyInventory() {
|
||
getSectionIDs("repeating_equipment", function(ids) {
|
||
const fields = [];
|
||
|
||
ids.forEach(id => {
|
||
fields.push(`repeating_equipment_${id}_equipment_price1`);
|
||
fields.push(`repeating_equipment_${id}_equipment_quantity1`);
|
||
fields.push(`repeating_equipment_${id}_equipment_price2`);
|
||
fields.push(`repeating_equipment_${id}_equipment_quantity2`);
|
||
});
|
||
|
||
getAttrs(fields, function(values) {
|
||
let total = 0;
|
||
|
||
ids.forEach(id => {
|
||
const price1 = parseFloat(values[`repeating_equipment_${id}_equipment_price1`]) || 0;
|
||
const qty1 = parseFloat(values[`repeating_equipment_${id}_equipment_quantity1`]) || 0;
|
||
const price2 = parseFloat(values[`repeating_equipment_${id}_equipment_price2`]) || 0;
|
||
const qty2 = parseFloat(values[`repeating_equipment_${id}_equipment_quantity2`]) || 0;
|
||
|
||
total += price1 * qty1 + price2 * qty2;
|
||
});
|
||
|
||
setAttrs({ "currency-inventory": total });
|
||
});
|
||
});
|
||
}
|
||
|
||
on("sheet:opened change:repeating_equipment:equipment_price1 change:repeating_equipment:equipment_quantity1 change:repeating_equipment:equipment_price2 change:repeating_equipment:equipment_quantity2", updateCurrencyInventory);
|
||
</script>
|
||
|
||
<script id="✓ - DISPLAY : Couleur des Slots (pocket/backpack)" type="text/worker">
|
||
function updateSlotColors() {
|
||
getAttrs([
|
||
"pocket-slot", "pocket-slot-max",
|
||
"backpack-slot", "backpack-slot-max"
|
||
], function(values) {
|
||
const pocket = parseInt(values["pocket-slot"], 10) || 0;
|
||
const pocketMax = parseInt(values["pocket-slot-max"], 10) || 0;
|
||
const backpack = parseInt(values["backpack-slot"], 10) || 0;
|
||
const backpackMax = parseInt(values["backpack-slot-max"], 10) || 0;
|
||
|
||
// POCKET
|
||
const pocketDiv = $20(".sheet-maxpocket");
|
||
pocketDiv.removeClass("sheet-black sheet-red");
|
||
pocketDiv.addClass(pocket <= pocketMax ? "sheet-black" : "sheet-red");
|
||
|
||
// BACKPACK
|
||
const backpackDiv = $20(".sheet-maxbackpack");
|
||
backpackDiv.removeClass("sheet-black sheet-red");
|
||
backpackDiv.addClass(backpack <= backpackMax ? "sheet-black" : "sheet-red");
|
||
});
|
||
}
|
||
|
||
on("sheet:opened change:pocket-slot change:backpack-slot change:pocket-slot-max change:backpack-slot-max", updateSlotColors);
|
||
</script>
|
||
|
||
<script id="✓ - CALC : Slot counting dans le sac" type="text/worker">
|
||
on("change:repeating_equipment:backpack-slot1 change:repeating_equipment:backpack-slot2", function () {
|
||
getSectionIDs("repeating_equipment", function(ids) {
|
||
const attrs = [];
|
||
|
||
ids.forEach(id => {
|
||
attrs.push(
|
||
`repeating_equipment_${id}_backpack-slot1`,
|
||
`repeating_equipment_${id}_backpack-slot2`
|
||
);
|
||
});
|
||
|
||
getAttrs(attrs, function(values) {
|
||
let pocket = 0;
|
||
let backpack = 0;
|
||
let supplement = 0;
|
||
|
||
ids.forEach(id => {
|
||
const slot1 = values[`repeating_equipment_${id}_backpack-slot1`] || "";
|
||
const slot2 = values[`repeating_equipment_${id}_backpack-slot2`] || "";
|
||
|
||
[slot1, slot2].forEach(slot => {
|
||
switch (slot.toLowerCase()) {
|
||
case "pocket":
|
||
pocket++;
|
||
break;
|
||
case "backpack":
|
||
backpack++;
|
||
break;
|
||
case "supplement":
|
||
supplement++;
|
||
break;
|
||
}
|
||
});
|
||
});
|
||
|
||
setAttrs({
|
||
"pocket-slot": pocket,
|
||
"backpack-slot": backpack,
|
||
"sup-slot": supplement
|
||
});
|
||
});
|
||
});
|
||
});
|
||
</script>
|
||
|
||
<script id="✓ - CALC : Max Backpack Slots (0/10/20/30)" type="text/worker">
|
||
on("change:clothing-backpack-type", function () {
|
||
getAttrs(["clothing-backpack-type"], function(values) {
|
||
const type = (values["clothing-backpack-type"] || "").toLowerCase();
|
||
let max = 0;
|
||
|
||
switch (type) {
|
||
case "small":
|
||
max = 10;
|
||
break;
|
||
case "medium":
|
||
max = 20;
|
||
break;
|
||
case "large":
|
||
max = 30;
|
||
break;
|
||
case "none":
|
||
default:
|
||
max = 0;
|
||
break;
|
||
}
|
||
|
||
setAttrs({
|
||
"backpack-slot-max": max
|
||
});
|
||
});
|
||
});
|
||
</script>
|
||
</div>
|
||
|
||
<!-- ----- MAGS ----- -->
|
||
<div class="sheet-main-mags">
|
||
<div class="sheet-standardbox sheet-standardbox14">
|
||
<h4 class="sheet-minititles2" data-i18n="magazines_storage">Magazines Storage</h4>
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-mags">
|
||
<h4 class="sheet-left" data-i18n="magazine_name">Magazine Name</h4>
|
||
<div class="sheet-doublecolumn sheet-3">
|
||
<h4 data-i18n="act">Act.</h4>
|
||
<h4>/</h4>
|
||
<h4 data-i18n="max">Max</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<fieldset class="repeating_mags">
|
||
<div class="sheet-mags">
|
||
<input class="sheet-left" type="text" step="0.01" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_mag-name" />
|
||
<div class="sheet-doublecolumn sheet-3">
|
||
<input type="number" step="0.01" value="0" name="attr_mag-current" />
|
||
<h4>/</h4>
|
||
<input type="number" step="0.01" value="6" name="attr_mag-max" />
|
||
</div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ----- WEAPONS ----- -->
|
||
<div class="sheet-main-weapons">
|
||
<div class="sheet-standardbox sheet-standardbox11">
|
||
<h4 class="sheet-minititles2" data-i18n="weapons_cabinet">Weapons Cabinet</h4>
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-weapons-row1">
|
||
<h4 data-i18n="roll">Roll</h4>
|
||
<h4> </h4>
|
||
<h4 class="sheet-left" data-i18n="name">Name</h4>
|
||
<h4 class="sheet-left" data-i18n="hit_mod">Hit.M</h4>
|
||
<h4 data-i18n="dmg">DMG</h4>
|
||
<h4 data-i18n="stat">Stat</h4>
|
||
<h4 data-i18n="type_short">T</h4>
|
||
<h4 style="grid-column:8/10" data-i18n="val">VAL</h4>
|
||
</div>
|
||
|
||
<script id="✓ CALC : Weapon Button Links" type="text/worker">
|
||
on("sheet:opened change:repeating_weapons remove:repeating_weapons", () => {
|
||
getSectionIDs("repeating_weapons", ids => {
|
||
const updates = {};
|
||
ids.forEach(id => {
|
||
updates[`repeating_weapons_${id}_weapon-button`] = `[Weapon Details](~${id}__show-description)`;
|
||
});
|
||
setAttrs(updates, { silent: true });
|
||
});
|
||
});
|
||
</script>
|
||
|
||
<fieldset class="repeating_weapons">
|
||
<div class="sheet-weapons-row1">
|
||
<button type="roll" class="sheet-button-attack" name="roll_talent" value="@{global-privacy-status} &{template:dzapocalypse} {{name=@{weapon_name}}} {{charactername=@{character_name}}} {{category=Weapon}} {{@{global-advantage-status}=1}} {{roll=[[1d20+@{weapon_hitmod}+@{pb}]]}} {{roll1=[[1d20+@{weapon_hitmod}+@{pb}]]}} {{roll2=[[1d20+@{weapon_hitmod}+@{pb}]]}} {{range=@{weapon_range}}} {{dmg1=[[@{weapon_dmg}+@{weapon_type_selector}]]}} {{dmg1type=@{weapon_dmgtype_selector}}} {{description=@{weapons-description}}} {{button=@{weapon-button}}} {{desc=[[1]]}}"></button>
|
||
<input style="grid-column: 1/-1" class="sheet-hidden" type="text" value="" name="attr_weapon-button" />
|
||
<button type="roll" class="sheet-hidden" name="roll_show-description" value="@{global-privacy-status} &{template:dzapocalypse-description} {{name=Details}} {{description=@{weapons-description}}} {{properties=@{weapons_properties}}} {{barrel=@{barrel_name}}} {{tactical1=@{tactical1_name}}} {{tactical2=@{tactical2_name}}} {{scope=@{scope_name}}} {{magazine=@{magazine_name}}}"></button>
|
||
|
||
<input type="checkbox" value="1" name="attr_weapon_active" />
|
||
<input class="sheet-left" type="text" placeholder="Weapon Name" data-i18n-placeholder="weapon_name" name="attr_weapon_name" />
|
||
<input type="number" value="0" name="attr_weapon_hitmod" />
|
||
<input type="text" step="0.01" value="0" name="attr_weapon_dmg" />
|
||
<select name="attr_weapon_type_selector_display">
|
||
<option value="0" selected>-</option>
|
||
<option value="melee">Melee</option>
|
||
<option value="firearms">Firearms</option>
|
||
</select>
|
||
<input class="sheet-hidden" type="number" step="0.01" value="0" name="attr_weapon_type_selector" />
|
||
<select name="attr_weapon_dmgtype_selector">
|
||
<option value="0" selected>-</option>
|
||
<option value="Blunt">B</option>
|
||
<option value="Slash">S</option>
|
||
<option value="Pierce">P</option>
|
||
</select>
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_weapon_price">
|
||
<h4>◘</h4>
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-weapons-hideshow" type="checkbox" name="attr_sheet-weapons-hideshow" />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-weapons-row2">
|
||
<input class="sheet-left" type="text" placeholder="Properties" data-i18n-placeholder="properties" name="attr_weapons_properties" />
|
||
<div class="sheet-placeholdercenter">
|
||
<input type="text" placeholder="0 / 0 / 0" name="attr_weapon_range" />
|
||
</div>
|
||
<input type="number" value="0" name="attr_weapon_capacity_act" />
|
||
<h4>/</h4>
|
||
<input type="number" value="0" name="attr_weapon_capacity_max" />
|
||
</div>
|
||
|
||
<hr class="sheet-separator-text sheet-separator-text sheet-weapons-hideshow-div1">
|
||
|
||
<input class="sheet-hidden sheet-weapons-hideshow" type="checkbox" name="attr_sheet-weapons-hideshow" />
|
||
<textarea class="sheet-left sheet-weapons-hideshow-div1" type="text" placeholder="Description" data-i18n-placeholder="description" name="attr_weapons-description"></textarea>
|
||
|
||
<h4 class="sheet-minititles2 sheet-weapons-hideshow-div1" data-i18n="mod_section">Mod. Section</h4>
|
||
<div class="sheet-weapons-row3 sheet-weapons-hideshow-div1">
|
||
<div class="sheet-online">
|
||
<div class="sheet-imgfixed-cadreblanc"></div>
|
||
<div class="sheet-imgfixed-weapons"></div>
|
||
<img class="sheet-imgfixed-custom" name="attr_weapon_image" />
|
||
</div>
|
||
<div class="sheet-weapons-row4">
|
||
<h4 class="sheet-left" data-i18n="barrel">Barrel</h4>
|
||
<input class="sheet-left" type="text" placeholder="Barrel Name" data-i18n-placeholder="barrel_name" name="attr_barrel_name" />
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_weapon_barrel_price">
|
||
<h4>◘</h4>
|
||
<h4 class="sheet-left" data-i18n="tactical_1">Tactical 1</h4>
|
||
<input class="sheet-left" type="text" placeholder="Tactial 1 Name" data-i18n-placeholder="tactical_1_name" name="attr_tactical1_name" />
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_weapon_tactical1_price">
|
||
<h4>◘</h4>
|
||
<h4 class="sheet-left" data-i18n="tactical_2">Tactical 2</h4>
|
||
<input class="sheet-left" type="text" placeholder="Tactial 2 Name" data-i18n-placeholder="tactical_2_name" name="attr_tactical2_name" />
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_weapon_tactical2_price">
|
||
<h4>◘</h4>
|
||
<h4 class="sheet-left" data-i18n="scope">Scope</h4>
|
||
<input class="sheet-left" type="text" placeholder="Scope Name" data-i18n-placeholder="scope_name" name="attr_scope_name" />
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_weapon_scope_price">
|
||
<h4>◘</h4>
|
||
<h4 class="sheet-left" data-i18n="magazine">Magazine</h4>
|
||
<input class="sheet-left" type="text" placeholder="Magazine Name" data-i18n-placeholder="magazine_name" name="attr_magazine_name" />
|
||
<input class="sheet-minimalist" type="number" value="0" name="attr_weapon_magazine_price">
|
||
<h4>◘</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<hr class="sheet-separator-text sheet-separator-text sheet-weapons-hideshow-div1" />
|
||
<input class="sheet-left sheet-weapons-hideshow-div1" type="text" placeholder="Link to Image" data-i18n-placeholder="link_to_image" name="attr_weapon_image" />
|
||
<hr class="sheet-separator-text sheet-separator-text2 sheet-weapons-hideshow-div1" />
|
||
</fieldset>
|
||
|
||
<script id="✓ - CALC : Weapon Type Selector" type="text/worker">
|
||
on("sheet:opened change:repeating_weapons:weapon_type_selector_display change:melee_value change:firearms_value", function(eventInfo) {
|
||
const match = eventInfo.sourceAttribute.match(/repeating_weapons_([-a-zA-Z0-9]+)_/);
|
||
if (!match) return;
|
||
const rowId = match[1];
|
||
const prefix = `repeating_weapons_${rowId}_`;
|
||
|
||
getAttrs([
|
||
`${prefix}weapon_type_selector_display`,
|
||
"melee_value",
|
||
"firearms_value"
|
||
], function(values) {
|
||
const display = values[`${prefix}weapon_type_selector_display`] || "0";
|
||
let result = "0";
|
||
|
||
if (display === "melee") {
|
||
result = values["melee_value"] || "0";
|
||
} else if (display === "firearms") {
|
||
result = values["firearms_value"] || "0";
|
||
}
|
||
|
||
console.log(`Display: ${display} → Type Selector = ${result}`);
|
||
|
||
setAttrs({
|
||
[`${prefix}weapon_type_selector`]: result
|
||
});
|
||
});
|
||
});
|
||
</script>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-vehicle-display sheet-hidden">
|
||
<div class="sheet-maingrid-area-vehicle">
|
||
<!-- VEHICLE ARMOR CLASS -->
|
||
<div class="sheet-standardbox sheet-standardbox42 sheet-vehicle-main-armorclass">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-vehicle-armorclass">
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_vehicle-armorclass" />
|
||
</div>
|
||
<h4 data-i18n="armor_class">Armor Class</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- VEHICLE BODY -->
|
||
<div class="sheet-standardbox sheet-standardbox34 sheet-vehicle-main-hp">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-vehicle-hp">
|
||
<div class="sheet-doublecolumn sheet-3">
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_vehicle-hp_act" />
|
||
<h4>/</h4>
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_vehicle-hp_max" readonly />
|
||
</div>
|
||
</div>
|
||
<h4 data-i18n="main_body_hp">Main / Body HP</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- VEHICLE ARMOR PASSENGER -->
|
||
<div class="sheet-standardbox sheet-standardbox41 sheet-vehicle-main-passenger">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-vehicle-passenger">
|
||
<input class="sheet-inputchar" type="text" value="0" name="attr_vehicle-passenger" />
|
||
</div>
|
||
<h4 data-i18n="passengers">Passengers</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- VEHICLE IMG -->
|
||
<div class="sheet-standardbox sheet-standardbox41 sheet-vehicle-main-img">
|
||
<div class="sheet-oneline">
|
||
<input class="sheet-hidden sheet-vehicle-hideshow" type="checkbox" name="attr_sheet-vehicle-hideshow" />
|
||
<div class="sheet-main-vehicle-passenger sheet-vehicle-hideshow-div2">
|
||
<img type="text" value="0" name="attr_vehicle-img" />
|
||
</div>
|
||
<div class="sheet-main-vehicle-instruction sheet-vehicle-hideshow-div1">
|
||
<textarea class="sheet-left" type="text" value="0" name="attr_vehicle-desc"></textarea>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- VEHICLE SPEED -->
|
||
<div class="sheet-standardbox sheet-standardbox33 sheet-vehicle-main-speed">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-vehicle-speed">
|
||
<div class="sheet-doublecolumn sheet-3">
|
||
<input class="sheet-inputchar" type="text" step="0.01" value="0ft." name="attr_vehicle-roundspeed" />
|
||
<h4>-</h4>
|
||
<input class="sheet-inputchar" type="text" step="0.01" value="0ft." name="attr_vehicle-topspeed" />
|
||
</div>
|
||
<h4 data-i18n="round_top_speed">Round / Top Speed</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- VEHICLE TANK SIZE -->
|
||
<div class="sheet-standardbox sheet-standardbox34 sheet-vehicle-main-tank">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-vehicle-tank">
|
||
<div class="sheet-doublecolumn sheet-32">
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_vehicle-milespergallon" />
|
||
<h4>-</h4>
|
||
<input class="sheet-inputchar" type="text" value="0gal" name="attr_vehicle-tanksize" />
|
||
</div>
|
||
</div>
|
||
<h4 data-i18n="mpg_tank_size">MPG & Tank Size</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- VEHICLE NAME -->
|
||
<div class="sheet-standardbox sheet-standardbox31 sheet-vehicle-main-name">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-vehicle-name1">
|
||
<input class="sheet-inputchar" type="text" placeholder="Vehicle Name" data-i18n-placeholder="vehicle_name" name="attr_vehicle-name" />
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-vehicle-hideshow" type="checkbox" name="attr_sheet-vehicle-hideshow" />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
</div>
|
||
|
||
<input class="sheet-hidden sheet-vehicle-hideshow" type="checkbox" name="attr_sheet-vehicle-hideshow" />
|
||
<div class="sheet-main-vehicle-name2 sheet-vehicle-hideshow-div1">
|
||
<h4 data-i18n="vehicle_archetype">Vehicle Archetype :</h4>
|
||
<select name="attr_vehicle-type">
|
||
<option value="0" selected>-</option>
|
||
<option value="21 75 4 2000 100 100 50 30 23 10 5 7">Small Airplane</option>
|
||
<option value="18 350 13 500 25 5 96 75 20 45 4 35">APC</option>
|
||
<option value="9 20 2/4 450 20 20 5 22 11 3 4 0">ATV/UTV</option>
|
||
<option value="7 5 2 200 10 0 0 0 1 2 0 0">Bicycle</option>
|
||
<option value="14 100 50 600 30 7 80 35 16 4 4 7">Bus</option>
|
||
<option value="10 13 2 300 15 0 0 0 3 0 0 0">Horse</option>
|
||
<option value="17 300 4 500 25 5 25 55 19 30 10 20">Humvee</option>
|
||
<option value="11 25 5 400 20 7 30 15 13 0 5 0">Motorboat</option>
|
||
<option value="8 20 2 900 45 40 4 12 10 3 4 0">Motorcycle</option>
|
||
<option value="13 85 3+7 900 45 20 25 30 15 5 4 5">Pickup Truck</option>
|
||
<option value="12 50 2+5 600 30 8 40 15 14 6 4 5">RV</option>
|
||
<option value="12 65 5+1 1000 50 30 12 25 14 3 4 4">Sedan</option>
|
||
<option value="18 150 3+25 800 40 5 150 45 20 30 4 5">Semi Truck</option>
|
||
<option value="14 100 7 1000 50 25 20 35 16 5 4 5">SUV</option>
|
||
<option value="19 500 7 400 20 5 200 100 21 300 5 0">Tank</option>
|
||
<option value="25 5000 2 500 25 500 3000 50 27 100 10 7">Train Engine</option>
|
||
</select>
|
||
<h4 data-i18n="img_url">IMG URL :</h4>
|
||
<input type="text" placeholder="Image URL to Display" data-i18n-placeholder="image_url_to_display" name="attr_vehicle-img" />
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- VEHICLE ENGINE STR -->
|
||
<div class="sheet-standardbox sheet-standardbox33 sheet-vehicle-main-enginestr">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-vehicle-engine-str">
|
||
<input class="sheet-inputchar" type="text" step="0.01" value="0 (0)" name="attr_vehicle-engine-str" />
|
||
</div>
|
||
<h4 data-i18n="engine_str">Engine STR</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- VEHICLE ENGINE HP -->
|
||
<div class="sheet-standardbox sheet-standardbox13 sheet-vehicle-main-engine">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-vehicle-engine-hp">
|
||
<div class="sheet-doublecolumn sheet-3">
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_vehicle-engine-hp_act" />
|
||
<h4>/</h4>
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_vehicle-engine-hp_max" readonly />
|
||
</div>
|
||
</div>
|
||
<h4 data-i18n="engine_hp">Engine HP</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- VEHICLE WINDOWS HP -->
|
||
<div class="sheet-standardbox sheet-standardbox12 sheet-vehicle-main-windows">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-vehicle-windows-hp">
|
||
<div class="sheet-doublecolumn sheet-3">
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_vehicle-windows-hp_act" />
|
||
<h4>/</h4>
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_vehicle-windows-hp_max" readonly />
|
||
</div>
|
||
</div>
|
||
<h4 data-i18n="window_hp">Window HP</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- VEHICLE WHEEL HP -->
|
||
<div class="sheet-standardbox sheet-standardbox14 sheet-vehicle-main-wheel">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-vehicle-wheel-hp">
|
||
<div class="sheet-doublecolumn sheet-3">
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_vehicle-wheel-hp_act" />
|
||
<h4>/</h4>
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_vehicle-wheel-hp_max" readonly />
|
||
</div>
|
||
</div>
|
||
<h4 data-i18n="wheel_hp">Wheel HP</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- VEHICLE HEADLIGHT HP -->
|
||
<div class="sheet-standardbox sheet-standardbox11 sheet-vehicle-main-headlight">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-vehicle-headlight-hp">
|
||
<div class="sheet-doublecolumn sheet-3">
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_vehicle-headlight-hp_act" />
|
||
<h4>/</h4>
|
||
<input class="sheet-inputchar" type="number" step="0.01" value="0" name="attr_vehicle-headlight-hp_max" readonly />
|
||
</div>
|
||
</div>
|
||
<h4 data-i18n="headlight_hp">Headlight HP</h4>
|
||
</div>
|
||
</div>
|
||
|
||
<script id="✓ - CALC : Vehicle Setup from Type" type="text/worker">
|
||
on("change:vehicle-type", function () {
|
||
getAttrs(["vehicle-type"], function (values) {
|
||
const raw = values["vehicle-type"];
|
||
if (!raw || raw === "0") return;
|
||
|
||
const parseValue = (v) => {
|
||
if (v.includes("+")) {
|
||
return v.split("+").reduce((sum, n) => sum + parseInt(n, 10), 0);
|
||
} else if (v.includes("/")) {
|
||
return Math.max(...v.split("/").map(n => parseInt(n, 10)));
|
||
} else {
|
||
return parseInt(v, 10);
|
||
}
|
||
};
|
||
|
||
const parts = raw.trim().split(" ");
|
||
if (parts.length !== 12) return;
|
||
|
||
const [
|
||
ac,
|
||
hpMax,
|
||
passenger,
|
||
topSpeed,
|
||
roundSpeed,
|
||
mpg,
|
||
tankSize,
|
||
engineHp,
|
||
engineStr,
|
||
wheelHp,
|
||
headlightHp,
|
||
windowHp
|
||
] = parts.map(parseValue);
|
||
|
||
const engineMod = Math.floor((engineStr - 10) / 2);
|
||
const modDisplay = engineMod >= 0 ? `(+${engineMod})` : `(${engineMod})`;
|
||
const engineStrDisplay = `${engineStr} ${modDisplay}`;
|
||
|
||
setAttrs({
|
||
"vehicle-armorclass": ac,
|
||
"vehicle-hp_max": hpMax,
|
||
"vehicle-hp_act": hpMax,
|
||
"vehicle-passenger": passenger,
|
||
"vehicle-topspeed": `${topSpeed}ft.`,
|
||
"vehicle-roundspeed": `${roundSpeed}ft.`,
|
||
"vehicle-milespergallon": mpg,
|
||
"vehicle-tanksize": `${tankSize}gal`,
|
||
"vehicle-engine-hp_max": engineHp,
|
||
"vehicle-engine-hp_act": engineHp,
|
||
"vehicle-engine-str": engineStrDisplay,
|
||
"vehicle-wheel-hp_max": wheelHp,
|
||
"vehicle-wheel-hp_act": wheelHp,
|
||
"vehicle-headlight-hp_max": headlightHp,
|
||
"vehicle-headlight-hp_act": headlightHp,
|
||
"vehicle-windows-hp_max": windowHp,
|
||
"vehicle-windows-hp_act": windowHp
|
||
});
|
||
});
|
||
});
|
||
</script>
|
||
|
||
<!-- ----- VEHICLE STORAGE ----- -->
|
||
<div class="sheet-main-vehiclestorage">
|
||
<div class="sheet-standardbox sheet-standardbox34">
|
||
<h4 class="sheet-minititles2" data-i18n="vehicle_storage">Vehicle Storage</h4>
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-equipment">
|
||
<h4 class="sheet-left" data-i18n="name">Name</h4>
|
||
<h4 data-i18n="qty">QTY</h4>
|
||
<h4> </h4>
|
||
<h4 class="sheet-left" data-i18n="name">Name</h4>
|
||
<h4 data-i18n="qty">QTY</h4>
|
||
<h4> </h4>
|
||
<h4 class="sheet-left" data-i18n="name">Name</h4>
|
||
<h4 data-i18n="qty">QTY</h4>
|
||
</div>
|
||
|
||
<fieldset class="repeating_vehiclestorage">
|
||
<div class="sheet-equipment">
|
||
<input class="sheet-left" type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_equipment_name1" />
|
||
<input type="number" step="0.01" value="0" name="attr_equipment_quantity1" />
|
||
<h4> </h4>
|
||
<input class="sheet-left" type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_equipment_name2" />
|
||
<input type="number" step="0.01" value="0" name="attr_equipment_quantity2" />
|
||
<h4> </h4>
|
||
<input class="sheet-left" type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_equipment_name3" />
|
||
<input type="number" step="0.01" value="0" name="attr_equipment_quantity3" />
|
||
</div>
|
||
</fieldset>
|
||
<!-- --->
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-notes-display sheet-hidden">
|
||
<div class="sheet-background-header">
|
||
<div class="sheet-standardbox sheet-standardbox34">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-background-header-line1">
|
||
<input type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_character_age" />
|
||
<input type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_character_height" />
|
||
<input type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_character_weight" />
|
||
<input type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_character_skin" />
|
||
<input type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_character_hair" />
|
||
<input type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_character_eye" />
|
||
<input type="text" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_character_gender" />
|
||
<h4 data-i18n="age">Age</h4>
|
||
<h4 data-i18n="height">Height</h4>
|
||
<h4 data-i18n="weight">Weight</h4>
|
||
<h4 data-i18n="skin">Skin</h4>
|
||
<h4 data-i18n="hair">Hair</h4>
|
||
<h4 data-i18n="eye">Eye</h4>
|
||
<h4 data-i18n="gender">Gender</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-background-area">
|
||
<!-- -->
|
||
<div class="sheet-background-vertical-art">
|
||
<div class="sheet-standardbox sheet-standardbox32">
|
||
<div class="sheet-oneline">
|
||
<div class="sheet-main-vehicle-name1">
|
||
<h4 data-i18n="character_portrait">Character Portrait</h4>
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-portrait-hideshow" type="checkbox" name="attr_sheet-portrait-hideshow">
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
</div>
|
||
<input class="sheet-cogs-input sheet-portrait-hideshow" type="checkbox" name="attr_sheet-portrait-hideshow">
|
||
<input class="sheet-portrait-hideshow-div1" type="text" placeholder="(URL) Mobile Armor Portrait" data-i18n-placeholder="mobile_armor_portrait_url" name="attr_mobilearmor-portrait" />
|
||
<img name="attr_mobilearmor-portrait" />
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-standardbox sheet-standardbox31">
|
||
<h4 class="sheet-minititles2" data-i18n="character_notes">Character Notes</h4>
|
||
<div class="sheet-oneline">
|
||
<textarea class="sheet-left" placeholder="-" data-i18n-placeholder="placeholder_dash" name="attr_background-characternotes" style="height: 100px"></textarea>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<!-- -->
|
||
<div class="sheet-background-generalnotes">
|
||
<div class="sheet-standardbox sheet-standardbox34">
|
||
<h4 class="sheet-minititles2" data-i18n="general_notes">General Notes</h4>
|
||
<div class="sheet-oneline">
|
||
<textarea class="sheet-left" name="attr_background-generalnotes"></textarea>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-standardbox sheet-standardbox33">
|
||
<h4 class="sheet-minititles2" data-i18n="specific_notes">Specific Notes</h4>
|
||
<div class="sheet-oneline">
|
||
<fieldset class="repeating_notes">
|
||
<input class="sheet-hidden sheet-cogs-hideshow" type="checkbox" name="attr_sheet-cogs-hideshow" checked />
|
||
<div class="sheet-notes1 sheet-cogs-hideshow-div1">
|
||
<input class="sheet-left" type="text" placeholder="Source" data-i18n-placeholder="source" name="attr_proficiency-source" />
|
||
<input class="sheet-left" type="text" placeholder="Name" data-i18n-placeholder="name" name="attr_proficiency-name" />
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-cogs-hideshow" type="checkbox" name="attr_sheet-cogs-hideshow" checked />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-notes2 sheet-cogs-hideshow-div2">
|
||
<input class="sheet-hidden sheet-description-hideshow" type="checkbox" name="attr_sheet-description-hideshow" checked />
|
||
|
||
<span type="text" name="attr_proficiency-source"></span>
|
||
<span type="text" name="attr_proficiency-name"></span>
|
||
|
||
<div class="sheet-cogs-container">
|
||
<input class="sheet-cogs-input sheet-cogs-hideshow" type="checkbox" name="attr_sheet-cogs-hideshow" checked />
|
||
<span class="sheet-cogs-icon">y</span>
|
||
</div>
|
||
</div>
|
||
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<!-- -->
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-bottom-background"></div>
|
||
</div>
|
||
|
||
<script>
|
||
(function () {
|
||
if (typeof window === "undefined" || typeof document === "undefined") return;
|
||
const endpoint = "http://127.0.0.1:7812/ingest/15fc3cf2-67f7-458a-acac-98a7b4c45c4c";
|
||
const sessionId = "c1a662";
|
||
const runId = "pre-fix-3";
|
||
const group = "repeating_mags";
|
||
|
||
function sendDebugLog(hypothesisId, location, message, data) {
|
||
// #region agent log
|
||
fetch(endpoint, {
|
||
method: "POST",
|
||
headers: {
|
||
"Content-Type": "application/json",
|
||
"X-Debug-Session-Id": sessionId
|
||
},
|
||
body: JSON.stringify({
|
||
sessionId: sessionId,
|
||
runId: runId,
|
||
hypothesisId: hypothesisId,
|
||
location: location,
|
||
message: message,
|
||
data: data,
|
||
timestamp: Date.now()
|
||
})
|
||
}).catch(function () {});
|
||
// #endregion
|
||
}
|
||
|
||
function collectRepcontrolEvidence() {
|
||
const rep = document.querySelector('.repcontrol[data-groupname="' + group + '"]');
|
||
sendDebugLog("H1", "DZ-Apocalypse.html:debug-script", "repcontrol presence", {
|
||
found: !!rep
|
||
});
|
||
if (!rep) return;
|
||
|
||
const edit = rep.querySelector(".repcontrol_edit");
|
||
const add = rep.querySelector(".repcontrol_add");
|
||
const repStyle = window.getComputedStyle(rep);
|
||
sendDebugLog("H2", "DZ-Apocalypse.html:debug-script", "container computed layout", {
|
||
display: repStyle.display,
|
||
justifyContent: repStyle.justifyContent,
|
||
alignItems: repStyle.alignItems,
|
||
flexWrap: repStyle.flexWrap
|
||
});
|
||
|
||
if (edit) {
|
||
const editStyle = window.getComputedStyle(edit);
|
||
const editRect = edit.getBoundingClientRect();
|
||
sendDebugLog("H3", "DZ-Apocalypse.html:debug-script", "edit button geometry", {
|
||
float: editStyle.float,
|
||
position: editStyle.position,
|
||
marginLeft: editStyle.marginLeft,
|
||
marginRight: editStyle.marginRight,
|
||
top: editStyle.top,
|
||
left: editStyle.left,
|
||
rectTop: editRect.top,
|
||
rectLeft: editRect.left
|
||
});
|
||
}
|
||
|
||
if (add) {
|
||
const addStyle = window.getComputedStyle(add);
|
||
const addRect = add.getBoundingClientRect();
|
||
sendDebugLog("H4", "DZ-Apocalypse.html:debug-script", "add button geometry", {
|
||
float: addStyle.float,
|
||
position: addStyle.position,
|
||
marginLeft: addStyle.marginLeft,
|
||
marginRight: addStyle.marginRight,
|
||
top: addStyle.top,
|
||
left: addStyle.left,
|
||
rectTop: addRect.top,
|
||
rectLeft: addRect.left
|
||
});
|
||
}
|
||
|
||
if (edit && add) {
|
||
const editRect = edit.getBoundingClientRect();
|
||
const addRect = add.getBoundingClientRect();
|
||
sendDebugLog("H5", "DZ-Apocalypse.html:debug-script", "row alignment delta", {
|
||
deltaTopPx: Math.round(Math.abs(editRect.top - addRect.top)),
|
||
addIsRightOfEdit: addRect.left > editRect.left
|
||
});
|
||
}
|
||
}
|
||
|
||
function collectDarkmodeEvidence() {
|
||
const root = document.querySelector(".charsheet");
|
||
const darkAncestor = root ? root.closest(".sheet-darkmode") : null;
|
||
sendDebugLog("D1", "DZ-Apocalypse.html:debug-script", "darkmode ancestor presence", {
|
||
rootFound: !!root,
|
||
darkAncestorFound: !!darkAncestor
|
||
});
|
||
|
||
const logo = document.querySelector(".sheet-main-image");
|
||
if (logo) {
|
||
const logoStyle = window.getComputedStyle(logo);
|
||
sendDebugLog("D2", "DZ-Apocalypse.html:debug-script", "logo background image", {
|
||
backgroundImage: logoStyle.backgroundImage
|
||
});
|
||
}
|
||
|
||
const box = document.querySelector(".sheet-standardbox.sheet-standardbox55, .sheet-standardbox.sheet-standardbox51");
|
||
if (box) {
|
||
const beforeStyle = window.getComputedStyle(box, "::before");
|
||
sendDebugLog("D3", "DZ-Apocalypse.html:debug-script", "standardbox before border image", {
|
||
borderImageSource: beforeStyle.borderImageSource,
|
||
borderImageSlice: beforeStyle.borderImageSlice
|
||
});
|
||
}
|
||
|
||
const sheetNode = document.querySelector(".charsheet, .charactersheet");
|
||
if (sheetNode) {
|
||
const classes = (sheetNode.className || "").toString();
|
||
sendDebugLog("D4", "DZ-Apocalypse.html:debug-script", "sheet class snapshot", {
|
||
className: classes
|
||
});
|
||
}
|
||
}
|
||
|
||
function collectPocketEvidence() {
|
||
const pocketInput = document.querySelector('input[name="attr_pocket-slot"]');
|
||
const pocketWrap = pocketInput ? pocketInput.closest(".sheet-doublecolumn.sheet-3") : null;
|
||
sendDebugLog("P1", "DZ-Apocalypse.html:debug-script", "pocket container presence", {
|
||
pocketInputFound: !!pocketInput,
|
||
pocketWrapFound: !!pocketWrap
|
||
});
|
||
if (!pocketWrap) return;
|
||
|
||
const wrapStyle = window.getComputedStyle(pocketWrap);
|
||
sendDebugLog("P2", "DZ-Apocalypse.html:debug-script", "pocket container computed layout", {
|
||
display: wrapStyle.display,
|
||
gridTemplateColumns: wrapStyle.gridTemplateColumns,
|
||
gridAutoFlow: wrapStyle.gridAutoFlow,
|
||
alignItems: wrapStyle.alignItems,
|
||
rowGap: wrapStyle.rowGap
|
||
});
|
||
|
||
const title = pocketWrap.querySelector("h4");
|
||
const slash = pocketWrap.querySelectorAll("h4")[1];
|
||
const max = pocketWrap.querySelector('input[name="attr_pocket-slot-max"]');
|
||
if (title && pocketInput && slash && max) {
|
||
const titleRect = title.getBoundingClientRect();
|
||
const valueRect = pocketInput.getBoundingClientRect();
|
||
const slashRect = slash.getBoundingClientRect();
|
||
const maxRect = max.getBoundingClientRect();
|
||
sendDebugLog("P3", "DZ-Apocalypse.html:debug-script", "pocket child geometry", {
|
||
titleTop: titleRect.top,
|
||
valueTop: valueRect.top,
|
||
slashTop: slashRect.top,
|
||
maxTop: maxRect.top,
|
||
titleBottom: titleRect.bottom,
|
||
valueLeft: valueRect.left,
|
||
slashLeft: slashRect.left,
|
||
maxLeft: maxRect.left
|
||
});
|
||
}
|
||
|
||
sendDebugLog("P4", "DZ-Apocalypse.html:debug-script", "pocket html snapshot", {
|
||
html: pocketWrap.innerHTML.slice(0, 240)
|
||
});
|
||
}
|
||
|
||
if (document.readyState === "loading") {
|
||
document.addEventListener("DOMContentLoaded", function () {
|
||
collectPocketEvidence();
|
||
});
|
||
} else {
|
||
collectPocketEvidence();
|
||
}
|
||
})();
|
||
</script>
|