Files
roll20-character-sheets-tester/Five Torches Deep (FR version)/FTD_HTML.html
T

1356 lines
75 KiB
HTML

<input class="type" name="attr_sheet_type" type="hidden" value="pc">
<input class="display_string" name="attr_character_settings" type="hidden" value="pc">
<button name="act_toggle_pc" title="player character button" type="action">PC</button>
<button name="act_toggle_npc" title="non player character button" type="action">NPC</button>
<button name="act_toggle_config" title="config button" type="action" style="font-family: Pictos">y</button>
<input type="hidden" name="attr_weapon_buttons" value="0">
<input type="hidden" name="attr_npc_tec" value="0">
<button type="roll" class="pc" name="roll_minisheet" title="%{selected or character's name|minisheet}" value="/w @{character_name} &{template:minisheet} {{name=@{character_name}}} {{value1=@{pc_hp}}} {{value1_max=@{pc_hp|max}}} {{value2=@{pc_ac}}} {{value3=@{pc_res}}} {{value3_max=@{pc_res|max}}} {{value4=@{pc_sup}}} {{value4_max=@{pc_sup|max}}} {{buttons_name=@{attrmacro}}} {{buttons=@{attrbuttonmacro}}} {{buttons2_name=@{wepmacro}}} {{buttons2=@{weapon_buttons}}} {{buttons3_name=@{magmacro}}} {{buttons3=@{magbuttonmacro}}} {{buttons4_name=@{sensmacro}}} {{buttons4=@{sensbuttonmacro}}}" style="font-family: Pictos; font-size: 20px; position: absolute; top: 70px; left: 815px;">N</button>
<button type="roll" class="npc" name="roll_npc_minisheet" title="%{selected or character's name|npc_minisheet}" value="/w @{character_name} &{template:npcminisheet} {{name=@{character_name}}} {{value1=@{npc_hp}}} {{value1_max=@{npc_hp|max}}} {{value2=@{npc_ac}}} {{buttons_name=@{standardmacro}}} {{buttons=@{standardbuttonmacro}}} {{buttons2_name=@{strongmacro}}} {{buttons2=@{strongbuttonmacro}}} {{buttons3_name=@{weakmacro}}} {{buttons3=@{weakbuttonmacro}}} {{buttons4_name=Techniques}} {{buttons4=@{npc_tec}}}" style="font-family: Pictos; font-size: 20px; position: absolute; top: 70px; left: 815px;">N</button>
<!-- PC
============================= -->
<div class="pc">
<input type="checkbox" name="attr_config_bw" value="1" class="sheet-block-switch sheet-block-switch-ghost">
<input type="checkbox" name="attr_config_blue" value="1" class="sheet-block-switch3 sheet-block-switch-ghost">
<input type="checkbox" name="attr_config_red" value="1" class="sheet-block-switch4 sheet-block-switch-ghost">
<input type="checkbox" name="attr_config_grey" value="1" class="sheet-block-switch2 sheet-block-switch-ghost">
<div class="container_pc1 bw">
<div class="pc_firstline">
<h2 data-i18n="name">Nom</h2>
<input type="text" name="attr_character_name" placeholder="nom" style="height: 75%; margin-right: 3px;">
<h2 style="margin-right:3px" data-i18n="level">Niveau</h2>
<select name="attr_pc_lvl" type="number" style="margin-right: 3px;">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
</select>
<h2 data-i18n="xp">XP</h2>
<input type="text" name="attr_pc_xp" style="height: 75%; margin-right: 3px; width: 70px">
<h2 style="margin-right:3px" data-i18n="race">Race</h2>
<input type="text" name="attr_pc_race" style="height: 75%; margin-right: 3px;">
</div>
<div class="pc_secondline">
<h2 style="margin-right: 3px;" data-i18n="class">Classe</h2>
<input type="checkbox" name="attr_config_custom_class" value="1" class="sheet-block-switch-class sheet-block-switch-ghost">
<input type="text" name="attr_pc_class_custom" class="class_custom" style="height: 75%; margin-right: 3px;">
<select name="attr_pc_class" type="text" style="margin-right: 3px; width: 150px" class="class_base">
<option value="Guerrier" data-i18n="warrior">Guerrier</option>
<option value="Voleur" data-i18n="thief">Voleur</option>
<option value="Zélote" data-i18n="zealot">Zélote</option>
<option value="Mage" data-i18n="mage">Mage</option>
<option value="ElfParangon" data-i18n="elf-parangon">Elf Parangon</option>
<option value="DwarfParangon" data-i18n="dwarf-parangon">Dwarf Parangon</option>
<option value="HalflingParangon" data-i18n="halfling-parangon">Halfling Parangon</option>
</select>
<h2 style="margin-right: 3px;" data-i18n="archetype">Archétype</h2>
<input type="checkbox" name="attr_config_custom_archetype" value="1" class="sheet-block-switch-archetype sheet-block-switch-ghost">
<input type="text" name="attr_pc_archetype_custom" class="archetype_custom" style="height: 75%; margin-right: 3px;">
<div class="archetype_base">
<input type="radio" name="attr_select-chooser" class="select-chooser" value="1">
<select name="attr_pc_arch" class="archetype" style="margin-right: 3px; width: 150px">
<option value="none"></option>
<option value="Barbare" data-i18n="barbarian">Barbare</option>
<option value="Combattant" data-i18n="fighter">Combattant</option>
<option value="Rôdeur" data-i18n="ranger">Rôdeur</option>
</select>
<input type="radio" name="attr_select-chooser" class="select-chooser" value="2">
<select name="attr_pc_arch" class="archetype" style="margin-right: 3px; width: 150px">
<option value="none"></option>
<option value="Assassin" data-i18n="assassin">Assassin</option>
<option value="Barde" data-i18n="bard">Barde</option>
<option value="Gredin" data-i18n="rogue">Gredin</option>
</select>
<input type="radio" name="attr_select-chooser" class="sheet-select-chooser" value="3">
<select name="attr_pc_arch" class="archetype" style="margin-right: 3px; width: 150px">
<option value="none"></option>
<option value="Prêtre" data-i18n="priest">Prêtre</option>
<option value="Druide" data-i18n="druid">Druide</option>
<option value="Paladin" data-i18n="paladin">Paladin</option>
</select>
<input type="radio" name="attr_select-chooser" class="sheet-select-chooser" value="4">
<select name="attr_pc_arch" class="archetype" style="margin-right: 3px; width: 150px">
<option value="none"></option>
<option value="Ensorceleur" data-i18n="sorcerer">Encorceleur</option>
<option value="Sorcier" data-i18n="warlock">Sorcier</option>
<option value="Magicien" data-i18n="wizard">Magicien</option>
</select>
<input type="radio" name="attr_select-chooser" class="sheet-select-chooser" value="5">
<select name="attr_pc_arch" class="archetype" style="margin-right: 3px; width: 150px">
<option value="none"></option>
<option value="ElfÉclaireur" data-i18n="elfscout">Elf Éclaireur</option>
<option value="ElfCharmépée" data-i18n="elfspellsword">Elf Charmépée</option>
<option value="ElfArcaniste" data-i18n="elfarcanist">Elf Arcaniste</option>
</select>
<input type="radio" name="attr_select-chooser" class="sheet-select-chooser" value="6">
<select name="attr_pc_arch" class="archetype" style="margin-right: 3px; width: 150px">
<option value="none"></option>
<option value="DwarfCommandant" data-i18n="dwarfcommander">Dwarf Commandant</option>
<option value="DwarfDelver" data-i18n="dwarfdelver">Dwarf Delver</option>
<option value="DwarfMurdePierre" data-i18n="dwarfstonewall">Dwarf Mur de Pierre</option>
</select>
<input type="radio" name="attr_select-chooser" class="sheet-select-chooser" value="7">
<select name="attr_pc_arch" class="archetype" style="margin-right: 3px; width: 150px">
<option value="none"></option>
<option value="HalflingCambrioleur" data-i18n="halflingburglar">Halfling Cambrioleur</option>
<option value="HalflingMascotte" data-i18n="halflingmascot">Halfling Mascotte</option>
<option value="HalflingLanceur" data-i18n="halflingchucker">Halfling Lanceur</option>
</select>
</div>
<h2 style="margin-right: 10px;" data-i18n="proficiency bonus">Bonus de maîtrise</h2>
<h2><span type="text" name="attr_pc_proficiency" title="@{pc_proficiency}" value="+2"></span></h2>
</div>
<div class="attributes">
<input name="attr_pc_strength_prof" type="checkbox" value="1" style="float: right"><span style="position: absolute; left: 124px;"></span>
<button name="roll_strength" type="roll" value="@{togm} &{template:ftdroll} {{name=@{character_name}}} {{test_name=Test de Force}} {{always=[[@{config_advantage}]]}} {{r1=[[1d20+@{pc_strengthMod}+?{@{profmacro}|@{yesmacro},@{pc_proficiency}|@{nomacro},0}]]}} {{r2=[[1d20+@{pc_strengthMod}+?{@{profmacro}|@{yesmacro},@{pc_proficiency}|@{nomacro},0}]]}}">
<h3 style="width: 80px;" data-i18n="str">FOR</h3>
<h2><span type="number" name="attr_pc_strengthMod" title="@{pc_strengthMod}"></span></h2>
</button>
</div>
<div class="attributes">
<input name="attr_pc_dexterity_prof" type="checkbox" style="float: right;" value="1"><span style="top: 184px; position: absolute; left: 254px;"></span>
<button name="roll_dexterity" type="roll" value="@{togm} &{template:ftdroll} {{name=@{character_name}}} {{test_name=Test de Dextérité}} {{always=[[@{config_advantage}]]}} {{r1=[[1d20+@{pc_dexterityMod}+?{@{profmacro}|@{yesmacro},@{pc_proficiency}|@{nomacro},0}]]}} {{r2=[[1d20+@{pc_dexterityMod}+?{@{profmacro}|@{yesmacro},@{pc_proficiency}|@{nomacro},0}]]}}">
<h3 style="width: 80px;" data-i18n="dex">DEX</h3>
<h2><span type="number" name="attr_pc_dexterityMod" title="@{pc_dexterityMod}"></span></h2>
</button>
</div>
<div class="attributes">
<input name="attr_pc_constitution_prof" type="checkbox" style="float: right;" value="1"><span style="top: 184px; position: absolute; left: 384px;"></span>
<button name="roll_constitution" type="roll" value="@{togm} &{template:ftdroll} {{name=@{character_name}}} {{test_name=Test de Constitution}} {{always=[[@{config_advantage}]]}} {{r1=[[1d20+@{pc_constitutionMod}+?{@{profmacro}|@{yesmacro},@{pc_proficiency}|@{nomacro},0}]]}} {{r2=[[1d20+@{pc_constitutionMod}+?{@{profmacro}|@{yesmacro},@{pc_proficiency}|@{nomacro},0}]]}}">
<h3 style="width: 80px;" data-i18n="con">CON</h3>
<h2><span type="number" name="attr_pc_constitutionMod" title="@{pc_constitutionMod}"></span></h2>
</button>
</div>
<div class="attributes">
<input name="attr_pc_intelligence_prof" type="checkbox" style="float: right;" value="1"><span style="top: 184px; position: absolute; left: 514px;"></span>
<button name="roll_intelligence" type="roll" value="@{togm} &{template:ftdroll} {{name=@{character_name}}} {{test_name=Test d'Intelligence}} {{always=[[@{config_advantage}]]}} {{r1=[[1d20+@{pc_intelligenceMod}+?{@{profmacro}|@{yesmacro},@{pc_proficiency}|@{nomacro},0}]]}} {{r2=[[1d20+@{pc_intelligenceMod}+?{@{profmacro}|@{yesmacro},@{pc_proficiency}|@{nomacro},0}]]}}">
<h3 style="width: 80px;" data-i18n="int">INT</h3>
<h2><span type="number" name="attr_pc_intelligenceMod" title="@{pc_intelligenceMod}"></span></h2>
</button>
</div>
<div class="attributes">
<input name="attr_pc_wisdom_prof" type="checkbox" style="float: right;" value="1"><span style="top: 184px; position: absolute; left: 644px;"></span>
<button name="roll_wisdom" type="roll" value="@{togm} &{template:ftdroll} {{name=@{character_name}}} {{test_name=Test de Sagesse}} {{always=[[@{config_advantage}]]}} {{r1=[[1d20+@{pc_wisdomMod}+?{@{profmacro}|@{yesmacro},@{pc_proficiency}|@{nomacro},0}]]}} {{r2=[[1d20+@{pc_wisdomMod}+?{@{profmacro}|@{yesmacro},@{pc_proficiency}|@{nomacro},0}]]}}">
<h3 style="width: 80px;" data-i18n="wis">SAG</h3>
<h2><span type="number" name="attr_pc_wisdomMod" title="@{pc_wisdomMod}"></span></h2>
</button>
</div>
<div class="attributes">
<input name="attr_pc_charisma_prof" type="checkbox" style="float: right;" value="1"><span style="top: 184px; position: absolute; left: 774px;"></span>
<button name="roll_charisma" type="roll" value="@{togm} &{template:ftdroll} {{name=@{character_name}}} {{test_name=Test de Charisme}} {{always=[[@{config_advantage}]]}} {{r1=[[1d20+@{pc_charismaMod}+?{@{profmacro}|@{yesmacro},@{pc_proficiency}|@{nomacro},0}]]}} {{r2=[[1d20+@{pc_charismaMod}+?{@{profmacro}|@{yesmacro},@{pc_proficiency}|@{nomacro},0}]]}}">
<h3 style="width: 80px;" data-i18n="cha">CHA</h3>
<h2><span type="number" name="attr_pc_charismaMod" title="@{pc_charismaMod}"></span></h2>
</button>
</div>
<div class="attributes2">
<input type="number" name="attr_pc_strength" title="@{pc_strength}" placeholder="10"> <span class="slash">/</span> <input type="number" name="attr_pc_strength_max" title="@{pc_strength_max}" placeholder="10">
</div>
<div class="attributes2">
<input type="number" name="attr_pc_dexterity" title="@{pc_dexterity}" placeholder="10"> <span class="slash">/</span> <input type="number" name="attr_pc_dexterity_max" title="@{pc_dexterity_max}" placeholder="10">
</div>
<div class="attributes2">
<input type="number" name="attr_pc_constitution" title="@{pc_constitution}" placeholder="10"> <span class="slash">/</span> <input type="number" name="attr_pc_constitution_max" title="@{pc_constitution_max}" placeholder="10">
</div>
<div class="attributes2">
<input type="number" name="attr_pc_intelligence" title="@{pc_intelligence}" placeholder="10"> <span class="slash">/</span> <input type="number" name="attr_pc_intelligence_max" title="@{pc_intelligence_max}" placeholder="10">
</div>
<div class="attributes2">
<input type="number" name="attr_pc_wisdom" title="@{pc_wisdom}" placeholder="10"> <span class="slash">/</span> <input type="number" name="attr_pc_wisdom_max" title="@{pc_wisdom_max}" placeholder="10">
</div>
<div class="attributes2">
<input type="number" name="attr_pc_charisma" title="@{pc_charisma}" placeholder="10"> <span class="slash">/</span> <input type="number" name="attr_pc_charisma_max" title="@{pc_charisma_max}" placeholder="10">
</div>
<div class="speed1 attributes">
<h2 data-i18n="speed">Vitesse</h2>
</div>
<div class="speed2 attributes">
<input type="number" name="attr_pc_speed" step="0.5"> <span name="attr_config_unit" style="font-weight: bold;"></span> <span class="slash"></span>
</div>
<div class="load1 attributes">
<h2 data-i18n="load">Charge</h2>
</div>
<div class="load2 attributes">
<input type="number" name="attr_pc_load"> <span class="slash">/</span> <input type="number" name="attr_pc_load_max"> <input type="hidden" name="attr_pc_load1">
</div>
<div class="initiative1 attributes" style="margin-top: 5px;">
<button name="roll_initiative" type="roll" value="@{togm} &{template:ftdroll} {{name=@{character_name}}} {{test_name=initiative}} {{r1=[[@{pc_dexterity} &{tracker}]]}}">
<h3 style="width: 80px; font-size: 16px;" data-i18n="initiative">Initiative</h3>
<h2><span type="number" name="attr_pc_dexterity" title="@{pc_dexterity}"></span></h2>
</button>
</div>
<div class="ac1 attributes">
<h2 data-i18n="ac">CA</h2>
</div>
<div class="ac2 attributes">
<span style="top: 342px; position: absolute; left: 183px; font-weight: bold; font-size: 10px;">HVY</span>
<input name="attr_pc_ac_type" type="radio" value="15" style="top: 367px; position: absolute; left: 200px;"><span style="top: 352px; position: absolute; left: 190px;"></span>
<span style="top: 372px; position: absolute; left: 186px; font-weight: bold; font-size: 10px;">LT</span>
<input name="attr_pc_ac_type" type="radio" value="12" style="top: 396px; position: absolute; left: 200px;"><span style="top: 381px; position: absolute; left: 190px;"></span>
<span style="top: 342px; position: absolute; left: 260px; font-weight: bold; font-size: 10px;">SHLD</span>
<input name="attr_pc_ac_shield" type="checkbox" value="1" style="top: 367px; position: absolute; left: 267px;"><span style="top: 352px; position: absolute; left: 257px;"></span>
<span style="top: 372px; position: absolute; left: 265px; font-weight: bold; font-size: 10px;">NO</span>
<input name="attr_pc_ac_type" type="radio" value="10" style="top: 396px; position: absolute; left: 267px;" checked="true"><span style="top: 381px; position: absolute; left: 257px;"></span>
<input type="number" name="attr_pc_ac" style="font-size: 24px; border-bottom: 1px solid white;">
</div>
<div class="hp1 attributes">
<h2 data-i18n="hp">PdV</h2>
</div>
<div class="hp2 attributes">
<input type="number" name="attr_pc_hp"> <span class="slash">/</span> <input type="number" name="attr_pc_hp_max">
</div>
<div class="res1 attributes">
<h2 data-i18n="resilience">Résistance</h2>
</div>
<div class="res2 attributes">
<input type="number" name="attr_pc_res"> <span class="slash">/</span> <input type="number" name="attr_pc_res_max">
</div>
<div class="sup1 attributes">
<h2 data-i18n="supply">Ressources</h2>
</div>
<div class="sup2 attributes">
<input type="number" name="attr_pc_sup"> <span class="slash">/</span> <input type="number" name="attr_pc_sup_max">
</div>
<div class="arcane1 attributes" style="margin-top: 5px;">
<input name="attr_arcane_roll_value" type="hidden">
<button name="roll_arcana" type="roll" value="@{arcane_roll_value}">
<h3 style="width: 80px;" data-i18n="arcane">Arcane</h3>
<h2><span type="number" name="attr_pc_arcane" title="@{pc_arcane}"></span></h2>
</button>
</div>
<div class="perception1 attributes" style="margin-top: 5px;">
<button name="roll_perception" type="roll" value="@{togm} &{template:ftdroll} {{name=@{character_name}}} {{test_name=Test de Perception}} {{always=[[@{config_advantage}]]}} {{r1=[[1d20+@{pc_perception}]]}} {{r2=[[1d20+@{pc_perception}]]}}">
<h3 style="width: 80px; font-size: 16px;" data-i18n="perception">Perception</h3>
<h2><span type="number" name="attr_pc_perception" title="@{pc_perception}"></span></h2>
</button>
</div>
<div class="divine1 attributes" style="margin-top: 5px;">
<input name="attr_divine_roll_value" type="hidden">
<button name="roll_divine" type="roll" value="@{divine_roll_value}">
<h3 style="width: 80px;" data-i18n="divine">Divin</h3>
<h2><span type="number" name="attr_pc_divine" title="@{pc_divine}"></span></h2>
</button>
</div>
<div class="retainer1 attributes">
<h2 data-i18n="retainers">Suivants</h2>
</div>
<div class="retainer2 attributes">
<input type="number" name="attr_pc_ret"> <span class="slash">/</span> <input type="number" name="attr_pc_ret_max">
</div>
<div class="magicitem1 attributes">
<h2 data-i18n="magic items">Objets M.</h2>
</div>
<div class="magicitem2 attributes">
<input type="number" name="attr_pc_magicitem"> <span class="slash">/</span> <input type="number" name="attr_pc_magicitem_max">
</div>
<div class="prof">
<h2 data-i18n="proficiencies">Maîtrises</h2>
</div>
<div class="prof2">
<h3 data-i18n="armor">Armures</h3>
<div class="flex sheet-auto-expand">
<span name="attr_pc_prof_armor"></span>
<textarea name="attr_pc_prof_armor" placeholder="Armor" spellcheck="false"></textarea>
</div>
<h3 data-i18n="weapon">Armes</h3>
<div class="flex sheet-auto-expand">
<span name="attr_pc_prof_weapon" data-i18n-dynamic></span>
<textarea name="attr_pc_prof_weapon" placeholder="Weapon" spellcheck="false"></textarea>
</div>
<h3 data-i18n="class">Classe</h3>
<div class="flex sheet-auto-expand">
<span name="attr_pc_prof_class" data-i18n-dynamic></span>
<textarea name="attr_pc_prof_class" placeholder="Class proficiencies" spellcheck="false"></textarea>
</div>
<h3 data-i18n="archetype">Archétype</h3>
<div class="flex sheet-auto-expand">
<span name="attr_pc_prof_archetype" data-i18n-dynamic></span>
<textarea name="attr_pc_prof_archetype" placeholder="Archetype proficiencies" spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="container_pc2 bw">
<div class="weapon_first">
<h2 data-i18n="weapon">Armes</h2>
</div>
<h3 data-i18n="weapon_name">Nom</h3>
<h3 data-i18n="weapon_prof">Maît.</h3>
<h3 data-i18n="to_hit_attribute">Carac. Toucher</h3>
<h3 data-i18n="to_hit_bonus">Bonus Toucher</h3>
<h3 data-i18n="damage">Dégâts</h3>
<h3 data-i18n="damage_attr">Carac.</h3>
<div class="weapon_grid">
<fieldset class="repeating_weapon">
<input type="text" name="attr_pc_weapon_name" placeholder="nom de l'arme" style="width: 180px;">
<input type="checkbox" name="attr_pc_weapon_prof" style="position: relative; left: 7px; top: auto;" value="@{pc_proficiency}"><span></span>
<select name="attr_pc_weaponToHitMod" style="width: 150px">
<option value="@{pc_strengthMod}" data-i18n="strength">Force</option>
<option value="@{pc_dexterityMod}" data-i18n="dexterity">Dextérité</option>
<option value="@{pc_constitutionMod}" data-i18n="constitution">Constitution</option>
<option value="@{pc_intelligenceMod}" data-i18n="intelligence">Intelligence</option>
<option value="@{pc_wisdomMod}" data-i18n="wisdom">Sagesse</option>
<option value="@{pc_charismaMod}" data-i18n="charisma">Charisme</option>
</select>
<input type="number" name="attr_pc_weaponToHitBonus" placeholder="+0" value="0" style="width: 130px">
<input type="text" name="attr_pc_weapon_damage" placeholder="dégâts (ex: 1d8)" style="width: 150px;">
<select name="attr_pc_weaponMod" style="width: 150px">
<option value="@{pc_strengthMod}" data-i18n="strength">Force</option>
<option value="@{pc_dexterityMod}" data-i18n="dexterity">Dextérité</option>
<option value="@{pc_constitutionMod}" data-i18n="constitution">Constitution</option>
<option value="@{pc_intelligenceMod}" data-i18n="intelligence">Intelligence</option>
<option value="@{pc_wisdomMod}" data-i18n="wisdom">Sagesse</option>
<option value="@{pc_charismaMod}" data-i18n="charisma">Charisme</option>
</select>
<input type="text" name="attr_pc_weapon_desc" placeholder="description" spellcheck="false" style="width: 700px; margin-bottom: 2px;">
<button name="roll_weapon" type="roll" value="@{togm} &{template:ftddamage} {{name=@{character_name}}} {{test_name=@{pc_weapon_name}}} {{always=[[@{config_advantage}]]}} {{r1=[[1d20+@{pc_weaponToHitMod}[Attribute]+@{pc_weapon_prof}[Proficiency]+@{pc_weaponToHitBonus}[Hit Bonus]]]}} {{r2=[[1d20+@{pc_weaponToHitMod}[Attribute]+@{pc_weapon_prof}[Proficiency]+@{pc_weaponToHitBonus}[Hit Bonus]]]}} {{damage_name=Dégâts}} {{r_damage=[[{@{pc_weapon_damage}+@{pc_weaponMod},1d1}kh1]]}}">
<h3 style="width: 80px;" data-i18n="attack">Attaque</h3>
</button>
</fieldset>
</div>
</div>
<input type="checkbox" name="attr_pc_spell_ability" value="1" class="spellability">
<div class="container_pc5 bw">
<div class="spell_first">
<h2 data-i18n="spellbook">Grimoire</h2>
</div>
<div class="spell_second">
<h3 data-i18n="spells known">Sorts connus :</h3>
<span style="font-weight: bold">1st :</span>
<span type="number" name=attr_pc_spell_1></span>
<span style="font-weight: bold; margin-left: 20px;">2nd :</span>
<span type="number" name=attr_pc_spell_2></span>
<span style="font-weight: bold; margin-left: 20px;">3rd :</span>
<span type="number" name=attr_pc_spell_3></span>
<span style="font-weight: bold; margin-left: 20px;">4th :</span>
<span type="number" name=attr_pc_spell_4></span>
<span style="font-weight: bold; margin-left: 20px;">5th :</span>
<span type="number" name=attr_pc_spell_5></span>
</div>
<h3 data-i18n="level">Niveau</h3>
<h3 data-i18n="spellname">Nom du sort</h3>
<h3 data-i18n="description">Description</h3>
<div class="spell_grid">
<fieldset class="repeating_spell">
<input type="number" name="attr_pc_spell_lvl" style="width: 70px;">
<input type="text" name="attr_pc_spell_name" placeholder="sort" style="width: 200px;">
<input type="text" name="attr_pc_spell_desc" placeholder="description" spellcheck="false" style="width: 500px; margin-bottom: 2px;">
</fieldset>
</div>
</div>
<div class="container_pc3 bw">
<div class="inventory_first">
<h2 data-i18n="inventory">Inventaire</h2>
</div>
<h3 data-i18n="load">Charge</h3>
<h3 data-i18n="name">Nom</h3>
<h3 data-i18n="description">Description</h3>
<h3 data-i18n="supply">Ress.</h3>
<h3 data-i18n="durability">Dur.</h3>
<div class="inventory_grid">
<fieldset class="repeating_inventory">
<input type="number" name="attr_pc_item_load" style="width: 70px;">
<input type="text" name="attr_pc_item_name" placeholder="objet" style="width: 280px;">
<input type="text" name="attr_pc_item_desc" placeholder="description" spellcheck="false" style="width: 270px;">
<input type="number" name="attr_pc_item_sup" style="width: 70px;">
<input type="number" name="attr_pc_item_dur" style="width: 40px;"> <span>/</span> <input type="number" name="attr_pc_item_dur_max" style="width: 40px; margin-bottom: 2px;">
</fieldset>
</div>
</div>
<div class="container_pc4 bw">
<h2 data-i18n="notes">Notes</h2>
<div class="sheet-auto-expand notes">
<span name="attr_pc_notes"></span>
<textarea name="attr_pc_notes" placeholder="Notes" spellcheck="false"></textarea>
</div>
</div>
</div>
<!-- NPC
============================= -->
<div class="npc">
<input type="checkbox" name="attr_config_bw" value="1" class="sheet-block-switch sheet-block-switch-ghost">
<input type="checkbox" name="attr_config_blue" value="1" class="sheet-block-switch3 sheet-block-switch-ghost">
<input type="checkbox" name="attr_config_red" value="1" class="sheet-block-switch4 sheet-block-switch-ghost">
<input type="checkbox" name="attr_config_grey" value="1" class="sheet-block-switch2 sheet-block-switch-ghost">
<div class="container bw">
<div class="firstline">
<h2 data-i18n="name">Nom</h2>
<input type="text" name="attr_character_name" placeholder="nom" style="height: 75%; margin-right: 3px;">
<h2 data-i18n="hd">HD</h2>
<select name="attr_hd" type="text" style="margin-right: 3px;">
<option value="1/4">1/4</option>
<option value="1/2">1/2</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
</select>
<select name="attr_npc_type" typex="text" style="margin-right: 3px;">
<option value="Brute" data-i18n="brute">Brute</option>
<option value="Meneur" data-i18n="leader">Meneur</option>
<option value="Prédateur" data-i18n="predator">Prédateur</option>
<option value="Contrôleur" data-i18n="shaper">Contrôleur</option>
<option value="Sniper" data-i18n="sniper">Sniper</option>
<option value="Soldat" data-i18n="soldier">Soldat</option>
</select>
</div>
<div class="q1">
<div class="flex">
<h3 data-i18n="to_hit_bonus">Bonus au toucher</h3>
<input type="number" name="attr_npc_bonus_atk" value="0" style="max-width: 50px">
<button name="roll_npc_attack" type="roll" value="@{togm} &{template:ftdroll} {{name=@{character_name}}} {{test_name=Jet d'attaque}} {{always=[[@{config_advantage}]]}} {{r1=[[1d20+@{npc_bonus_atk}]]}} {{r2=[[1d20+@{npc_bonus_atk}]]}}"><h3 data-i18n="attack roll">Jet d'attaque</h3></button>
</div>
<div class="flex">
<h3 data-i18n="damage">Dégâts</h3>
<input type="text" name="attr_npc_damage" value="0" placeholder="1d10" style="max-width: 80px">
<button name ="roll_npc_damage" type="roll" value="@{togm} &{template:ftdroll} {{name=@{character_name}}} {{test_name=Dégâts}} {{always=[[0d0]]}} {{r1=[[@{npc_damage}]]}}"><h3 data-i18n="damage">Dégâts</h3></button>
</div>
<div class="flex">
<h3 data-i18n="ac">CA</h3>
<input type="number" name="attr_npc_ac" value="10">
</div>
<div class="flex">
<h3 data-i18n="hit points">Points de vie</h3>
<input type="number" name="attr_npc_hp" value="0">
<h3>/</h3>
<input type="number" name="attr_npc_hp_max" value="0">
</div>
<div class="flex">
<h3 data-i18n="base modifier">Modificateur de base</h3>
<input type="number" name="attr_npc_base_mod" value="0" style="max-width: 50px">
<button name ="roll_npc_base" type="roll" value="@{togm} &{template:ftdroll} {{name=@{character_name}}} {{test_name=Test standard}} {{always=[[@{config_advantage}]]}} {{r1=[[1d20+@{npc_base_mod}]]}} {{r2=[[1d20+@{npc_base_mod}]]}} "><h3 data-i18n="roll">Jet</h3></button>
</div>
<div class="flex">
<h3 data-i18n="speed">Vitesse</h3>
<input type="text" name="attr_npc_speed" value="0">
</div>
</div>
<div class="q2">
<div class="flex">
<h2 data-i18n="Forces">Forces</h2>
</div>
<div class="flex">
<h3 data-i18n="modifier">Modificateur</h3>
<input type="text" name="attr_npc_strong_mod" value="0" style="max-width: 50px">
<button name ="roll_npc_strong" type="roll" value="@{togm} &{template:ftdroll} {{name=@{character_name}}} {{test_name=Test (force)}} {{always=[[@{config_advantage}]]}} {{r1=[[1d20+@{npc_strong_mod}]]}} {{r2=[[1d20+@{npc_strong_mod}]]}}"><h3 data-i18n="roll">Jet</h3></button>
</div>
<div class="flex">
<input type="text" name="attr_npc_strong_attribute" value="FOR/CON" data-i18n-dynamic>
</div>
<div class="flex sheet-auto-expand">
<span name="attr_npc_strong_desc" data-i18n-dynamic></span>
<textarea name="attr_npc_strong_desc" placeholder="Description des forces" spellcheck="false"></textarea>
</div>
</div>
<div class="q3">
<div class="flex">
<h2 data-i18n="techniques">Techniques</h2>
</div>
<div>
<fieldset class="repeating_technique">
<select name="attr_npc_technique_name" type="text">
<option value="Drain de caractéristique" data-i18n="ability drain">Drain de caractéristique</option>
<option value="Adepte" data-i18n="adept">Adepte</option>
<option value="Altération de l'environnement" data-i18n="alter environment">Altération de l'environnement</option>
<option value="Décharge" data-i18n="blast">Décharge</option>
<option value="Explosion" data-i18n="burst">Explosion</option>
<option value="Bonus conditionnel" data-i18n="extra when">Bonus conditionnel</option>
<option value="Infliger une condition" data-i18n="force condition">Infliger une condition</option>
<option value="Multi-attaque" data-i18n="multiattack">Multi-attaque</option>
<option value="Résistance ou immunité" data-i18n="resistance or immunity">Résistance ou immunité</option>
<option value="Bouger" data-i18n="shove">Bouger</option>
<option value="Mouvement spécial" data-i18n="special movement">Mouvement spécial</option>
</select>
<input type="hidden" name="attr_npc_technique_desc" value="description de la technique">
<span name="attr_npc_technique_desc" style="display: block; padding: 4px; line-height: 1;" data-i18n-dynamic></span>
<div class="sheet-auto-expand">
<span name="attr_npc_technique_desc2"></span>
<textarea name="attr_npc_technique_desc2" placeholder="détails" spellcheck="false"></textarea>
</div>
</fieldset>
</div>
</div>
<div class="q4">
<div class="flex">
<h2 data-i18n="Faiblesses">Faiblesses</h2>
</div>
<div class="flex">
<h3 data-i18n="modifier">Modificateur</h3>
<input type="text" name="attr_npc_weak_mod" value="0" style="max-width: 50px">
<button name ="roll_npc_weak" type="roll" value="@{togm} &{template:ftdroll} {{name=@{character_name}}} {{test_name=Test (faiblesse)}} {{always=[[@{config_advantage}]]}} {{r1=[[1d20+@{npc_weak_mod}]]}} {{r2=[[1d20+@{npc_weak_mod}]]}}"><h3 data-i18n="roll">Jet</h3></button>
</div>
<div class="flex">
<input type="text" name="attr_npc_weak_attribute" value="FOR/CON" data-i18n-dynamic>
</div>
<div class="flex sheet-auto-expand">
<span name="attr_npc_weak_desc" data-i18n-dynamic></span>
<textarea name="attr_npc_weak_desc" placeholder="Description des faiblesses" spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="container2 bw">
<h2 data-i18n="notes">Notes</h2>
<div class="sheet-auto-expand notes">
<span name="attr_notes"></span>
<textarea name="attr_notes" placeholder="Notes" spellcheck="false"></textarea>
</div>
</div>
</div>
<!-- CONFIG
============================= -->
<div class="config">
<div class="container_config">
<h2>Design styles</h2>
<div>
<input type="checkbox" name="attr_config_bw" value="1" class="sheet-block-switch" style="position: relative; top:0px; left:5px"><span style="color: white"></span>
<span style="margin-left: 1px">Black&White Version</span>
</div>
<div>
<input type="checkbox" name="attr_config_blue" value="1" class="sheet-block-switch3" style="position: relative; top:0px; left:5px"><span style="color: white"></span>
<span style="margin-left: 1px">Blue Version</span>
</div>
<div>
<input type="checkbox" name="attr_config_red" value="1" class="sheet-block-switch4" style="position: relative; top:0px; left:5px"><span style="color: white"></span>
<span style="margin-left: 1px">Red Version</span>
</div>
<div>
<input type="checkbox" name="attr_config_grey" value="1" class="sheet-block-switch2" style="position: relative; top:0px; left:5px"><span style="color: white"></span>
<span style="margin-left: 1px">Grey Version</span>
</div>
<h2>Roll to GM</h2>
<input name="attr_togmcheck" type="checkbox" value="1" style="position: relative; top:14px; left:10px"><span style="color: white"></span>
<h2>Always roll with advantage?</h2>
<input name="attr_config_advantage" type="checkbox" value="1"class="sheet-block-switch-advantage" style="position: relative; top:14px; left:10px"><span style="color: white"></span>
<h2>Meters or feet?</h2>
<select name="attr_config_unit" type="text">
<option value="m">Meters</option>
<option value="ft">Feet</option>
</select>
<h2>Perception, arcane and divine attributes</h2>
<div>
<span>Perception</span>
<select name="attr_pc_perception_attribute" style="width: 150px">
<option value="1" data-i18n="strength">Force</option>
<option value="2" data-i18n="dexterity">Dextérité</option>
<option value="3" data-i18n="constitution">Constitution</option>
<option value="4" data-i18n="intelligence">Intelligence</option>
<option value="5" data-i18n="wisdom" selected="selected">Sagesse</option>
<option value="6" data-i18n="charisma">Charisme</option>
</select>
</div>
<div>
<span>Arcane</span>
<select name="attr_pc_arcane_attribute" style="width: 150px">
<option value="1" data-i18n="strength">Force</option>
<option value="2" data-i18n="dexterity">Dextérité</option>
<option value="3" data-i18n="constitution">Constitution</option>
<option value="4" data-i18n="intelligence" selected="selected">Intelligence</option>
<option value="5" data-i18n="wisdom">Sagesse</option>
<option value="6" data-i18n="charisma">Charisme</option>
</select>
</div>
<div>
<span>Divine</span>
<select name="attr_pc_divine_attribute" style="width: 150px">
<option value="1" data-i18n="strength">Force</option>
<option value="2" data-i18n="dexterity">Dextérité</option>
<option value="3" data-i18n="constitution">Constitution</option>
<option value="4" data-i18n="intelligence">Intelligence</option>
<option value="5" data-i18n="wisdom" selected="selected">Sagesse</option>
<option value="6" data-i18n="charisma">Charisme</option>
</select>
</div>
<h2>Use rolltable for magical mishaps</h2>
<input name="attr_config_mishap" type="checkbox" value="1" style="position: relative; top:14px; left:10px"><span style="color: white"></span>
<div>
<span>Divine rolltable name</span> <input type="text" name="attr_config_mishap_divine" placeholder="name of your divine rolltable mishap" style="width: 250px;">
</div>
<div>
<span>Arcane rolltable name</span> <input type="text" name="attr_config_mishap_arcane" placeholder="name of your arcane rolltable mishap" style="width: 250px;">
</div>
<h2>Custom class</h2>
<input name="attr_config_custom_class" type="checkbox" value="1" style="position: relative; top:14px; left:10px"><span style="color: white"></span>
<h2>Custom archetype</h2>
<input name="attr_config_custom_archetype" type="checkbox" value="1" style="position: relative; top:14px; left:10px"><span style="color: white"></span>
<h2>Enable Spellbook Tab</h2>
<input name="attr_config_custom_grimoire" type="checkbox" value="1" style="position: relative; top:14px; left:10px"><span style="color: white"></span>
</div>
</div>
<!-- FOOTER
============================= -->
<div>
<span class="footer" style="margin-right: 50px;">Art by Sebastian Rodriguez and Per Folmer.</span>
</div>
<!-- ROLLTEMPLATE
============================= -->
<rolltemplate class="sheet-rolltemplate-minisheet">
<div class="face_container">
<div class="face_header">
<h3 style="color: #F8F8FF">{{name}}</h3>
</div>
<div class="face_rowcolor1">
<h3 style="display:inline"><span style="font-family: Pictos">k</span></h3>
{{value1}} / {{value1_max}}
<h3 style="display:inline; margin-left: 20px;"><span style="font-family: Pictos Three">b</span></h3>
{{value2}}
</div>
<div class="face_rowcolor1">
<h3 style="display:inline"><span style="font-family: Pictos">=</span></h3>
{{value3}} / {{value3_max}}
<h3 style="display:inline"><span style="font-family: Pictos">x</span></h3>
{{value4}} / {{value4_max}}
</div>
<div class="face_rowcolor1">
<h3 style="display:inline">{{buttons_name}}</h3>
<div>{{buttons}}</div>
</div>
<div class="face_rowcolor1">
<h3 style="display:inline">{{buttons2_name}}</h3>
<div>{{buttons2}}</div>
</div>
<div class="face_rowcolor1">
<h3 style="display:inline">{{buttons3_name}}</h3>
<div>{{buttons3}}</div>
</div>
<div class="face_rowcolor1">
<h3 style="display:inline">{{buttons4_name}}</h3>
<div>{{buttons4}}</div>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-npcminisheet">
<div class="face_container">
<div class="face_header">
<h3 style="color: #F8F8FF">{{name}}</h3>
</div>
<div class="face_rowcolor1">
<h3 style="display:inline"><span style="font-family: Pictos">k</span></h3>
{{value1}} / {{value1_max}}
<h3 style="display:inline; margin-left: 20px;"><span style="font-family: Pictos Three">b</span></h3>
{{value2}}
</div>
<div class="face_rowcolor1">
<h3 style="display:inline">{{buttons_name}}</h3>
<div>{{buttons}}</div>
</div>
<div class="face_rowcolor1">
<h3 style="display:inline">{{buttons2_name}}</h3>
<div>{{buttons2}}</div>
</div>
<div class="face_rowcolor1">
<h3 style="display:inline">{{buttons3_name}}</h3>
<div>{{buttons3}}</div>
</div>
<div class="face_rowcolor1">
<h3 style="display:inline">{{buttons4_name}}</h3>
<div>{{buttons4}}</div>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-ftdroll">
<div class="face_container">
<div class="face_header">
<h3 style="color: #F8F8FF">{{name}}</h3>
</div>
<div class="face_rowcolor1">
<h3 data-i18n-dynamic>{{test_name}}</h3>
<div style="margin-bottom: 3px;">
<div style="display:none">{{always}}</div>
{{#^rollTotal() always 1}} {{r1}} {{/^rollTotal() always 1}}
{{#rollTotal() always 1}} {{r1}} | {{r2}} {{/rollTotal() always 1}}
</div>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-ftdmagicroll">
<div class="face_container">
<div class="face_header">
<h3 style="color: #F8F8FF">{{name}}</h3>
</div>
<div class="face_rowcolor1">
<h3 style="display:inline" data-i18n-dynamic>{{test_name}}</h3>
<div style="display:none">{{always}}</div>
<div>
{{#^rollTotal() always 1}} {{r1}} {{/^rollTotal() always 1}}
{{#rollTotal() always 1}} {{r1}} | {{r2}} {{/rollTotal() always 1}}
</div>
<div style="margin-bottom: 3px;">{{r3}}</div>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-ftddamage">
<div class="face_container">
<div class="face_header">
<h3 style="color: #F8F8FF">{{name}}</h3>
</div>
<div class="face_rowcolor1">
<h3 style="display:inline">{{test_name}}</h3>
<div style="display:none">{{always}}</div>
{{#^rollTotal() always 1}} {{r1}} {{/^rollTotal() always 1}}
{{#rollTotal() always 1}} {{r1}} | {{r2}} {{/rollTotal() always 1}}
</div>
<div class="face_rowcolor1">
<h3 style="display:inline" data-i18n-dynamic>{{damage_name}}</h3>
<div style="margin-bottom: 3px;">{{r_damage}}</div>
</div>
</div>
</rolltemplate>
<!-- SCRIPT
============================= -->
<script type="text/worker">
const setAttributes = (update, silent) => {
(silent === true) ? setAttrs(update, {silent:true}) : setAttrs(update);
};
// === SHEET SWITCH
// === ATTRIBUTE ARRAYS
const arrays = {
sheets: ["pc", "npc", "config"],
toggles: ["pc", "npc", "config"]
};
// === SETTINGS TOGGLES
//Switch between sheet types.
arrays["sheets"].forEach(attr => {
on(`clicked:toggle_${attr}`, (eventinfo) => {
setAttributes({sheet_type: `${attr}`}, true);
});
});
// === TOGGLE INPUT SETTINGS
arrays["toggles"].forEach(attr => {
on(`clicked:toggle_${attr}`, () => {
getAttrs(["toggles"], (v) => {
let string = toggleBuilder(attr, v["toggles"]);
setAttributes({toggles: string}, true);
});
});
});
// === BUTTON WEAPON ROW ID VALUE
on("change:repeating_weapon sheet:opened", function() {
getSectionIDs("repeating_weapon", function(idArray) {
var rollbuttons = {};
for(var i=0; i < 1; i++) {
rollbuttons["weapon_buttons"] = "[@{repeating_weapon_" + idArray[i] + "_pc_weapon_name}](~repeating_weapon_" + idArray[i] + "_weapon)";
}
for(var i=1; i < idArray.length; i++) {
rollbuttons["weapon_buttons"] = rollbuttons["weapon_buttons"] + " [@{repeating_weapon_" + idArray[i] + "_pc_weapon_name}](~repeating_weapon_" + idArray[i] + "_weapon)";
}
setAttrs(rollbuttons);
});
});
// === NPC TECHNIQUES ROW ID VALUE
on("change:repeating_technique", function() {
getSectionIDs("repeating_technique", function(idArray) {
var text = {};
for(var i=0; i < 1; i++) {
text["npc_tec"] = "**@{repeating_technique_" + idArray[i] + "_npc_technique_name}** @{repeating_technique_" + idArray[i] + "_npc_technique_desc} *@{repeating_technique_" + idArray[i] + "_npc_technique_desc2}*";
}
for(var i=1; i < idArray.length; i++) {
text["npc_tec"] = text["npc_tec"] + "**@{repeating_technique_" + idArray[i] + "_npc_technique_name}** @{repeating_technique_" + idArray[i] + "_npc_technique_desc} *@{repeating_technique_" + idArray[i] + "_npc_technique_desc2}*";
}
setAttrs(text);
});
});
// === ATTRIBUTES MOD CALC
const stats = ['pc_strength','pc_dexterity','pc_constitution','pc_intelligence','pc_wisdom','pc_charisma'];
stats.forEach(function (stat) {
on("change:" + stat + " sheet:opened", function () {
getAttrs([stat], function (values) {
const score = parseInt(values[stat], 10)||0; // this extracts the stat, and assumes a stat score of 0 the stat is not recognised as a number.
let mod = 0;
if(score < 4) mod = -4;
else mod = Math.floor((score-10)/2);
setAttrs({
[stat + 'Mod']: mod
});
});
});
});
// === LVL CALC
on("change:pc_xp", function() {
getAttrs(["pc_xp"], function(values) {
let XP = parseInt(values.pc_xp,10)||0;
let lvl = 1;
if (XP >= 2500) lvl = 2;
if (XP >= 5000) lvl = 3;
if (XP >= 10000) lvl = 4;
if (XP >= 20000) lvl = 5;
if (XP >= 30000) lvl = 6;
if (XP >= 50000) lvl = 7;
if (XP >= 75000) lvl = 8;
if (XP >= 100000) lvl = 9;
setAttrs({
pc_lvl: lvl
});
});
});
// === ARCHETYPE SWITCH
on('change:pc_class', function() {
getAttrs(['pc_class'], function(values) {
var idx = 0;
switch (values.pc_class.toLowerCase()) {
case 'guerrier':
idx = 1;
break;
case 'voleur':
idx = 2;
break;
case 'zélote':
idx = 3;
break;
case 'mage':
idx = 4;
break;
case 'elfparangon':
idx = 5;
break;
case 'dwarfparangon':
idx = 6;
break;
case 'halflingparangon':
idx = 7;
break;
}
setAttrs({ 'select-chooser': idx });
});
});
// === PROFICIENCY MOD CALC
on("change:pc_lvl sheet:opened", function() {
getAttrs(["pc_lvl"], function(values) {
let level = parseInt(values.pc_lvl,10)||0;
let mod = +2;
if(level > 4) mod = +3;
if(level > 8) mod = +4;
setAttrs({
pc_proficiency: mod
});
});
});
// === LOAD CALC
on("change:pc_strength", function() {
getAttrs(["pc_strength"], function(values) {
let l = parseInt(values.pc_strength,10)||0;
setAttrs({
pc_load_max: l
});
});
});
// === SPEED CALC
on("change:pc_load", function() {
getAttrs(["pc_load", "pc_load_max", "config_unit"], function(values) {
let l = parseInt(values.pc_load,10)||0;
let max = parseInt(values.pc_load_max,10)||0;
let unit = values.config_unit;
let speed = 0;
if (unit === "m" && l <= max) speed = 9;
if (unit === "m" && l > max) speed = 9 - 1.5 * (l-max);
if (unit === "ft" && l <= max) speed = 30;
if (unit === "ft" && l > max) speed = 30 - 5 * (l-max);
if (speed < 0) speed = 0;
setAttrs({
pc_speed: speed
});
});
});
// === RESILIENCE CALC
on("change:pc_constitution", function() {
getAttrs(["pc_constitution"], function(values) {
let resilience = parseInt(values.pc_constitution,10)||0;
setAttrs({
pc_res_max: resilience
});
});
});
// === SUPPLY CALC
on("change:pc_intelligence", function() {
getAttrs(["pc_intelligence"], function(values) {
let supply = parseInt(values.pc_intelligence,10)||0;
setAttrs({
pc_sup_max: supply
});
});
});
// === Arcane CALC
on("change:pc_arcane_attribute change:pc_strengthMod change:pc_dexterityMod change:pc_constitutionMod change:pc_intelligenceMod change:pc_wisdomMod change:pc_charismaMod change:pc_proficiency change:pc_class", function() {
getAttrs(["pc_arcane_attribute", "pc_proficiency", "pc_strengthMod", "pc_dexterityMod", "pc_constitutionMod", "pc_intelligenceMod", "pc_wisdomMod", "pc_charismaMod", "pc_class"], function(values) {
let SELECT = parseInt(values.pc_arcane_attribute,10)||0;
if (SELECT === 1) INT = parseInt(values.pc_strengthMod);
if (SELECT === 2) INT = parseInt(values.pc_dexterityMod);
if (SELECT === 3) INT = parseInt(values.pc_constitutionMod);
if (SELECT === 4) INT = parseInt(values.pc_intelligenceMod);
if (SELECT === 5) INT = parseInt(values.pc_wisdomMod);
if (SELECT === 6) INT = parseInt(values.pc_charismaMod);
let PROF = parseInt(values.pc_proficiency,10)||0;
let CLAS = values.pc_class;
let arc = INT;
if (CLAS === "Mage") arc = INT + PROF;
setAttrs({
pc_arcane: arc
});
});
});
// === Perception CALC
on("change:pc_perception_attribute change:pc_strengthMod change:pc_dexterityMod change:pc_constitutionMod change:pc_intelligenceMod change:pc_wisdomMod change:pc_charismaMod change:pc_proficiency change:pc_arch", function() {
getAttrs(["pc_perception_attribute", "pc_proficiency", "pc_arch", "pc_strengthMod", "pc_dexterityMod", "pc_constitutionMod", "pc_intelligenceMod", "pc_wisdomMod", "pc_charismaMod"], function(values) {
let SELECT = parseInt(values.pc_perception_attribute,10)||0;
let PROF = parseInt(values.pc_proficiency,10)||0;
let ARC = values.pc_arch;
if (SELECT === 1) WIS = parseInt(values.pc_strengthMod);
if (SELECT === 2) WIS = parseInt(values.pc_dexterityMod);
if (SELECT === 3) WIS = parseInt(values.pc_constitutionMod);
if (SELECT === 4) WIS = parseInt(values.pc_intelligenceMod);
if (SELECT === 5) WIS = parseInt(values.pc_wisdomMod);
if (SELECT === 6) WIS = parseInt(values.pc_charismaMod);
let per = WIS;
if (ARC === "Rôdeur") per = WIS + PROF;
setAttrs({
pc_perception: per
});
});
});
// === Divine CALC
on("change:pc_divine_attribute change:pc_strengthMod change:pc_dexterityMod change:pc_constitutionMod change:pc_intelligenceMod change:pc_wisdomMod change:pc_charismaMod change:pc_proficiency change:pc_class", function() {
getAttrs(["pc_divine_attribute", "pc_proficiency", "pc_strengthMod", "pc_dexterityMod", "pc_constitutionMod", "pc_intelligenceMod", "pc_wisdomMod", "pc_charismaMod", "pc_class"], function(values) {
let SELECT = parseInt(values.pc_divine_attribute,10)||0;
if (SELECT === 1) WIS = parseInt(values.pc_strengthMod);
if (SELECT === 2) WIS = parseInt(values.pc_dexterityMod);
if (SELECT === 3) WIS = parseInt(values.pc_constitutionMod);
if (SELECT === 4) WIS = parseInt(values.pc_intelligenceMod);
if (SELECT === 5) WIS = parseInt(values.pc_wisdomMod);
if (SELECT === 6) WIS = parseInt(values.pc_charismaMod);
let PROF = parseInt(values.pc_proficiency,10)||0;
let CLAS = values.pc_class;
let div = WIS;
if (CLAS === "Zélote") div = WIS + PROF;
setAttrs({
pc_divine: div
});
});
});
// === RETAINER CALC
on("change:pc_charisma", function() {
getAttrs(["pc_charisma"], function(values) {
let retainer = parseInt(values.pc_charisma,10)||0;
setAttrs({
pc_ret_max: retainer
});
});
});
// === MAGIC ITEM CALC
on("change:pc_charismaMod", function() {
getAttrs(["pc_charismaMod"], function(values) {
let cha = parseInt(values.pc_charismaMod,10)||0;
let mi = 1;
if (cha > 1) mi = cha;
setAttrs({
pc_magicitem_max: mi
});
});
});
// === AC CALC
on("change:pc_ac_type change:pc_ac_shield change:pc_dexterityMod", function() {
getAttrs(["pc_ac_type", "pc_ac_shield", "pc_dexterityMod", "pc_ac"], function(values) {
let TYPE = parseInt(values.pc_ac_type,10)||0;
let DEX = parseInt(values.pc_dexterityMod,10)||0;
let ACcalc = 10;
if (TYPE > 9) ACcalc = 10 + DEX;
if (TYPE > 11) ACcalc = 12 + DEX;
if (TYPE > 14) ACcalc = 15;
let SHLD = parseInt(values.pc_ac_shield,10)||0;
let AC = parseInt(values.pc_ac,10)||0;
let sac = AC
if (SHLD > 0) sac = ACcalc + 2;
if (SHLD < 1) sac = ACcalc;
setAttrs({
"pc_ac": sac,
});
});
});
// === PC AUTOFILL ABILITIES PROFICIENCIES
const abprof = {
"Guerrier": {STR:"1", DEX:"0", CON:"1", INT:"0", WIS:"0", CHA:"0"},
"Voleur": {STR:"0", DEX:"1", CON:"0", INT:"1", WIS:"0", CHA:"0"},
"Zélote": {STR:"0", DEX:"0", CON:"0", INT:"0", WIS:"1", CHA:"1"},
"Mage": {STR:"0", DEX:"0", CON:"1", INT:"1", WIS:"0", CHA:"0"},
"ElfParangon": {STR:"1", DEX:"0", CON:"0", INT:"1", WIS:"0", CHA:"0"},
"DwarfParangon": {STR:"0", DEX:"0", CON:"1", INT:"0", WIS:"1", CHA:"0"},
"HalflingParangon": {STR:"0", DEX:"1", CON:"0", INT:"0", WIS:"0", CHA:"1"},
};
on("change:pc_class", function () {
getAttrs(["pc_class"], function(values) {
let classe = values.pc_class
if (!abprof.hasOwnProperty( classe )) {
console.log("Error: The item " + classe + " is not found within the race Object.");
return;
}
setAttrs({
"pc_strength_prof": abprof[classe].STR,
"pc_dexterity_prof": abprof[classe].DEX,
"pc_constitution_prof": abprof[classe].CON,
"pc_intelligence_prof": abprof[classe].INT,
"pc_wisdom_prof": abprof[classe].WIS,
"pc_charisma_prof": abprof[classe].CHA,
});
});
});
// === PC AUTOFILL PROFICIENCIES
const classprof = {
"Guerrier": {armor:"toutes", weapon:"toutes", class:"Coordination, tactique, volonté"},
"Voleur": {armor:"légères, boucliers", weapon:"toutes", class:"Furtivité, tromperie, sens, outils"},
"Zélote": {armor:"toutes", weapon:"simples", class:"Histoire, intuition"},
"Mage": {armor:"boucliers", weapon:"simples", class:"Finesse, négociation"},
"ElfParangon": {armor:"légères, boucliers", weapon:"simples, arbalète de guerre", class:"Furtivité, sens, arcanes"},
"DwarfParangon": {armor:"toutes", weapon:"toutes", class:"Montagne, athlétisme, diplomatie"},
"HalflingParangon": {armor:"légères, boucliers", weapon:"simples", class:"Furtivité, marchandage, volonté"},
};
const archprof = {
"none": {arc: "-"},
"Barbare": {arc: "Intimidation, endurance, voyage"},
"Combattant": {arc: "Médecine, ingéniosité, diplomatie"},
"Rôdeur": {arc: "Nature, créatures, perception"},
"Assassin": {arc: "Intimidation, intuition, traque"},
"Barde": {arc: "Représentation, inspiration, diplomatie"},
"Gredin": {arc: "Infiltration, athlétisme, investigation"},
"Prêtre": {arc: "Soin, politique, magie divine"},
"Druide": {arc: "Nature, créatures, magie druidique"},
"Paladin": {arc: "Instinct, endurance, athlétisme"},
"Ensorceleur": {arc: "Charme, volonté, magie chaotique"},
"Sorcier": {arc: "Intimidation, furtivité, magie profane"},
"Magicien": {arc: "Diplomatie, intuition, magie des arcanes"},
"ElfÉclaireur": { arc: "Désert, monstres, géographie"},
"ElfCharmépée": { arc: "Agilité, artisanat, médicament"},
"ElfArcaniste": { arc: "Tradition magique, dextérité manuelle, histoire"},
"DwarfCommandant": { arc: "Tactique, logistique, inspiration"},
"DwarfDelver": { arc: "Furtivité, traditions anciennes, donjonierie"},
"DwarfMurdePierre": { arc: "L'acte de forger, monstres, intimidation"},
"HalflingCambrioleur": { arc: "Cambriolage, évaluation, tromperie"},
"HalflingMascotte": { arc: "Inspiration, diplomatie, perspicacité"},
"HalflingLanceur": { arc: "Perception, exactitude, outils improvisés"},
};
on("change:pc_class", function () {
getAttrs(["pc_class"], function(values) {
let classe = values.pc_class
if (!classprof.hasOwnProperty( classe )) {
console.log("Error: The item " + classe + " is not found within the race Object.");
return;
};
setAttrs({
"pc_prof_armor": getTranslationByKey(classprof[classe].armor),
"pc_prof_weapon": getTranslationByKey(classprof[classe].weapon),
"pc_prof_class": getTranslationByKey(classprof[classe].class),
});
});
});
on("change:pc_arch change:select-chooser", function () {
getAttrs(["pc_arch"], function(values) {
let arch = values.pc_arch;
if (!archprof.hasOwnProperty( arch )) {
console.log("Error: The item " + arch + " is not found within the race Object.");
return;
}
setAttrs({
"pc_prof_archetype": getTranslationByKey(archprof[arch].arc),
});
});
});
// === PC AUTOFILL SPELL SLOTS
const spelltable = {
"1": {first: "1", second: "0", third: "0", fourth: "0", fifth: "0"},
"2": {first: "2", second: "0", third: "0", fourth: "0", fifth: "0"},
"3": {first: "3", second: "1", third: "0", fourth: "0", fifth: "0"},
"4": {first: "4", second: "2", third: "0", fourth: "0", fifth: "0"},
"5": {first: "5", second: "3", third: "1", fourth: "0", fifth: "0"},
"6": {first: "5", second: "4", third: "2", fourth: "0", fifth: "0"},
"7": {first: "5", second: "5", third: "3", fourth: "1", fifth: "0"},
"8": {first: "5", second: "5", third: "4", fourth: "2", fifth: "0"},
"9": {first: "5", second: "5", third: "5", fourth: "3", fifth: "1"},
};
on("change:pc_lvl sheet:opened", function() {
getAttrs(["pc_lvl"], function(values) {
let LVL = values.pc_lvl;
if (!spelltable.hasOwnProperty( LVL )) {
console.log("Error: The item " + LVL + " is not found within the race Object.");
return;
}
setAttrs({
"pc_spell_1": spelltable[LVL].first,
"pc_spell_2": spelltable[LVL].second,
"pc_spell_3": spelltable[LVL].third,
"pc_spell_4": spelltable[LVL].fourth,
"pc_spell_5": spelltable[LVL].fifth,
});
});
});
on("change:pc_class change:config_custom_grimoire sheet:opened", function() {
getAttrs(["pc_class", "config_custom_grimoire"], function(values) {
let CLAS = values.pc_class;
let CUSTOM = parseInt(values.config_custom_grimoire,10)||0;
let m = 0;
if (CLAS === "Mage") m = 1;
if (CLAS === "Zélote") m = 1;
if (CUSTOM === 1) m = 1;
setAttrs({
pc_spell_ability: m
});
});
});
// === NPC CALC
const math = {
"1/4": {damage: "1d4", hp: "1", base: "+2", strong: "+2", weak: "-2"},
"1/2": {damage: "1d6", hp: "2", base: "+2", strong: "+2", weak: "-2"},
"1": {damage: "1d8", hp: "5", base: "+2", strong: "+3", weak: "-2"},
"2": {damage: "1d10", hp: "9", base: "+3", strong: "+4", weak: "-1"},
"3": {damage: "1d12", hp: "13", base: "+3", strong: "+5", weak: "-1"},
"4": {damage: "2d6", hp: "17", base: "+4", strong: "+6", weak: "+0"},
"5": {damage: "2d8", hp: "21", base: "+4", strong: "+7", weak: "+0"},
"6": {damage: "2d10", hp: "25", base: "+5", strong: "+8", weak: "+1"},
"7": {damage: "2d12", hp: "29", base: "+5", strong: "+9", weak: "+1"},
"8": {damage: "3d8", hp: "33", base: "+6", strong: "+10", weak: "+2"},
"9": {damage: "3d8+1", hp: "37", base: "+6", strong: "+11", weak: "+2"},
"10": {damage: "3d8+2", hp: "41", base: "+7", strong: "+12", weak: "+3"},
"11": {damage: "3d10", hp: "45", base: "+7", strong: "+12", weak: "+3"},
"12": {damage: "3d10+1", hp: "49", base: "+8", strong: "+12", weak: "+4"},
"13": {damage: "3d10+2", hp: "53", base: "+8", strong: "+12", weak: "+4"},
"14": {damage: "3d12", hp: "57", base: "+9", strong: "+12", weak: "+5"},
"15": {damage: "3d12+1", hp: "61", base: "+9", strong: "+12", weak: "+5"},
"16": {damage: "3d12+2", hp: "65", base: "+10", strong: "+12", weak: "+6"},
"17": {damage: "4d10", hp: "69", base: "+10", strong: "+12", weak: "+6"},
"18": {damage: "4d10+1", hp: "73", base: "+10", strong: "+12", weak: "+7"},
};
const categorie = {
"Brute": {strong: "FOR/CON", strongdesc: "morale, tenir la ligne, résistance", weak: "INT/DEX", weakdesc: "furtivité, finesse, perception, tactique"},
"Meneur": {strong: "INT/CHA", strongdesc: "magie, commandement, entouré de sbires", weak: "FOR/CON", weakdesc: "combat, isolé, résistance"},
"Prédateur": {strong: "INT", strongdesc: "offensive, furtivité, patience, ruse", weak: "CON", weakdesc: "résistance, morale, combat direct"},
"Contrôleur": {strong: "SAG/INT", strongdesc: "forcer le mouvement, changer l'environnement", weak: "-", weakdesc: "combat en mêlée, être incapable de s'esquiver"},
"Sniper": {strong: "DEX/SAG", strongdesc: "combat à distance, perception", weak: "CON/FOR", weakdesc: "mêlée, résistance, morale"},
"Soldat": {strong: "FOR/DEX", strongdesc: "combat, morale, discipline de groupe", weak: "-", weakdesc: "magie, vitesse, l'absence de commandement, furtivité"},
};
const tech = {
"Drain de caractéristique": {desc: "Les attaques réussies réduisent temporairement (de manière permanente à partir d'HD 5+) d'1d6 une caractéristique (choisissez le type à la création)."},
"Adepte": {desc: "Choisissez jusqu'à deux sorts des listes de magie des arcanes ou divine. La somme des niveaux de ces sorts ne peut excéder le HD de la créature. Les sorts peuvent être lancés une fois par rencontre."},
"Altération de l'environnement": {desc: "Zone de 9m/HD. La créature peut créer de nouveaux dangers ou modifier le champs de bataille (pierre, plantes, météorologie, mécanique, sens, magie)."},
"Décharge": {desc: "Cône de 3m/2HD. Dégâts : 1d6/2HD. Les cibles doivent réussir une sauvegarde pour résister ou esquiver. 1 charge par combat/3HD."},
"Explosion": {desc: "Sphère de 1m50/HD. Dégâts : 1d6/HD. Les cibles doivent réussir une sauvegarde pour résister ou esquiver. 1 charge par combat/3HD."},
"Bonus conditionnel": {desc: "Gagne un bonus lorsqu'un critère particulier est rempli (ex : plus de dégâts en forêt, bonus à la CA dans l'obscurité...)."},
"Infliger une condition": {desc: "Les attaques réussies imposent une condition à la cible (aveuglé, assourdi, paralysé, hébété, charmé...)."},
"Multi-attaque": {desc: "1 attaque supplémentaire/3HD."},
"Résistance ou immunité": {desc: "demi-dégâts ou immunité à un type de dégâts."},
"Bouger": {desc: "Cible: 1/2HD. Effectuez une attaque contre chaque cible. Chaque cible touchée effectue un mouvement forcé de 3m/5HD."},
"Mouvement spécial": {desc: "Disposez d'un mouvement spécial dans certaines conditions (vol, enfouissement, éthéré, aquatique, bond, téléportation, grande vitesse, escalade...)."},
};
on("change:hd", function () {
getAttrs(["hd"], function(values) {
let valeur = values.hd
if (!math.hasOwnProperty( valeur )) {
console.log("Error: The item " + valeur + " is not found within the race Object.");
return;
}
setAttrs({
"npc_bonus_atk": parseInt(math[valeur].strong,10)||0,
"npc_damage": math[valeur].damage,
"npc_hp_max": math[valeur].hp,
"npc_base_mod": parseInt(math[valeur].base,10)||0,
"npc_strong_mod": parseInt(math[valeur].strong,10)||0,
"npc_weak_mod": parseInt(math[valeur].weak,10)||0
});
});
});
on("change:npc_type", function () {
getAttrs(["npc_type"], function(values) {
let role = values.npc_type
if (!categorie.hasOwnProperty( role )) {
console.log("Error: The item " + role + " is not found within the race Object.");
return;
}
setAttrs({
"npc_strong_attribute": getTranslationByKey(categorie[role].strong),
"npc_strong_desc": getTranslationByKey(categorie[role].strongdesc),
"npc_weak_attribute": getTranslationByKey(categorie[role].weak),
"npc_weak_desc": getTranslationByKey(categorie[role].weakdesc),
});
});
});
on("change:repeating_technique", function () {
getAttrs(["repeating_technique_npc_technique_name"], function(values) {
let x = values.repeating_technique_npc_technique_name
if (!tech.hasOwnProperty( x )) {
console.log("Error: The item " + x + " is not found within the race Object.");
return;
}
setAttrs({
"repeating_technique_npc_technique_desc": tech[x].desc,
});
});
});
// === ITEMS LOAD CALC
const repeatingSum = (destination, section, fields, multiplier = 1) => {
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 => {
console.log("===== values of v: "+ JSON.stringify(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});
});
});
};
on('change:repeating_inventory remove:repeating_inventory', function() {
repeatingSum("pc_load1","inventory","pc_item_load");
});
on("change:pc_load1 change:pc_sup", function() {
getAttrs(["pc_load1", "pc_sup"], function(values) {
let lo1 = parseInt(values.pc_load1,10)||0;
let lo2 = parseInt(values.pc_sup,10)||0;
let lo3 = Math.round(lo2/5);
let lo = lo1 + lo3;
setAttrs({
"pc_load": lo,
});
});
});
// === TO GM WHISP MODE
const gmmode = {
"1": {desc: "/w gm"},
"0": {desc: " "}
};
on("change:togmcheck sheet:opened", function () {
getAttrs(["togmcheck"], function(values) {
let gm = parseInt(values.togmcheck,10)||0;
if (!gmmode.hasOwnProperty( gm )) {
console.log("Error: The item " + gm + " is not found within the race Object.");
return;
};
setAttrs({
"togm": gmmode[gm].desc,
});
});
});
// === MAGIC MISHAP ROLLTABLE
on("change:config_mishap change:config_advantage", function () {
getAttrs(["config_mishap"], function(values) {
let mishap = values.config_mishap;
let roll = 0;
if (mishap === "0") roll = "@{togm} &{template:ftdroll} {{name=@{character_name}}} {{test_name=Test de Magie divine}} {{always=[[@{config_advantage}]]}} {{r1=[[1d20+@{pc_divine}]]}} {{r2=[[1d20+@{pc_divine}]]}}";
if (mishap === "1") roll = "@{togm} &{template:ftdmagicroll} {{name=@{character_name}}} {{test_name=Test de Magie divine}} {{always=[[@{config_advantage}]]}} {{r1=[[1d20+@{pc_divine}]]}} {{r2=[[1d20+@{pc_divine}]]}} {{r3=[[1t[@{config_mishap_divine}]]]}}";
setAttrs({
"divine_roll_value": roll
});
});
});
on("change:config_mishap change:config_advantage", function () {
getAttrs(["config_mishap"], function(values) {
let mishap = values.config_mishap;
let roll = 0;
if (mishap === "0") roll = "@{togm} &{template:ftdroll} {{name=@{character_name}}} {{test_name=Test de Magie des Arcanes}} {{always=[[@{config_advantage}]]}} {{r1=[[1d20+@{pc_arcane}]]}} {{r2=[[1d20+@{pc_arcane}]]}}";
if (mishap === "1") roll = "@{togm} &{template:ftdmagicroll} {{name=@{character_name}}} {{test_name=Test de Magie des Arcanes}} {{always=[[@{config_advantage}]]}} {{r1=[[1d20+@{pc_arcane}]]}} {{r2=[[1d20+@{pc_arcane}]]}} {{r3=[[1t[@{config_mishap_arcane}]]]}}";
setAttrs({
"arcane_roll_value": roll
});
});
});
// === ROLL QUERIES TRANSLATION
on("sheet:opened", function(eventInfo){
setAttrs({
profmacro: getTranslationByKey("Maîtrise applicable ?"),
yesmacro: getTranslationByKey("Oui"),
nomacro: getTranslationByKey("Non"),
attrmacro: getTranslationByKey("Caractéristiques"),
wepmacro: getTranslationByKey("Armes"),
magmacro: getTranslationByKey("Magie"),
sensmacro: getTranslationByKey("Sens"),
standardmacro: getTranslationByKey("Jets") + " @{npc_base_mod}",
strongmacro: getTranslationByKey("Forces") + " @{npc_strong_mod}",
weakmacro: getTranslationByKey("Faiblesses") + " @{npc_weak_mod}",
attrbuttonmacro : "[" + getTranslationByKey("strength") + "(@{pc_strengthMod})](~strength) [" + getTranslationByKey("dexterity") + "(@{pc_dexterityMod})](~dexterity) [" + getTranslationByKey("constitution") + "(@{pc_constitutionMod})](~constitution) [" + getTranslationByKey("intelligence") + "(@{pc_intelligenceMod})](~intelligence) [" + getTranslationByKey("wisdom") + "(@{pc_wisdomMod})](~wisdom) [" + getTranslationByKey("charisma") + "(@{pc_charismaMod})](~charisma)",
magbuttonmacro : "[" + getTranslationByKey("arcane") + "(@{pc_arcane})](~arcana) [" + getTranslationByKey("divine") + "(@{pc_divine})](~divine)",
sensbuttonmacro : "[" + getTranslationByKey("perception") + "(@{pc_perception})](~perception)" + " [" + getTranslationByKey("initiative") + "(@{pc_dexterity})](~initiative)",
standardbuttonmacro : "[" + getTranslationByKey("roll") + "](~npc_base) [" + getTranslationByKey("attack") + "](~npc_attack) [" + getTranslationByKey("damage") + "](~npc_damage)",
strongbuttonmacro : "[" + getTranslationByKey("Test (force)") + "](~npc_strong)",
weakbuttonmacro : "[" + getTranslationByKey("Test (faiblesse)") + "](~npc_weak)"
});
});
</script>