Files
2025-05-19 09:34:42 -03:00

1557 lines
48 KiB
HTML

<!-- HIDDEN INPUTS -->
<input type="hidden" name="attr_sheetTab" value="character" />
<input type="hidden" name="attr_weaponEncumbrance" value="0" />
<input type="hidden" name="attr_attackBonus" value="0" />
<input type="hidden" name="attr_descendingArmorClass" value="" />
<!-- SHEET SELECTOR -->
<div class="sheet-button-select">
<button type="action" name="act_character">Personagem</button>
<button type="action" name="act_equipment">Equipamento</button>
<button type="action" name="act_magic">Magia</button>
<button type="action" name="act_retainers">Auxiliares</button>
<button type="action" name="act_notes">Notas</button>
</div>
<!-- END OF SHEET SELECTOR -->
<!-- CHARACTER SHEET -->
<div class="sheet-character">
<div class="logo-and-header">
<img
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/d20age/images/d20agelogo.png"
alt="logo d20age"
/>
<!-- Header -->
<div class="header">
<div class="header-line">
<label for="attr_name">
NOME:
<input type="text" name="attr_name" id="name-input" />
</label>
</div>
<div class="header-line">
<label for="attr_title">
TÍTULO:
<input type="text" name="attr_title" />
</label>
<label for="attr_class">
CLASSE:
<input type="text" name="attr_class" />
</label>
</div>
<div class="header-line">
<label for="attr_alignment">
ALINHAMENTO:
<input type="text" name="attr_alignment" />
</label>
<label for="attr_level">
NÍVEL:
<input type="text" name="attr_level" />
</label>
</div>
<div class="header-line">
<label for="attr_xp">
XP:
<input type="text" name="attr_xp" />
</label>
<label for="attr_xpBonus" class="header-label">
XP(+%):
<input type="text" name="attr_xpBonus" />
</label>
<label for="attr_xpTarget">
XP(META):
<input type="text" name="attr_xpTarget" />
</label>
</div>
</div>
<!-- End of Header -->
</div>
<!-- Attributes, saves and avatar -->
<div class="attributes-saves-and-avatar">
<!-- Attributes -->
<div class="attributes">
<div class="attributes-container">
<h3>Atributos</h3>
<div class="attributes-content">
<div class="attributes-line">
<label>
<span>for:</span>
<input type="text" name="attr_str" class="attribute-input" />
</label>
<input
hidden
readonly
id="ability-strength-modifier"
name="attr_strMod"
value="0"
/>
<input
readonly
id="ability-strength-modifier"
name="attr_maskedStrMod"
value="0"
/>
</div>
<div class="attributes-line">
<label>
<span>int:</span>
<input type="text" name="attr_int" class="attribute-input" />
</label>
<input
hidden
readonly
id="ability-intelligence-modifier"
name="attr_intMod"
value="0"
/>
<input
readonly
id="ability-intelligence-modifier"
name="attr_maskedIntMod"
value="0"
/>
</div>
<div class="attributes-line">
<label>
<span>sab:</span>
<input type="text" name="attr_wis" class="attribute-input" />
</label>
<input
hidden
readonly
id="ability-wisdom-modifier"
name="attr_wisMod"
value="0"
/>
<input
readonly
id="ability-wisdom-modifier"
name="attr_maskedWisMod"
value="0"
/>
</div>
<div class="attributes-line">
<label>
<span>des:</span>
<input type="text" name="attr_dex" class="attribute-input" />
</label>
<input
hidden
readonly
id="ability-dexterity-modifier"
name="attr_dexMod"
value="0"
/>
<input
readonly
id="ability-dexterity-modifier"
name="attr_maskedDexMod"
value="0"
/>
</div>
<div class="attributes-line">
<label>
<span>con:</span>
<input type="text" name="attr_con" class="attribute-input" />
</label>
<input
hidden
readonly
id="ability-constitution-modifier"
name="attr_conMod"
value="0"
/>
<input
readonly
id="ability-constitution-modifier"
name="attr_maskedConMod"
value="0"
/>
</div>
<div class="attributes-line">
<label>
<span>car:</span>
<input type="text" name="attr_cha" class="attribute-input" />
</label>
<input
hidden
readonly
id="ability-charisma-modifier"
name="attr_chaMod"
value="0"
/>
<input
readonly
id="ability-charisma-modifier"
name="attr_maskedChaMod"
value="0"
/>
</div>
</div>
</div>
</div>
<!-- End of Attributes -->
<!-- Saves -->
<div class="saves">
<div class="saves-container">
<h3>Salvaguardas</h3>
<div class="saves-content">
<div class="saves-line">
<input type="text" name="attr_saveDeath" />
<button
type="roll"
name="attr_rollSaveDeath"
value="&{template:default} {{name=@{character_name} salvaguarda contra Morte}} {{resultado=[[ [[1d20]]>@{saveDeath} ]]}} {{alvo=[[@{saveDeath}]]}}"
class="save-button"
>
MORTE
</button>
</div>
<div class="saves-line">
<input type="text" name="attr_saveContact" />
<button
type="roll"
name="attr_rollSaveContact"
value="&{template:default} {{name=@{character_name} salvaguarda contra Contato}} {{resultado=[[ [[1d20]]>@{saveContact} ]]}} {{alvo=[[@{saveContact}]]}}"
class="save-button"
>
CONTATO
</button>
</div>
<div class="saves-line">
<input type="text" name="attr_saveParalysis" />
<button
type="roll"
name="attr_rollSaveParalysis"
value="&{template:default} {{name=@{character_name} salvaguarda contra Paralisia}} {{resultado=[[ [[1d20]]>@{saveParalysis} ]]}} {{alvo=[[@{saveParalysis}]]}}"
class="save-button"
>
PARALISIA
</button>
</div>
<div class="saves-line">
<input type="text" name="attr_saveIrruption" />
<button
type="roll"
name="attr_rollSaveIrruption"
value="&{template:default} {{name=@{character_name} salvaguarda contra Irrupção}} {{resultado=[[ [[1d20]]>@{saveIrruption} ]]}} {{alvo=[[@{saveIrruption}]]}}"
class="save-button"
>
IRRUPÇÃO
</button>
</div>
<div class="saves-line">
<input type="text" name="attr_saveSpell" />
<button
type="roll"
name="attr_rollSaveSpell"
value="&{template:default} {{name=@{character_name} salvaguarda contra Feitiço}} {{resultado=[[ [[1d20]]>@{saveSpell} ]]}} {{alvo=[[@{saveSpell}]]}}"
class="save-button"
>
FEITIÇO
</button>
</div>
</div>
</div>
</div>
<!-- End of Saves -->
<!-- Avatar -->
<div class="avatarContainer">
<!-- <h3>Arte</h3> -->
<div class="art-container">
<div class="tape"></div>
<div class="art" name="attr_character_avatar"></div>
</div>
</div>
<!-- End of Avatar -->
</div>
<!-- End of Attributes, saves and avatar -->
<!-- Movement and Thac0 -->
<div class="movement-and-thac0">
<!-- Abilities -->
<div class="abilities-container">
<div class="abilities">
<h3>Habilidades</h3>
<div class="abilities-content">
<textarea name="attr_abilities"></textarea>
</div>
</div>
</div>
<!-- End of Abilities -->
<!-- Thac0 -->
<div class="thac0">
<div class="thac0-and-ab">
<label>Taco:<input type="text" name="attr_thac0" value="19" /></label>
<label
>Bônus de Ataque:<input type="text" name="attr_ba" value="0"
/></label>
</div>
<div class="thac0-grid">
<div>
<span>0</span>
<input readonly name="attr_attackMatrix0" />
</div>
<div>
<span>1</span>
<input readonly name="attr_attackMatrix1" />
</div>
<div>
<span>2</span>
<input readonly name="attr_attackMatrix2" />
</div>
<div>
<span>3</span>
<input readonly name="attr_attackMatrix3" />
</div>
<div>
<span>4</span>
<input readonly name="attr_attackMatrix4" />
</div>
<div>
<span>5</span>
<input readonly name="attr_attackMatrix5" />
</div>
<div>
<span>6</span>
<input readonly name="attr_attackMatrix6" />
</div>
<div>
<span>7</span>
<input readonly name="attr_attackMatrix7" />
</div>
<div>
<span>8</span>
<input readonly name="attr_attackMatrix8" />
</div>
<div>
<span>9</span>
<input readonly name="attr_attackMatrix9" />
</div>
</div>
</div>
<!-- End of Thac0 -->
</div>
<!-- End of Movement and Thac0 -->
<!-- Languages and Defenses -->
<div class="languages-and-defenses">
<!-- Movement -->
<div class="movement">
<h3>Deslocamento e Carga</h3>
<div class="movement-content">
<div class="movement-line">
<label>BASE <input type="text" name="attr_moveBase" /></label>
</div>
<div class="movement-line">
<label
>EXPLORAÇÃO/CORRIDA
<input type="text" name="attr_movExplorationOrRunning"
/></label>
</div>
<div class="movement-line">
<label>VIAGEM <input type="text" name="attr_moveTravel" /></label>
</div>
<div class="movement-line">
<label>CARGA</label>
<select name="attr_encumbrance">
<option value="light">Leve</option>
<option value="medium" selected>Média</option>
<option value="heavy" selected>Pesada</option>
</select>
</div>
</div>
</div>
<!-- End of Movement -->
<!-- Languages -->
<div class="languages-container">
<div class="languages">
<h3>Idiomas</h3>
<div class="languages-content">
<textarea name="attr_languages"></textarea>
<div class="literate">
<label
>Letrado
<input type="checkbox" name="attr_literate" />
</label>
</div>
</div>
</div>
</div>
<!-- End of Languages -->
<!-- Defenses -->
<div class="defenses">
<label id="ac-option">
<span>Opção de CA</span>
<select name="attr_armorClassType">
<option value="aac">Ascendente</option>
<option value="dac" selected>Descendente</option>
</select>
</label>
<div class="defenses-line">
<label>CA<input readonly type="text" name="attr_ac" /></label>
</div>
<div class="defenses-line">
<label>PV MÁXIMO<input type="text" name="attr_pvMax" /></label>
</div>
<div class="defenses-line">
<label>PV ATUAL<input type="text" name="attr_pvCurrent" /></label>
</div>
</div>
<!-- End of Defenses -->
</div>
<!-- End of Languages and Defenses -->
<!-- Weapons -->
<div class="weapons">
<h3>Armas</h3>
<fieldset class="repeating_weapons">
<div class="weapon">
<div class="weapon-grid">
<div id="weapon-roll">
<span>.</span>
<input type="hidden" name="attr_bonusDamage" value="0" />
<button
type="roll"
name="dacAttackRoll"
class="attack-roll attack-roll-dac"
value="&{template:simple} {{descendingArmorClass=@{descendingArmorClass}}} {{roll=@{character_name} ataca com @{weaponName}}} {{ataque=[[1d20+@{dexMod}+@{weaponAttackBonus}+@{attackBonus}]]}} {{dano=[[@{weaponDamageDie}+@{weaponDamageBonus}+@{bonusDamage}]]}} {{descrição=@{weaponDescription}}} {{attackMatrix9=@{attackMatrix9}}} {{attackMatrix8=@{attackMatrix8}}} {{attackMatrix7=@{attackMatrix7}}} {{attackMatrix6=@{attackMatrix6}}} {{attackMatrix5=@{attackMatrix5}}} {{attackMatrix4=@{attackMatrix4}}} {{attackMatrix3=@{attackMatrix3}}} {{attackMatrix2=@{attackMatrix2}}} {{attackMatrix1=@{attackMatrix1}}} {{attackMatrix0=@{attackMatrix0}}}"
></button>
</div>
<div id="weapon-name">
<span>Nome</span>
<input type="text" name="attr_weaponName" />
</div>
<div id="weapon-attack-type">
<span>Tipo de Ataque</span>
<select name="attr_attackType">
<option value="melee">Corpo a Corpo</option>
<option value="ranged">A Distância</option>
</select>
</div>
<div id="weapon-attack-bonus">
<span>+Atq</span>
<input type="number" name="attr_weaponAttackBonus" value="0" />
</div>
<div id="weapon-damage-die">
<span>Dado de Dano</span>
<input
type="text"
name="attr_weaponDamageDie"
value="1d6"
class="input-as-number"
/>
</div>
<div id="weapon-damage-bonus">
<span>+Dano</span>
<input type="number" name="attr_weaponDamageBonus" value="0" />
</div>
<div id="weapon-weight">
<span>Peso</span>
<input type="number" min="0" name="attr_weaponWeight" value="0" />
</div>
</div>
<input
id="weapon-description"
type="text"
name="attr_weaponDescription"
class="weapon-description"
placeholder="Descrição"
value=""
/>
</div>
</fieldset>
</div>
<!-- End of Weapons -->
</div>
<!-- END OF CHARACTER SHEET -->
<!-- MAGIC SHEET -->
<div class="sheet-magic">
<div class="magic-per-circle">
<label>
<span>1</span>
<input
type="number"
min="0"
name="attr_magicCircle1Available"
title="Magias Disponíveis"
value="0"
/>
/
<input
type="number"
min="0"
id="magic-circle-1-total"
name="attr_magicCircle1Total"
title="Magias Totais"
value="0"
/>
</label>
<label class="inline-flex">
<span>2</span>
<input
type="number"
min="0"
name="attr_magicCircle2Available"
title="Magias Disponíveis"
value="0"
/>
/
<input
type="number"
min="0"
id="magic-circle-2-total"
name="attr_magicCircle2Total"
title="Magias Totais"
value="0"
/>
</label>
<label class="inline-flex">
<span>3</span>
<input
type="number"
min="0"
name="attr_magicCircle3Available"
title="Magias Disponíveis"
value="0"
/>
/
<input
type="number"
min="0"
id="magic-circle-3-total"
name="attr_magicCircle3Total"
title="Magias Totais"
value="0"
/>
</label>
<label class="inline-flex">
<span>4</span>
<input
type="number"
min="0"
name="attr_magicCircle4Available"
title="Magias Disponíveis"
value="0"
/>
/
<input
type="number"
min="0"
id="magic-circle-4-total"
name="attr_magicCircle4Total"
title="Magias Totais"
value="0"
/>
</label>
<label class="inline-flex">
<span>5</span>
<input
type="number"
min="0"
name="attr_magicCircle5Available"
title="Magias Disponíveis"
value="0"
/>
/
<input
type="number"
min="0"
id="magic-circle-5-total"
name="attr_magicCircle5Total"
title="Magias Totais"
value="0"
/>
</label>
</div>
<div>
<fieldset class="repeating_magic">
<div class="magic-grid">
<span class="magic-roll"></span>
<span class="magic-memorized">Mem.</span>
<span class="magic-name">Nome</span>
<span class="magic-circle">Círculo</span>
<span class="magic-effect">Efeito</span>
</div>
<div class="magic-grid">
<div class="magic-roll">
<button
type="roll"
name="magicCast"
value="&{template:simple} {{roll=@{character_name} conjura @{magicName}}} {{efeito=[[0+@{magicEffect}]]}} {{efeitoEspelho=@{magicEffect}}} {{descrição=@{magicDescription}}}"
></button>
</div>
<input
type="number"
min="0"
name="attr_magicMemorized"
checked
title="Memorizadas"
value="0"
class="magic-memorized"
/>
<input type="text" name="attr_magicName" class="magic-name" />
<input
type="number"
min="1"
name="attr_magicCircle"
value="1"
class="magic-circle"
/>
<input
type="text"
class="magic-effect"
name="attr_magicEffect"
value=""
/>
</div>
<textarea
type="text"
name="attr_magicDescription"
class="magic-description"
placeholder="Descrição"
/>
</fieldset>
</div>
</div>
<!-- END OF MAGIC SHEET -->
<!-- EQUIPMENT SHEET -->
<div class="sheet-equipment">
<div class="encumbrance">
<label>CARGA (cn)</label>
<div>
<span>Moedas</span>
<input
readonly
min="0"
name="attr_coinEncumbrance"
value="0"
class="encumbrance-input"
/>
</div>
<div>
<span>Total</span>
<input
readonly
min="0"
name="attr_TotalEncumbrance"
value="0"
class="encumbrance-input"
/>
</div>
<div>
<span>Auxiliares</span>
<input
readonly
min="0"
name="attr_retainerEncumbrance"
value="0"
class="encumbrance-input"
/>
</div>
<div>
<span>Montaria</span>
<input
readonly
min="0"
name="attr_mountEncumbrance"
value="0"
class="encumbrance-input"
/>
</div>
<div>
<span>Carroça</span>
<input
readonly
min="0"
name="attr_cartEncumbrance"
value="0"
class="encumbrance-input"
/>
</div>
<div>
<span>Guardado</span>
<input
readonly
min="0"
name="attr_StowedEncumbrance"
value="0"
class="encumbrance-input"
/>
</div>
</div>
<div class="armor">
<div class="equipment-title-and-encumbrance">
<h2>Armadura</h2>
<div class="armor-note">
<label>Para somar melhorias de CA, use * antes do nome do item / efeito</label>
</div>
<label
>cn
<input
readonly
min="0"
name="attr_armorEncumbrance"
value="0"
class="encumbrance-input"
/>
</label>
</div>
<div class="equipment-grid">
<span class="armor-name">Nome</span>
<span class="armor-value">CA</span>
<span class="armor-weight">Peso</span>
<span class="armor-equiped">Equipada?</span>
</div>
<fieldset class="repeating_armor">
<div class="equipment-line">
<input type="text" name="attr_armorName" class="armor-name" />
<input
type="text"
name="attr_armorValue"
value="0"
class="armor-value"
/>
<input
type="number"
min="0"
name="attr_armorWeight"
value="0"
class="armor-weight"
/>
<input
class="armor-equiped"
type="checkbox"
name="attr_armorWorn"
checked
/>
</div>
</fieldset>
</div>
<div class="items">
<div class="equipment-title-and-encumbrance">
<h2>Itens</h2>
<label
>cn
<input
readonly
min="0"
name="attr_ItemsEncumbrance"
value="0"
class="encumbrance-input"
/>
</label>
</div>
<div class="equipment-grid">
<span class="item-quantity">Qtd</span>
<span class="item-name">Nome</span>
<span class="item-description">Descrição</span>
<span class="item-weight">Peso</span>
</div>
<fieldset class="repeating_items">
<div class="equipment-line">
<input
class="item-quantity"
type="number"
min="0"
name="attr_ItemQuantity"
value="1"
/>
<input class="item-name" type="text" name="attr_ItemName" />
<input
class="item-description"
type="text"
name="attr_ItemDescription"
/>
<input
class="item-weight"
type="number"
min="0"
name="attr_ItemWeight"
value="0"
/>
</div>
</fieldset>
</div>
<div class="coins">
<label>
<span>PO</span>
<input
type="number"
min="0"
name="attr_GP"
title="Peças de Ouro"
value="0"
/>
</label>
<label class="inline-flex">
<span>PP</span>
<input
type="number"
min="0"
name="attr_SP"
title="Peças de Prata"
value="0"
/>
</label>
<label class="inline-flex">
<span>PC</span>
<input
type="number"
min="0"
name="attr_CP"
title="Peças de Bronze"
value="0"
/>
</label>
</div>
<div class="retainer-items">
<div class="equipment-title-and-encumbrance">
<h2>Itens com Auxiliares</h2>
<label
>cn
<input
readonly
min="0"
name="attr_retainerEncumbrance"
value="0"
class="encumbrance-input"
/>
</label>
</div>
<div class="equipment-grid">
<span class="item-quantity">Qtd</span>
<span class="item-name">Nome</span>
<span class="item-description">Descrição</span>
<span class="item-weight">Peso</span>
</div>
<fieldset class="repeating_retaineritems">
<div class="equipment-line">
<input
class="item-quantity"
type="number"
min="0"
name="attr_RetainerItemQuantity"
value="1"
/>
<input class="item-name" type="text" name="attr_RetainerItemName" />
<input
class="item-description"
type="text"
name="attr_RetainerItemDescription"
/>
<input
class="item-weight"
type="number"
min="0"
name="attr_RetainerItemWeight"
value="0"
/>
</div>
</fieldset>
</div>
<div class="mount-items">
<div class="equipment-title-and-encumbrance">
<h2>Itens na Montaria</h2>
<label
>cn
<input
readonly
min="0"
name="attr_mountEncumbrance"
value="0"
class="encumbrance-input"
/>
</label>
</div>
<div class="equipment-grid">
<span class="item-quantity">Qtd</span>
<span class="item-name">Nome</span>
<span class="item-description">Descrição</span>
<span class="item-weight">Peso</span>
</div>
<fieldset class="repeating_mountitems">
<div class="equipment-line">
<input
class="item-quantity"
type="number"
min="0"
name="attr_MountItemQuantity"
value="1"
/>
<input class="item-name" type="text" name="attr_MountItemName" />
<input
class="item-description"
type="text"
name="attr_MountItemDescription"
/>
<input
class="item-weight"
type="number"
min="0"
name="attr_MountItemWeight"
value="0"
/>
</div>
</fieldset>
</div>
<div class="cart-items">
<div class="equipment-title-and-encumbrance">
<h2>Itens na Carroça</h2>
<label
>cn
<input
readonly
min="0"
name="attr_cartEncumbrance"
value="0"
class="encumbrance-input"
/>
</label>
</div>
<div class="equipment-grid">
<span class="item-quantity">Qtd</span>
<span class="item-name">Nome</span>
<span class="item-description">Descrição</span>
<span class="item-weight">Peso</span>
</div>
<fieldset class="repeating_cartitems">
<div class="equipment-line">
<input
class="item-quantity"
type="number"
min="0"
name="attr_CartItemQuantity"
value="1"
/>
<input class="item-name" type="text" name="attr_CartItemName" />
<input
class="item-description"
type="text"
name="attr_CartItemDescription"
/>
<input
class="item-weight"
type="number"
min="0"
name="attr_CartItemWeight"
value="0"
/>
</div>
</fieldset>
</div>
<div class="stowed-items">
<div class="equipment-title-and-encumbrance">
<h2>Itens Guardados</h2>
<label
>cn
<input
readonly
min="0"
name="attr_stowedEncumbrance"
value="0"
class="encumbrance-input"
/>
</label>
</div>
<div class="equipment-grid">
<span class="item-quantity">Qtd</span>
<span class="item-name">Nome</span>
<span class="item-description">Descrição</span>
<span class="item-weight">Peso</span>
</div>
<fieldset class="repeating_stoweditems">
<div class="equipment-line">
<input
class="item-quantity"
type="number"
min="0"
name="attr_StowedItemQuantity"
value="1"
/>
<input class="item-name" type="text" name="attr_StowedItemName" />
<input
class="item-description"
type="text"
name="attr_StowedItemDescription"
/>
<input
class="item-weight"
type="number"
min="0"
name="attr_StowedItemWeight"
value="0"
/>
</div>
</fieldset>
</div>
</div>
<!-- END OF EQUIPMENT SHEET -->
<!-- RETAINERS SHEET -->
<div class="sheet-retainers">
<fieldset class="repeating_retainer">
<div id="retainer">
<div id="retainers-header-wrapper">
<div class="retainers-header">
<input
id="retainer-name"
type="text"
name="attr_retainerName"
placeholder="Nome"
/>
<input
id="retainer-profession"
type="text"
min="0"
name="attr_retainerProfession"
placeholder="Ofício"
/>
<select id="retainer-kind" name="attr_retainerKind">
<option value="follower" selected>Auxiliar</option>
<option value="hireling">Profissional</option>
<option value="mount">Montaria</option>
<option value="animal">Animal</option>
</select>
<select id="retainer-loyalty" name="attr_retainerLoyalty">
<option value="loyal">Leal</option>
<option value="notLoyal" selected>Não Leal</option>
</select>
</div>
<div id="retainers-header-filler"></div>
</div>
<div class="retainers-info">
<div class="retainers-hd-moral-thac0-and-saves">
<div class="retainers-hd-moral-and-thac0">
<div>
<span>DV</span>
<input
type="number"
min="0"
name="attr_retainerHD"
placeholder="0"
/>
</div>
<div class="retainers-hd-and-moral">
<button
type="roll"
value="&{template:default}{{name=Rolagem de Moral de @{retainerName}}}{{resultado MAIOR que Moral da criatura, ela foge/se rende = Resultado MENOR OU IGUAL a Moral da criatura, ela se mantém lutando}} {{Moral=@{retainerMoral}}} {{Resultado=[[2D6]]}}"
>
ML
</button>
<input
type="number"
min="0"
name="attr_retainerMoral"
placeholder="0"
/>
</div>
<div class="retainers-hd-and-moral">
<span>Taco/BA</span>
<input
type="number"
min="0"
name="attr_retainerTaco"
placeholder="0"
/>
</div>
</div>
<div class="retainer-saves">
<button
type="roll"
value="&{template:default}{{name=Rolagem de salvaguarda de @{retainerName}}}{{Resultado=[[1D20]]}}"
>
Salvaguardas
</button>
<input
hidden
id="retainer-name"
type="text"
name="attr_retainerName"
placeholder="Nome"
/>
<div>
<span> M </span>
<input
type="number"
min="0"
name="attr_retainerDeathSave"
placeholder="0"
/>
</div>
<div>
<span> C </span>
<input
type="number"
min="0"
name="attr_retainerContactSave"
placeholder="0"
/>
</div>
<div>
<span> P </span>
<input
type="number"
min="0"
name="attr_retainerParalysisSave"
placeholder="0"
/>
</div>
<div>
<span> I </span>
<input
type="number"
min="0"
name="attr_retainerIrruptionSave"
placeholder="0"
/>
</div>
<div>
<span> F </span>
<input
type="number"
min="0"
name="attr_retainerSpellSave"
placeholder="0"
/>
</div>
</div>
</div>
<label class="retainer-training-and-description">
<span>Treinamento</span>
<input type="text" name="attr_retainerTraining" />
</label>
<label class="retainer-training-and-description">
<span>Descrição</span>
<input type="text" name="attr_retainerDescription" />
</label>
</div>
</div>
</fieldset>
</div>
<!-- END OF RETAINERS SHEET -->
<!-- NOTES SHEET -->
<div class="sheet-notes">
<textarea name="attr_notes" class="notes"></textarea>
</div>
<!-- END OF NOTES SHEET -->
<!-- ROLLTEMPLATES -->
<rolltemplate class="sheet-rolltemplate-simple">
<table>
<caption>
{{roll}}
</caption>
<tbody>
{{#efeitoEspelho}}
<tr>
<td>Efeito</td>
<td>{{efeito}}</td>
</tr>
{{/efeitoEspelho}}
{{#allprops() descendingArmorClass roll efeito efeitoEspelho descrição attackMatrix9 attackMatrix8 attackMatrix7 attackMatrix6 attackMatrix5 attackMatrix4 attackMatrix3 attackMatrix2 attackMatrix1 attackMatrix0}}
<tr>
<td>{{key}}</td>
<td>{{value}}</td>
</tr>
{{/allprops() descendingArmorClass roll efeito efeitoEspelho descrição attackMatrix9 attackMatrix8 attackMatrix7 attackMatrix6 attackMatrix5 attackMatrix4 attackMatrix3 attackMatrix2 attackMatrix1 attackMatrix0}}
{{#descrição}}
<tr>
<td>Descrição</td>
<td>{{descrição}}</td>
</tr>
{{/descrição}}
</tbody>
</table>
<div class="sheet-template-background">
{{#descendingArmorClass}}
<div class="sheet-template-tac0-line"><span>Tac0</span></div>
<div class="sheet-template-grid">
<div class="sheet-grid-headers">
<span>0</span>
<span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
<span>6</span>
<span>7</span>
<span>8</span>
<span>9</span>
</div>
<div class="sheet-grid-values">
<span>{{attackMatrix0}}</span>
<span>{{attackMatrix1}}</span>
<span>{{attackMatrix2}}</span>
<span>{{attackMatrix3}}</span>
<span>{{attackMatrix4}}</span>
<span>{{attackMatrix5}}</span>
<span>{{attackMatrix6}}</span>
<span>{{attackMatrix7}}</span>
<span>{{attackMatrix8}}</span>
<span>{{attackMatrix9}}</span>
</div>
</div>
{{/descendingArmorClass}}
</div>
</rolltemplate>
<!-- END OF ROLLTEMPLATES -->
<!-- SCRIPTS -->
<script type="text/worker">
// Tabs
const buttonlist = ["character", "magic", "equipment", "retainers", "notes"];
buttonlist.forEach((button) => {
on(`clicked:${button}`, function (event) {
setAttrs({ sheetTab: button });
});
});
const repeatingSum = (
destination,
section,
fields,
{ multiplier = 1, callback = Function.prototype }
) => {
if (!Array.isArray(fields)) fields = [fields];
getSectionIDs(`repeating_${section}`, (idArray) => {
const attrArray = idArray.reduce(
(m, id) => [
...m,
...fields.map((field) => `repeating_${section}_${id}_${field}`),
],
[]
);
getAttrs(attrArray, (v) => {
// getValue: if not a number, returns 1 if it is 'on' (checkbox), otherwise returns 0..
const getValue = (section, id, field) =>
parseFloat(v[`repeating_${section}_${id}_${field}`]) ||
(v[`repeating_${section}_${id}_${field}`] === "on" ? 1 : 0);
const sumTotal = idArray.reduce(
(total, id) =>
total +
fields.reduce(
(subtotal, field) => subtotal * getValue(section, id, field),
1
),
0
);
setAttrs({ [destination]: sumTotal * multiplier }, callback);
});
});
};
function getModifiers(value, modifiers = [-3, -2, -1, 0, 1, 2, 3]) {
if (value <= 3) {
return modifiers[0];
} else if (value >= 4 && value <= 5) {
return modifiers[1];
} else if (value >= 6 && value <= 8) {
return modifiers[2];
} else if (value >= 9 && value <= 12) {
return modifiers[3];
} else if (value >= 13 && value <= 15) {
return modifiers[4];
} else if (value >= 16 && value <= 17) {
return modifiers[5];
} else {
return modifiers[6];
}
}
on("sheet:opened change:str", function () {
getAttrs(["str"], function (values) {
const strMod = getModifiers(values.str);
let maskedStrMod = strMod;
if (strMod > 0) maskedStrMod = `+${strMod}`;
maskedStrMod = `(${maskedStrMod})`
setAttrs({ strMod, maskedStrMod });
});
});
on("sheet:opened change:int", function () {
getAttrs(["int"], function (values) {
const intMod = getModifiers(values.int);
let maskedIntMod = intMod;
if (intMod > 0) maskedIntMod = `+${intMod}`;
maskedIntMod = `(${maskedIntMod})`
setAttrs({ intMod, maskedIntMod });
});
});
on("sheet:opened change:wis", function () {
getAttrs(["wis"], function (values) {
const wisMod = getModifiers(values.wis);
let maskedWisMod = wisMod;
if (wisMod > 0) maskedWisMod = `+${wisMod}`;
maskedWisMod = `(${maskedWisMod})`
setAttrs({ wisMod, maskedWisMod });
});
});
on("sheet:opened change:dex", function () {
getAttrs(["dex"], function (values) {
const dexMod = getModifiers(values.dex);
let maskedDexMod = dexMod;
if (dexMod > 0) maskedDexMod = `+${dexMod}`;
maskedDexMod = `(${maskedDexMod})`
setAttrs({ dexMod, maskedDexMod });
});
});
on("sheet:opened change:con", function () {
getAttrs(["con"], function (values) {
const conMod = getModifiers(values.con);
let maskedConMod = conMod;
if (conMod > 0) maskedConMod = `+${conMod}`;
maskedConMod = `(${maskedConMod})`
setAttrs({ conMod, maskedConMod });
});
});
on("sheet:opened change:cha", function () {
getAttrs(["cha"], function (values) {
const chaMod = getModifiers(values.cha);
let maskedChaMod = chaMod;
if (chaMod > 0) maskedChaMod = `+${chaMod}`;
maskedChaMod = `(${maskedChaMod})`
setAttrs({ chaMod, maskedChaMod });
});
});
on("sheet:opened change:armorClassType change:ba", function () {
getAttrs(["armorClassType", "ba"], function (values) {
const armorClassType = values.armorClassType;
const ba = parseInt(values.ba) || 0;
const dAC = 0;
let attackBonus = 0; // Valor padrão para attackBonus
// Define attackBonus com base no valor de armorClassType
if (armorClassType === "aac") {
attackBonus = ba;
} else if (armorClassType === "dac") {
attackBonus = 0;
}
// Atualiza o atributo attackBonus
setAttrs({
attackBonus: attackBonus
});
});
});
on("sheet:opened change:repeating_weapons:attackType change:strMod", function () {
getSectionIDs("repeating_weapons", function (idArray) {
idArray.forEach(function (id) {
const attributes = [`repeating_weapons_${id}_attackType`, "strMod"];
getAttrs(attributes, function (values) {
const attackType = values[`repeating_weapons_${id}_attackType`] || "";
const strMod = parseInt(values.strMod) || 0; // Global strMod
let bonusDamage = 0;
if (attackType.toLowerCase() === "melee") {
bonusDamage = strMod;
} else if (attackType.toLowerCase() === "ranged") {
bonusDamage = 0;
}
console.log(`Repeating weapon update - ID: ${id}, attackType: ${attackType}, bonusDamage: ${bonusDamage}`);
setAttrs({
[`repeating_weapons_${id}_bonusDamage`]: bonusDamage
});
});
});
});
});
// Atualizar weaponEncumbrance com a soma de todos os weaponWeight em repeating_weapons
on("change:repeating_weapons:weaponWeight remove:repeating_weapons", function () {
getSectionIDs("repeating_weapons", function (ids) {
let totalWeight = 0;
// Iterar por todos os IDs da seção repeating_weapons
ids.forEach(id => {
getAttrs([`repeating_weapons_${id}_weaponWeight`], function (values) {
const weight = parseInt(values[`repeating_weapons_${id}_weaponWeight`]) || 0;
// Adiciona o peso ao total
totalWeight += weight;
// Atualizar o campo weaponEncumbrance com a soma
setAttrs({ weaponEncumbrance: totalWeight });
});
});
// Caso não haja armas, zera o total
if (ids.length === 0) {
setAttrs({ weaponEncumbrance: 0 });
}
});
});
// Atualizar attr_coinEncumbrance quando os campos GP, SP ou CP mudarem
on("sheet:opened change:GP change:SP change:CP", function () {
getAttrs(["GP", "SP", "CP"], function (values) {
const gp = parseInt(values.GP);
const sp = parseInt(values.SP);
const cp = parseInt(values.CP);
// Soma os valores
const total = gp + sp + cp;
// Atualiza o campo attr_coinEncumbrance
setAttrs({ coinEncumbrance: total });
});
});
// Função genérica para calcular encumbrance
function calculateEncumbrance(fieldsetName, weightField, quantityField, totalField) {
on(`change:repeating_${fieldsetName}:${weightField} change:repeating_${fieldsetName}:${quantityField} remove:repeating_${fieldsetName}`, function () {
getSectionIDs(`repeating_${fieldsetName}`, function (ids) {
let totalWeight = 0;
ids.forEach(id => {
getAttrs([`repeating_${fieldsetName}_${id}_${weightField}`, `repeating_${fieldsetName}_${id}_${quantityField}`], function (values) {
const weight = parseInt(values[`repeating_${fieldsetName}_${id}_${weightField}`]) || 0;
const quantity = parseInt(values[`repeating_${fieldsetName}_${id}_${quantityField}`]) || 0;
totalWeight += weight * quantity;
setAttrs({ [totalField]: totalWeight });
});
});
if (ids.length === 0) {
setAttrs({ [totalField]: 0 });
}
});
});
}
// Chamadas para cada categoria
calculateEncumbrance("items", "ItemWeight", "ItemQuantity", "ItemsEncumbrance");
calculateEncumbrance("retaineritems", "RetainerItemWeight", "RetainerItemQuantity", "retainerEncumbrance");
calculateEncumbrance("mountitems", "MountItemWeight", "MountItemQuantity", "mountEncumbrance");
calculateEncumbrance("cartitems", "CartItemWeight", "CartItemQuantity", "cartEncumbrance");
calculateEncumbrance("stoweditems", "StowedItemWeight", "StowedItemQuantity", "stowedEncumbrance");
// Atualizar TotalEncumbrance com a soma de coinEncumbrance, ItemsEncumbrance, armorEncumbrance e weaponEncumbrance
on("change:coinEncumbrance change:ItemsEncumbrance change:armorEncumbrance change:weaponEncumbrance", function () {
// Obter os valores dos campos relevantes
getAttrs(["coinEncumbrance", "ItemsEncumbrance", "armorEncumbrance", "weaponEncumbrance"], function (values) {
const coin = parseInt(values.coinEncumbrance) || 0;
const items = parseInt(values.ItemsEncumbrance) || 0;
const armor = parseInt(values.armorEncumbrance) || 0;
const weapons = parseInt(values.weaponEncumbrance) || 0;
// Soma os valores
const total = coin + items + armor + weapons;
// Atualiza o campo TotalEncumbrance
setAttrs({ TotalEncumbrance: total });
});
});
on("sheet:opened change:thac0", function () {
getAttrs(["thac0"], function (values) {
const thac0 = parseInt(values.thac0) || 0;
const updates = {};
for (let i = 0; i <= 9; i++) {
updates[`attackMatrix${i}`] = thac0 - i;
}
setAttrs(updates);
});
});
// Atualizar armorEncumbrance com a soma de todos os armorWeight em repeating_armor
on("change:repeating_armor:armorWeight remove:repeating_armor", function () {
// Obter todos os valores de armorWeight
getSectionIDs("repeating_armor", function (ids) {
let totalWeight = 0;
// Iterar por todos os IDs da seção repeating_armor
ids.forEach(id => {
getAttrs([`repeating_armor_${id}_armorWeight`], function (values) {
const weight = parseInt(values[`repeating_armor_${id}_armorWeight`]) || 0;
totalWeight += weight;
// Atualizar o campo armorEncumbrance quando a soma estiver completa
setAttrs({ armorEncumbrance: totalWeight });
});
});
// Atualizar imediatamente o campo para o caso de não haver valores
if (ids.length === 0) {
setAttrs({ armorEncumbrance: 0 });
}
});
});
on("sheet:opened change:armorClassType change:repeating_armor:armorValue change:repeating_armor:armorWorn change:repeating_armor:armorName remove:repeating_armor", function () {
getAttrs(["armorClassType"], function (values) {
const armorClassType = values.armorClassType || "aac";
getSectionIDs("repeating_armor", function (ids) {
if (ids.length === 0) {
setAttrs({ ac: armorClassType === "aac" ? 10 : 9 });
return;
}
let totalModifier = 0;
let acBase = armorClassType === "aac" ? -Infinity : Infinity;
const attributesToGet = ids.reduce((acc, id) => {
acc.push(
`repeating_armor_${id}_armorValue`,
`repeating_armor_${id}_armorWorn`,
`repeating_armor_${id}_armorName`
);
return acc;
}, []);
getAttrs(attributesToGet, function (itemValues) {
ids.forEach((id) => {
const worn = itemValues[`repeating_armor_${id}_armorWorn`] === "on";
const name = itemValues[`repeating_armor_${id}_armorName`] || "";
const value = parseInt(itemValues[`repeating_armor_${id}_armorValue`]) || 0;
if (!worn) return;
const isModifier = name.trim().startsWith("*");
if (!isModifier) {
if (armorClassType === "aac" && value > acBase) {
acBase = value;
} else if (armorClassType === "dac" && value < acBase) {
acBase = value;
}
}
if (isModifier) {
totalModifier += value;
}
});
if (acBase === -Infinity || acBase === Infinity) {
acBase = armorClassType === "aac" ? 10 : 9;
}
const ac = armorClassType === "aac"
? acBase + totalModifier
: acBase - totalModifier;
setAttrs({ ac });
});
});
});
});
on("sheet:opened change:armorClassType", function () {
getAttrs(["armorClassType"], function (values) {
const armorClassType = values.armorClassType;
let newDescendingArmorClass;
if (armorClassType === "aac") {
newDescendingArmorClass = "";
} else if (armorClassType === "dac") {
newDescendingArmorClass = "1";
} else {
newDescendingArmorClass = "";
}
setAttrs({
descendingArmorClass: newDescendingArmorClass
});
});
});
</script>
<!-- END OF SCRIPTS -->