Files
roll20-character-sheets-tester/ChroniquesOubliees/co.html
T

2208 lines
105 KiB
HTML

<div class="mainBg"> <!-- FDP -->
<input type="hidden" name="attr_version" value="3.3" />
<input type="hidden" name="attr_pnj_default_jets_caches" value="false" />
<!-- INPUT HIDDEN TYPE DE JETS -->
<input type="hidden" name="attr_jetnormal" value="1d@{ETATDE}" />
<input type="hidden" name="attr_jetsup" value="2d@{ETATDE}kh1" />
<input type="hidden" name="attr_jetsuphero" value="{2d@{ETATDE}kh1, 0d20+10}kh1" />
<input type="hidden" name="attr_max_attack_label" value=0 />
<!-- FIN Type de jets -->
<div class="container"><!-- Identité -->
<div style="vertical-align: middle;text-align: center;">
<img style="width:70%;" title="Version 2.2 - 07/15/2019" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOubliees/CO_Logo3.png"/><br>
</div>
<div style="width:250px;">
<table>
<tr><td class="textfatleft">Nom</td><td colspan="3"><input class="nobox" name="attr_character_name" type="text" /></td></tr>
<tr><td class="textfatleft">Race</td><td colspan="3"><input class="nobox" name="attr_race" type="text" /></td></tr>
<tr><td class="textfatleft">Profil</td><td colspan="3"><input class="nobox" name="attr_profil" type="text" /></td></tr>
<tr>
<td class="textfatleft">Niveau</td>
<td style="text-align:left;"><input class="nobox" name="attr_niveau" type="number" value="1" min="0" /></td>
<td class="textfatleft">Type</td>
<td class="boxinput">
<select class="carac" name="attr_type_personnage" size="1" title="@{type_personnage}">
<option value="PJ" selected>PJ</option>
<option value="PNJ">PNJ</option>
</select>
</td>
</tr>
</table>
</div>
<div style="width:130px;">
<table>
<tr><td class="textfatleft">Sexe</td><td><input class="nobox" name="attr_sexe" type="text" /></td></tr>
<tr><td class="textfatleft">Âge</td><td><input class="nobox" name="attr_age" type="text" /></td></tr>
<tr><td class="textfatleft">Taille</td><td><input class="nobox" name="attr_taille" type="text" /></td></tr>
<tr><td class="textfatleft">Poids</td><td><input class="nobox" name="attr_POIDS" type="text" /></td></tr>
</table>
</div>
</div> <!-- FIN Identité -->
<input type="radio" name="attr_type_personnage" class="hidden-tab fp1" value="PJ" checked="checked"><span title="Personnage"></span>
<input type="radio" name="attr_type_personnage" class="hidden-tab fp2" value="PNJ"><span title="PNJ"></span>
<div class="tab-content fp1">
<input type="radio" name="attr_tab" class="tab tab1" value="caracteristiques" checked="checked"><span title="Caractéristiques"></span>
<input type="radio" name="attr_tab" class="tab tab2" value="Capacites"><span title="Capacités"></span>
<input type="radio" name="attr_tab" class="tab tab3" value="Equipement"><span title="Équipement"></span>
<input type="radio" name="attr_tab" class="tab tab4" value="Options"><span title="Options"></span>
<img class="imghr-up" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOubliees/co_hr.png" />
<div class="tab-content tab1">
<div> <!-- Caracs + combat + PV + défense -->
<table>
<tr>
<td style="width:250px;"> <!-- Caracs -->
<table class="tabsep">
<tr>
<td class="textfat-car">CARAC.</td>
<td></td>
<td class="textbase-car">Valeur</td>
<td class="textfat-car">Mod.</td>
<td class="textbase-car">Bonus</td>
<td class="textfat-car">Test</td>
</tr>
<tr>
<td class="boxtitre-car">
<button class="boxtitre-car" type="roll" name="roll_FOR" title="Jet de Force" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Force}} {{subtags=Caractéristique}} {{carac=[[ @{FOR_SUP}[Dé] + [[@{FOR_TEST}]][Bonus] ]] }}"> FOR</button>
</td>
<td class="boxinputlight-car">
<select class="selectmin-car" name="attr_FOR_SUP" title="Caractéristique Normale ou Supérieure (Règle optionnelle page 138)">
<option value="@{jetnormal}" selected>N Normale</option>
<option value="@{jetsup}">S Supérieure OU Héroïque</option>
<option value="@{jetsuphero}">H Supérieure ET Héroïque</option>
</select>
</td>
<td class="boxinput-car">
<input type="number" class="car" name="attr_FORCE" title="Force" value="10" min="0"/>
</td>
<td class="boxinputlight-car"><input type="number" class="car" name="attr_FOR" value="floor((@{FORCE}-10)/2)" disabled /></td>
<td class="boxinput-car"><input type="number" class="car" name="attr_FOR_BONUS" value="0" title="Bonus au Test" /></td>
<td class="boxinputlight-car"><input type="number" class="car" name="attr_FOR_TEST" value="@{FOR}+@{FOR_BONUS}" disabled /></td>
</tr>
<tr>
<td class="boxtitre-car">
<button class="boxtitre-car" type="roll" name="roll_DEX" title="Jet de Dextérité" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Dextérité}} {{subtags=Caractéristique}} {{carac=[[ @{DEX_SUP}[Dé] + [[@{DEX_TEST}]][Bonus] ]]}}"> DEX</button>
</td>
<td class="boxinputlight-car">
<select class="selectmin-car" name="attr_DEX_SUP" title="Caractéristique Normale ou Supérieure (Règle optionnelle page 138)">
<option value="@{jetnormal}" selected>N Normale</option>
<option value="@{jetsup}">S Supérieure OU Héroïque</option>
<option value="@{jetsuphero}">H Supérieure ET Héroïque</option>
</select>
</td>
<td class="boxinput-car">
<input type="number" class="car" name="attr_DEXTERITE" title="Dextérité" value="10" min="0" />
</td>
<td class="boxinputlight-car"><input type="number" class="car" name="attr_DEX" value="floor((@{DEXTERITE}-10)/2)" disabled /></td>
<td class="boxinput-car"><input type="number" class="car" name="attr_DEX_BONUS" value="0" title="Bonus au Test" /></td>
<td class="boxinputlight-car"><input type="number" class="car" name="attr_DEX_TEST" value="@{DEX}+@{DEX_BONUS}-((@{DEFARMUREON}*@{DEFARMUREMALUS})+(@{DEFBOUCLIERON}*@{DEFBOUCLIERMALUS}))" disabled /></td>
</tr>
<tr>
<td class="boxtitre-car">
<button class="boxtitre-car" type="roll" name="roll_CON" title="Jet de Constitution" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Constitution}} {{subtags=Caractéristique}} {{carac=[[ @{CON_SUP}[Dé] + [[@{CON_TEST}]][Bonus] ]]}}"> CON</button>
</td>
<td class="boxinputlight-car">
<select class="selectmin-car" name="attr_CON_SUP" title="Caractéristique Normale ou Supérieure (Règle optionnelle page 138)">
<option value="@{jetnormal}" selected>N Normale</option>
<option value="@{jetsup}">S Supérieure OU Héroïque</option>
<option value="@{jetsuphero}">H Supérieure ET Héroïque</option>
</select>
</td>
<td class="boxinput-car">
<input type="number" class="car" name="attr_CONSTITUTION" title="Constitution" value="10" min="0" />
</td>
<td class="boxinputlight-car"><input type="number" class="car" name="attr_CON" value="floor((@{CONSTITUTION}-10)/2)" disabled /></td>
<td class="boxinput-car"><input type="number" class="car" name="attr_CON_BONUS" value="0" title="Bonus au Test" /></td>
<td class="boxinputlight-car"><input type="number" class="car" name="attr_CON_TEST" value="@{CON}+@{CON_BONUS}" disabled /></td>
</tr>
<tr>
<td class="boxtitre-car">
<button class="boxtitre-car" type="roll" name="roll_INT" title="Jet d'Intelligence" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Intelligence}} {{subtags=Caractéristique}} {{carac=[[ @{INT_SUP}[Dé] + [[@{INT_TEST}]][Bonus] ]]}}"> INT</button>
</td>
<td class="boxinputlight-car">
<select class="selectmin-car" name="attr_INT_SUP" title="Caractéristique Normale ou Supérieure (Règle optionnelle page 138)">
<option value="@{jetnormal}" selected>N Normale</option>
<option value="@{jetsup}">S Supérieure OU Héroïque</option>
<option value="@{jetsuphero}">H Supérieure ET Héroïque</option>
</select>
</td>
<td class="boxinput-car">
<input type="number" class="car" name="attr_INTELLIGENCE" title="Intelligence" value="10" min="0" />
</td>
<td class="boxinputlight-car"><input type="number" class="car" name="attr_INT" value="floor((@{INTELLIGENCE}-10)/2)" disabled /></td>
<td class="boxinput-car"><input type="number" class="car" name="attr_INT_BONUS" value="0" title="Bonus au Test" /></td>
<td class="boxinputlight-car">
<input type="number" class="car" name="attr_INT_TEST" value="@{INT}+@{INT_BONUS}" disabled />
</td>
</tr>
<tr>
<td class="boxtitre-car">
<button class="boxtitre-car" type="roll" name="roll_SAG" title="Jet de Sagesse" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Sagesse}} {{subtags=Caractéristique}} {{carac=[[ @{SAG_SUP}[Dé] + [[@{SAG_TEST}]][Bonus] ]]}}"> SAG</button>
</td>
<td class="boxinputlight-car">
<select class="selectmin-car" name="attr_SAG_SUP" title="Caractéristique Normale ou Supérieure (Règle optionnelle page 138)">
<option value="@{jetnormal}" selected>N Normale</option>
<option value="@{jetsup}">S Supérieure OU Héroïque</option>
<option value="@{jetsuphero}">H Supérieure ET Héroïque</option>
</select>
</td>
<td class="boxinput-car">
<input type="number" class="car" name="attr_SAGESSE" title="Sagesse" value="10" min="0" />
</td>
<td class="boxinputlight-car"><input type="number" class="car" name="attr_SAG" value="floor((@{SAGESSE}-10)/2)" disabled /></td>
<td class="boxinput-car"><input type="number" class="car" name="attr_SAG_BONUS" value="0" title="Bonus au Test" /></td>
<td class="boxinputlight-car">
<input type="number" class="car" name="attr_SAG_TEST" value="@{SAG}+@{SAG_BONUS}" disabled />
</td>
</tr>
<tr>
<td class="boxtitre-car">
<button class="boxtitre-car" type="roll" name="roll_CHA" title="Jet de Charisme" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Charisme}} {{subtags=Caractéristique}} {{carac=[[ @{CHA_SUP}[Dé] + [[@{CHA_TEST}]][Bonus] ]]}}"> CHA</button>
</td>
<td class="boxinputlight-car">
<select class="selectmin-car" name="attr_CHA_SUP" title="Caractéristique Normale ou Supérieure (Règle optionnelle page 138)">
<option value="@{jetnormal}" selected>N Normale</option>
<option value="@{jetsup}">S Supérieure OU Héroïque</option>
<option value="@{jetsuphero}">H Supérieure ET Héroïque</option>
</select>
</td>
<td class="boxinput-car">
<input type="number" class="car" name="attr_CHARISME" title="Charisme" value="10" min="0" />
</td>
<td class="boxinputlight-car"><input type="number" class="car" name="attr_CHA" value="floor((@{CHARISME}-10)/2)" disabled /></td>
<td class="boxinput-car"><input type="number" class="car" name="attr_CHA_BONUS" value="0" title="Bonus au Test" /></td>
<td class="boxinputlight-car">
<input type="number" class="car" name="attr_CHA_TEST" value="@{CHA}+@{CHA_BONUS}" disabled />
</td>
</tr>
<tr>
<td class="textfat">ÉTAT</td>
<td class="boxinputlight" COLSPAN="5">
<input type="radio" name="attr_ETATDE" value="20" checked/>Normal (d20) &nbsp;
<input type="radio" name="attr_ETATDE" value="12"/>Affaibli (d12)
</td>
</tr>
</table>
</td> <!-- FIN Caracs -->
<td style="width:100%;"> <!-- Combat + PV + défense -->
<table>
<tr>
<td> <!-- Combat -->
<table class="tabsep">
<tr>
<td class="textfat-atk">COMBAT</td>
<td class="textbase-atk">Base</td>
<td class="textbase-atk">Mod.</td>
<td class="textbase-atk">Bonus</td>
<td class="textfat-atk">Total</td>
</tr>
<tr>
<td class="boxtitre-atk"><button class="boxtitre-atk" type="roll" name="roll_CAC" title="Jet d'attaque au contact" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Au Contact}} {{subtags=Attaque}} {{attaque=[[1d@{ETATDE}[Dé] + [[@{ATKCAC}]][Bonus] ]]}}"> AU CONTACT</button></td>
<td class="boxinputlight-atk"><input type="number" name="attr_ATKCAC_NIV" value="@{niveau}" title="Niveau" disabled class="atk"/></td>
<td class="boxinput-atk">
<select class="carac-atk" name="attr_ATKCAC_CARAC" size="1">
<option value="@{FOR}" selected>FOR</option>
<option value="@{DEX}">DEX</option>
<option value="@{CON}">CON</option>
<option value="@{INT}">INT</option>
<option value="@{SAG}">SAG</option>
<option value="@{CHA}">CHA</option>
</select>
</td>
<td class="boxinput-atk"><input type="number" name="attr_ATKCAC_DIV" title="Bonus divers" value="0" class="atk" /></td>
<td class="boxinputlight-atk"><input type="number" class="atk" name="attr_ATKCAC" value="@{ATKCAC_NIV}+@{ATKCAC_CARAC}+@{ATKCAC_DIV}" disabled /></td>
</tr>
<tr>
<td class="boxtitre-atk"><button class="boxtitre-atk" type="roll" name="roll_TIR" title="Jet d'attaque à distance" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=&Agrave; Distance}} {{subtags=Attaque}} {{attaque=[[ 1d@{ETATDE}[Dé] + [[@{ATKTIR}]][Bonus] ]]}}"> &Agrave; DISTANCE</button></td>
<td class="boxinputlight-atk"><input type="number" class="atk" name="attr_ATKTIR_NIV" value="@{niveau}" title="Niveau" disabled /></td>
<td class="boxinput">
<select class="carac-atk" name="attr_ATKTIR_CARAC" size="1">
<option value="@{FOR}">FOR</option>
<option value="@{DEX}" selected>DEX</option>
<option value="@{CON}">CON</option>
<option value="@{INT}">INT</option>
<option value="@{SAG}">SAG</option>
<option value="@{CHA}">CHA</option>
</select>
</td>
<td class="boxinput-atk"><input type="number" class="atk" name="attr_ATKTIR_DIV" title="Bonus divers" value="0" /></td>
<td class="boxinputlight-atk"><input type="number" class="atk" name="attr_ATKTIR" value="@{ATKTIR_NIV}+@{ATKTIR_CARAC}+@{ATKTIR_DIV}" disabled /></td>
</tr>
<tr>
<td class="boxtitre-atk"><button class="boxtitre-atk" type="roll" name="roll_MAG" title="Jet d'attaque magique" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Magique}} {{subtags=Attaque}} {{attaque=[[ 1d@{ETATDE}[Dé] + [[@{ATKMAG}]][Bonus] ]]}}"> MAGIQUE</button></td>
<td class="boxinputlight-atk"><input type="number" class="atk" name="attr_ATKMAG_NIV" value="@{niveau}" title="Niveau" disabled /></td>
<td class="boxinput-atk">
<select class="carac-atk" name="attr_ATKMAG_CARAC" size="1">
<option value="@{FOR}">FOR</option>
<option value="@{DEX}">DEX</option>
<option value="@{CON}">CON</option>
<option value="@{INT}" selected>INT</option>
<option value="@{SAG}">SAG</option>
<option value="@{CHA}">CHA</option>
</select>
</td>
<td class="boxinput-atk"><input type="number" class="atk" name="attr_ATKMAG_DIV" title="Bonus divers" value="0" /></td>
<td class="boxinputlight-atk"><input type="number" class="atk" name="attr_ATKMAG" value="@{ATKMAG_NIV}+@{ATKMAG_CARAC}+@{ATKMAG_DIV}" disabled /></td>
</tr>
<tr>
<td class="boxtitre-init"><button class="boxtitre-init" type="roll" name="roll_INIT" title="Initiative" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Initiative}} {{subtags=Combat}} {{carac=[[@{INIT} &{tracker}]]}}"> INITIATIVE</button></td>
<td class="boxinputlight-init"><input type="number" class="init" name="attr_INIT_CARAC" value="@{DEXTERITE}" title="Dextérité" disabled /></td>
<td>&nbsp;</td>
<td class="boxinput-init"><input type="number" class="init" name="attr_INIT_DIV" title="Bonus divers" value="0" /></td>
<td class="boxinputlight-init"><input type="number" class="init" name="attr_INIT" value="@{INIT_CARAC}+@{INIT_DIV}" disabled /></td>
</tr>
</table>
</td> <!-- FIN Combat -->
<td> <!-- PV -->
<table class="tabsep">
<tr>
<td class="textfat-pv">VITALITÉ</td>
<td class="textfat-pv">&nbsp;</td>
</tr>
<tr>
<td class="boxtitre-pv"><button class="boxtitre-pv" type="roll" name="roll_DV" title="Jet de Dé de Vie" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Dé de Vie}} {{subtags=Vitalité}} {{DV=[[ 1d@{DV}[Dé] + [[@{CON}]][CON] ]]}}"> DV</button></td>
<td class="boxinput-pv">
<select class="carac-pv" name="attr_DV" size="1" title="Dé de Vie">
<option value="0" selected >-</option>
<option value="4">d4</option>
<option value="6">d6</option>
<option value="8">d8</option>
<option value="10">d10</option>
<option value="12">d12</option>
</select>
</td>
</tr>
<tr>
<td class="sheet-boxtitre-pv">PV</td>
<td class="sheet-boxinput-pv"><input type="number" class="pv" name="attr_PV_max" title="Points de Vie maximum" value="0" /></td>
</tr>
<tr>
<td class="boxinput-pv" COLSPAN="2">
<span class="textbase-pv">PV restants</span>&nbsp;
<input type="number" class="pv" name="attr_PV" title="Points de Vie restants" value="0" />
</td>
</tr>
<tr>
<td class="boxinput-pv" COLSPAN="2">
<span class="textbase-pv">DM temp.</span>&nbsp;
<input type="number" class="pv" name="attr_DMTEMP" title="Dommages Temporaires" value="0" />
</td>
</tr>
</table>
<input type="checkbox" class="optional-block-switch" name="attr_option_pr" value="1" checked><span></span>
<div class="optional-block">
<table class="tabsep">
<tr>
<td class="boxtitre-pv"><button class="boxtitre-pv" type="roll" title="Jet de Récupération (1DV+CON+NIVEAU)" name="roll_RECUP" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Récupération}} {{subtags=Vitalité}} {{DV=[[1d@{DV}+[[@{CON}]]+@{niveau}]]}}"> PR</button></td>
<td class="boxinput-pv">
<input type="checkbox" class="pv" name="attr_PR1" value="1" title="Point de Récupération 1 (page 80)" />
<input type="checkbox" class="pv" name="attr_PR2" value="1" title="Point de Récupération 2 (page 80)" />
<input type="checkbox" class="pv" name="attr_PR3" value="1" title="Point de Récupération 3 (page 80)" />
<input type="checkbox" class="pv" name="attr_PR4" value="1" title="Point de Récupération 4 (page 80)" />
<input type="checkbox" class="pv" name="attr_PR5" value="1" title="Point de Récupération 5 (page 80)" />
</td>
</tr>
</table>
</div>
</td> <!-- FIN PV -->
</tr>
<tr>
<td> <!-- Défense -->
<table class="tabsep">
<tr>
<td class="textfat-def">DÉFENSE</td>
<td class="textbase-def">
Armure
<input type="checkbox" class="def" name="attr_DEFARMUREON" value="1" title="Armure portée" />
</td>
<td class="textbase-def">
Bouclier
<input type="checkbox" class="def" name="attr_DEFBOUCLIERON" value="1" title="Bouclier équipé" />
</td>
<td class="textbase-def">DEX</td>
<td class="textbase-def">Div.</td>
<td class="textfat-def">Total</td>
</tr>
<tr>
<td class="boxtitre-def">DEF</td>
<td class="boxinput-def"><input type="number" class="def" name="attr_DEFARMURE" title="Armure" value="0" min="0" /></td>
<td class="boxinput-def"><input type="number" class="def" name="attr_DEFBOUCLIER" title="Bouclier" value="0" min="0" /></td>
<td class="boxinputlight-def"><input type="number" class="def" name="attr_DEFCAR" value="@{DEX}" title="Modificateur de Dextérité" disabled /></td>
<td class="boxinput-def"><input type="number" class="def" name="attr_DEFDIV" title="Bonus divers" value="0" /></td>
<td class="boxinputlight-def"><input type="number" class="def" name="attr_DEF" value="10+(@{DEFARMURE}*@{DEFARMUREON})+(@{DEFBOUCLIER}*@{DEFBOUCLIERON})+@{DEFCAR}+@{DEFDIV}" title="Défense" disabled /></td>
</tr>
<tr>
<td class="textfat-def" style="text-align: right;">Malus</td>
<td class="boxinput-def"><input type="number" class="def" name="attr_DEFARMUREMALUS" title="Malus aux Tests de DEX quand l'Amrure est portée." value="0" min="0"/></td>
<td class="boxinput-def"><input type="number" class="def" name="attr_DEFBOUCLIERMALUS" title="Malus aux Tests de DEX quand le Bouclier est équipé" value="0" min="0"/></td>
<td class="textbase-def" colspan="2">
Casque
<input type="checkbox" class="def" name="attr_casque_on" value="1" title="Casque équipé" />
</td>
</tr>
<tr>
<td class="boxtitre-def" title="Réduction(s) des DM">RD</td>
<td class="boxinput-def" colspan="2"><textarea class="def" name="attr_RDS" title="Réduction(s) des DM" spellcheck="false" placeholder="Réduction(s) des DM"></textarea></td>
<td class="boxinput-def"><input type="number" class="def" name="attr_casque_rd" title="RD du casque" value="0" /></td>
<td class="boxinput-def"><input type="number" class="def" name="attr_casque_malus" title="Malus perception du casque" value="0" /></td>
</tr>
</table>
</td>
<td>
<div><!-- option points de chance -->
<input type="checkbox" class="optional-block-switch" name="attr_option_pc" value="1" checked><span></span>
<div class="optional-block">
<input type="hidden" name="attr_pc_base" value="3" />
<input type="hidden" name="attr_pc_max" value="3" />
<table class="tabsep">
<tr>
<td class="textfat-chance" colspan=2 >CHANCE</td>
<td class="textbase-chance">Div.</td>
<td class="textfat-chance">Total</td>
</tr>
<td class="boxtitre-chance">PC</td>
<td class="boxinputlight-chance"><span class="input" class="chance" name="attr_pc_base" /></td>
<td class="boxinputlight-chance"><input type="number" class="chance" name="attr_pc_bonus" value="0" /></td>
<td class="boxinput-chance"><input type="number" class="chance" name="attr_pc" value="3" min="0" /> <span class="input">/</span> <span class="input" name="attr_pc_max" /></td>
<tr>
</tr>
</table>
</div>
</div><!-- fin des points de chance -->
<input type="checkbox" class="optional-block-switch" name="attr_option_pm" value="1" checked><span></span>
<input type="checkbox" class="optional-block-switch" name="attr_option_epuisement" value="1" ><span></span>
<div class="optional-block">
<input type="checkbox" class="block-switch" name="attr_magie" value="1" checked><span></span>
<div class=block-hidden><span class=textbasesmall>Pas de magie</span> </div>
<div class=block-show>
<span class="textfat-chance">&nbsp;&nbsp;&nbsp;MAGIE</span>
<div>
<input type="checkbox" class="optional-block-switch" name="attr_option_pm" value="1" checked><span></span>
<div class="optional-block">
<table class="tabsep">
<tr>
<td class="boxtitre-chance">PM</td>
<td class="boxinput-chance"><input type="number" class="chance" name="attr_pm" min="0"/> <span class="input">/</span> <input type="number" class="chance" name="attr_pm_max" min="0"/></td>
</tr>
</table>
</div>
</div>
<input type="checkbox" class="optional-block-switch" name="attr_option_epuisement" value="1" ><span></span>
<div class="optional-block">
<table class="tabsep">
<tr>
<td class="boxtitre-chance">Épuisement</td>
<td class="boxinput-chance">
<input type="number" class="chance" name="attr_epuisement" value="0" title="Épuisement magique (page 180)" />
<button type="roll" class="chance" title="@roll{roll_epmag} Jet d'épuisement magique" class="neutre" name="roll_epmag" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Épuisement}} {subtags=Magie} {{carac=[[(1d@{ETATDE}[Dé] + [[@{ATKMAG}]][Bonus])]] > [[@{epuisement}]]}}"/>
</td>
</tr>
</table>
</div>
</div>
</div><!-- fin de la magie -->
</td>
</tr>
</table>
</td> <!-- FIN Combat + PV + défense + options -->
</tr>
</table>
</div> <!-- FIN Caracs + combat + PV + défense -->
<img class="imghr" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOubliees/co_hr.png" />
<div> <!-- Armes -->
<table class="tabsep">
<tr>
<td class="textfatleft-atk" style="width:153px;">ARMES / ATTAQUES</td>
<td class="textbase-atk" style="width:130px;">ATTAQUE</td>
<td class="textbase-atk" style="width:20px;">CRIT.</td>
<td class="textbase-atk" style="width:190px;">DM</td>
<td class="textbase-atk" style="width:50px;">PORTÉE</td>
<td class="textbase-atk">SPÉCIAL</td>
</tr>
</table>
<fieldset class="repeating_armes">
<div class="attack">
<input class="options-flag" name="attr_armeoptflag" type="checkbox"
title="Montrer/cacher les options"><span>y</span>
<div>
<table class="tabsep">
<tr>
<td>
<button type="roll" class="atk" name="roll_Arme" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=@{armenom}}} {{subtags=Attaque}} {{attaque=[[ 1d@{ETATDE}cs>@{armecrit}cf1 + [[@{armeatk}]] + @{armeatkdiv} ]]}} {{degats=[[@{armedmnbde}d@{armedmde}+[[@{armedmcar}]]+@{armedmdiv}]]}} {{special=@{armespec}}}" />
</td>
<td class="boxinputleft-atk" style="min-width:130px;">
<input type="text" class="atk" style="width:11px; text-align:right; font-size:10px" name="attr_armelabel" value=0>
<input type="text" class="atk" name="attr_armenom" style="font-weight: bold;width:94%;margin-left:-5px" placeholder="Arme/attaque"/>
</td>
<td class="boxinputleft-atk">
<select class="carac-atk" style="width: 87px;" name="attr_armeatk" size="1">
<option value="@{ATKCAC}" selected>CONTACT</option>
<option value="@{ATKTIR}">DISTANCE</option>
<option value="@{ATKMAG}">MAGIE</option>
</select>+<input type="number" class="atk" style="width:32px;" name="attr_armeatkdiv" value="0" title="Bonus d'attaque divers" />
</td>
<td class="boxinputleft-atk" style="text-align: right;">
<input type="number" class="atk" name="attr_armecrit" style="width:32px;" min="2" max="20" value="20" title="Seuil de Critique (par défaut 20)" />
</td>
<td class="boxinputleft-atk">
<input type="number" class="atk" style="width:32px;" name="attr_armedmnbde" value="1" title="Nombre de dés de dommage" />
<select class="carac-atk" style="width:47px;" name="attr_armedmde" size="1" title="Dé de dommage">
<option value="3">d3</option>
<option value="4" selected>d4</option>
<option value="6">d6</option>
<option value="8">d8</option>
<option value="10">d10</option>
<option value="12">d12</option>
</select>+<select class="carac-atk" style="width:52px;" name="attr_armedmcar" size="1" title="Modificateur aux dommages">
<option value="0">-</option>
<option value="@{FOR}" selected>FOR</option>
<option value="@{DEX}">DEX</option>
<option value="@{CON}">CON</option>
<option value="@{INT}">INT</option>
<option value="@{SAG}">SAG</option>
<option value="@{CHA}">CHA</option>
</select>+<input type="number" class="atk" style="width:32px;" name="attr_armedmdiv" value="0" title="Bonus de dommage divers" />
</td>
<td class="boxinputleft-atk" style="min-width:50px;">
<input type="text" class="atk" name="attr_armeportee" placeholder="Portée" title="Portée" />
</td>
<td class="boxinputleft-atk" style="width:100%;">
<textarea name="attr_armespec" class="atk" placeholder="Notes, capacités spéciales, effet ..." spellcheck="false" title="Notes, capacités spéciales, effet ..."></textarea>
</td>
</tr>
</table>
</div>
<div class="options">
<table class="tabsep">
<tr>
<td style="width:18px; text-align:center;">
<input type="checkbox" name="attr_armeactionvisible" title="Attaque visible dans les actions" value="1" checked>
</td>
<td class="boxinputleft-atk">
<select class="carac-atk" style="width: 122px;" name="attr_armetypeattaque" title="Type d'attaque">
<option>Naturel</option>
<option>Arme 1 main</option>
<option>Arme 2 mains</option>
<option>Sortilege</option>
<option>Arme gauche</option>
<option>Arme de jet</option>
</select>
</td>
<td class="boxinputleft-atk" style="min-width: 180px;">
<textarea name="attr_armemodificateurs" class="atk" placeholder="Liste de modificateurs" spellcheck="false" title="Modificateurs d'attaque"></textarea>
</td>
<td class="boxinputleft-atk">
<select class="carac-atk" style="width: 87px;" name="attr_armetypedegats" title="Type des dégâts">
<option>tranchant</option>
<option>contondant</option>
<option>percant</option>
<option>mental</option>
<option>feu</option>
<option>acide</option>
<option value="electrique">électrique</option>
<option>froid</option>
<option>sonique</option>
<option>poison</option>
<option>maladie</option>
<option>magique</option>
</select>
</td>
<td class="boxinputleft-atk" style="width:100%;">
<textarea name="attr_armeoptions" class="atk" placeholder="Options d'attaque avec argument" spellcheck="false" title="Options d'attaque"></textarea>
</td>
</tr>
</table>
</div>
</div>
</fieldset>
</div>
</div>
<div class="tab-content tab2">
<div> <!-- Voies -->
<tr><!-- Capa Race -->
<td COLSPAN="2" style="vertical-align:top;">
<table class="tabsep">
<tr>
<td class="boxinputleft">
<span class="textbasesmall">Capacité raciale</span><br/>
<textarea name="attr_CAPA_RACE" spellcheck="false" style="height:3em;"></textarea>
</td>
<td class="boxinputleft">
<span class="textbasesmall">Langues Connues</span><br/>
<textarea name="attr_LANGUES" spellcheck="false" style="height:3em;"></textarea>
</td>
<td class="boxinputleft">
<span class="textbasesmall">Autres capacités</span><br/>
<textarea name="attr_DIVERS" spellcheck="false" style="height:3em;"></textarea>
</td>
</tr>
</table>
</td>
</tr><!-- FIN Capa Race -->
<table>
<tr><td class="textfatleft" COLSPAN="5">CAPACITÉS DU PERSONNAGE</td></tr>
<tr>
<td class="boxtitresmall" style="width: 20px;">&nbsp;</td>
<td class="boxtitresmall">Voie 1</td>
<td class="boxtitresmall">Voie 2</td>
<td class="boxtitresmall">Voie 3</td>
</tr>
<tr>
<td class="boxtitresmall">R</td>
<td class="boxinputleft"><input type="text" style="font-weight: bold;text-align: center;" name="attr_voie1nom" placeholder="Nom de la Voie n°1" /></td>
<td class="boxinput"><input type="text" style="font-weight: bold;text-align: center;" name="attr_voie2nom" placeholder="Nom de la Voie n°2" /></td>
<td class="boxinput"><input type="text" style="font-weight: bold;text-align: center;" name="attr_voie3nom" placeholder="Nom de la Voie n°3" /></td>
</tr>
<tr>
<td class="boxtitresmall">1</td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie1-1"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie2-1"></textarea></td>
<td class="boxvoie"><textarea spellCheck="false" name="attr_voie3-1"></textarea></td>
</tr>
<tr>
<td class="boxtitresmall">2</td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie1-2"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie2-2"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie3-2"></textarea></td>
</tr>
<tr>
<td class="boxtitresmall">3</td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie1-3"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie2-3"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie3-3"></textarea></td>
</tr>
<tr>
<td class="boxtitresmall">4</td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie1-4"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie2-4"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie3-4"></textarea></td>
</tr>
<tr>
<td class="boxtitresmall">5</td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie1-5"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie2-5"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie3-5"></textarea></td>
</tr>
</table>
<table>
<tr>
<td class="boxtitresmall" style="width: 20px;">&nbsp;</td>
<td class="boxtitresmall">Voie 4</td>
<td class="boxtitresmall">Voie 5</td>
<td class="boxtitresmall">Voie de prestige</td>
</tr>
<tr>
<td class="boxtitresmall">R</td>
<td class="boxinputleft"><input type="text" style="font-weight: bold;text-align: center;" name="attr_voie4nom" placeholder="Nom de la Voie n°4" /></td>
<td class="boxinput"><input type="text" style="font-weight: bold;text-align: center;" name="attr_voie5nom" placeholder="Nom de la Voie n°5" /></td>
<td class="boxinput"><input type="text" style="font-weight: bold;text-align: center;" name="attr_voie6nom" placeholder="Nom de la Voie de Prestige" /></td>
</tr>
<tr>
<td class="boxtitresmall">1</td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie4-1"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie5-1"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie6-1"></textarea></td>
</tr>
<tr>
<td class="boxtitresmall">2</td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie4-2"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie5-2"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie6-2"></textarea></td>
</tr>
<tr>
<td class="boxtitresmall">3</td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie4-3"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie5-3"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie6-3"></textarea></td>
</tr>
<tr>
<td class="boxtitresmall">4</td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie4-4"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie5-4"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie6-4"></textarea></td>
</tr>
<tr>
<td class="boxtitresmall">5</td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie4-5"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie5-5"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie6-5"></textarea></td>
</tr>
</table>
<div>
<input type="checkbox" class="block-switch" name="attr_plus_de_voies"><span></span>
<div class="block-hidden">Plus de voies</div>
<div class="block-show">
<table>
<tr>
<td class="boxtitresmall" style="width: 20px;">&nbsp;</td>
<td class="boxtitresmall">Voie 7</td>
<td class="boxtitresmall">Voie 8</td>
<td class="boxtitresmall">Voie 9</td>
</tr>
<tr>
<td class="boxtitresmall">R</td>
<td class="boxinputleft"><input type="text" style="font-weight: bold;text-align: center;" name="attr_voie7nom" placeholder="Nom de la Voie n°7" /></td>
<td class="boxinput"><input type="text" style="font-weight: bold;text-align: center;" name="attr_voie8nom" placeholder="Nom de la Voie n°8" /></td>
<td class="boxinput"><input type="text" style="font-weight: bold;text-align: center;" name="attr_voie9nom" placeholder="Nom de la Voie n°9" /></td>
</tr>
<tr>
<td class="boxtitresmall">1</td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie7-1"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie8-1"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie9-1"></textarea></td>
</tr>
<tr>
<td class="boxtitresmall">2</td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie7-2"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie8-2"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie9-2"></textarea></td>
</tr>
<tr>
<td class="boxtitresmall">3</td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie7-3"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie8-3"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie9-3"></textarea></td>
</tr>
<tr>
<td class="boxtitresmall">4</td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie7-4"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie8-4"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie9-4"></textarea></td>
</tr>
<tr>
<td class="boxtitresmall">5</td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie7-5"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie8-5"></textarea></td>
<td class="boxvoie"><textarea spellcheck="false" name="attr_voie9-5"></textarea></td>
</tr>
</table>
</div>
</div>
<table class="tabsep">
<tr>
<td class="textfatleft" style="min-width:245px;">Jets de Capacités</td>
<td class="textbase" style="width:100%;">&nbsp;</td>
</tr>
</table>
<fieldset class="repeating_jetcapas">
<table class="tabsep">
<tr>
<td>
<button type="roll" class="neutre" name="roll_CAPA" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=@{jetcapanom}}} {{subtags=Capacité}} {{carac=[[@{jetcapanbde}d@{jetcapade}@{jetcapatypjet}+[[@{jetcapacarac}]]+@{jetcapadiv}]]}} {{desc=@{jetcapadesc}}}" />
</td>
<td class="boxinputleft" style="min-width:200px;">
<input type="text" name="attr_jetcapanom" style="font-weight: bold;" placeholder="Nom du Jet de capacité" />
</td>
<td class="textbase" style="text-align: right;">
Jet
</td>
<td class="boxinputleft">
<input type="number" style="width:32px;" name="attr_jetcapanbde" value="1" title="Nombre de dés" />
<select class="carac" style="width:50px;" name="attr_jetcapade" size="1" title="Dé">
<option value="4">d4</option>
<option value="6">d6</option>
<option value="8">d8</option>
<option value="10">d10</option>
<option value="12">d12</option>
<option value="@{ETATDE}" selected>d20 (ou d12 si Affaibli)</option>
</select>
(<select class="carac" style="width:30px;" name="attr_jetcapatypjet" size="1" title="Option du jet : normal, garder le plus bas, garder le plus haut">
<option value="">N - Normal / additionner tous les dés</option>
<option value="kh1">S - garder le dé Supérieur / le plus haut score</option>
<option value="kl1">I - garder le dé Inférieur / le plus bas score</option>
</select>)
+<select class="carac" style="width:50px;" name="attr_jetcapacarac" size="1" title="Modificateur du jet">
<option value="0">-</option>
<optgroup label="Mod. de base">
<option value="@{FOR}" selected>FOR</option>
<option value="@{DEX}">DEX</option>
<option value="@{CON}">CON</option>
<option value="@{INT}">INT</option>
<option value="@{SAG}">SAG</option>
<option value="@{CHA}">CHA</option>
</optgroup>
<optgroup label="Mod. de test">
<option value="@{FOR_TEST}">FOR</option>
<option value="@{DEX_TEST}">DEX</option>
<option value="@{CON_TEST}">CON</option>
<option value="@{INT_TEST}">INT</option>
<option value="@{SAG_TEST}">SAG</option>
<option value="@{CHA_TEST}">CHA</option>
</optgroup>
</select>+<input type="number" style="width:32px;" name="attr_jetcapadiv" value="0" title="Bonus divers" />
</td>
<td class="textbase" style="text-align: right;">
Desc.
</td>
<td class="boxinputleft" style="width:100%;">
<textarea name="attr_jetcapadesc" placeholder="Description" title="Description"></textarea>
</td>
</tr>
</table>
</fieldset>
</div> <!-- FIN Voies -->
</div>
<div class="tab-content tab3">
<div> <!-- Equipement -->
<div class="2colrow">
<div class="col">
<div class="boxtitre">ÉQUIPEMENT : Consommables</div>
<div class="boxinputleft">
<span class="textbase">Bourse&nbsp;:</span>&nbsp;
<input type="text" style="width:320px;" name="attr_BOURSE" placeholder="Rien ? C'est la pauvreté !" />
</div>
<fieldset class="repeating_equipement">
<div class="boxvoie">
<input type="text" style="width:310px;" name="attr_equip-nom" title="Équipement" />
&nbsp;<span class="textbase">Qté</span>
<input type="number" name="attr_equip-qte" value="1" title="Quantité" />
</div>
</fieldset>
<table>
<tr><td class="boxtitre">ÉQUIPEMENT : Divers</td></tr>
<tr><td class="boxinputleft"><textarea name="attr_equip-div" spellcheck="false" style="height:6em;" title="ÉQUIPEMENT DIVERS"></textarea></td></tr>
</table>
</div>
<div class="col">
<table>
<tr><td class="boxtitre">Notes</td></tr>
<tr><td class="boxinputleft"><textarea name="attr_notes" style="height:12em;" title="Notes"></textarea></td></tr>
</table>
</div>
</div>
</div> <!-- FIN Equipement -->
</div>
<div class="tab-content tab4">
<div> <!-- Options -->
<ul>
<li>Points de chance :
<input type="checkbox" name="attr_option_pc" value="1" title="@{option_pc}" checked />
</li>
<li>Points de récupération :
<input type="checkbox" name="attr_option_pr" value="1" title="@{option_pr}" checked />
</li>
<li>Magie :
<ul>
<li>Points de mana :
<input type="checkbox" name="attr_option_pm" value="1" title="@{option_pr}" checked />
</li>
<li> Épuisement magique :
<input type="checkbox" name="attr_option_epuisement" value="1" title="@{option_pr}" />
</li>
</ul>
</li>
</ul>
</div> <!-- FIN Options -->
<div>
<span class="textbase">Jets</span>&nbsp;
<select class="sheet-carac" style="width: 75px;" name="attr_jets_caches" title="@{jets_caches}" size="1">
<option value="" selected>Normaux</option>
<option value="/w gm ">Cachés</option>
</select>
</div>
</div>
</div> <!-- FIN fiche type PJ -->
<div class="tab-content fp2"> <!-- fiche type PNJ -->
<img class="imghr" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOubliees/co_hr.png" />
<div class="container">
<div style="width:375px;">
<table class="tabsep">
<tr>
<td class="boxtitre-car">
<button class="boxtitre-car" type="roll" name="roll_pnj_FOR" title="Jet de Force" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Force}} {{subtags=Caractéristique}} {{carac=[[ @{FOR_SUP}[Dé] + [[@{pnj_for}]][Bonus] ]] }}">FOR</button>
<input type="checkbox" class="car" name="attr_pnj_for_sup" title="@{pnj_for_sup}"><span></span>
</td>
<td class="boxinput">
<input type="number" class="car" name="attr_pnj_for" title="Force" value="0" />
</td>
<td class="boxtitre-car">
<button class="boxtitre-car" type="roll" name="roll_pnj_DEX" title="Jet de Dextérité" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Dextérité}} {{subtags=Caractéristique}} {{carac=[[ @{DEX_SUP}[Dé] + [[@{pnj_dex}]][Bonus] ]] }}">DEX</button>
<input type="checkbox" class="car" name="attr_pnj_dex_sup" title="@{pnj_dex_sup}"><span></span>
</td>
<td class="boxinput-car">
<input type="number" class="car" name="attr_pnj_dex" title="Dextérité" value="0" />
</td>
<td class="boxtitre-car">
<button class="boxtitre-car" type="roll" name="roll_pnj_CON" title="Jet de Constitution" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Constitution}} {{subtags=Caractéristique}} {{carac=[[ @{CON_SUP}[Dé] + [[@{pnj_con}]][Bonus] ]] }}">CON</button>
<input type="checkbox" class="car" name="attr_pnj_con_sup" title="@{pnj_con_sup}"><span></span>
</td>
<td class="boxinput-car">
<input type="number" class="car" name="attr_pnj_con" title="Constitution" value="0" />
</td>
</tr>
<tr>
<td class="boxtitre-car">
<button class="boxtitre-car" type="roll" name="roll_pnj_INT" title="Jet d'Intelligence" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Intelligence}} {{subtags=Caractéristique}} {{carac=[[ @{INT_SUP}[Dé] + [[@{pnj_int}]][Bonus] ]] }}">INT</button>
<input type="checkbox" class="car" name="attr_pnj_int_sup" title="@{pnj_int_sup}"><span></span>
</td>
<td class="boxinput-car">
<input type="number" class="car" name="attr_pnj_int" title="Intelligence" value="0" />
</td>
<td class="boxtitre-car">
<button class="boxtitre-car" type="roll" name="roll_pnj_SAG" title="Jet de Sagesse" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Sagesse}} {{subtags=Caractéristique}} {{carac=[[ @{SAG_SUP}[Dé] + [[@{pnj_sag}]][Bonus] ]] }}">SAG</button>
<input type="checkbox" class="car" name="attr_pnj_sag_sup" title="@{pnj_sag_sup}"><span></span>
</td>
<td class="boxinput-car">
<input type="number" class="car" name="attr_pnj_sag" title="Sagesse" value="0" />
</td>
<td class="boxtitre-car">
<button class="boxtitre-car" type="roll" name="roll_pnj_CHA" title="Jet de Charisme" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Charisme}} {{subtags=Caractéristique}} {{carac=[[ @{CHA_SUP}[Dé] + [[@{pnj_cha}]][Bonus] ]] }}">CHA</button>
<input type="checkbox" class="car" name="attr_pnj_cha_sup" title="@{pnj_cha_sup}"><span></span>
</td>
<td class="boxinput-car">
<input type="number" class="car" name="attr_pnj_cha" title="Charisme" value="0" />
</td>
</tr>
</table>
<table class="tabsep">
<tr>
<td class="boxtitre-def" style="width:21%">DEF</td>
<td class="boxinput-def">
<input type="number" class="def" name="attr_pnj_def" title="Défense" value="10" min="0"/>
</td>
<td class="boxtitre-pv" style="width:21%">PV</td>
<td class="boxinput-pv">
<input type="number" class="pv" name="attr_pnj_pv_max" title="PVs max" value="0" min="0"/>
</td>
<td class="boxtitre-init">
<button class="boxtitre-init" type="roll" name="roll_pnj__INIT" title="Initiative" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=Initiative}} {{subtags=Combat}} {{carac=[[@{pnj_init} &{tracker}]]}}"> INIT</button>
</td>
<td class="boxinput-init">
<input type="number" class="init" name="attr_pnj_init" title="Initiative" value="10" min="1"/>
</tr>
</table>
<div class=container>
<table class="tabsep" style="width:20%;">
<tr><td class="boxtitre-def">RD</td></tr>
<tr><td class="boxinputleft-def">
<textarea class="def" name="attr_pnj_rd" spellcheck="false" title="@{pnj_rd}"></textarea></td></tr>
</table>
<table style="width:51px">
<tr><td>
<input type="checkbox" name="attr_pnj_armure" title="@{pnj_armure}" style="width:9px"><span class="def" style="font-size:9px">Armure</span>
</td></tr>
<tr><td>
<input type="checkbox" name="attr_pnj_bouclier" title="@{pnj_bouclier}" style="width:9px"><span class="def" style="font-size:9px">Bouclier</span>
</td></tr>
</table>
<table class="tabsep" style="width:18%;">
<tr>
<td class="boxinput-pv">
<span class="textbase-pv">PV restants</span>&nbsp;
<input type="number" class="pv" name="attr_pnj_pv" title="Points de Vie restants" value="0" />
</td>
</tr>
<tr>
<td class="boxinput-pv">
<span class="textbase-pv">DM temp.</span>&nbsp;
<input type="number" class="pv" name="attr_pnj_dmtemp" title="Dommages Temporaires" value="0" />
</td>
</tr>
</table>
&nbsp;&nbsp;
<span class="textbase">Jets</span>&nbsp;
<select class="sheet-carac" style="width: 75px;" name="attr_pnj_jets_caches" title="@{jets_caches}" size="1">
<option value="" selected>Normaux</option>
<option value="/w gm ">Cachés</option>
</select>
</div>
</div>
<div style="width:100%;">
<table>
<tr><td class="boxtitre">Capacités</td></tr>
<tr><td class="boxinputleft"><textarea name="attr_capacites_pnj" style="height:5em;" spellcheck="false" title="@{capacites_pnj}"></textarea></td></tr>
</table>
<br/>
<input type="checkbox" class="block-switch-arrow"><span>Importer statblock</span><br/>
<div class="block-hidden-arrow"></div>
<div class="block-show-arrow">
<textarea name="attr_statblock" style="height: 10em;" placeholder="Coller ici un statblock copié depuis le PDF"></textarea>
&nbsp;
<textarea name="attr_sbresult" style="height: 5em;"></textarea>
</div>
</div>
</div>
<img class="imghr" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOubliees/co_hr.png" />
<div> <!-- Attaques -->
<table class="tabsep">
<tr>
<td class="textfatleft-atk" style="width:148px;">Attaques</td>
<td class="textbase-atk" style="width:50px;">Toucher</td>
<td class="textbase-atk" style="width:32px;">Crit.</td>
<td class="textbase-atk" style="width:125px;">DM</td>
<td class="textbase-atk" style="width:50px;">Portée</td>
<td class="textbase-atk">Spécial</td>
</tr>
</table>
<fieldset class="repeating_pnjatk">
<div class="attack">
<input class="options-flag" name="attr_armeoptflag" type="checkbox"
title="Montrer/cacher les options"><span>y</span>
<div>
<table class="tabsep">
<tr>
<td>
<button type="roll" class="atk" name="roll_pnj_Arme" value="@{jets_caches}&{template:co1} {{perso=@{character_name}}} {{name=@{armenom}}} {{subtags=Attaque}} {{attaque=[[ 1d@{ETATDE}cs>@{armecrit}cf1 + @{armeatk}]]}} {{degats=[[@{armedmnbde}d@{armedmde}+@{armedm}]]}} {{special=@{armespec}}}" />
</td>
<td class="boxinputleft-atk" style="min-width:130px;">
<input type="text" class="atk" style="width:11px; text-align:right; font-size:10px" name="attr_armelabel" value=0>
<input type="text" class="atk" name="attr_armenom" style="font-weight: bold;width:94%;margin-left:-5px" placeholder="Arme/attaque"/>
</td>
<td class="boxinputleft-atk">
+<input type="number" class="atk" style="width:32px;" name="attr_armeatk" value="0" title="Bonus d'attaque" />
</td>
<td class="boxinputleft-atk" style="text-align: right;">
<input type="number" class="atk" name="attr_armecrit" style="width:32px;" min="2" max="20" value="20" title="Seuil de Critique (par défaut 20)" />
</td>
<td class="boxinputleft-atk">
<input type="number" class="atk" style="width:32px;" name="attr_armedmnbde" value="1" title="Nombre de dés de dommage" />
<select class="carac-atk" style="width:47px;" name="attr_armedmde" size="1" title="Dé de dommage">
<option value="3">d3</option>
<option value="4" selected>d4</option>
<option value="6">d6</option>
<option value="8">d8</option>
<option value="10">d10</option>
<option value="12">d12</option>
</select>
+<input type="number" class="atk" style="width:32px;" name="attr_armedm" value="0" title="Bonus de dommage" />
</td>
<td class="boxinputleft-atk" style="min-width:50px;">
<input type="text" class="atk" name="attr_armeportee" placeholder="Portée" title="Portée" />
</td>
<td class="boxinputleft-atk" style="width:100%;">
<textarea class="atk" name="attr_armespec" spellcheck="false" placeholder="Notes, capacités spéciales, effet ..." title="Notes, capacités spéciales, effet ..."></textarea>
</td>
</tr>
</table>
</div>
<div class="options">
<table class="tabsep">
<tr>
<td style="width:18px; text-align:center;">
<input type="checkbox" name="attr_armeactionvisible" title="Attaque visible dans les actions" value="1" checked>
</td>
<td class="boxinputleft-atk">
<select class="carac-atk" style="width: 131px;" name="attr_armetypeattaque" title="Type d'attaque">
<option>Naturel</option>
<option>Arme 1 main</option>
<option>Arme 2 mains</option>
<option>Sortilege</option>
<option>Arme gauche</option>
<option>Arme de jet</option>
</select>
</td>
<td class="boxinputleft-atk" style="min-width: 180px;">
<textarea name="attr_armemodificateurs" class="atk" placeholder="Liste de modificateurs" spellcheck="false" title="Modificateurs d'attaque"></textarea>
</td>
<td class="boxinputleft-atk">
<select class="carac-atk" style="width: 87px;" name="attr_armetypedegats" title="Type des dégâts">
<option>tranchant</option>
<option>contondant</option>
<option>percant</option>
<option>mental</option>
<option>feu</option>
<option>acide</option>
<option value="electrique">électrique</option>
<option>froid</option>
<option>sonique</option>
<option>poison</option>
<option>maladie</option>
<option>magique</option>
</select>
</td>
<td class="boxinputleft-atk" style="width:100%;">
<textarea name="attr_armeoptions" class="atk" placeholder="Options d'attaque avec argument" spellcheck="false" title="Options d'attaque"></textarea>
</td>
</tr>
</table>
</div>
</div>
</fieldset>
</div>
</div> <!-- FIN fiche type PNJ -->
</div> <!-- FIN FDP -->
<!-- TEMPLATES -->
<rolltemplate class="sheet-rolltemplate-co1">
<table>
<tr>
<th colspan="2" style="text-align: center;">{{perso}}</th>
</tr>
<tr>
<td class="subheader">{{subtags}}</td>
<th>{{name}}</th>
</tr>
<tr>
<td COLSPAN="2">
<img class="imghr" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOubliees/co_hr.png" />
</td>
</tr>
{{#DV}}
<tr>
<td class="tcat">PV gagnés</td>
<td>{{DV}}</td>
</tr>
{{/DV}}
{{#carac}}
<tr>
<td class="tcat">Jet </td>
<td>{{carac}}</td>
</tr>
{{/carac}}
{{#desc}}
<tr>
<td colspan="2" style="white-space:normal;">
<div class="desc">{{desc}}</div>
</td>
</tr>
{{/desc}}
{{#attaque}}
{{#rollWasCrit() attaque}}
<tr><td colspan="2" style="color:green;"><b>Critique !</b></td></tr>
{{/rollWasCrit() attaque}}
{{#rollWasFumble() attaque}}
<tr>
<td colspan="2" style="color:red;"><b>Fumble !</b></td>
</tr>
{{/rollWasFumble() attaque}}
<tr>
<td class="tcat">Jet </td>
<td>{{attaque}} contre DEF</td>
</tr>
{{#degats}}
<tr>
<td class="tcat">Dégâts </td>
<td>
{{degats}}
{{#rollWasCrit() attaque}}
<span style="color:green;font-weight:bold;"> + {{degats}}</span>
{{/rollWasCrit() attaque}}
{{#degats2}}
+ {{degats2}}
{{/degats2}}
</td>
</tr>
{{/degats}}
{{/attaque}}
{{#special}}
<tr>
<td colspan="2" class="subheader" style="text-align:left;">Spécial</td>
</tr>
<tr>
<td colspan="2" style="white-space:normal;">
<div class="desc">{{special}}</div>
</td>
</tr>
{{/special}}
<tr>
<td COLSPAN="2">
<img class="imghr" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOubliees/co_hr.png" />
</td>
</tr>
</table>
</rolltemplate>
<!-- FIN TEMPLATES -->
<!-- **** SCRIPTS / SHEET WORKERS -->
<script type="text/worker">
on('sheet:opened', function() {
// **** Gestion transition de version
getAttrs(["version"], function(values) {
var verfdp = parseFloat(values.version) || 0;
if (verfdp === 0) {
// Version 1.6 vers 1.7
getAttrs(["FOR_SUP", "DEX_SUP", "CON_SUP", "INT_SUP", "SAG_SUP", "CHA_SUP"], function(jets) {
var sfor, sdex, scon, sint, ssag, scha = "";
if (jets.FOR_SUP == "2") {
sfor = "@{JETSUP}";
} else {
sfor = "@{JETNORMAL}";
}
if (jets.DEX_SUP == "2") {
sdex = "@{JETSUP}";
} else {
sdex = "@{JETNORMAL}";
}
if (jets.CON_SUP == "2") {
scon = "@{JETSUP}";
} else {
scon = "@{JETNORMAL}";
}
if (jets.INT_SUP == "2") {
sint = "@{JETSUP}";
} else {
sint = "@{JETNORMAL}";
}
if (jets.SAG_SUP == "2") {
ssag = "@{JETSUP}";
} else {
ssag = "@{JETNORMAL}";
}
if (jets.CHA_SUP == "2") {
scha = "@{JETSUP}";
} else {
scha = "@{JETNORMAL}";
}
setAttrs({
FOR_SUP: sfor,
DEX_SUP: sdex,
CON_SUP: scon,
INT_SUP: sint,
SAG_SUP: ssag,
CHA_SUP: scha,
});
});
}
if (verfdp < 3) {
setAttrs({
type_personnage: 'PJ'
});
getAttrs(["CHARISME", "option_pc", "pc", "pc_max"], function(values) {
var option_pc = values.option_pc;
if (option_pc == 1 || option_pc == 'on') {
var charisme = parseInt(values.CHARISME);
if (!isNaN(charisme) && charisme > 0) {
var pc_base = 3 + Math.floor((charisme - 10) / 2);
var toSet = {
pc_base: pc_base
};
var new_pc = 3;
var pc_max = parseInt(values.pc_max);
if (!isNaN(pc_max) && pc_max != pc_base) {
toSet.pc_bonus = pc_max - pc_base;
} else {
if (pc_base < 0) pc_base = 0;
toSet.pc_max = pc_base;
}
setAttrs(toSet);
}
}
});
getAttrs(["FOR_SUP", "DEX_SUP", "CON_SUP", "INT_SUP", "SAG_SUP", "CHA_SUP"], function(jets) {
var sfor, sdex, scon, sint, ssag, scha = "";
if (jets.FOR_SUP) sfor = jets.FOR_SUP.toLowerCase();
if (jets.DEX_SUP) sdex = jets.DEX_SUP.toLowerCase();
if (jets.CON_SUP) scon = jets.CON_SUP.toLowerCase();
if (jets.INT_SUP) sint = jets.INT_SUP.toLowerCase();
if (jets.SAG_SUP) ssag = jets.SAG_SUP.toLowerCase();
if (jets.CHA_SUP) scha = jets.CHA_SUP.toLowerCase();
setAttrs({
FOR_SUP: sfor,
DEX_SUP: sdex,
CON_SUP: scon,
INT_SUP: sint,
SAG_SUP: ssag,
CHA_SUP: scha,
});
});
}
if (verfdp < 3.2) {
getAttrs(["DEFARMURE"], function(values) {
var def = parseInt(values.DEFARMURE);
if (def === 0) setAttrs({
DEFARMUREON: 0
});
else if (def > 0) setAttrs({
DEFARMUREON: 1
});
});
getAttrs(["DEFBOUCLIER"], function(values) {
var def = parseInt(values.DEFBOUCLIER);
if (def === 0) setAttrs({
DEFBOUCLIERON: 0
});
else if (def > 0) setAttrs({
DEFBOUCLIERON: 1
});
});
//Remplis le casque si on a un attribut RD_critique
getAttrs(['RD_critique'], function(values) {
var rd = values.RD_critique;
if (rd) {
rd = parseInt(rd);
if (!isNaN(rd) && rd > 0) {
setAttrs({
casque_rd: rd,
casque_malus: rd,
casque_on: 1,
RD_critique: ''
});
}
}
});
//Ajout des labels aux armes.
ajouteLabels('repeating_armes');
ajouteLabels('repeating_pnjatk');
}
if (verfdp < 3.3) {
//Par défaut, les attaques n'étaient pas visibles
enleveAttaqueVisible('repeating_armes');
enleveAttaqueVisible('repeating_pnjatk');
}
setAttrs({
version: 3.3
});
});
});
function enleveAttaqueVisible(attr) {
getSectionIDs(attr, function(idArray) {
var toSet = {};
idArray.forEach(function(id) {
toSet[attr + '_' + id + '_armeactionvisible'] = 0;
});
setAttrs(toSet);
});
}
function ajouteLabels(attr) {
getSectionIDs(attr, function(idArray) {
getAttrs(['max_attack_label'], function(v) {
var maxLabel = parseInt(v.max_attack_label);
if (isNaN(maxLabel)) maxLabel = 0;
var initialMaxLabel = maxLabel;
var count = idArray.length;
var finalize = function() {
count--;
if (count === 0) {
if (maxLabel > initialMaxLabel)
setAttrs({
max_attack_label: maxLabel
});
}
};
idArray.forEach(function(id) {
var prefix = attr + '_' + id + '_';
getAttrs([prefix + 'armelabel', prefix + 'armenom'], function(values) {
var label = parseInt(values[prefix + 'armelabel']);
if (label > 0) return;
var toSet = {};
var nom = values[prefix + 'armenom'];
var postLabel = nom.indexOf(' ');
if (postLabel > 0 && postLabel < nom.length - 1) {
label = parseInt(nom.substring(0, postLabel));
if (!isNaN(label)) {
if (label > maxLabel) maxLabel = label;
toSet[prefix + 'armelabel'] = label;
toSet[prefix + 'armenom'] = nom.substring(postLabel + 1);
setAttrs(toSet);
finalize();
return;
}
}
//Pas de label dans le nom
maxLabel++;
toSet[prefix + 'armelabel'] = maxLabel;
setAttrs(toSet);
finalize();
});
});
});
});
}
function car_sup_from_pj_to_pnj(att_sup) {
if (att_sup === undefined || att_sup == '@{jetnormal}') return 0;
return 'on';
}
//asynchrone, appelle callback avec un map label -> prefix attribut
function getLabels(attr, callback) {
var res = {};
getSectionIDs(attr, function(idArray) {
var labelArray = idArray.map(function(id) {
return attr + '_' + id + '_armelabel';
});
getAttrs(labelArray, function(values) {
idArray.forEach(function(id) {
var label = values[attr + '_' + id + '_armelabel'];
if (label === undefined) return;
res[label] = attr + '_' + id + '_';
});
callback(res);
});
});
}
on('change:type_personnage', function(eventinfo) {
//Conversion quand on passe de PJ à PNJ
if (eventinfo.newValue == 'PNJ') {
getAttrs(
["FORCE", "FOR_BONUS", "DEXTERITE", "DEX_BONUS", "CONSTITUTION",
"CON_BONUS", "INTELLIGENCE", "INT_BONUS", "SAGESSE", "SAG_BONUS",
"CHARISME", "CHA_BONUS", "INIT_DIV", "DEFARMURE", "DEFARMUREON",
"DEFBOUCLIER", "DEFBOUCLIERON", "DEFDIV", "PV_max", "FOR_SUP",
"DEX_SUP", "CON_SUP", "INT_SUP", "SAG_SUP", "CHA_SUP", "PV", "RDS",
"jets_caches", "pnj_default_jets_caches",
],
function(values) {
var attrs = {};
attrs.pnj_for = Math.floor((parseInt(values.FORCE) - 10) / 2);
if (isNaN(attrs.pnj_for)) attrs.pnj_for = 0;
var bonus = parseInt(values.FOR_BONUS);
if (!isNaN(bonus)) attrs.pnj_for += bonus;
attrs.pnj_init = parseInt(values.DEXTERITE);
if (isNaN(attrs.pnj_init)) attrs.pnj_init = 10;
attrs.pnj_dex = Math.floor((attrs.pnj_init - 10) / 2);
attrs.pnj_def = 10 + attrs.pnj_dex;
bonus = parseInt(values.DEX_BONUS);
if (!isNaN(bonus)) attrs.pnj_dex += bonus;
attrs.pnj_con = Math.floor((parseInt(values.CONSTITUTION) - 10) / 2);
if (isNaN(attrs.pnj_con)) attrs.pnj_con = 0;
bonus = parseInt(values.CON_BONUS);
if (!isNaN(bonus)) attrs.pnj_con += bonus;
attrs.pnj_int = Math.floor((parseInt(values.INTELLIGENCE) - 10) / 2);
if (isNaN(attrs.pnj_int)) attrs.pnj_int = 0;
bonus = parseInt(values.INT_BONUS);
if (!isNaN(bonus)) attrs.pnj_int += bonus;
attrs.pnj_sag = Math.floor((parseInt(values.SAGESSE) - 10) / 2);
if (isNaN(attrs.pnj_sag)) attrs.pnj_sag = 0;
bonus = parseInt(values.SAG_BONUS);
if (!isNaN(bonus)) attrs.pnj_sag += bonus;
attrs.pnj_cha = Math.floor((parseInt(values.CHARISME) - 10) / 2);
if (isNaN(attrs.pnj_cha)) attrs.pnj_cha = 0;
bonus = parseInt(values.CHA_BONUS);
if (!isNaN(bonus)) attrs.pnj_cha += bonus;
bonus = parseInt(values.DEFARMURE) * parseInt(values.DEFARMUREON);
if (!isNaN(bonus)) attrs.pnj_def += bonus;
bonus = parseInt(values.DEFBOUCLIER) * parseInt(values.DEFBOUCLIERON);
if (!isNaN(bonus)) attrs.pnj_def += bonus;
bonus = parseInt(values.DEFDIV);
if (!isNaN(bonus)) attrs.pnj_def += bonus;
attrs.pnj_pv_max = parseInt(values.PV_max);
if (isNaN(attrs.pnj_pv_max)) delete attrs.pnj_pv_max;
attrs.pnj_pv = parseInt(values.PV);
if (isNaN(attrs.pnj_pv)) delete attrs.pnj_pv;
attrs.pnj_dmtemp = parseInt(values.DMTEMP);
if (isNaN(attrs.pnj_dmtemp)) delete attrs.pnj_dmtemp;
if (values.RDS) attrs.pnj_rd = values.RDS;
bonus = parseInt(values.INIT_DIV);
if (!isNaN(bonus)) attrs.pnj_init += bonus;
attrs.pnj_for_sup = car_sup_from_pj_to_pnj(values.FOR_SUP);
attrs.pnj_dex_sup = car_sup_from_pj_to_pnj(values.DEX_SUP);
attrs.pnj_con_sup = car_sup_from_pj_to_pnj(values.CON_SUP);
attrs.pnj_int_sup = car_sup_from_pj_to_pnj(values.INT_SUP);
attrs.pnj_sag_sup = car_sup_from_pj_to_pnj(values.SAG_SUP);
attrs.pnj_cha_sup = car_sup_from_pj_to_pnj(values.CHA_SUP);
if (values.pnj_default_jets_caches == "true") {
attrs.pnj_jets_caches = '/w gm ';
attrs.jets_caches = '/w gm ';
} else {
attrs.pnj_jets_caches = values.jets_caches;
}
attrs.pnj_armure = values.DEFARMUREON;
attrs.pnj_bouclier = values.DEFBOUCLIERON;
setAttrs(attrs);
});
//Copie des attaques
getLabels('repeating_pnjatk', function(pnjLabels) {
getSectionIDs('repeating_armes', function(idArray) {
idArray.forEach(function(id) {
var prefix = 'repeating_armes_' + id + '_';
getAttrs([prefix + 'armelabel', prefix + 'armenom', prefix + 'armeatk', prefix + 'armeatkdiv', prefix + 'armecrit', prefix + 'armedmnbde', prefix + 'armedmde', prefix + 'armedmcar', prefix + 'armedmdiv', prefix + 'armeportee', prefix + 'armespec', 'niveau', 'FORCE', 'DEXTERITE', 'CONSTITUTION', 'INTELLIGENCE', 'SAGESSE', 'CHARISME', 'ATKCAC_CARAC', 'ATKCAC_DIV', 'ATKTIR_CARAC', 'ATKTIR_DIV', 'ATKMAG_CARAC', 'ATKMAG_DIV'], function(values) {
var label = values[prefix + 'armelabel'];
if (!pnjLabels[label]) {
var attrs = {};
var pnjPref = 'repeating_pnjatk_' + generateRowID() + '_';
attrs[pnjPref + 'armelabel'] = label;
attrs[pnjPref + 'armenom'] = values[prefix + 'armenom'];
var atk = parseInt(values.niveau);
if (isNaN(atk)) return;
var typeAtk;
switch (values[prefix + 'armeatk']) {
case '@{ATKCAC}':
typeAtk = 'ATKCAC';
break;
case '@{ATKTIR}':
typeAtk = 'ATKTIR';
break;
case '@{ATKMAG}':
typeAtk = 'ATKMAG';
break;
default:
return;
}
var caracAtk;
switch (values[typeAtk + '_CARAC']) {
case '@{FOR}':
caracAtk = 'FORCE';
break;
case '@{DEX}':
caracAtk = 'DEXTERITE';
break;
case '@{CON}':
caracAtk = 'CONSTITUTION';
break;
case '@{INT}':
caracAtk = 'INTELLIGENCE';
break;
case '@{SAG}':
caracAtk = 'SAGESSE';
break;
case '@{CHA}':
caracAtk = 'CHARISME';
break;
default:
return;
}
caracAtk = parseInt(values[caracAtk]);
if (isNaN(caracAtk)) return;
atk += Math.floor((caracAtk - 10) / 2);
var div = parseInt(values[typeAtk + '_DIV']);
if (!isNaN(div)) atk += div;
div = parseInt(values[prefix + 'armeatkdiv']);
if (!isNaN(div)) atk += div;
attrs[pnjPref + 'armeatk'] = atk;
attrs[pnjPref + 'armecrit'] = values[prefix + 'armecrit'];
attrs[pnjPref + 'armedmnbde'] = values[prefix + 'armedmnbde'];
attrs[pnjPref + 'armedmde'] = values[prefix + 'armedmde'];
var dm = parseInt(values[prefix + 'armedmdiv']);
if (isNaN(dm)) dm = 0;
switch (values[prefix + 'armedmcar']) {
case '@{FOR}':
caracAtk = 'FORCE';
break;
case '@{DEX}':
caracAtk = 'DEXTERITE';
break;
case '@{CON}':
caracAtk = 'CONSTITUTION';
break;
case '@{INT}':
caracAtk = 'INTELLIGENCE';
break;
case '@{SAG}':
caracAtk = 'SAGESSE';
break;
case '@{CHA}':
caracAtk = 'CHARISME';
break;
default:
caracAtk = 0;
}
if (caracAtk) {
caracAtk = parseInt(values[caracAtk]);
if (!isNaN(caracAtk)) dm += Math.floor((caracAtk - 10) / 2);
}
attrs[pnjPref + 'armedm'] = dm;
attrs[pnjPref + 'armeportee'] = values[prefix + 'armeportee'];
attrs[pnjPref + 'armespec'] = values[prefix + 'armespec'];
setAttrs(attrs);
}
});
});
});
});
}
});
//Conversion PNJ vers PJ
on('change:pnj_for', function(eventinfo) {
getAttrs(["FOR_BONUS", "pnj_for"], function(values) {
var bonus_carac = parseInt(values.pnj_for);
if (isNaN(bonus_carac)) return;
var pre_bonus = parseInt(values.FOR_BONUS);
if (!isNaN(pre_bonus)) bonus_carac -= pre_bonus;
setAttrs({
FORCE: 10 + 2 * bonus_carac,
});
});
});
on('change:pnj_dex', function(eventinfo) {
getAttrs(["DEX_BONUS", "pnj_dex", "INIT_DIV", "DEFARMURE", "DEFARMUREON", "DEFBOUCLIER", "DEFBOUCLIERON", "pnj_init", "pnj_def"], function(values) {
var bonus_carac = parseInt(values.pnj_dex);
if (isNaN(bonus_carac)) return;
var pre_bonus = parseInt(values.DEX_BONUS);
if (!isNaN(pre_bonus)) bonus_carac -= pre_bonus;
var carac = 10 + 2 * bonus_carac;
//update INIT_DIV so that init does not change
var init = parseInt(values.pnj_init);
if (!isNaN(init)) {
if (init % 2 == 1) carac++;
setAttrs({
INIT_DIV: init - carac
});
}
//update DEFDIV so that DEF does not change
var def = parseInt(values.pnj_def);
if (!isNaN(def)) {
var defense = 10;
var bonus = parseInt(values.DEFARMURE) * parseInt(values.DEFARMUREON);
if (!isNaN(bonus)) defense += bonus;
bonus = parseInt(values.DEFBOUCLIER) * parseInt(values.DEFBOUCLIERON);
if (!isNaN(bonus)) defense += bonus;
bonus = Math.floor((parseInt(values.DEXTERITE) - 10) / 2);
if (!isNaN(bonus)) defense += bonus;
setAttrs({
DEFDIV: def - defense
});
}
setAttrs({
DEXTERITE: carac,
});
});
});
on('change:pnj_con', function(eventinfo) {
getAttrs(["CON_BONUS", "pnj_con"], function(values) {
var bonus_carac = parseInt(values.pnj_con);
if (isNaN(bonus_carac)) return;
var pre_bonus = parseInt(values.CON_BONUS);
if (!isNaN(pre_bonus)) bonus_carac -= pre_bonus;
setAttrs({
CONSTITUTION: 10 + 2 * bonus_carac,
});
});
});
on('change:pnj_int', function(eventinfo) {
getAttrs(["INT_BONUS", "pnj_int"], function(values) {
var bonus_carac = parseInt(values.pnj_int);
if (isNaN(bonus_carac)) return;
var pre_bonus = parseInt(values.INT_BONUS);
if (!isNaN(pre_bonus)) bonus_carac -= pre_bonus;
setAttrs({
INTELLIGENCE: 10 + 2 * bonus_carac,
});
});
});
on('change:pnj_sag', function(eventinfo) {
getAttrs(["SAG_BONUS", "pnj_sag"], function(values) {
var bonus_carac = parseInt(values.pnj_sag);
if (isNaN(bonus_carac)) return;
var pre_bonus = parseInt(values.SAG_BONUS);
if (!isNaN(pre_bonus)) bonus_carac -= pre_bonus;
setAttrs({
SAGESSE: 10 + 2 * bonus_carac,
});
});
});
on('change:pnj_cha', function(eventinfo) {
getAttrs(["CHA_BONUS", "pnj_cha"], function(values) {
var bonus_carac = parseInt(values.pnj_cha);
if (isNaN(bonus_carac)) return;
var pre_bonus = parseInt(values.CHA_BONUS);
if (!isNaN(pre_bonus)) bonus_carac -= pre_bonus;
setAttrs({
CHARISME: 10 + 2 * bonus_carac,
});
});
});
on('change:pnj_def', function(eventinfo) {
getAttrs(["DEFARMURE", "DEFARMUREON", "DEFBOUCLIER", "DEFBOUCLIERON", "DEXTERITE", "pnj_def"], function(values) {
var new_def = parseInt(values.pnj_def);
if (isNaN(new_def)) {
console.log("DEF pnj non définie");
return;
}
var defense = 10;
var bonus = parseInt(values.DEFARMURE) * parseInt(values.DEFARMUREON);
if (!isNaN(bonus)) defense += bonus;
bonus = parseInt(values.DEFBOUCLIER) * parseInt(values.DEFBOUCLIERON);
if (!isNaN(bonus)) defense += bonus;
bonus = Math.floor((parseInt(values.DEXTERITE) - 10) / 2);
if (!isNaN(bonus)) defense += bonus;
setAttrs({
DEFDIV: new_def - defense
});
});
});
on('change:pnj_pv', function(eventinfo) { //fires also when pnj_pv_max changes
getAttrs(['pnj_pv', 'pnj_pv_max', 'PV', 'PV_max'], function(values) {
var sta = {};
var new_pv = parseInt(values.pnj_pv);
var old_pv = parseInt(values.PV);
var new_pv_max = parseInt(values.pnj_pv_max);
var old_pv_max = parseInt(values.PV_max);
if (!isNaN(new_pv_max) && (isNaN(old_pv_max) || new_pv_max != old_pv_max)) { //PV max du pnj a changé
sta.PV_max = new_pv_max;
if (isNaN(old_pv_max) || old_pv_max === 0) { //first time set pv max
if (isNaN(new_pv) || new_pv === 0) { //and pv is 0 or not set
sta.pnj_pv = new_pv_max;
sta.PV = new_pv_max;
} else sta.PV = new_pv;
} else if (!isNaN(new_pv) && old_pv_max > new_pv) {
new_pv += new_pv_max - old_pv_max;
if (new_pv < 0) new_pv = 0;
sta.pnj_pv = new_pv;
sta.PV = new_pv;
}
} else { //PV du pnj a changé
sta.PV = new_pv;
if (isNaN(new_pv_max) || new_pv_max === 0) sta.pnj_pv_max = new_pv;
}
setAttrs(sta);
});
});
on('change:pnj_dmtemp', function(eventinfo) {
setAttrs({
DMTEMP: eventinfo.newValue
});
});
on('change:pnj_rd', function(eventinfo) {
setAttrs({
RDS: eventinfo.newValue
});
});
on('change:pnj_init', function(eventinfo) {
getAttrs(["DEXTERITE", "pnj_init"], function(values) {
var new_init = parseInt(values.pnj_init);
if (isNaN(new_init)) {
console.log("Initiative de PNJ incorrecte");
return;
}
var dex = parseInt(values.DEXTERITE);
if (isNaN(dex)) {
setAttrs({
DEXTERITE: new_init,
INIT_DIV: 0
});
return;
}
if (dex % 2 == 1) {
if (new_init % 2 === 0) {
dex--;
setAttrs({
DEXTERITE: dex
});
}
} else if (new_init % 2 == 1) {
dex++;
setAttrs({
DEXTERITE: dex
});
}
setAttrs({
INIT_DIV: new_init - dex
});
});
});
on('change:pnj_for_sup', function(eventinfo) {
if (eventinfo.newValue == 'on') {
getAttrs(["FOR_SUP"], function(values) {
if (values.FOR_SUP && values.FOR_SUP.startsWith('@{jetsup')) return;
setAttrs({
FOR_SUP: '@{jetsup}'
});
});
} else {
setAttrs({
FOR_SUP: '@{jetnormal}'
});
}
});
on('change:pnj_dex_sup', function(eventinfo) {
if (eventinfo.newValue == 'on') {
getAttrs(["DEX_SUP"], function(values) {
if (values.DEX_SUP && values.DEX_SUP.startsWith('@{jetsup')) return;
setAttrs({
DEX_SUP: '@{jetsup}'
});
});
} else {
setAttrs({
DEX_SUP: '@{jetnormal}'
});
}
});
on('change:pnj_con_sup', function(eventinfo) {
if (eventinfo.newValue == 'on') {
getAttrs(["CON_SUP"], function(values) {
if (values.CON_SUP && values.CON_SUP.startsWith('@{jetsup')) return;
setAttrs({
CON_SUP: '@{jetsup}'
});
});
} else {
setAttrs({
CON_SUP: '@{jetnormal}'
});
}
});
on('change:pnj_int_sup', function(eventinfo) {
if (eventinfo.newValue == 'on') {
getAttrs(["INT_SUP"], function(values) {
if (values.INT_SUP && values.INT_SUP.startsWith('@{jetsup')) return;
setAttrs({
INT_SUP: '@{jetsup}'
});
});
} else {
setAttrs({
INT_SUP: '@{jetnormal}'
});
}
});
on('change:pnj_sag_sup', function(eventinfo) {
if (eventinfo.newValue == 'on') {
getAttrs(["SAG_SUP"], function(values) {
if (values.SAG_SUP && values.SAG_SUP.startsWith('@{jetsup')) return;
setAttrs({
SAG_SUP: '@{jetsup}'
});
});
} else {
setAttrs({
SAG_SUP: '@{jetnormal}'
});
}
});
on('change:pnj_cha_sup', function(eventinfo) {
if (eventinfo.newValue == 'on') {
getAttrs(["CHA_SUP"], function(values) {
if (values.CHA_SUP && values.CHA_SUP.startsWith('@{jetsup')) return;
setAttrs({
CHA_SUP: '@{jetsup}'
});
});
} else {
setAttrs({
CHA_SUP: '@{jetnormal}'
});
}
});
on('change:pnj_jets_caches', function(eventinfo) {
getAttrs(["pnj_jets_caches"], function(values) {
setAttrs({
jets_caches: values.pnj_jets_caches
});
});
});
on('change:pnj_armure', function(eventinfo) {
getAttrs(["DEFARMUREON", "pnj_armure"], function(values) {
if (values.DEFARMUREON != values.pnj_armure) {
setAttrs({
DEFARMUREON: values.pnj_armure
});
}
});
});
on('change:pnj_bouclier', function(eventinfo) {
getAttrs(["DEFBOUCLIERON", "pnj_bouclier"], function(values) {
if (values.DEFBOUCLIERON != values.pnj_bouclier) {
setAttrs({
DEFBOUCLIERON: values.pnj_bouclier
});
}
});
});
//Suivi des états de PNJs depuis les attributs PJs, au cas où ce seraient ceux liés dans le token
on('change:PV', function(eventinfo) {
getAttrs(['PV', 'PV_max', 'pnj_pv', 'pnj_pv_max', 'type_personnage'], function(values) {
if (values.type_personnage != 'PNJ') return;
var pv = parseInt(values.PV);
if (isNaN(pv)) return;
var pnj_pv = parseInt(values.pnj_pv);
if (pnj_pv != pv) {
setAttrs({
pnj_pv: pv
});
return;
}
var pv_max = parseInt(values.PV_max);
if (isNaN(pv_max)) return;
var pnj_pv_max = parseInt(values.pnj_pv_max);
if (pnj_pv_max != pv_max) {
setAttrs({
pnj_pv_max: pv_max
});
return;
}
});
});
//Mise à jour des stats dérivées
on('change:CHARISME change:option_pc change:pc_bonus', function(eventinfo) {
getAttrs(["CHARISME", "option_pc", "pc_bonus", "pc_base", "pc", "pc_max"], function(values) {
var toSet = {};
var change;
var option_pc = values.option_pc;
if (option_pc == 1 || option_pc == 'on') {
var charisme = parseInt(values.CHARISME);
var pc_bonus = parseInt(values.pc_bonus);
if (!isNaN(charisme) && charisme > 0) {
var pc_base = 3 + Math.floor((charisme - 10) / 2);
if (pc_base != values.pc_base) {
toSet.pc_base = pc_base;
change = true;
}
var new_pc_max = pc_base;
if (isNaN(pc_bonus)) new_pc_max = pc_base;
else new_pc_max = pc_base + pc_bonus;
if (new_pc_max < 0) new_pc_max = 0;
var pc_max = parseInt(values.pc_max);
if (new_pc_max != pc_max) {
toSet.pc_max = new_pc_max;
var pc = parseInt(values.pc);
if (isNaN(pc) || pc < 0 || isNaN(pc_max)) toSet.pc = new_pc_max;
else {
pc += new_pc_max - pc_max;
if (pc < 0) toSet.pc = 0;
else if (pc > new_pc_max) toSet.pc = new_pc_max;
else toSet.pc = pc;
}
change = true;
}
}
}
if (change) setAttrs(toSet);
});
});
//Importation de statblocks
var statsReconnues = {
for: 'pnj_for',
dex: 'pnj_dex',
con: 'pnj_con',
int: 'pnj_int',
sag: 'pnj_sag',
per: 'pnj_sag',
cha: 'pnj_cha',
creature: 'profil',
nc: 'niveau',
niveau: 'niveau',
taille: 'taille',
profil: 'profil',
init: 'pnj_init',
def: 'pnj_def',
pv: 'pnj_pv_max',
rd: 'pnj_rd',
};
function buildRegexp(obj) {
var res = "\\b(";
var premier = true;
for (var field in obj) {
if (premier) {
res += field;
premier = false;
} else {
res += "|" + field;
}
}
res += "|créature)\\b"; //pour la version accentuée
return new RegExp(res, 'gi');
}
var patternStats = buildRegexp(statsReconnues);
on('change:statblock', function(eventinfo) {
getAttrs(['max_attack_label'], function(values) {
var maxAttack = parseInt(values.max_attack_label);
if (isNaN(maxAttack)) maxAttack = 0;
var stats = eventinfo.newValue;
if (stats === '') return;
stats = stats.replace(/\r/g, '');
//On enlève les caractères images des dernières versions de COF
stats = stats.replace(/\ue1e9/g, ''); //DEF
stats = stats.replace(/♥/g, ''); //PV
stats = stats.replace(/\ue0bf/g, ''); //Attaque
stats = stats.replace(/\, /g, ' ');
var rows = stats.split(/\n/);
var newAttrs = {};
var previousLine = ''; //Au cas d'attaque sur plusieurs lignes
var previousContainsDM = false;
var lastPrefix = ''; //Pour les suites d'attaque sur la ligne suivante
var firstLine = true; //si la première ligne ne correspond à rien, c'est le nom
rows.forEach(function(row) {
if (row === '') {
previousLine = '';
lastPrefix = '';
firstLine = false;
previousContainsDM = false;
return;
}
row = row.trim();
if (row.endsWith('DM')) {
previousLine += row + ' ';
previousContainsDM = true;
} else if (previousContainsDM || row.search(/\bDM\b/i) >= 0) { //Attaque
var currentRow = previousLine + row;
var nomAttaqueFin = currentRow.search(/\s(\+\d+|0\b|DM)/i);
var nomAttaque = currentRow.substring(0, nomAttaqueFin);
var portee = /\(\d+\s*m\)/i.exec(nomAttaque);
if (portee) {
nomAttaque = nomAttaque.substring(0, portee.index).trim();
portee = parseInt(portee[0].substring(1));
if (isNaN(portee)) portee = 0;
}
currentRow = currentRow.substring(nomAttaqueFin).trim();
var bonusAtt = 0;
if (currentRow.startsWith('+')) {
currentRow = currentRow.substring(1);
bonusAtt = parseInt(currentRow);
if (isNaN(bonusAtt)) {
console.log("Sheet worker: bonus d'attaque incorrect " + row);
previousLine = '';
return;
}
currentRow = currentRow.substring(currentRow.search(/\D/));
} else if (currentRow.startsWith('0')) {
currentRow = currentRow.substring(1).trim();
}
var index = currentRow.search(/\bDM\b/i);
var specAtt = currentRow.substring(0, index);
currentRow = currentRow.substring(index + 3).trim();
index = currentRow.search(/\s/);
if (index < 0) {
index = currentRow.length;
}
var nbDe = 0;
var de = 4;
var bonusDM = 0;
var dmExpr = currentRow.substring(0, index);
var indexDe = dmExpr.search(/d/i);
if (indexDe < 0) {
bonusDM = parseInt(dmExpr);
if (isNaN(bonusDM)) {
console.log("Impossible de trouver les DM dans " + row);
previousLine += row + ' ';
previousContainsDM = true;
return;
}
} else {
nbDe = parseInt(dmExpr.substring(0, indexDe));
dmExpr = dmExpr.substring(indexDe + 1);
de = parseInt(dmExpr);
if (isNaN(bonusDM) || isNaN(de)) {
console.log("Impossible de trouver les DM dans " + row);
previousLine += row + ' ';
previousContainsDM = true;
return;
}
var indexBonusDM = dmExpr.search(/(\+|-)/);
if (indexBonusDM >= 0) {
bonusDM = parseInt(dmExpr.substring(indexBonusDM));
if (isNaN(bonusDM)) {
bonusDM = 0;
}
} else if (index > 0 && index < currentRow.length - 1) {
currentRow = currentRow.substring(index).trim();
index = 0;
if (currentRow.startsWith('+') || currentRow.startsWith('-')) {
bonusDM = parseInt(currentRow);
if (isNaN(bonusDM)) {
bonusDM = 0;
} else index = currentRow.search(/\s/);
}
}
}
if (index >= 0 && index < currentRow.length - 1) {
specAtt += currentRow.substring(index).trim();
}
var prefix = 'repeating_pnjatk_' + generateRowID() + '_arme';
maxAttack++;
newAttrs[prefix + 'label'] = maxAttack;
newAttrs[prefix + 'nom'] = nomAttaque;
newAttrs[prefix + 'atk'] = bonusAtt;
newAttrs[prefix + 'dmnbde'] = nbDe;
newAttrs[prefix + 'dmde'] = de;
newAttrs[prefix + 'dm'] = bonusDM;
newAttrs[prefix + 'spec'] = specAtt;
if (portee) newAttrs[prefix + 'portee'] = portee;
lastPrefix = prefix;
previousContainsDM = false;
previousLine = '';
} else if (row.startsWith('+') && lastPrefix !== '') {
newAttrs[lastPrefix + 'spec'] += row;
} else { //Pas attaque
lastPrefix = '';
var lexemes = [];
var lastMatch;
var match = patternStats.exec(row);
while (match) {
if (lastMatch) {
lexemes.push({
match: lastMatch,
end: match.index
});
}
lastMatch = match;
match = patternStats.exec(row);
}
if (lastMatch) {
lexemes.push({
match: lastMatch,
end: row.length
});
}
if (lexemes.length === 0) {
if (firstLine) {
newAttrs.character_name = row;
} else {
console.log("La ligne " + row + " ne correspond à rien");
previousLine = row + ' ';
}
} else previousLine = '';
lexemes.forEach(function(l) {
var lstat = l.match[0].toLowerCase();
var lattr = statsReconnues[lstat];
if (lattr === undefined && lstat == 'créature') lattr = statsReconnues.creature;
if (lattr === undefined) {
console.log("Erreur ! Pattern " + lstat + " non reconne. La ligne était " + l);
return;
}
var valAttr = row.substring(l.match.index + lstat.length, l.end).trim();
valAttr = valAttr.replace(/\)$/, '');
if (lattr.search(/(for|dex|con|sag|int|cha)/) > 0) {
if (valAttr.endsWith('*')) {
valAttr = valAttr.substr(0, valAttr.length - 1);
newAttrs[lattr + '_sup'] = 'on';
}
//cas où le statblock donne valeur/bonus
var caracSlash = valAttr.indexOf('/');
if (caracSlash > 0) {
var caracVal = parseInt(valAttr);
valAttr = parseInt(valAttr.substring(caracSlash + 1));
switch (lattr) {
case 'pnj_for':
newAttrs.FORCE = caracVal;
break;
case 'pnj_dex':
newAttrs.DEXTERITE = caracVal;
break;
case 'pnj_con':
newAttrs.CONSTITUTION = caracVal;
break;
case 'pnj_int':
newAttrs.INTELLIGENCE = caracVal;
break;
case 'pnj_sag':
newAttrs.SAGESSE = caracVal;
break;
case 'pnj_cha':
newAttrs.CHARISME = caracVal;
break;
}
} else {
valAttr = parseInt(valAttr);
}
} else if (lattr == 'pnj_pv_max') {
//On met aussi les pv courants à jour
var pvMax = parseInt(valAttr);
//Cas où on note entre parenhèse les PV courants
var caracParen = valAttr.indexOf('(');
if (caracParen > 0) {
var pvCourant = parseInt(valAttr.substring(caracParen + 1));
newAttrs.pnj_pv = pvCourant;
valAttr = valAttr.substring(0, caracParen).trim();
} else newAttrs.pnj_pv = pvMax;
}
newAttrs[lattr] = valAttr;
});
}
firstLine = false;
});
newAttrs.max_attack_label = maxAttack;
setAttrs(newAttrs);
});
});
//Coche le port d'armure si sa def devient positive
on('change:DEFARMURE', function(eventinfo) {
getAttrs(['DEFARMURE', 'DEFARMUREON'], function(values) {
var def = parseInt(values.DEFARMURE);
if (isNaN(def)) return;
if (eventinfo.previousValue > 0) {
if (def === 0 && values.DEFARMUREON) setAttrs({
DEFARMUREON: 0
});
} else {
if (def > 0 && !values.DEFARMUREON) setAttrs({
DEFARMUREON: 1
});
}
});
});
on('change:DEFBOUCLIER', function(eventinfo) {
getAttrs(['DEFBOUCLIER', 'DEFBOUCLIERON'], function(values) {
var def = parseInt(values.DEFBOUCLIER);
if (isNaN(def)) return;
if (eventinfo.previousValue > 0) {
if (def === 0 && values.DEFBOUCLIERON) setAttrs({
DEFBOUCLIERON: 0
});
} else {
if (def > 0 && !values.DEFBOUCLIERON) setAttrs({
DEFBOUCLIERON: 1
});
}
});
});
on('change:casque_rd', function(eventinfo) {
getAttrs(['casque_rd', 'casque_on'], function(values) {
var rd = parseInt(values.casque_rd);
if (isNaN(rd)) return;
if (eventinfo.previousValue > 0) {
if (rd === 0 && values.casque_on) setAttrs({
casque_on: 0
});
} else {
if (rd > 0 && !values.casque_on) setAttrs({
casque_on: 1
});
}
});
});
//Numérotaion des attaques
on('change:repeating_armes:armenom', function(eventinfo) {
getAttrs(['max_attack_label', 'repeating_armes_armelabel'], function(values) {
var currentLabel = parseInt(values.repeating_armes_armelabel);
if (isNaN(currentLabel) || currentLabel === 0) {
currentLabel = parseInt(values.max_attack_label);
if (isNaN(currentLabel)) currentLabel = 0;
currentLabel++;
setAttrs({
max_attack_label: currentLabel,
repeating_armes_armelabel: currentLabel
});
}
});
});
on('change:repeating_pnjatk:armenom', function(eventinfo) {
getAttrs(['max_attack_label', 'repeating_pnjatk_armelabel'], function(values) {
var currentLabel = parseInt(values.repeating_pnjatk_armelabel);
if (isNaN(currentLabel) || currentLabel === 0) {
currentLabel = parseInt(values.max_attack_label);
if (isNaN(currentLabel)) currentLabel = 0;
currentLabel++;
setAttrs({
max_attack_label: currentLabel,
repeating_pnjatk_armelabel: currentLabel
});
}
});
});
on('remove:repeating_armes remove:repeating_pnjatk', function(eventinfo) {
getAttrs(['max_attack_label'], function(values) {
var label = eventinfo.removedInfo[eventinfo.sourceAttribute + '_armelabel'];
if (values.max_attack_label == label) {
var maxLabel = 0;
getSectionIDs('repeating_armes', function(idarray) {
var labelArray = idarray.map(function(id) {
return 'repeating_armes_' + id + '_armelabel';
});
getSectionIDs('repeating_pnjatk', function(idarray) {
idarray.forEach(function(id) {
labelArray.push('repeating_pnjatk_' + id + '_armelabel');
});
getAttrs(labelArray, function(values) {
labelArray.forEach(function(ln) {
var l = parseInt(values[ln]);
if (isNaN(l)) {
console.log("Label de " + ln + " invalide");
return;
}
if (l > maxLabel) maxLabel = l;
});
setAttrs({
max_attack_label: maxLabel
});
});
});
});
}
});
});
</script>