Files
2024-06-03 13:15:14 -04:00

3481 lines
145 KiB
HTML

<script type="text/worker">const etats = ['affaibli', 'aveugle', 'etourdi', 'immobilise', 'paralyse', 'ralenti', 'renverse', 'surpris'];
//DICE TYPES
//0 = D20
//-1 = D12
const diceType = {
'0':'D20',
'-1':'D12'
};
const dataEtats = {
'affaibli':{
'dice':-1,
'initiative':0,
'defense':0,
'contact':0,
'distance':0,
'magique':0,
},
'aveugle':{
'dice':0,
'initiative':-5,
'defense':-5,
'contact':-5,
'distance':-10,
'magique':0,
},
'etourdi':{
'dice':0,
'initiative':0,
'defense':-5,
'contact':0,
'distance':0,
'magique':0,
},
'immobilise':{
'dice':-1,
'initiative':0,
'defense':0,
'contact':0,
'distance':0,
'magique':0,
},
'paralyse':{
'dice':0,
'initiative':0,
'defense':0,
'contact':0,
'distance':0,
'magique':0,
},
'ralenti':{
'dice':0,
'initiative':0,
'defense':0,
'contact':0,
'distance':0,
'magique':0,
},
'renverse':{
'dice':0,
'initiative':0,
'defense':-5,
'contact':-5,
'distance':-5,
'magique':-5,
},
'surpris':{
'dice':0,
'initiative':0,
'defense':-5,
'contact':0,
'distance':0,
'magique':0,
}
};
function setActiveCharacterId(charId){
var oldAcid=getActiveCharacterId();
var ev = new CustomEvent("message");
ev.data={"id":"0", "type":"setActiveCharacter", "data":charId};
self.dispatchEvent(ev);
return oldAcid;
}
var _sIn=setInterval;
setInterval=function(callback, timeout){
var acid=getActiveCharacterId();
_sIn(
function(){
var prevAcid=setActiveCharacterId(acid);
callback();
setActiveCharacterId(prevAcid);
}
,timeout);
}
var _sto=setTimeout
setTimeout=function(callback, timeout){
var acid=getActiveCharacterId();
_sto(
function(){
var prevAcid=setActiveCharacterId(acid);
callback();
setActiveCharacterId(prevAcid);
}
,timeout);
}
function getAttrsAsync(props){
var acid=getActiveCharacterId(); //save the current activeCharacterID in case it has changed when the promise runs
var prevAcid=null; //local variable defined here, because it needs to be shared across the promise callbacks defined below
return new Promise((resolve,reject)=>{
prevAcid=setActiveCharacterId(acid); //in case the activeCharacterId has changed, restore it to what we were expecting and save the current value to restore later
try{
getAttrs(props,(values)=>{ resolve(values); });
}
catch{ reject(); }
}).finally(()=>{
setActiveCharacterId(prevAcid); //restore activeCharcterId to what it was when the promise first ran
});
}
//use the same pattern for each of the following...
function setAttrsAsync(propObj, options){
var acid=getActiveCharacterId();
var prevAcid=null;
return new Promise((resolve,reject)=>{
prevAcid=setActiveCharacterId(acid);
try{
setAttrs(propObj,options,(values)=>{ resolve(values); });
}
catch{ reject(); }
}).finally(()=>{
setActiveCharacterId(prevAcid);
});
}
function getDice(dice) {
let result;
switch(dice) {
case -1:
result = 'D12';
break;
default:
result = 'D20';
break;
}
return result;
}
function getFinalMod(data, clicked, isActive) {
let dice = 0;
let initiative = 0;
let defense = 0;
let contact = 0;
let distance = 0;
let magique = 0;
for (let etat of etats) {
let active = parseInt(data[etat]);
let d = dataEtats[etat];
if((active === 1 && etat !== clicked) || (etat === clicked && isActive === 1)) {
let nDice = d.dice;
let nInit = d.initiative;
let nDef = d.defense;
let nCon = d.contact;
let nDis = d.distance;
let nMag = d.magique;
dice = nDice < dice ? nDice : dice;
initiative += nInit;
defense += nDef;
contact += nCon;
distance += nDis;
magique += nMag;
}
}
return {
dice:dice,
init:initiative,
def:defense,
con:contact,
dis:distance,
mag:magique,
}
}
function getDistanceMod(luminosite, portee) {
let result = {
'luminosite':{
'text':'',
'mod':0
},
'portee':{
'text':'',
'mod':0
}
};
switch(luminosite) {
case 'std':
result.luminosite = {
'text':'',
'mod':0
}
break;
case 'pnbr':
result.luminosite = {
'text':'{{luminosite=^{penombre} (-5)}}',
'mod':-5
}
break;
case 'noir':
result.luminosite = {
'text':'{{luminosite=^{noir} (-10)}}',
'mod':-10
}
break;
}
switch(portee) {
case 'std':
result.portee = {
'text':'',
'mod':0
}
break;
case 'dbl':
result.portee = {
'text':'{{portee=^{portee-double} (-5)}}',
'mod':-5
}
break;
case 'trp':
result.portee = {
'text':'{{portee=^{portee-triple} (-10)}}',
'mod':-10
}
break;
}
return result;
}const menu = ['traits-mental', 'combat', 'inventaire', 'vehicules', 'voies', 'profil'];
const combat = ['initiative', 'contact', 'distance', 'magique', 'defense', 'reduction'];
const combatData = {
'initiative':['armure', 'etat'],
'contact':['profil', 'niveau', 'etat'],
'distance':['profil', 'niveau', 'etat'],
'defense':['armure', 'action', 'etat'],
'magique':['niveau', 'etat']
};
const combatWithCarac = ['initiative', 'contact', 'distance', 'defense', 'magique'];
const car = ['force', 'dexterite', 'constitution', 'perception', 'intelligence', 'charisme'];
const derived = ['pv', 'maho', 'serenite', 'volonte', 'chance'];
const std = ['mod', 'temp', 'etat'];
//MODE EDITION
on(`clicked:edition`, async function() {
const attrs = await getAttrsAsync(['edition']);
const getEdit = attrs.edition;
let update = {};
update['edition'] = getEdit === '1' ? '0' : '1';
setAttrsAsync(update);
});
//OPTIONS
on(`clicked:options`, async function() {
const attrs = await getAttrsAsync(['options']);
const getEdit = attrs.options;
let update = {};
update['options'] = getEdit === '1' ? '0' : '1';
setAttrsAsync(update);
});
car.forEach(c => {
let changes = `change:${c}-base change:${c}-temp change:${c}-divers`;
for(let w of combatWithCarac) {
changes += ` change:${w}-carac`;
}
on(changes, async function() {
const list = [
`${c}-base`,
`${c}-temp`,
`${c}-divers`,
`initiative-carac`,
`contact-carac`,
`distance-carac`,
`defense-carac`,
`magique-carac`,
];
if(c === 'intelligence') {
list.push(
`perception-mod`,
`profil-serenite`,
`mythos`
);
} else if(c === 'constitution') {
list.push(
'niveau',
'ki',
)
} else if(c === 'perception') {
list.push(
`intelligence-mod`,
`profil-serenite`,
`mythos`
);
} else if(c === 'charisme') {
list.push(
`profil-chance`
);
}
const attrs = await getAttrsAsync(list);
const caracList = ['initiative', 'contact', 'distance', 'magique', 'defense'];
const base = parseInt(attrs[`${c}-base`]);
const temp = parseInt(attrs[`${c}-temp`]);
const mod = parseInt(attrs[`${c}-divers`]);
const total = base+temp+mod;
const cMod = Math.floor((total-10)/2);
let update = {};
update[`${c}-total`] = total;
update[`${c}-mod`] = cMod
if(c === 'dexterite') {
getSectionIDs("repeating_vehicules", async function(idarray) {
let vehicule = {}
for(var i=0; i < idarray.length; i++) {
vehicule[`repeating_vehicules_${idarray[i]}_defense-vehicule-dexterite`] = cMod;
}
setAttrsAsync(vehicule);
});
} else if(c === 'intelligence') {
const mod_perception = parseInt(attrs[`perception-mod`]);
const serenite = parseInt(attrs[`profil-serenite`]);
const mythos = parseInt(attrs['mythos']);
update['volonte-base'] = Math.floor((cMod+mod_perception)/2);
update['serenite-base'] = cMod+mod_perception+serenite+2-mythos;
} else if(c === 'constitution') {
const niveau = parseInt(attrs[`niveau`]);
const ki = parseInt(attrs[`ki`]);
if(niveau === 1) {
update['pv-con'] = Math.floor(((base+mod)-10)/2);
}
update['maho-base'] = cMod+niveau+ki;
} else if(c === 'perception') {
const mod_intelligence = parseInt(attrs[`intelligence-mod`]);
const serenite = parseInt(attrs[`profil-serenite`]);
const mythos = parseInt(attrs[`mythos`]);
update['volonte-base'] = Math.floor((cMod+mod_intelligence)/2);
update['serenite-base'] = cMod+mod_intelligence+serenite+2-mythos;
} else if(c === 'charisme') {
const chance = parseInt(attrs[`profil-chance`]);
update['chance-base'] = cMod+chance+2;
}
for(let l of caracList) {
const car = attrs[`${l}-carac`];
if(car === c) update[`${l}-carac-value`] = cMod;
console.warn(car, l, c, update);
}
setAttrsAsync(update);
});
on(`clicked:roll${c}`, async function() {
const list = [
`dice-special`,
`character_name`,
`${c}-mod`,
`roll-type`,
];
const attrs = await getAttrsAsync(list);
let update = {};
update['popup-type'] = 'caracteristique';
update['popup-stringify'] = JSON.stringify(attrs);
update['popup-title'] = getTranslationByKey(c).charAt(0).toUpperCase() + getTranslationByKey(c).slice(1);
update['popup-id'] = c;
update['popup-dice'] = attrs[`dice-special`];
update['popup'] = 4;
await setAttrsAsync(update);
/*const rollType = attrs[`rollType`];
const name = attrs[`character_name`];
const mod = parseInt(attrs[`${c}-mod`]);
const dice = getDice(attrs[`dice-special`]);
let roll = `${rollType} &{template:std} {{name=${name}}} {{title=^{${c}}}} {{result=[[1${dice}cf4cs7cs20+${mod}]]}} {{echec=[[0]]}} {{critique=[[0]]}} {{destin=[[0]]}}`;
let stRoll = await startRoll(roll);
const diceResult = stRoll.results.result.dice[0];
let computed = {};
switch(diceResult) {
case 4:
computed.echec = 1;
break;
case 7:
computed.destin = 1;
break;
case 20:
computed.critique = 1;
break;
}
finishRoll(stRoll.rollId, computed);*/
});
});
//ATTRIBUTS DERIVES
derived.forEach(d => {
let change = `change:${d}-mod change:${d}-temp change:${d}-base`;
on(change, async function() {
const list = [
`${d}-base`,
`${d}-temp`,
`${d}-mod`,
];
if(d === 'pv') {
list.push(`${d}-dv`);
list.push(`${d}-con`);
}
const attrs = await getAttrsAsync(list);
const base = parseInt(attrs[`${d}-base`]);
const temp = parseInt(attrs[`${d}-temp`]);
const mod = parseInt(attrs[`${d}-mod`]);
let update = {};
let total = base+temp+mod;
if(d === 'volonte') update[`${d}`] = Math.max(total, 0);
else update[`${d}_max`] = Math.max(total, 0);
setAttrsAsync(update);
});
if(d === 'maho') {
on(`change:niveau change:ki`, async function() {
const list = [
`ki`,
`niveau`,
`constitution-mod`
];
const attrs = await getAttrsAsync(list);
const ki = parseInt(attrs[`ki`]);
const niveau = parseInt(attrs[`niveau`]);
const con = parseInt(attrs[`constitution-mod`]);
let total = ki+niveau+con;
let update = {};
update[`${d}-base`] = total;
setAttrsAsync(update);
});
}
if(d === 'pv') {
on(`change:${d}-dv change:${d}-con`, async function() {
const list = [
`${d}-dv`,
`${d}-con`,
];
const attrs = await getAttrsAsync(list);
const dv = parseInt(attrs[`${d}-dv`]);
const con = parseInt(attrs[`${d}-con`]);
let total = dv+con;
let update = {};
update[`${d}-base`] = total;
setAttrsAsync(update);
});
}
if(d !== 'volonte') {
on(`change:${d} change:${d}_max`, async function() {
const list = [
`${d}`,
`${d}_max`,
];
const attrs = await getAttrsAsync(list);
const base = parseInt(attrs[`${d}`]);
const max = parseInt(attrs[`${d}_max`]);
let update = {};
if(base > max) {
update[d] = max;
setAttrsAsync(update);
}
});
}
});
//MENU
menu.forEach(m => {
on(`clicked:${m}`, function() {
let update = {};
update['menu'] = m;
setAttrsAsync(update);
});
});
//mythos
on(`change:mythos`, async function() {
const list = [
`perception-mod`,
`intelligence-mod`,
`profil-serenite`,
`mythos`
];
const attrs = await getAttrsAsync(list);
const mod_perception = parseInt(attrs[`perception-mod`]);
const mod_intelligence = parseInt(attrs[`intelligence-mod`]);
const serenite = parseInt(attrs[`profil-serenite`]);
const mythos = parseInt(attrs[`mythos`]);
let update = {}
update['serenite-base'] = mod_perception+mod_intelligence+serenite+2-mythos;
setAttrsAsync(update);
});
//resistance-mentale
on(`clicked:resistance-mentale`, async function() {
const list = [
`character_name`,
`volonte`,
];
let attrs = await getAttrsAsync(list);
let update = {};
let title = getTranslationByKey('resistance-mentale');
title = title[0].toUpperCase() + title.slice(1);
update['popup-type'] = 'resistancementale';
update['popup-id'] = '';
update['popup-stringify'] = JSON.stringify(attrs);
update['popup-title'] = title;
update['popup'] = 4;
await setAttrsAsync(update);
});
//STATS DE COMBATS - MODE EDITION
combat.forEach(c => {
if(combatWithCarac.includes(c)) {
let changes = `change:${c}-temp change:${c}-mod change:${c}-carac-value`;
let list = [`${c}-temp`, `${c}-mod`, `${c}-carac-value`];
for(let t of combatData[c]) {
changes += ` change:${c}-${t}`;
list.push(`${c}-${t}`);
}
on(changes, async function() {
const attrs = await getAttrsAsync(list);
const temp = parseInt(attrs[`${c}-temp`]);
const mod = parseInt(attrs[`${c}-mod`]);
const carac = parseInt(attrs[`${c}-carac-value`]) || 0;
let update = {};
let total = 0;
let second = 0;
total += temp;
total += mod;
total += carac;
if(c === 'defense') total += 10;
for(let t of combatData[c]) {
const v = parseInt(attrs[`${c}-${t}`]);
if(c === 'defense' && t === 'action') second += v;
else total += v;
}
if(second !== 0) second += total;
update[c] = second !== 0 ? `${total} / ${second}` : total;
setAttrsAsync(update);
});
}
on(`clicked:${c}-edit`, async function() {
const list = [
`${c}-edit`,
];
const attrs = await getAttrsAsync(list);
const value = parseInt(attrs[`${c}-edit`]);
let update = {};
update[`${c}-edit`] = value === 1 ? 0 : 1;
setAttrsAsync(update);
});
if(c !== 'defense' && c !== 'reduction') {
on(`clicked:${c}`, async function() {
const list = [
`character_name`,
`${c}`,
`dice-special`,
`roll-type`,
];
const attrs = await getAttrsAsync(list);
let update = {};
update['popup-type'] = 'combat';
update['popup-id'] = c;
update['popup-stringify'] = JSON.stringify(attrs);
update['popup-title'] = getTranslationByKey(c).charAt(0).toUpperCase() + getTranslationByKey(c).slice(1);;
update['popup'] = 4;
setAttrsAsync(update);
});
}
if(!combatWithCarac.includes(c)) {
std.forEach(s => {
let change = `change:${c}-${s}`;
if(c === 'reduction') change += ` change:reduction-armure`;
on(change, async function() {
const list = [
`${c}-temp`,
`${c}-mod`,
`${c}-etat`,
];
if(c === 'reduction') {
list.push(
`reduction-armure`,
);
}
const attrs = await getAttrsAsync(list);
const temp = parseInt(attrs[`${c}-temp`]);
const mod = parseInt(attrs[`${c}-mod`]);
const etat = c !== 'reduction' ? parseInt(attrs[`${c}-etat`]) : 0;
let reductionArmure = 0;
let total = temp+mod+etat;
let update = {};
if(c === 'reduction') {
reductionArmure = parseInt(attrs[`reduction-armure`]);
total += reductionArmure;
}
update[`${c}`] = total;
setAttrsAsync(update);
});
});
}
});
on(`change:action-defensive`, async function() {
const list = [
'action-defensive'
];
const attrs = await getAttrsAsync(list);
const ad = attrs[`action-defensive`];
let update = {}
switch(ad) {
case 'simple':
update['defense-action'] = 2;
break;
case 'totale':
update['defense-action'] = 4;
break;
default:
update['defense-action'] = 0;
break;
}
setAttrsAsync(update);
});
etats.forEach(e => {
on(`clicked:${e}`, async function() {
const list = etats;
const attrs = await getAttrsAsync(list);
const clicked = attrs[e] === 1 ? 0 : 1;
const allMod = getFinalMod(attrs, e, clicked);
let update = {};
update[e] = clicked;
update['dice-special'] = allMod.dice;
update['initiative-etat'] = allMod.init;
update['defense-etat'] = allMod.def;
update['contact-etat'] = allMod.con;
update['distance-etat'] = allMod.dis;
update['magique-etat'] = allMod.mag;
setAttrsAsync(update);
});
});
//NIVEAUX
const populateSelectNiveau = async () => {
const list = [
`contact-niveau`,
`distance-niveau`,
`magique-niveau`,
];
const options = [{
label:'choisir',
value:'choisir',
i18n:'choisir',
selected:true
}];
const attrs = await getAttrsAsync(list);
const contact = parseInt(attrs['contact-niveau']);
const distance = parseInt(attrs['distance-niveau']);
const magique = parseInt(attrs['magique-niveau']);
if(contact < 6) options.push({
label:'contact',
value:'contact',
i18n:'attaque-contact'
});
if(distance < 6) options.push({
label:'distance',
value:'distance',
i18n:'attaque-distance'
});
if(magique < 6) options.push({
label:'magique',
value:'magique',
i18n:'attaque-magique'
});
populateListOptions({
elemSelector: '.popupniveau-select',
optionsArray: options,
});
};
on(`clicked:uplvl`, async function() {
const list = [
`niveau`,
];
const attrs = await getAttrsAsync(list);
const niveau = parseInt(attrs['niveau']);
let nivSup = niveau+1;
let update = {};
update['popup'] = 1;
setAttrsAsync(update);
if(nivSup%2 === 0) {
populateSelectNiveau();
$20('.popup .lvlup label').removeClass('hidden');
} else {
$20('.popup .lvlup label').addClass('hidden');
}
});
on(`clicked:popup-annuler`, async function() {
let update = {};
update['popup'] = 0;
setAttrsAsync(update);
});
on(`clicked:popupniveau-confirmer`, async function() {
const list = [
`character_name`,
`niveau`,
`popupniveau`,
`contact-niveau`,
`distance-niveau`,
`magique-niveau`,
`historique`,
`pv-base`,
`pv-mod`,
`pv-temp`,
`pv-dv`,
`pv-con`,
`profil-dv`,
`ptscapacites_max`,
`constitution-mod`,
`roll-type`,
];
const attrs = await getAttrsAsync(list);
const rollType = attrs['roll-type'];
const name = attrs['character_name'];
const niveau = parseInt(attrs['niveau']);
const dv = attrs['profil-dv'];
const pvDv = parseInt(attrs['pv-dv']);
const pvCon = parseInt(attrs['pv-con']);
const pvMod = parseInt(attrs['pv-mod']);
const pvTemp = parseInt(attrs['pv-temp']);
const pvMax = pvDv+pvCon+pvMod+pvTemp;
const historique = attrs['historique'];
const attaque = attrs['popupniveau'];
const contact = parseInt(attrs['contact-niveau']);
const distance = parseInt(attrs['distance-niveau']);
const magique = parseInt(attrs['magique-niveau']);
const ptsCapacites = parseInt(attrs['ptscapacites_max']);
const constitution = parseInt(attrs['constitution-mod']);
let toAdd = ``;
let nivSup = niveau+1;
let nivContact = contact;
let nivDistance = distance;
let nivMagique = magique;
let nivDv = pvDv;
let nivCon = pvCon;
let rollPv;
let update = {};
let roll = `${rollType} &{template:niveau} {{name=${name}}} {{title=^{passage-niveau}}} {{oldniveau=[[${niveau}]]}} {{newniveau=[[${nivSup}]]}} {{oldpv=[[${pvMax}]]}} {{oldcapacite=[[${ptsCapacites}]]}} {{newcapacite=[[${ptsCapacites+2}]]}}`;
update['popup'] = 0;
update['niveau'] = nivSup;
if(nivSup > 10) {
if(dv === 6 || dv === 8) {
update['pv-dv'] = nivDv += 1;
roll += ` {{newpv=[[${pvMax}+1]]}}`;
rollPv = await startRoll(roll);
}
else if(dv === 10) {
update['pv-dv'] = nivDv += 2;
roll += ` {{newpv=[[${pvMax}+2]]}}`;
rollPv = await startRoll(roll);
}
} else {
if(nivSup%2 === 0) {
switch(attaque) {
case 'contact':
nivContact += 1;
roll += ` {{oldcontact=[[${contact}]]}} {{newcontact=[[${nivContact}]]}}`;
break;
case 'distance':
nivDistance += 1;
roll += ` {{olddistance=[[${distance}]]}} {{newdistance=[[${nivDistance}]]}}`;
break;
case 'magique':
nivMagique += 1;
roll += ` {{oldmagique=[[${magique}]]}} {{newmagique=[[${nivMagique}]]}}`;
break;
}
if(constitution < 0) {
roll += ` {{newpv=[[${pvMax}+[[{1d${dv}${constitution}, 1d0}kh1]]]]}}`;
} else {
roll += ` {{newpv=[[${pvMax}+1d${dv}]]}}`;
}
rollPv = await startRoll(roll);
nivDv += rollPv.results.newpv.result-pvMax;
update['pv-dv'] = nivDv;
} else if(constitution >= 0) {
roll += ` {{newpv=[[${pvMax}+${constitution}]]}}`;
rollPv = await startRoll(roll);
nivCon += constitution;
update['pv-con'] = nivCon;
} else {
roll += ` {{newpv=[[${pvMax}]]}}`;
rollPv = await startRoll(roll);
}
}
finishRoll(rollPv.rollId);
update['contact-niveau'] = nivContact;
update['distance-niveau'] = nivDistance;
update['magique-niveau'] = nivMagique;
toAdd = `{"contact":"${contact}","distance":"${distance}","magique":"${magique}","dv":"${pvDv}","con":"${pvCon}"}`;
update['historique'] = historique.length === 0 ? toAdd : historique+`;${toAdd}`;
setAttrsAsync(update);
});
on(`clicked:popupniveaudown-confirmer`, async function() {
const list = [
`character_name`,
`niveau`,
`historique`,
`contact-niveau`,
`distance-niveau`,
`magique-niveau`,
`pv-base`,
`pv-mod`,
`pv-temp`,
`pv-dv`,
`pv-con`,
`profil-dv`,
`ptscapacites_max`,
`roll-type`,
];
const attrs = await getAttrsAsync(list);
const rollType = attrs['roll-type'];
const historique = attrs['historique'];
const lvl = parseInt(attrs.niveau);
let newLvl = lvl-1;
let historiqueSplit = historique.split(';');
let historiqueActuel = JSON.parse(`${historiqueSplit[newLvl-1]}`);
const name = attrs['character_name'];
const pvDv = parseInt(attrs['pv-dv']);
const pvCon = parseInt(attrs['pv-con']);
const pvMod = parseInt(attrs['pv-mod']);
const pvTemp = parseInt(attrs['pv-temp']);
const pvMax = pvDv+pvCon+pvMod+pvTemp;
const oldContact = parseInt(attrs['contact-niveau']);
const oldDistance = parseInt(attrs['distance-niveau']);
const oldMagique = parseInt(attrs['magique-niveau']);
const ptsCapacites = parseInt(attrs['ptscapacites_max']);
let contact = parseInt(historiqueActuel.contact);
let distance = parseInt(historiqueActuel.distance);
let magique = parseInt(historiqueActuel.magique);
let pv = pvMod+pvTemp;
let dv = parseInt(historiqueActuel.dv);
let con = parseInt(historiqueActuel.con);
let update = {};
update['popup'] = 0;
if(newLvl >= 10) {
pv = dv+pvCon;
} else {
if(newLvl%2 === 0) pv += con+pvDv
else pv += dv+pvCon;
}
let roll = `${rollType} &{template:niveau} {{name=${name}}} {{title=^{diminution-niveau}}} {{oldniveau=[[${lvl}]]}} {{newniveau=[[${newLvl}]]}} {{oldpv=[[${pvMax}]]}} {{newpv=[[${pv}]]}} {{oldcapacite=[[${ptsCapacites}]]}} {{newcapacite=[[${ptsCapacites-2}]]}}`;
if(contact != oldContact) roll += ` {{oldcontact=[[${oldContact}]]}} {{newcontact=[[${contact}]]}}`;
if(distance != oldDistance) roll += ` {{olddistance=[[${oldDistance}]]}} {{newdistance=[[${distance}]]}}`;
if(magique != oldMagique) roll += ` {{olddistance=[[${oldMagique}]]}} {{newdistance=[[${magique}]]}}`;
update['niveau'] = newLvl;
update['contact-niveau'] = contact;
update['distance-niveau'] = distance;
update['magique-niveau'] = magique;
update['pv-con'] = con;
update['pv-dv'] = dv;
historiqueSplit.pop();
let newHistorique = historiqueSplit.join(';');
update['historique'] = newHistorique === "" ? "" : newHistorique;
let getRoll = await startRoll(roll);
finishRoll(getRoll.rollId);
setAttrsAsync(update);
});
on(`clicked:downlvl`, async function() {
let update = {};
update['popup'] = 6;
setAttrsAsync(update);
});
on(`sheet:opened`, async function() {
const list = [
`niveau`,
];
const attrs = await getAttrsAsync(list);
const niveau = parseInt(attrs['niveau']);
const nivSup = niveau+1;
if(nivSup%2 === 0) {
populateSelectNiveau();
$20('.popup .lvlup label').removeClass('hidden');
} else {
$20('.popup .lvlup label').addClass('hidden');
}
});const rangs = [1, 2, 3, 4, 5];
on(`change:profil-capacite change:niveau`, async function() {
const list = [
`profil-capacite`,
`niveau`,
];
const attrs = await getAttrsAsync(list);
const capacite = parseInt(attrs['profil-capacite']);
const niveau = parseInt(attrs['niveau']);
let update = {};
update['ptscapacites_max'] = 2+capacite+(niveau*2);
setAttrsAsync(update);
});
on(`change:ptscapacites change:ptscapacites_max sheet:opened`, async function() {
const list = [
`ptscapacites`,
`ptscapacites_max`,
];
const attrs = await getAttrsAsync(list);
const value = parseInt(attrs['ptscapacites']);
const max = parseInt(attrs['ptscapacites_max']);
if(value > max) $20('div.voies div.ptsCapacites').addClass('red');
else $20('div.voies div.ptsCapacites').removeClass('red');
});
rangs.forEach(r => {
on(`clicked:repeating_voies:rang${r}`, async function(info) {
const repeating = info.sourceAttribute.split('_')[2];
const rang = r;
const list = [
`repeating_voies_${repeating}_rang${rang}`,
];
const attrs = await getAttrsAsync(list);
const vRang = parseInt(attrs[`repeating_voies_${repeating}_rang${rang}`]);
let update = {};
if(vRang === 1) update[`repeating_voies_${repeating}_rang${rang}`] = 0;
else update[`repeating_voies_${repeating}_rang${rang}`] = 1;
setAttrsAsync(update);
});
on(`clicked:repeating_voies:rang${r} change:repeating_voies:type remove:repeating_voies`, async function() {
getSectionIDs("repeating_voies", async function(idarray) {
const lRepeat = [];
for(var i=0; i < idarray.length; i++) {
lRepeat.push(
`repeating_voies_${idarray[i]}_type`,
`repeating_voies_${idarray[i]}_rang1`,
`repeating_voies_${idarray[i]}_rang2`,
`repeating_voies_${idarray[i]}_rang3`,
`repeating_voies_${idarray[i]}_rang4`,
`repeating_voies_${idarray[i]}_rang5`,
);
}
const lRangs = await getAttrsAsync(lRepeat);
let type = '';
let v = 0;
let update = {};
_.each(lRangs, (value, key) => {
const val = value;
const name = key.split('_')[3];
switch(name) {
case 'type':
type = val;
break;
case 'rang1':
case 'rang2':
if((type === 'predilection' || type === 'memefamille') && val === 1) v += 1;
else if((type === 'horsfamille' || type === 'horsprofil' || type === 'prestige') && val === 1) v += 2;
break;
case 'rang3':
case 'rang4':
case 'rang5':
if((type === 'predilection' || type === 'memefamille') && val === 1) v += 2;
else if((type === 'horsfamille' || type === 'horsprofil' || type === 'prestige') && val === 1) v += 2;
break;
}
});
update['ptscapacites'] = v;
setAttrsAsync(update);
});
});
});on(`clicked:repeating_armures:equip`, async function(info) {
const repeating = info.sourceAttribute.split('_')[2];
const list = [
`repeating_armures_${repeating}_equip`,
];
const attrs = await getAttrsAsync(list);
const vEquip = parseInt(attrs[`repeating_armures_${repeating}_equip`]);
let update = {};
if(vEquip === 1) update[`repeating_armures_${repeating}_equip`] = 0;
else update[`repeating_armures_${repeating}_equip`] = 1;
setAttrsAsync(update);
});
on(`clicked:repeating_armures:equip change:repeating_armures:defense change:repeating_armures:reduction remove:repeating_armures`, async function() {
getSectionIDs("repeating_armures", async function(idarray) {
const lRepeat = [];
for(var i=0; i < idarray.length; i++) {
lRepeat.push(
`repeating_armures_${idarray[i]}_equip`,
`repeating_armures_${idarray[i]}_defense`,
`repeating_armures_${idarray[i]}_reduction`,
);
}
const lArmure = await getAttrsAsync(lRepeat);
let e = 0;
let d = 0;
let r = 0;
let update = {};
_.each(lArmure, (value, key) => {
const val = parseInt(value);
const name = key.split('_')[3];
switch(name) {
case 'equip':
if(val === 1) e = 1;
else e = 0;
break;
case 'defense':
if(e === 1) d += val;
break;
case 'reduction':
if(e === 1) r += val;
break;
}
});
update['defense-armure'] = d;
update['reduction-armure'] = r;
update['initiative-armure'] = d === 0 ? d : `-${d}`;
setAttrsAsync(update);
});
});const carVehicule = ['force', 'agilite', 'defense'];
on(`clicked:repeating_vehicules:vehicule-edit`, async function(info) {
const repeating = info.sourceAttribute.split('_')[2];
const list = [
`repeating_vehicules_${repeating}_edit`,
];
const attrs = await getAttrsAsync(list);
const edit = parseInt(attrs[`repeating_vehicules_${repeating}_edit`]);
let update = {};
update[`repeating_vehicules_${repeating}_edit`] = edit === 1 ? 0 : 1;
setAttrsAsync(update);
});
on(`clicked:repeating_vehicules:vehicule-roll`, async function(info) {
const repeating = info.sourceAttribute.split('_')[2];
const base = `repeating_vehicules_${repeating}`;
const list = [
`character_name`,
`${base}_agilite-vehicule`,
`dexterite-mod`,
`${base}_vehicule-name`
];
let attrs = await getAttrsAsync(list);
let update = {};
update['popup-type'] = 'vehicule';
update['popup-id'] = base;
update['popup-stringify'] = JSON.stringify(attrs);
update['popup-title'] = attrs[`${base}_vehicule-name`] !== '' ? attrs[`${base}_vehicule-name`] : '';
update['popup'] = 4;
await setAttrsAsync(update);
});
carVehicule.forEach(c => {
let onChange = `change:repeating_vehicules:${c}-vehicule-base change:repeating_vehicules:${c}-vehicule-temp change:repeating_vehicules:${c}-vehicule-divers`;
if(c === 'defense') onChange += ` change:repeating_vehicules:${c}-vehicule-dexterite`
on(onChange, async function(info) {
const repeating = info.sourceAttribute.split('_')[2];
const list = [
`repeating_vehicules_${repeating}_${c}-vehicule-base`,
`repeating_vehicules_${repeating}_${c}-vehicule-temp`,
`repeating_vehicules_${repeating}_${c}-vehicule-divers`,
];
if(c === 'defense') list.push(`repeating_vehicules_${repeating}_${c}-vehicule-dexterite`);
const attrs = await getAttrsAsync(list);
const base = parseInt(attrs[`repeating_vehicules_${repeating}_${c}-vehicule-base`]);
const temp = parseInt(attrs[`repeating_vehicules_${repeating}_${c}-vehicule-temp`]);
const divers = parseInt(attrs[`repeating_vehicules_${repeating}_${c}-vehicule-divers`]);
let total = base+temp+divers;
if(c === 'defense') {
const dex = parseInt(attrs[`repeating_vehicules_${repeating}_${c}-vehicule-dexterite`]);
total += dex;
}
let update = {};
update[`repeating_vehicules_${repeating}_${c}-vehicule`] = total;
if(c === 'force') update[`repeating_vehicules_${repeating}_places-vehicule`] = Math.max(total+4, 1);
setAttrsAsync(update);
});
});
on(`change:repeating_vehicules:pv-vehicule change:repeating_vehicules:pv-vehicule_max`, async function(info) {
const repeating = info.sourceAttribute.split('_')[2];
const list = [
`repeating_vehicules_${repeating}_pv-vehicule`,
`repeating_vehicules_${repeating}_pv-vehicule_max`,
];
const attrs = await getAttrsAsync(list);
const base = parseInt(attrs[`repeating_vehicules_${repeating}_pv-vehicule`]);
const max = parseInt(attrs[`repeating_vehicules_${repeating}_pv-vehicule_max`]);
let update = {};
if(base > max) {
update[`repeating_vehicules_${repeating}_pv-vehicule`] = max;
setAttrsAsync(update);
}
});
on(`change:repeating_vehicules:pv-vehicule-mod change:repeating_vehicules:pv-vehicule-temp change:repeating_vehicules:pv-vehicule-base`, async function(info) {
const repeating = info.sourceAttribute.split('_')[2];
const list = [
`repeating_vehicules_${repeating}_pv-vehicule-mod`,
`repeating_vehicules_${repeating}_pv-vehicule-temp`,
`repeating_vehicules_${repeating}_pv-vehicule-base`,
];
const attrs = await getAttrsAsync(list);
const base = parseInt(attrs[`repeating_vehicules_${repeating}_pv-vehicule-base`]);
const mod = parseInt(attrs[`repeating_vehicules_${repeating}_pv-vehicule-mod`]);
const temp = parseInt(attrs[`repeating_vehicules_${repeating}_pv-vehicule-temp`]);
let update = {};
update[`repeating_vehicules_${repeating}_pv-vehicule_max`] = base+mod+temp;
setAttrsAsync(update);
});const dFamille = {
'action':{
'dv':10,
'attaque':2,
'capacite':0,
'serenite':0,
'chance':0
},
'reflexion':{
'dv':6,
'attaque':0,
'capacite':2,
'serenite':2,
'chance':0
},
'societe':{
'dv':8,
'attaque':1,
'capacite':0,
'serenite':0,
'chance':2
}
};
on(`change:profil-famille`, async function() {
const list = [
`profil-famille`,
];
const attrs = await getAttrsAsync(list);
const famille = attrs['profil-famille'];
if(famille === '') return;
const dataFamille = dFamille[famille];
let update = {};
update['profil-dv'] = dataFamille['dv'];
update['profil-attaque'] = dataFamille['attaque'];
update['profil-attaque-contact'] = 0;
update['profil-attaque-distance'] = 0;
update['profil-capacite'] = dataFamille['capacite'];
update['profil-serenite'] = dataFamille['serenite'];
update['profil-chance'] = dataFamille['chance'];
setAttrsAsync(update);
});
on(`change:profil-attaque-contact`, async function() {
const list = [
`profil-attaque`,
`profil-attaque-contact`,
`profil-attaque-distance`,
];
const attrs = await getAttrsAsync(list);
const attaque = parseInt(attrs['profil-attaque']);
const attaqueScore = parseInt(attrs['profil-attaque-contact']);
const attaqueDistance = parseInt(attrs['profil-attaque-distance']);
const diff = attaque-attaqueScore;
let update = {};
if(attaqueScore > attaque) {
update['profil-attaque-contact'] = attaque;
update['profil-attaque-distance'] = 0;
} else if(attaqueDistance > diff) {
update['profil-attaque-distance'] = diff;
}
update['distance-profil'] = attaqueScore;
setAttrsAsync(update);
});
on(`change:profil-attaque-distance`, async function() {
const list = [
`profil-attaque`,
`profil-attaque-contact`,
`profil-attaque-distance`,
];
const attrs = await getAttrsAsync(list);
const attaque = parseInt(attrs['profil-attaque']);
const attaqueContact = parseInt(attrs['profil-attaque-contact']);
const attaqueScore = parseInt(attrs['profil-attaque-distance']);
const diff = attaque-attaqueScore;
let update = {};
if(attaqueScore > attaque) {
update['profil-attaque-contact'] = 0;
update['profil-attaque-distance'] = attaque;
} else if(attaqueContact > diff) {
update['profil-attaque-contact'] = diff;
}
update['contact-profil'] = attaqueScore;
setAttrsAsync(update);
});
on(`change:profil-dv`, async function() {
const list = [
`profil-dv`,
`niveau`,
];
const attrs = await getAttrsAsync(list);
const dv = parseInt(attrs['profil-dv']);
const niveau = parseInt(attrs['niveau']);
let update = {};
if(niveau === 1) update['pv-dv'] = dv;
setAttrsAsync(update);
});
on(`change:profil-serenite`, async function() {
const list = [
`profil-serenite`,
`intelligence-mod`,
`perception-mod`,
`mythos`
];
const attrs = await getAttrsAsync(list);
const serenite = parseInt(attrs['profil-serenite']);
const intelligence = parseInt(attrs['intelligence-mod']);
const perception = parseInt(attrs['perception-mod']);
const mythos = parseInt(attrs['mythos']);
let update = {};
update['serenite-base'] = 2+serenite+intelligence+perception-mythos;
setAttrsAsync(update);
});
on(`change:profil-chance`, async function() {
const list = [
`profil-chance`,
`charisme-mod`,
];
const attrs = await getAttrsAsync(list);
const chance = parseInt(attrs['profil-chance']);
const charisme = parseInt(attrs['charisme-mod']);
let update = {};
update['chance-base'] = 2+chance+charisme;
setAttrsAsync(update);
});
on(`clicked:switchvoie`, async function() {
let update = {};
update['voie-selshow'] = 'voie';
setAttrsAsync(update);
});
on(`clicked:switchcapacite`, async function() {
let update = {};
update['voie-selshow'] = 'capacite';
setAttrsAsync(update);
});const wpn = ['contact', 'distance', 'sortilege', 'grenade', 'artillerie'];
const modki = ['positif', 'negatif', 'positifdgts', 'negatifdgts'];
wpn.forEach(c => {
on(`clicked:show${c}`, async function() {
let show = `show${c}`;
const attrs = await getAttrsAsync([show]);
const getShow = attrs[show];
let update = {};
update[show] = getShow === '1' ? '0' : '1';
setAttrsAsync(update);
});
on(`clicked:repeating_wpn${c}:wpnshow`, async function(info) {
const repeating = info.sourceAttribute.split('_')[2];
const list = [
`repeating_wpn${c}_${repeating}_wpnshow`,
];
const attrs = await getAttrsAsync(list);
const getShow = attrs[list[0]];
let update = {};
update[list[0]] = getShow === '1' ? '0' : '1';
setAttrsAsync(update);
});
on(`clicked:repeating_wpn${c}:wpnroll`, async function(info) {
const repeating = info.sourceAttribute.split('_')[2];
const base = `repeating_wpn${c}_${repeating}`;
const list = [
`character_name`,
`${base}_name`,
`ki`,
`dice-special`,
`dice-atk`,
];
let diceSpe = 0;
let diceAtk = 0;
let attrs;
let update = {};
update['popup-type'] = c;
switch(c) {
case 'contact':
list.push(
`contact`,
`${base}_dm`,
`${base}_modatt`,
`${base}_moddgts`,
`${base}_modkipositif`,
`${base}_modkinegatif`,
`${base}_modkipositifdgts`,
`${base}_modkinegatifdgts`,
`${base}_description`
);
attrs = await getAttrsAsync(list);
diceSpe = attrs['dice-special'];
diceAtk = attrs['dice-atk'];
update['popup-id'] = base;
update['popup-stringify'] = JSON.stringify(attrs);
update['popup-title'] = attrs[`${base}_name`];
update['popup-dice-atk'] = Math.min(diceSpe, diceAtk);
update['popup'] = 2;
break;
case 'grenade':
list.push(
`distance`,
`${base}_dm`,
`${base}_portee`,
`${base}_modatt`,
`${base}_moddgts`,
`${base}_modkipositif`,
`${base}_modkinegatif`,
`${base}_modkipositifdgts`,
`${base}_modkinegatifdgts`,
`${base}_description`,
);
attrs = await getAttrsAsync(list);
diceSpe = attrs['dice-special'];
diceAtk = attrs['dice-atk'];
update['popup-id'] = base;
update['popup-stringify'] = JSON.stringify(attrs);
update['popup-title'] = attrs[`${base}_name`];
update['popup-dice-atk'] = Math.min(diceSpe, diceAtk);
update['popup'] = 2;
break;
case 'artillerie':
list.push(
`distance`,
`${base}_dm`,
`${base}_portee`,
`${base}_aire-effet`,
`${base}_modatt`,
`${base}_moddgts`,
`${base}_modkipositif`,
`${base}_modkinegatif`,
`${base}_modkipositifdgts`,
`${base}_modkinegatifdgts`,
`${base}_description`,
);
attrs = await getAttrsAsync(list);
diceSpe = attrs['dice-special'];
diceAtk = attrs['dice-atk'];
update['popup-id'] = base;
update['popup-stringify'] = JSON.stringify(attrs);
update['popup-title'] = attrs[`${base}_name`];
update['popup-dice-atk'] = Math.min(diceSpe, diceAtk);
update['popup'] = 2;
break;
case 'distance':
list.push(
`distance`,
`${base}_dm`,
`${base}_portee`,
`${base}_modatt`,
`${base}_moddgts`,
`${base}_modkipositif`,
`${base}_modkinegatif`,
`${base}_modkipositifdgts`,
`${base}_modkinegatifdgts`,
`${base}_description`,
`${base}_incident-tir`,
);
attrs = await getAttrsAsync(list);
diceSpe = attrs['dice-special'];
diceAtk = attrs['dice-atk'];
update['popup-id'] = base;
update['popup-stringify'] = JSON.stringify(attrs);
update['popup-title'] = attrs[`${base}_name`];
update['popup-dice-atk'] = Math.min(diceSpe, diceAtk);
update['popup'] = 3;
break;
case 'sortilege':
list.push(
`force-mod`,
`dexterite-mod`,
`constitution-mod`,
`intelligence-mod`,
`sagesse-mod`,
`charisme-mod`,
`${base}_type-magie`,
`${base}_forme-magie`,
`${base}_rang`,
`${base}_caracteristique`,
`${base}_description`,
);
attrs = await getAttrsAsync(list);
diceSpe = attrs['dice-special'];
diceAtk = attrs['dice-atk'];
update['popup-id'] = base;
update['popup-stringify'] = JSON.stringify(attrs);
update['popup-title'] = attrs[`${base}_name`];
update['popup-dice-atk'] = Math.min(diceSpe, diceAtk);
update['popup'] = 5;
break;
}
await setAttrsAsync(update);
});
switch(c) {
case 'contact':
case 'distance':
case 'grenade':
case 'artillerie':
modki.forEach(m => {
on(`clicked:repeating_wpn${c}:modki${m}`, async function(info) {
const repeating = info.sourceAttribute.split('_')[2];
const list = [
`repeating_wpn${c}_${repeating}_modki${m}`,
];
const attrs = await getAttrsAsync(list);
const getShow = parseInt(attrs[list[0]]);
let update = {};
update[list[0]] = getShow === 1 ? 0 : 1;
setAttrsAsync(update);
});
});
break;
case 'sortilege':
on(`clicked:repeating_wpn${c}:spellroll`, async function(info) {
const repeating = info.sourceAttribute.split('_')[2];
const base = `repeating_wpn${c}_${repeating}`;
const list = [
`character_name`,
`${base}_name`,
`ki`,
];
let attrs;
let update = {};
update['popup-type'] = `${c}-atk`;
list.push(
`magique`,
`${base}_type-magie`,
`${base}_forme-magie`,
`${base}_rang`,
`${base}_difficulte`,
`${base}_description`,
);
attrs = await getAttrsAsync(list);
update['popup-id'] = base;
update['popup-stringify'] = JSON.stringify(attrs);
update['popup-title'] = attrs[`${base}_name`];
update['popup'] = 2;
await setAttrsAsync(update);
});
break;
}
});
on(`clicked:deux-armes`, async function() {
let list = [
'deux-armes'
];
const attrs = await getAttrsAsync(list);
const deuxarmes = parseInt(attrs['deux-armes']);
const newR = deuxarmes === 1 ? 0 : 1;
let update = {};
update['deux-armes'] = newR;
update['dice-atk'] = 0-newR;
setAttrsAsync(update);
});on(`clicked:arcdefeu`, async function() {
const list = [
'arcdefeu'
];
const attrs = await getAttrsAsync(list);
const clicked = attrs['arcdefeu'] === 1 ? 0 : 1;
let update = {};
update['arcdefeu'] = clicked;
await setAttrsAsync(update);
});
on(`clicked:popupcombat-confirmer`, async function() {
const list = [
`popup-id`,
`popup-stringify`,
`popup-type`,
`popup-luminosite`,
`popup-portee`,
`popup-dice-atk`,
`nbre-dice`,
`arcdefeu`,
`rang-voie`,
`divers`,
`roll-type`,
];
const attrs = await getAttrsAsync(list);
const rollType = attrs['roll-type'];
const type = attrs['popup-type'];
const base = attrs['popup-id'];
const json = JSON.parse(attrs['popup-stringify']);
const cName = json[`character_name`];
const name = json[`${base}_name`];
const dm = json[`${base}_dm`] ? json[`${base}_dm`] : 0;
const splitDm = dm === 0 ? [''] : dm.split('+');
const ki = parseInt(json['ki']);
const rang = parseInt(attrs['rang-voie']);
const modDivers = parseInt(attrs['divers']);
const nbreDice = parseInt(attrs['nbre-dice']);
const dice = getDice(attrs['popup-dice-atk']);
let attaque = 0;
let diceDm = splitDm[0] === "" ? '1D6' : splitDm[0];
let otherDm = 0;
let modAtt = 0;
let modDgt = 0;
let description;
let modKiAtt = 0;
let modKiDgt = 0;
let isModkiAttPos = 0;
let isModkiAttNeg = 0;
let isModkiDgtPos = 0;
let isModkiDgtNeg = 0;
let portee = 0;
let luminosite = 0;
let incidentTir = 0;
let arcdefeu = parseInt(attrs['arcdefeu']);
let empty = 1;
let aireEffet = '';
let difficulte = 0;
let typeMagie = '';
let formeMagie = '';
let roll = type === 'sortilege' ? `${rollType} &{template:std} {{name=${cName}}} {{title=${name}}}` : `${rollType} &{template:combat} {{name=${cName}}} {{title=${name}}}`;
roll += rang !== 0 ? `{{^{rang-voie}=[[${rang}]]}}` : '';
roll += modDivers !== 0 ? `{{^{mod-divers}=[[${modDivers}]]}}` : '';
splitDm.shift();
otherDm = splitDm.reduce(
(accumulator, currentValue) => parseInt(accumulator) + parseInt(currentValue),
0,
);
switch(type) {
case 'contact':
attaque += parseInt(json['contact']);
modAtt += parseInt(json[`${base}_modatt`]);
modDgt += parseInt(json[`${base}_moddgts`]);
isModkiAttPos = parseInt(json[`${base}_modkipositif`]);
isModkiAttNeg = parseInt(json[`${base}_modkinegatif`]);
isModkiDgtPos = parseInt(json[`${base}_modkipositifdgts`]);
isModkiDgtNeg = parseInt(json[`${base}_modkinegatifdgts`]);
description = json[`${base}_description`];
break;
case 'grenade':
attaque += parseInt(json['distance']);
modAtt += parseInt(json[`${base}_modatt`]);
modDgt += parseInt(json[`${base}_moddgts`]);
isModkiAttPos = parseInt(json[`${base}_modkipositif`]);
isModkiAttNeg = parseInt(json[`${base}_modkinegatif`]);
isModkiDgtPos = parseInt(json[`${base}_modkipositifdgts`]);
isModkiDgtNeg = parseInt(json[`${base}_modkinegatifdgts`]);
description = json[`${base}_description`];
break;
case 'artillerie':
attaque += parseInt(json['distance']);
modAtt += parseInt(json[`${base}_modatt`]);
modDgt += parseInt(json[`${base}_moddgts`]);
aireEffet += parseInt(json[`${base}_aire-effet`]);
isModkiAttPos = parseInt(json[`${base}_modkipositif`]);
isModkiAttNeg = parseInt(json[`${base}_modkinegatif`]);
isModkiDgtPos = parseInt(json[`${base}_modkipositifdgts`]);
isModkiDgtNeg = parseInt(json[`${base}_modkinegatifdgts`]);
description = json[`${base}_description`];
roll += `{{aireeffet=[[${aireEffet}]]}}`;
break;
case 'distance':
const getMDistance = getDistanceMod(attrs['popup-luminosite'], attrs['popup-portee']);
attaque += parseInt(json['distance']);
modAtt += parseInt(json[`${base}_modatt`]);
modDgt += parseInt(json[`${base}_moddgts`]);
isModkiAttPos = parseInt(json[`${base}_modkipositif`]);
isModkiAttNeg = parseInt(json[`${base}_modkinegatif`]);
isModkiDgtPos = parseInt(json[`${base}_modkipositifdgts`]);
isModkiDgtNeg = parseInt(json[`${base}_modkinegatifdgts`]);
incidentTir = parseInt(json[`${base}_incident-tir`]);
description = json[`${base}_description`];
if(getMDistance.luminosite.mod !== 0) {
roll += getMDistance.luminosite.text;
luminosite = getMDistance.luminosite.mod;
}
if(getMDistance.portee.mod !== 0) {
roll += getMDistance.portee.text;
portee = getMDistance.portee.mod;
}
if(arcdefeu !== 0) {
roll += `{{^{arc-de-feu}=[[-3]]}}`;
incidentTir += 1;
empty = 0;
}
roll += `{{incident=[[0]]}}`;
break;
case 'sortilege':
const rangSort = parseInt(json[`${base}_rang`]);
typeMagie = json[`${base}_type-magie`];
formeMagie = json[`${base}_forme-magie`];
description = json[`${base}_description`];
difficulte = rangSort*5;
empty = 0;
roll += `{{typemagie=${typeMagie}}}`;
roll += `{{formemagie=${formeMagie}}}`;
roll += `{{^{rang-sort}=[[${rangSort}]]}}`;
roll += `{{^{difficulte}=[[${difficulte}]]}}`;
roll += `{{difficulte=[[0]]}}`;
roll += `{{result=[[${nbreDice}${dice}kh1cf4cs7cs20+${parseInt(json[`${json[`${base}_caracteristique`]}-mod`])+rang+modDivers}]]}}`;
roll += `{{echec=[[0]]}} {{destin=[[0]]}} {{critique=[[0]]}}`;
break;
case 'sortilege-atk':
attaque += parseInt(json['magique']);
description = json[`${base}_description`];
break;
}
let stRoll;
let computed = {};
if(rang !== 0 || modDivers !== 0) empty = 0;
if(type === 'sortilege') {
if(description !== '') {
roll += `{{description=${description}}}`;
}
roll += `{{empty=[[${empty}]]}}`;
stRoll = await startRoll(roll);
const result = Math.max(...stRoll.results.result.dice);
switch(result) {
case 4:
computed.echec = 1;
break;
case 7:
computed.destin = 1;
break;
case 20:
computed.critique = 1;
break;
}
if(stRoll.results.result.result >= difficulte && result !== 4) computed.difficulte = 1;
else computed.difficulte = 0;
finishRoll(stRoll.rollId, computed);
} else {
attaque += modAtt;
attaque += rang;
attaque += modDivers;
if(isModkiAttPos && ki > 0) modKiAtt += ki;
if(isModkiAttNeg && ki < 0) modKiAtt += ki;
if(isModkiDgtPos && ki > 0) modKiDgt += ki;
if(isModkiDgtNeg && ki < 0) modKiDgt += ki;
if(modAtt !== 0) {
roll += `{{^{modificateur-attaque-short}=[[${modAtt}]]}}`;
empty = 0;
}
if(modKiAtt !== 0) {
roll += `{{^{modificateur-ki-attaque-short}=[[${modKiAtt}]]}}`;
empty = 0;
}
if(modDgt !== 0) {
roll += `{{^{modificateur-degats-short}=[[${modDgt}]]}}`;
empty = 0;
}
if(modKiDgt !== 0) {
roll += `{{^{modificateur-ki-degats-short}=[[${modKiDgt}]]}}`;
empty = 0;
}
if(description !== '') {
roll += `{{description=${description}}}`;
}
roll += `{{empty=[[${empty}]]}}`;
attaque += modKiAtt;
attaque += luminosite;
attaque += portee;
modDgt += modKiDgt;
modDgt += otherDm;
if(arcdefeu !== 0) {
attaque -= 3;
modDgt -= 3;
}
if(type === 'artillerie')
roll += ` {{attaque=[[${nbreDice}${dice}kh1cf1cf2cf4cs7cs20+${attaque}]]}} {{degats=[[{${diceDm}!!}+${modDgt}]]}} {{destin=[[0]]}} {{echec=[[0]]}} {{critique=[[0]]}}`;
else if(type === 'sortilege-atk') roll += ` {{attaque=[[${nbreDice}${dice}kh1cf4cs7cs20+${attaque}]]}} {{destin=[[0]]}} {{echec=[[0]]}} {{critique=[[0]]}}`;
else roll += ` {{attaque=[[${nbreDice}${dice}kh1cf4cs7cs20+${attaque}]]}} {{degats=[[{${diceDm}!!}+${modDgt}]]}} {{destin=[[0]]}} {{echec=[[0]]}} {{critique=[[0]]}}`;
stRoll = await startRoll(roll);
const diceAttaque = Math.max(...stRoll.results.attaque.dice);
let totalDgts = 0;
if(type !== 'sortilege-atk') totalDgts = stRoll.results.degats.result;
computed = {};
if(diceAttaque >= 1 && diceAttaque <= incidentTir) {
computed.incident = 1;
}
switch(diceAttaque) {
case 1:
case 2:
if(type === 'artillerie') computed.echec = 1;
break;
case 4:
computed.echec = 1;
break;
case 7:
computed.destin = 1;
break;
case 20:
computed.critique = 1;
break;
}
if(totalDgts < 1) totalDgts = 1;
if(diceAttaque === 20) computed.degats = totalDgts*2;
else computed.degats = totalDgts;
finishRoll(stRoll.rollId, computed);
if(type === 'artillerie' && (diceAttaque === 1 || diceAttaque === 2 || diceAttaque === 4)) {
let rollArtillerie = `${rollType} &{template:std} {{name=${cName}}} {{title=${name}}} {{subtitle=^{relance-echec-critique}}} {{result=[[${nbreDice}${dice}]]}} {{echec=[[0]]}}`;
let artillerieRoll = await startRoll(rollArtillerie);
const diceArtillerie = artillerieRoll.results.result.dice[0];
let computedArtillerie = {};
if(diceArtillerie === 1 || diceArtillerie === 2 || diceArtillerie === 4) computedArtillerie.echec = 1;
finishRoll(artillerieRoll.rollId, computedArtillerie);
}
}
let update = {};
update['popup'] = 0;
update['nbre-dice'] = 1;
await setAttrsAsync(update);
});
on(`clicked:popupstd-confirmer`, async function() {
const list = [
`popup-id`,
`popup-stringify`,
`popup-type`,
`popup-title`,
`nbre-dice`,
`rang-voie`,
`divers`,
`dice-special`,
`roll-type`,
];
const attrs = await getAttrsAsync(list);
const rollType = attrs['roll-type'];
const diceSpe = attrs['dice-special'];
const nbreDice = attrs[`nbre-dice`];
const type = attrs['popup-type'];
const base = attrs['popup-id'];
const json = JSON.parse(attrs['popup-stringify']);
const cName = json[`character_name`];
const title = attrs['popup-title'];
const rang = parseInt(attrs['rang-voie']);
const modDivers = parseInt(attrs['divers']);
const dice = getDice(diceSpe);
let name = '';
let rollBase = 0;
let empty = 1;
let roll = `${rollType} &{template:std}`;
roll += rang !== 0 ? `{{^{rang-voie}=[[${rang}]]}}` : '';
roll += modDivers !== 0 ? `{{^{mod-divers}=[[${modDivers}]]}}` : '';
switch(type) {
case 'resistancementale':
name = title;
rollBase = parseInt(json[`volonte`]);
break;
case 'vehicule':
let dexterite = parseInt(json[`dexterite-mod`]);
let agilite = parseInt(json[`${base}_agilite-vehicule`]);
name = title !== '' ? '' : title;
rollBase = dexterite;
rollBase += agilite;
roll += `{{subtitle=^{pilotage-roll}}}`;
roll += `{{^{dexterite}=[[${dexterite}]]}} {{^{agilite}=[[${agilite}]]}}`;
break;
case 'caracteristique':
name = getTranslationByKey(base).charAt(0).toUpperCase() + getTranslationByKey(base).slice(1);
let caracteristique = parseInt(json[`${base}-mod`]);
rollBase += caracteristique;
break;
case 'combat':
name = getTranslationByKey(base).charAt(0).toUpperCase() + getTranslationByKey(base).slice(1);
rollBase += parseInt(json[base]);
break;
}
roll += `{{name=${cName}}} {{title=${name}}}`;
roll += `{{result=[[${nbreDice}${dice}kh1cf4cs7cs20+${parseInt(rollBase+rang+modDivers)}]]}}`;
roll += `{{echec=[[0]]}} {{destin=[[0]]}} {{critique=[[0]]}}`;
if(rang !== 0 || modDivers !== 0) empty = 0;
roll += `{{empty=[[${empty}]]}}`;
let stRoll = await startRoll(roll);
let computed = {};
const diceResult = Math.max(...stRoll.results.result.dice);
switch(diceResult) {
case 4:
computed.echec = 1;
break;
case 7:
computed.destin = 1;
break;
case 20:
computed.critique = 1;
break;
}
finishRoll(stRoll.rollId, computed);
let update = {};
update['popup'] = 0;
update['nbre-dice'] = 1;
await setAttrsAsync(update);
});</script>
<div class="content">
<input type="hidden" name="attr_volonte" value="0"/>
<input type="hidden" name="attr_historique"/>
<input class="popup" type="hidden" value="0" name="attr_popup"/>
<input class="menu" type="hidden" value="traits-mental" name="attr_menu"/>
<input class="mode-edition" type="hidden" value="0" name="attr_edition"/>
<input class="parametres" type="hidden" value="0" name="attr_options"/>
<div class="popup">
<div class="lvlup">
<h1 data-i18n="confirmation-niveau"></h1>
<label><span data-i18n="confirmation-attaque"></span>
<select class="popupniveau-select" name="attr_popupniveau"></select>
</label>
<button class="annuler" type="action" name="act_popup-annuler" data-i18n="annuler"></button>
<button class="confirmer" type="action" name="act_popupniveau-confirmer" data-i18n="confirmer"></button>
</div>
<div class="lvldown">
<h1 data-i18n="confirmation-niveau-down"></h1>
<button class="annuler" type="action" name="act_popup-annuler" data-i18n="annuler"></button>
<button class="confirmer" type="action" name="act_popupniveaudown-confirmer" data-i18n="confirmer"></button>
</div>
<div class="popupcombat">
<h1 data-i18n="ask-modificateurs"></h1><span class="subtitle" name="attr_popup-title"></span>
<div class="contact">
<label>
<div><span data-i18n="dice-attaque"></span><span> : </span></div>
<select name="attr_popup-dice-atk">
<option value="0">D20</option>
<option value="-1">D12</option>
</select>
</label>
<label>
<div><span data-i18n="nbre-dice"></span><span> : </span></div>
<input type="number" name="attr_nbre-dice" value="1" min="1"/>
</label>
<label>
<div><span data-i18n="rang-voie"></span><span> : </span></div>
<input type="number" name="attr_rang-voie" value="0" min="0"/>
</label>
<label>
<div><span data-i18n="divers"></span><span> : </span></div>
<input type="number" name="attr_divers" value="0"/>
</label>
</div>
<div class="sortilege">
<label>
<div><span data-i18n="dice-attaque"></span><span> : </span></div>
<select name="attr_popup-dice-atk">
<option value="0">D20</option>
<option value="-1">D12</option>
</select>
</label>
<label>
<div><span data-i18n="nbre-dice"></span><span> : </span></div>
<input type="number" name="attr_nbre-dice" value="1" min="1"/>
</label>
<label>
<div><span data-i18n="rang-voie"></span><span> : </span></div>
<input type="number" name="attr_rang-voie" value="0" min="0"/>
</label>
<label>
<div><span data-i18n="divers"></span><span> : </span></div>
<input type="number" name="attr_divers" value="0"/>
</label>
</div>
<div class="distance">
<label>
<div><span data-i18n="dice-attaque"></span><span> : </span></div>
<select name="attr_popup-dice-atk">
<option value="0">D20</option>
<option value="-1">D12</option>
</select>
</label>
<label>
<div><span data-i18n="nbre-dice"></span><span> : </span></div>
<input type="number" name="attr_nbre-dice" value="1" min="1"/>
</label>
<label>
<div><span data-i18n="rang-voie"></span><span> : </span></div>
<input type="number" name="attr_rang-voie" value="0" min="0"/>
</label>
<label>
<div><span data-i18n="divers"></span><span> : </span></div>
<input type="number" name="attr_divers" value="0"/>
</label>
<div class="checkbtn">
<input type="hidden" name="attr_arcdefeu" value="0"/>
<button type="action" name="act_arcdefeu"><span class="checked"></span><span class="unchecked"></span></button><span data-i18n="arc-de-feu"></span>
</div>
<div class="list"><span data-i18n="luminosite"></span>
<select name="attr_popup-luminosite">
<option value="std" data-i18n="standard"></option>
<option value="pnbr" data-i18n="penombre"></option>
<option value="noir" data-i18n="noir-total"></option>
</select>
</div>
<div class="list"><span data-i18n="portee"></span>
<select name="attr_popup-portee">
<option value="std" data-i18n="portee-normale"></option>
<option value="dbl" data-i18n="portee-double"></option>
<option value="trp" data-i18n="portee-triple"></option>
</select>
</div>
</div>
<button class="annuler" type="action" name="act_popup-annuler" data-i18n="annuler"></button>
<button class="confirmer" type="action" name="act_popupcombat-confirmer"><span data-i18n="jet"></span><span> !</span></button>
</div>
<div class="popupstd">
<h1 data-i18n="ask-modificateurs"></h1><span class="subtitle" name="attr_popup-title"></span>
<div>
<label>
<div><span data-i18n="dice-utilise"></span><span> : </span></div>
<select name="attr_popup-dice">
<option value="0">D20</option>
<option value="-1">D12</option>
</select>
</label>
<label>
<div><span data-i18n="nbre-dice"></span><span> : </span></div>
<input type="number" name="attr_nbre-dice" value="1" min="1"/>
</label>
<label>
<div><span data-i18n="rang-voie"></span><span> : </span></div>
<input type="number" name="attr_rang-voie" value="0" min="0"/>
</label>
<label>
<div><span data-i18n="divers"></span><span> : </span></div>
<input type="number" name="attr_divers" value="0"/>
</label>
</div>
<button class="annuler" type="action" name="act_popup-annuler" data-i18n="annuler"></button>
<button class="confirmer" type="action" name="act_popupstd-confirmer"><span data-i18n="jet"></span><span> !</span></button>
</div>
</div>
<div class="options">
<button class="mode_edition" type="action" name="act_edition">
<p data-i18n="mode-edition">mode edition</p>
</button>
<button class="parametres" type="action" name="act_options">
<p>y</p>
</button>
</div>
<div class="data-options">
<select name="attr_roll-type">
<option value="" data-i18n="roll-public">Jet public</option>
<option value="/w gm" data-i18n="roll-prive">Jet privé</option>
</select>
</div>
<div class="attributs">
<!--Création de la liste des attributs-->
<div class="main_block">
<button class="title" type="action" name="act_rollforce" data-i18n="force-short">force</button>
<div class="attr-block"><span class="header h1" data-i18n="valeur-short">val.</span><span class="header h2" data-i18n="modificateur-short"></span><span class="score s1" name="attr_force-total">10</span><span class="score s2" name="attr_force-mod">0</span></div>
</div>
<div class="main_block">
<button class="title" type="action" name="act_rolldexterite" data-i18n="dexterite-short">dexterite</button>
<div class="attr-block"><span class="header h1" data-i18n="valeur-short">val.</span><span class="header h2" data-i18n="modificateur-short"></span><span class="score s1" name="attr_dexterite-total">10</span><span class="score s2" name="attr_dexterite-mod">0</span></div>
</div>
<div class="main_block">
<button class="title" type="action" name="act_rollconstitution" data-i18n="constitution-short">constitution</button>
<div class="attr-block"><span class="header h1" data-i18n="valeur-short">val.</span><span class="header h2" data-i18n="modificateur-short"></span><span class="score s1" name="attr_constitution-total">10</span><span class="score s2" name="attr_constitution-mod">0</span></div>
</div>
<div class="main_block">
<button class="title" type="action" name="act_rollperception" data-i18n="perception-short">perception</button>
<div class="attr-block"><span class="header h1" data-i18n="valeur-short">val.</span><span class="header h2" data-i18n="modificateur-short"></span><span class="score s1" name="attr_perception-total">10</span><span class="score s2" name="attr_perception-mod">0</span></div>
</div>
<div class="main_block">
<button class="title" type="action" name="act_rollintelligence" data-i18n="intelligence-short">intelligence</button>
<div class="attr-block"><span class="header h1" data-i18n="valeur-short">val.</span><span class="header h2" data-i18n="modificateur-short"></span><span class="score s1" name="attr_intelligence-total">10</span><span class="score s2" name="attr_intelligence-mod">0</span></div>
</div>
<div class="main_block">
<button class="title" type="action" name="act_rollcharisme" data-i18n="charisme-short">charisme</button>
<div class="attr-block"><span class="header h1" data-i18n="valeur-short">val.</span><span class="header h2" data-i18n="modificateur-short"></span><span class="score s1" name="attr_charisme-total">10</span><span class="score s2" name="attr_charisme-mod">0</span></div>
</div>
</div>
<div class="edit_attributs">
<!--Création de la liste des attributs en MODE EDITION-->
<div class="main_block">
<button class="title" type="action" name="act_rollforce" data-i18n="force-short">force</button>
<div class="block"><span class="header h1" data-i18n="valeur-short">val.</span><span class="header h2" data-i18n="modificateur-short"></span><span class="score s1" name="attr_force-total">10</span><span class="score s2" name="attr_force-mod">0</span><span class="toedit" data-i18n="base">base</span>
<input type="number" name="attr_force-base" value="10" min="0"/><span class="toedit" data-i18n="divers">divers</span>
<input type="number" name="attr_force-divers" value="0"/><span class="toedit" data-i18n="temporaire-short">temp.</span>
<input type="number" name="attr_force-temp" value="0"/>
<input type="hidden" name="attr_force-total" value="10"/>
<input type="hidden" name="attr_force-mod" value="0"/>
</div>
</div>
<div class="main_block">
<button class="title" type="action" name="act_rolldexterite" data-i18n="dexterite-short">dexterite</button>
<div class="block"><span class="header h1" data-i18n="valeur-short">val.</span><span class="header h2" data-i18n="modificateur-short"></span><span class="score s1" name="attr_dexterite-total">10</span><span class="score s2" name="attr_dexterite-mod">0</span><span class="toedit" data-i18n="base">base</span>
<input type="number" name="attr_dexterite-base" value="10" min="0"/><span class="toedit" data-i18n="divers">divers</span>
<input type="number" name="attr_dexterite-divers" value="0"/><span class="toedit" data-i18n="temporaire-short">temp.</span>
<input type="number" name="attr_dexterite-temp" value="0"/>
<input type="hidden" name="attr_dexterite-total" value="10"/>
<input type="hidden" name="attr_dexterite-mod" value="0"/>
</div>
</div>
<div class="main_block">
<button class="title" type="action" name="act_rollconstitution" data-i18n="constitution-short">constitution</button>
<div class="block"><span class="header h1" data-i18n="valeur-short">val.</span><span class="header h2" data-i18n="modificateur-short"></span><span class="score s1" name="attr_constitution-total">10</span><span class="score s2" name="attr_constitution-mod">0</span><span class="toedit" data-i18n="base">base</span>
<input type="number" name="attr_constitution-base" value="10" min="0"/><span class="toedit" data-i18n="divers">divers</span>
<input type="number" name="attr_constitution-divers" value="0"/><span class="toedit" data-i18n="temporaire-short">temp.</span>
<input type="number" name="attr_constitution-temp" value="0"/>
<input type="hidden" name="attr_constitution-total" value="10"/>
<input type="hidden" name="attr_constitution-mod" value="0"/>
</div>
</div>
<div class="main_block">
<button class="title" type="action" name="act_rollperception" data-i18n="perception-short">perception</button>
<div class="block"><span class="header h1" data-i18n="valeur-short">val.</span><span class="header h2" data-i18n="modificateur-short"></span><span class="score s1" name="attr_perception-total">10</span><span class="score s2" name="attr_perception-mod">0</span><span class="toedit" data-i18n="base">base</span>
<input type="number" name="attr_perception-base" value="10" min="0"/><span class="toedit" data-i18n="divers">divers</span>
<input type="number" name="attr_perception-divers" value="0"/><span class="toedit" data-i18n="temporaire-short">temp.</span>
<input type="number" name="attr_perception-temp" value="0"/>
<input type="hidden" name="attr_perception-total" value="10"/>
<input type="hidden" name="attr_perception-mod" value="0"/>
</div>
</div>
<div class="main_block">
<button class="title" type="action" name="act_rollintelligence" data-i18n="intelligence-short">intelligence</button>
<div class="block"><span class="header h1" data-i18n="valeur-short">val.</span><span class="header h2" data-i18n="modificateur-short"></span><span class="score s1" name="attr_intelligence-total">10</span><span class="score s2" name="attr_intelligence-mod">0</span><span class="toedit" data-i18n="base">base</span>
<input type="number" name="attr_intelligence-base" value="10" min="0"/><span class="toedit" data-i18n="divers">divers</span>
<input type="number" name="attr_intelligence-divers" value="0"/><span class="toedit" data-i18n="temporaire-short">temp.</span>
<input type="number" name="attr_intelligence-temp" value="0"/>
<input type="hidden" name="attr_intelligence-total" value="10"/>
<input type="hidden" name="attr_intelligence-mod" value="0"/>
</div>
</div>
<div class="main_block">
<button class="title" type="action" name="act_rollcharisme" data-i18n="charisme-short">charisme</button>
<div class="block"><span class="header h1" data-i18n="valeur-short">val.</span><span class="header h2" data-i18n="modificateur-short"></span><span class="score s1" name="attr_charisme-total">10</span><span class="score s2" name="attr_charisme-mod">0</span><span class="toedit" data-i18n="base">base</span>
<input type="number" name="attr_charisme-base" value="10" min="0"/><span class="toedit" data-i18n="divers">divers</span>
<input type="number" name="attr_charisme-divers" value="0"/><span class="toedit" data-i18n="temporaire-short">temp.</span>
<input type="number" name="attr_charisme-temp" value="0"/>
<input type="hidden" name="attr_charisme-total" value="10"/>
<input type="hidden" name="attr_charisme-mod" value="0"/>
</div>
</div>
</div>
<div class="subattributs">
<div class="mainsa unsimple">
<div class="main red"><span class="title" data-i18n="pv"></span>
<div class="value">
<input class="score" type="number" name="attr_pv" value="0" min="0"/><span class="separator">/</span><span class="score_max" name="attr_pv_max">10</span>
</div>
</div>
<div class="submain">
<label class="demi"><span class="title" data-i18n="modificateur-short">mod.</span>
<input type="number" name="attr_pv-mod" value="0"/>
</label>
<label class="demi"><span class="title" data-i18n="temporaire-short">mod.</span>
<input type="number" name="attr_pv-temp" value="0"/>
</label>
<label class="full lock"><span class="title" data-i18n="base">base</span><span class="score" name="attr_pv-base">0</span>
<input type="hidden" name="attr_pv-base" value="0"/>
</label>
<label class="demi lock"><span class="title" data-i18n="des-de-vie-short">Dv</span><span class="score" name="attr_pv-dv" value="10"></span>
<input type="hidden" name="attr_pv-dv" value="10"/>
</label>
<label class="demi lock"><span class="title" data-i18n="constitution-short">con</span><span class="score" name="attr_pv-con" value="0"></span>
<input type="hidden" name="attr_pv-con" value="0"/>
</label>
</div>
</div>
<div class="mainsa unsimple">
<div class="main red"><span class="title" data-i18n="maho"></span>
<div class="value">
<input class="score" type="number" name="attr_maho" value="0" min="0"/><span class="separator">/</span><span class="score_max" name="attr_maho_max">0</span>
</div>
</div>
<div class="submain">
<label class="demi"><span class="title" data-i18n="modificateur-short">mod.</span>
<input type="number" name="attr_maho-mod" value="0"/>
</label>
<label class="demi"><span class="title" data-i18n="temporaire-short">mod.</span>
<input type="number" name="attr_maho-temp" value="0"/>
</label>
<label class="full lock"><span class="title" data-i18n="base">base</span><span class="score" name="attr_maho-base">0</span>
<input type="hidden" name="attr_maho-base" value="0"/>
</label>
</div>
</div>
<div class="mainsa ">
<div class="main blue"><span class="title" data-i18n="folie"></span>
<div class="svalue">
<input class="score" type="number" name="attr_folie" value="0"/>
</div>
</div>
</div>
<div class="mainsa unsimple">
<div class="main blue"><span class="title" data-i18n="serenite"></span>
<div class="value">
<input class="score" type="number" name="attr_serenite" value="0" min="0"/><span class="separator">/</span><span class="score_max" name="attr_serenite_max">2</span>
</div>
</div>
<div class="submain">
<label class="demi"><span class="title" data-i18n="modificateur-short">mod.</span>
<input type="number" name="attr_serenite-mod" value="0"/>
</label>
<label class="demi"><span class="title" data-i18n="temporaire-short">mod.</span>
<input type="number" name="attr_serenite-temp" value="0"/>
</label>
<label class="full lock"><span class="title" data-i18n="base">base</span><span class="score" name="attr_serenite-base">2</span>
<input type="hidden" name="attr_serenite-base" value="2"/>
</label>
</div>
</div>
<div class="mainsa unsimple">
<div class="main yellow"><span class="title" data-i18n="volonte"></span>
<div class="svalue"><span class="score" name="attr_volonte">0</span>
</div>
</div>
<div class="submain">
<label class="demi"><span class="title" data-i18n="modificateur-short">mod.</span>
<input type="number" name="attr_volonte-mod" value="0"/>
</label>
<label class="demi"><span class="title" data-i18n="temporaire-short">mod.</span>
<input type="number" name="attr_volonte-temp" value="0"/>
</label>
<label class="full lock"><span class="title" data-i18n="base">base</span><span class="score" name="attr_volonte-base">0</span>
<input type="hidden" name="attr_volonte-base" value="0"/>
</label>
</div>
</div>
<div class="mainsa unsimple">
<div class="main yellow"><span class="title" data-i18n="chance"></span>
<div class="value">
<input class="score" type="number" name="attr_chance" value="0" min="0"/><span class="separator">/</span><span class="score_max" name="attr_chance_max">2</span>
</div>
</div>
<div class="submain">
<label class="demi"><span class="title" data-i18n="modificateur-short">mod.</span>
<input type="number" name="attr_chance-mod" value="0"/>
</label>
<label class="demi"><span class="title" data-i18n="temporaire-short">mod.</span>
<input type="number" name="attr_chance-temp" value="0"/>
</label>
<label class="full lock"><span class="title" data-i18n="base">base</span><span class="score" name="attr_chance-base">0</span>
<input type="hidden" name="attr_chance-base" value="0"/>
</label>
</div>
</div>
</div>
<div class="subattributs2">
<div class="mainsa">
<div class="main red"><span class="title" data-i18n="blessure"></span>
<div class="undefined">
<input class="score" type="number" name="attr_blessure" value="0"/>
</div>
</div>
</div>
<div class="mainsa">
<div class="main green"><span class="title" data-i18n="ki"></span>
<div class="undefined">
<input class="score" type="number" name="attr_ki" value="0"/>
</div>
</div>
</div>
<div class="mainsa">
<button class="btn yellow" type="action" name="act_resistance-mentale"><span data-i18n="roll-resistance-mentale"></span></button>
</div>
</div>
<div class="mainSheet">
<div class="leftprofil">
<div class="mainBlockData">
<select name="attr_type">
<option value="eiyu" data-i18n="eiyu" selected="selected"></option>
</select>
<div class="data">
<label><span><span data-i18n="nom">Nom</span><span> : </span></span>
<input type="text" name="attr_character_name"/>
</label>
<label><span><span data-i18n="profil">Profil</span><span> : </span></span>
<input type="text" name="attr_profil"/>
</label>
<label><span><span data-i18n="origine">Origine</span><span> : </span></span>
<input type="text" name="attr_origine"/>
</label>
<label><span><span data-i18n="religion">Religion</span><span> : </span></span>
<input type="text" name="attr_religion"/>
</label>
<input class="getLvl" type="hidden" name="attr_niveau" value="1"/>
<div class="niveau"><span><span data-i18n="niveau">Niveau</span><span> : </span></span>
<div class="downlvl">
<button class="downlvl" type="action" name="act_downlvl"><img src="https://image.noelshack.com/fichiers/2023/47/2/1700573454-arrow.png" data-i18n-title="lvldown"/></button>
</div>
<input type="niveau" name="attr_niveau" value="1" readonly="readonly"/>
<div class="uplvl">
<button class="uplvl" type="action" name="act_uplvl"><img src="https://image.noelshack.com/fichiers/2023/47/2/1700573454-arrow.png" data-i18n-title="lvlup"/></button>
</div>
</div>
</div>
<div class="eqData">
<!--Création de la liste de combat-->
<input class="initiative-edit" type="hidden" name="attr_initiative-edit" value="0"/>
<div class="initiative">
<div class="main">
<button class="label" type="action" name="act_initiative" data-i18n-title="initiative-roll"><img src="https://image.noelshack.com/fichiers/2023/47/3/1700660998-initiative.png"/></button><span class="value" name="attr_initiative" data-i18n-title="initiative">0</span>
<button class="edit" type="action" name="act_initiative-edit" data-i18n-title="initiative-edit">y</button>
</div>
<div class="submain">
<input type="hidden" name="attr_initiative-armure" value="0"/>
<label>
<select name="attr_initiative-carac">
<option value="force" data-i18n="force"></option>
<option value="dexterite" data-i18n="dexterite" selected="selected"></option>
<option value="constitution" data-i18n="constitution"></option>
<option value="perception" data-i18n="perception"></option>
<option value="intelligence" data-i18n="intelligence"></option>
<option value="charisme" data-i18n="charisme"></option>
</select><span class="score" name="attr_initiative-carac-value">0</span>
</label>
<label class="lock"><span class="label" data-i18n="armure">armure</span><span class="score" name="attr_initiative-armure">0</span>
</label>
<label class="lock"><span class="label" data-i18n="etat">etat</span><span class="score" name="attr_initiative-etat">0</span>
</label>
<label><span class="label" data-i18n="modificateur">mod</span>
<input class="score" type="number" name="attr_initiative-mod" value="0"/>
</label>
<label><span class="label" data-i18n="temporaire">temp</span>
<input class="score" type="number" name="attr_initiative-temp" value="0"/>
</label>
</div>
</div>
<input class="contact-edit" type="hidden" name="attr_contact-edit" value="0"/>
<div class="contact">
<div class="main">
<button class="label" type="action" name="act_contact" data-i18n-title="contact-roll"><img src="https://image.noelshack.com/fichiers/2023/47/3/1700660998-contact.png"/></button><span class="value" name="attr_contact" data-i18n-title="contact">0</span>
<button class="edit" type="action" name="act_contact-edit" data-i18n-title="contact-edit">y</button>
</div>
<div class="submain">
<input type="hidden" name="attr_contact-profil" value="0"/>
<input type="hidden" name="attr_contact-niveau" value="0"/>
<label class="lock"><span class="label" data-i18n="profil">profil</span><span class="score" name="attr_contact-profil">0</span>
</label>
<label>
<select name="attr_contact-carac">
<option value="force" data-i18n="force" selected="selected"></option>
<option value="dexterite" data-i18n="dexterite"></option>
<option value="constitution" data-i18n="constitution"></option>
<option value="perception" data-i18n="perception"></option>
<option value="intelligence" data-i18n="intelligence"></option>
<option value="charisme" data-i18n="charisme"></option>
</select><span class="score" name="attr_contact-carac-value">0</span>
</label>
<label class="lock"><span class="label" data-i18n="niveau">niveau</span><span class="score" name="attr_contact-niveau">0</span>
</label>
<label class="lock"><span class="label" data-i18n="etat">etat</span><span class="score" name="attr_contact-etat">0</span>
</label>
<label><span class="label" data-i18n="modificateur">mod</span>
<input class="score" type="number" name="attr_contact-mod" value="0"/>
</label>
<label><span class="label" data-i18n="temporaire">temp</span>
<input class="score" type="number" name="attr_contact-temp" value="0"/>
</label>
</div>
</div>
<input class="distance-edit" type="hidden" name="attr_distance-edit" value="0"/>
<div class="distance">
<div class="main">
<button class="label" type="action" name="act_distance" data-i18n-title="distance-roll"><img src="https://image.noelshack.com/fichiers/2023/47/3/1700660998-distance.png"/></button><span class="value" name="attr_distance" data-i18n-title="distance">0</span>
<button class="edit" type="action" name="act_distance-edit" data-i18n-title="distance-edit">y</button>
</div>
<div class="submain">
<input type="hidden" name="attr_distance-profil" value="0"/>
<input type="hidden" name="attr_distance-niveau" value="0"/>
<label class="lock"><span class="label" data-i18n="profil">profil</span><span class="score" name="attr_distance-profil">0</span>
</label>
<label>
<select name="attr_distance-carac">
<option value="force" data-i18n="force"></option>
<option value="dexterite" data-i18n="dexterite" selected="selected"></option>
<option value="constitution" data-i18n="constitution"></option>
<option value="perception" data-i18n="perception"></option>
<option value="intelligence" data-i18n="intelligence"></option>
<option value="charisme" data-i18n="charisme"></option>
</select><span class="score" name="attr_distance-carac-value">0</span>
</label>
<label class="lock"><span class="label" data-i18n="niveau">niveau</span><span class="score" name="attr_distance-niveau">0</span>
</label>
<label class="lock"><span class="label" data-i18n="etat">etat</span><span class="score" name="attr_distance-etat">0</span>
</label>
<label><span class="label" data-i18n="modificateur">mod</span>
<input class="score" type="number" name="attr_distance-mod" value="0"/>
</label>
<label><span class="label" data-i18n="temporaire">temp</span>
<input class="score" type="number" name="attr_distance-temp" value="0"/>
</label>
</div>
</div>
<input class="magique-edit" type="hidden" name="attr_magique-edit" value="0"/>
<div class="magique">
<div class="main">
<button class="label" type="action" name="act_magique" data-i18n-title="magique-roll"><img src="https://image.noelshack.com/fichiers/2023/47/3/1700660998-magique.png"/></button><span class="value" name="attr_magique" data-i18n-title="magique">0</span>
<button class="edit" type="action" name="act_magique-edit" data-i18n-title="magique-edit">y</button>
</div>
<div class="submain">
<input type="hidden" name="attr_magique-niveau" value="0"/>
<label>
<select name="attr_magique-carac">
<option value="force" data-i18n="force"></option>
<option value="dexterite" data-i18n="dexterite"></option>
<option value="constitution" data-i18n="constitution"></option>
<option value="perception" data-i18n="perception"></option>
<option value="intelligence" data-i18n="intelligence" selected="selected"></option>
<option value="charisme" data-i18n="charisme"></option>
</select><span class="score" name="attr_magique-carac-value">0</span>
</label>
<label class="lock"><span class="label" data-i18n="niveau">niveau</span><span class="score" name="attr_magique-niveau">0</span>
</label>
<label class="lock"><span class="label" data-i18n="etat">etat</span><span class="score" name="attr_magique-etat">0</span>
</label>
<label><span class="label" data-i18n="modificateur">mod</span>
<input class="score" type="number" name="attr_magique-mod" value="0"/>
</label>
<label><span class="label" data-i18n="temporaire">temp</span>
<input class="score" type="number" name="attr_magique-temp" value="0"/>
</label>
</div>
</div>
<input class="defense-edit" type="hidden" name="attr_defense-edit" value="0"/>
<div class="defense">
<div class="main">
<button class="label" type="action" name="act_defense" data-i18n-title="defense-title"><img src="https://image.noelshack.com/fichiers/2023/47/3/1700660998-defense.png"/></button><span class="value" name="attr_defense" data-i18n-title="defense-title">10</span>
<button class="edit" type="action" name="act_defense-edit" data-i18n-title="defense-edit">y</button>
</div>
<div class="submain">
<input type="hidden" name="attr_defense-armure" value="0"/>
<input type="hidden" name="attr_defense-action" value="0"/>
<label>
<select name="attr_defense-carac">
<option value="force" data-i18n="force"></option>
<option value="dexterite" data-i18n="dexterite" selected="selected"></option>
<option value="constitution" data-i18n="constitution"></option>
<option value="perception" data-i18n="perception"></option>
<option value="intelligence" data-i18n="intelligence"></option>
<option value="charisme" data-i18n="charisme"></option>
</select><span class="score" name="attr_defense-carac-value">0</span>
</label>
<label class="lock"><span class="label" data-i18n="armure">armure</span><span class="score" name="attr_defense-armure">0</span>
</label>
<label class="lock"><span class="label" data-i18n="action-defensive-short">action</span><span class="score" name="attr_defense-action">0</span>
</label>
<label class="lock"><span class="label" data-i18n="etat">etat</span><span class="score" name="attr_defense-etat">0</span>
</label>
<label><span class="label" data-i18n="modificateur">mod</span>
<input class="score" type="number" name="attr_defense-mod" value="0"/>
</label>
<label><span class="label" data-i18n="temporaire">temp</span>
<input class="score" type="number" name="attr_defense-temp" value="0"/>
</label>
</div>
</div>
<input class="reduction-edit" type="hidden" name="attr_reduction-edit" value="0"/>
<div class="reduction">
<div class="main">
<button class="label" type="action" name="act_reduction" data-i18n-title="reduction-degats"><img src="https://image.noelshack.com/fichiers/2024/03/5/1705677051-resistance.png"/></button><span class="value" name="attr_reduction" data-i18n-title="reduction-degats">0</span>
<button class="edit" type="action" name="act_reduction-edit" data-i18n-title="reduction-edit">y</button>
</div>
<div class="submain">
<input type="hidden" name="attr_reduction-armure" value="0"/>
<label class="lock"><span class="label" data-i18n="armure">armure</span><span class="score" name="attr_reduction-armure">0</span>
</label>
<label><span class="label" data-i18n="modificateur">mod</span>
<input class="score" type="number" name="attr_reduction-mod" value="0"/>
</label>
<label><span class="label" data-i18n="temporaire">temp</span>
<input class="score" type="number" name="attr_reduction-temp" value="0"/>
</label>
</div>
</div>
</div>
</div>
</div>
<div class="sheet">
<div class="menu">
<!--Création du menu-->
<button class="menu_traits-mental" type="action" name="act_traits-mental">
<p data-i18n="tab-traits-mental">tab-traits-mental</p>
</button>
<button class="menu_combat" type="action" name="act_combat">
<p data-i18n="tab-combat">tab-combat</p>
</button>
<button class="menu_inventaire" type="action" name="act_inventaire">
<p data-i18n="tab-inventaire">tab-inventaire</p>
</button>
<button class="menu_vehicules" type="action" name="act_vehicules">
<p data-i18n="tab-vehicules">tab-vehicules</p>
</button>
<button class="menu_voies" type="action" name="act_voies">
<p data-i18n="tab-voies">tab-voies</p>
</button>
<button class="menu_profil" type="action" name="act_profil">
<p data-i18n="tab-profil">tab-profil</p>
</button>
</div>
<div class="traits-mental">
<div class="col"><span class="header" data-i18n="phobies"></span>
<fieldset class="repeating_phobies">
<input type="text" name="attr_name" data-i18n-placeholder="nom" placeholder="nom"/>
<div class="autoex"><span name="attr_description"></span>
<textarea name="attr_description"></textarea>
</div>
</fieldset>
</div>
<div class="col"><span class="header" data-i18n="folies"></span>
<fieldset class="repeating_folies">
<input type="text" name="attr_name" data-i18n-placeholder="nom" placeholder="nom"/>
<div class="autoex"><span name="attr_description"></span>
<textarea name="attr_description"></textarea>
</div>
</fieldset>
</div>
<div class="traits"><span class="header" data-i18n="avantages"></span><span class="header" data-i18n="desavantages"></span>
<div>
<fieldset class="repeating_avantages">
<div class="dataTraits">
<input type="text" name="attr_name" data-i18n-placeholder="nom" placeholder="nom"/>
<label class="cout"><span class="title"><span data-i18n="cout">cout</span><span> : </span></span>
<input type="number" name="attr_cout" value="0"/>
</label>
<div class="autoex"><span name="attr_description"></span>
<textarea name="attr_description"></textarea>
</div>
</div>
</fieldset>
</div>
<div>
<fieldset class="repeating_desavantages">
<div class="dataTraits">
<input type="text" name="attr_name" data-i18n-placeholder="nom" placeholder="nom"/>
<label class="cout"><span class="title"><span data-i18n="cout">cout</span><span> : </span></span>
<input type="number" name="attr_cout" value="0"/>
</label>
<div class="autoex"><span name="attr_description"></span>
<textarea name="attr_description"></textarea>
</div>
</div>
</fieldset>
</div>
</div>
<label class="mythos"><span data-i18n="mythos"></span>
<input type="number" name="attr_mythos" value="0" min="0"/>
</label>
</div>
<div class="voies">
<div class="ptsCapacites">
<input type="hidden" name="attr_ptscapacites" value="0"/>
<input type="hidden" name="attr_ptscapacites_max" value="4"/><span class="label" data-i18n="points-capacites-short">pts-capacites</span>
<div class="score"><span class="value" name="attr_ptscapacites">0</span><span class="separator">/</span><span class="max" name="attr_ptscapacites_max">4</span></div>
</div>
<input class="voie-selshow" type="hidden" name="attr_voie-selshow" value="capacite"/>
<button class="btnswitchc" type="action" name="act_switchcapacite"><span data-i18n="capacites"></span></button>
<button class="btnswitchv" type="action" name="act_switchvoie"><span data-i18n="voies"></span></button>
<div class="listCapacites"><span class="title" data-i18n="capacites"></span>
<fieldset class="repeating_voies"><span class="namevoie" name="attr_name"></span>
<div class="subtitle"><span class="subtitle" data-i18n="rang"></span><span>1</span></div>
<div class="subtitle"><span class="subtitle" data-i18n="rang"></span><span>2</span></div>
<div class="subtitle"><span class="subtitle" data-i18n="rang"></span><span>3</span></div>
<div class="subtitle"><span class="subtitle" data-i18n="rang"></span><span>4</span></div>
<div class="subtitle"><span class="subtitle" data-i18n="rang"></span><span>5</span></div>
<input class="rang-checked" type="hidden" name="attr_rang1" value="0"/>
<div class="voierang"><span name="attr_rang-1-name"></span><span class="description">?</span><span class="reveal-description" name="attr_rang-1-description"></span></div>
<input class="rang-checked" type="hidden" name="attr_rang2" value="0"/>
<div class="voierang"><span name="attr_rang-2-name"></span><span class="description">?</span><span class="reveal-description" name="attr_rang-2-description"></span></div>
<input class="rang-checked" type="hidden" name="attr_rang3" value="0"/>
<div class="voierang"><span name="attr_rang-3-name"></span><span class="description">?</span><span class="reveal-description" name="attr_rang-3-description"></span></div>
<input class="rang-checked" type="hidden" name="attr_rang4" value="0"/>
<div class="voierang"><span name="attr_rang-4-name"></span><span class="description">?</span><span class="reveal-description" name="attr_rang-4-description"></span></div>
<input class="rang-checked" type="hidden" name="attr_rang5" value="0"/>
<div class="voierang5"><span name="attr_rang-5-name"></span><span class="description">?</span><span class="reveal-description" name="attr_rang-5-description"></span></div>
</fieldset>
</div>
<div class="listRangs">
<fieldset class="repeating_voies">
<input type="text" name="attr_name" data-i18n-placeholder="nom" placeholder="nom"/>
<select name="attr_type">
<option value="predilection" data-i18n="voiepredilection" selected="selected"></option>
<option value="memefamille" data-i18n="voiememefamille"></option>
<option value="horsfamille" data-i18n="voiehorsfamille"></option>
<option value="horsprofil" data-i18n="voiehorsprofil"></option>
<option value="prestige" data-i18n="voieprestige"></option>
</select>
<div class="rang">
<input class="rang-checked" type="hidden" name="attr_rang1" value="0"/>
<button class="borderTop" type="action" name="act_rang1"><span class="checked"></span><span class="unchecked"></span></button>
<div class="header"><span class="lRang" data-i18n="rang"></span><span class="vRang">1 : </span>
<input type="text" name="attr_rang-1-name"/>
</div>
<div class="autoex"><span name="attr_rang-1-description"></span>
<textarea name="attr_rang-1-description"></textarea>
</div>
</div>
<div class="rang">
<input class="rang-checked" type="hidden" name="attr_rang2" value="0"/>
<button type="action" name="act_rang2"><span class="checked"></span><span class="unchecked"></span></button>
<div class="header"><span class="lRang" data-i18n="rang"></span><span class="vRang">2 : </span>
<input type="text" name="attr_rang-2-name"/>
</div>
<div class="autoex"><span name="attr_rang-2-description"></span>
<textarea name="attr_rang-2-description"></textarea>
</div>
</div>
<div class="rang">
<input class="rang-checked" type="hidden" name="attr_rang3" value="0"/>
<button type="action" name="act_rang3"><span class="checked"></span><span class="unchecked"></span></button>
<div class="header"><span class="lRang" data-i18n="rang"></span><span class="vRang">3 : </span>
<input type="text" name="attr_rang-3-name"/>
</div>
<div class="autoex"><span name="attr_rang-3-description"></span>
<textarea name="attr_rang-3-description"></textarea>
</div>
</div>
<div class="rang">
<input class="rang-checked" type="hidden" name="attr_rang4" value="0"/>
<button type="action" name="act_rang4"><span class="checked"></span><span class="unchecked"></span></button>
<div class="header"><span class="lRang" data-i18n="rang"></span><span class="vRang">4 : </span>
<input type="text" name="attr_rang-4-name"/>
</div>
<div class="autoex"><span name="attr_rang-4-description"></span>
<textarea name="attr_rang-4-description"></textarea>
</div>
</div>
<div class="rang">
<input class="rang-checked" type="hidden" name="attr_rang5" value="0"/>
<button type="action" name="act_rang5"><span class="checked"></span><span class="unchecked"></span></button>
<div class="header"><span class="lRang" data-i18n="rang"></span><span class="vRang">5 : </span>
<input type="text" name="attr_rang-5-name"/>
</div>
<div class="autoex"><span name="attr_rang-5-description"></span>
<textarea name="attr_rang-5-description"></textarea>
</div>
</div>
</fieldset>
</div>
</div>
<div class="inventaire">
<div class="armure">
<h1 data-i18n="armures"></h1>
<fieldset class="repeating_armures">
<input class="equipped" type="hidden" name="attr_equip" value="0"/>
<div class="header">
<input type="text" name="attr_name" data-i18n-placeholder="nom"/>
<label class="rd" data-i18n-title="reduction-degats"><span>t</span>
<input type="number" name="attr_reduction" value="0" min="0"/>
</label>
<label class="defense" data-i18n-title="defense"><span>b</span>
<input type="number" name="attr_defense" value="0"/>
</label>
<button class="equipped" type="action" name="act_equip" data-i18n="equipe">equipe</button>
</div>
<div class="autoex"><span name="attr_description"></span>
<textarea name="attr_description"></textarea>
</div>
</fieldset>
</div>
<div class="objets">
<h1 data-i18n="objets"></h1>
<fieldset class="repeating_objets">
<div class="header">
<input type="text" name="attr_name" data-i18n-placeholder="nom"/>
</div>
<div class="autoex"><span name="attr_description"></span>
<textarea name="attr_description"></textarea>
</div>
</fieldset>
</div>
</div>
<div class="combat">
<div class="top">
<input type="hidden" name="attr_dice-atk" value="0"/>
<div class="action-defensive"><span class="title" data-i18n="action-defensive"></span>
<select name="attr_action-defensive">
<option value="standard" data-i18n="defense-standard" selected="selected"></option>
<option value="simple" data-i18n="defense-simple"></option>
<option value="totale" data-i18n="defense-totale"></option>
</select>
</div>
<div class="deux-armes">
<input type="hidden" name="attr_deux-armes" value="0"/><span class="title" data-i18n="combat-deux-armes"></span>
<button type="action" name="act_deux-armes"><span class="checked"></span><span class="unchecked"></span></button>
</div>
</div>
<div class="contact">
<input class="show" type="hidden" name="attr_showcontact" value="0"/>
<div class="header">
<button type="action" name="act_showcontact"><span class="plus">+</span><span class="minus">-</span></button>
<h1 data-i18n="armes-contact"></h1>
</div>
<fieldset class="repeating_wpncontact">
<input class="modkipositif" type="hidden" name="attr_modkipositif" value="0"/>
<input class="modkinegatif" type="hidden" name="attr_modkinegatif" value="0"/>
<input class="modkipositifdgts" type="hidden" name="attr_modkipositifdgts" value="0"/>
<input class="modkinegatifdgts" type="hidden" name="attr_modkinegatifdgts" value="0"/>
<input class="wpnshow" type="hidden" name="attr_wpnshow" value="1"/>
<div class="wpnheader triple">
<button class="wpnshow" type="action" name="act_wpnshow"><span class="plus">&amp;</span><span class="minus">_</span></button>
<input type="text" name="attr_name" data-i18n-placeholder="nom"/>
<button class="wpnroll" type="action" name="act_wpnroll"><span></span></button>
</div>
<label class="std"><span data-i18n="utilisation"></span>
<input type="text" name="attr_utilisation" data-i18n-placeholder="une-main"/>
</label>
<label class="std borderleft"><span data-i18n="dm"></span>
<input type="text" name="attr_dm" data-i18n-placeholder="1d6"/>
</label>
<label class="std borderleft"><span data-i18n="for-min"></span>
<input type="number" name="attr_for-min" value="0"/>
</label><span class="triple subheader" data-i18n="mod-attaque"></span>
<input class="modatt" type="number" name="attr_modatt" value="0"/>
<div class="checkbtn borderleft modkipositif">
<button type="action" name="act_modkipositif"><span class="checked"></span><span class="unchecked"></span></button><span data-i18n="add-mod-ki-positif"></span>
</div>
<div class="checkbtn borderleft modkinegatif">
<button type="action" name="act_modkinegatif"><span class="checked"></span><span class="unchecked"></span></button><span data-i18n="add-mod-ki-negatif"></span>
</div><span class="triple subheader" data-i18n="mod-degats"></span>
<input class="modatt" type="number" name="attr_moddgts" value="0"/>
<div class="checkbtn borderleft modkipositifdgts">
<button type="action" name="act_modkipositifdgts"><span class="checked"></span><span class="unchecked"></span></button><span data-i18n="add-mod-ki-positif"></span>
</div>
<div class="checkbtn borderleft modkinegatifdgts">
<button type="action" name="act_modkinegatifdgts"><span class="checked"></span><span class="unchecked"></span></button><span data-i18n="add-mod-ki-negatif"></span>
</div>
<div class="triple autoex"><span name="attr_description"></span>
<textarea name="attr_description" data-i18n-placeholder="description"></textarea>
</div>
</fieldset>
</div>
<div class="distance">
<input class="show" type="hidden" name="attr_showdistance" value="0"/>
<div class="header">
<button type="action" name="act_showdistance"><span class="plus">+</span><span class="minus">-</span></button>
<h1 data-i18n="armes-distance"></h1>
</div>
<fieldset class="repeating_wpndistance">
<input class="modkipositif" type="hidden" name="attr_modkipositif" value="0"/>
<input class="modkinegatif" type="hidden" name="attr_modkinegatif" value="0"/>
<input class="modkipositifdgts" type="hidden" name="attr_modkipositifdgts" value="0"/>
<input class="modkinegatifdgts" type="hidden" name="attr_modkinegatifdgts" value="0"/>
<input class="wpnshow" type="hidden" name="attr_wpnshow" value="1"/>
<div class="wpnheader quintuple">
<button class="wpnshow" type="action" name="act_wpnshow"><span class="plus">&amp;</span><span class="minus">_</span></button>
<input type="text" name="attr_name" data-i18n-placeholder="nom"/>
<button class="wpnroll" type="action" name="act_wpnroll"><span></span></button>
</div>
<label class="std"><span data-i18n="utilisation"></span>
<input type="text" name="attr_utilisation" data-i18n-placeholder="une-main"/>
</label>
<label class="std borderleft"><span data-i18n="dm"></span>
<input type="text" name="attr_dm" data-i18n-placeholder="1d6"/>
</label>
<label class="std borderleft"><span data-i18n="portee"></span>
<input type="text" name="attr_portee" value="0"/>
</label>
<label class="std borderleft"><span data-i18n="rechargement"></span>
<input type="text" name="attr_rechargement" data-i18n-placeholder="action-simple"/>
</label>
<label class="std borderleft"><span data-i18n="for-min"></span>
<input type="number" name="attr_for-min" value="0"/>
</label><span class="quintuple subheader" data-i18n="mod-attaque"></span>
<input class="modatt" type="number" name="attr_modatt" value="0"/>
<div class="checkbtn doublemid borderleft modkipositif">
<button type="action" name="act_modkipositif"><span class="checked"></span><span class="unchecked"></span></button><span data-i18n="add-mod-ki-positif"></span>
</div>
<div class="checkbtn doubleend borderleft modkinegatif">
<button type="action" name="act_modkinegatif"><span class="checked"></span><span class="unchecked"></span></button><span data-i18n="add-mod-ki-negatif"></span>
</div><span class="quintuple subheader" data-i18n="mod-degats"></span>
<input class="modatt" type="number" name="attr_moddgts" value="0"/>
<div class="checkbtn doublemid borderleft modkipositifdgts">
<button type="action" name="act_modkipositifdgts"><span class="checked"></span><span class="unchecked"></span></button><span data-i18n="add-mod-ki-positif"></span>
</div>
<div class="checkbtn doubleend borderleft modkinegatifdgts">
<button type="action" name="act_modkinegatifdgts"><span class="checked"></span><span class="unchecked"></span></button><span data-i18n="add-mod-ki-negatif"></span>
</div>
<label class="std bordertop"><span data-i18n="incident-tir"></span>
<input type="number" name="attr_incident-tir" value="1" min="0"/>
</label>
<div class="quadrupleend autoex"><span name="attr_description"></span>
<textarea name="attr_description" data-i18n-placeholder="description"></textarea>
</div>
</fieldset>
</div>
<div class="sortilege">
<input class="show" type="hidden" name="attr_showsortilege" value="0"/>
<div class="header">
<button type="action" name="act_showsortilege"><span class="plus">+</span><span class="minus">-</span></button>
<h1 data-i18n="sortileges"></h1>
</div>
<fieldset class="repeating_wpnsortilege">
<input class="wpnshow" type="hidden" name="attr_wpnshow" value="1"/>
<div class="wpnheader triple">
<button class="wpnshow" type="action" name="act_wpnshow"><span class="plus">&amp;</span><span class="minus">_</span></button>
<input type="text" name="attr_name" data-i18n-placeholder="nom"/>
<button class="wpnroll" type="action" name="act_wpnroll" data-i18n-title="sort-lancer"><span data-i18n-title="sort-lancer"></span></button>
<button class="spellroll" type="action" name="act_spellroll" data-i18n-title="magique-roll"><img src="https://image.noelshack.com/fichiers/2023/47/3/1700660998-magique.png" data-i18n-title="magique-roll"/></button>
</div>
<input type="text" name="attr_type-magie" data-i18n-placeholder="type-magie-plh"/>
<input class="borderleft" type="text" name="attr_forme-magie" data-i18n-placeholder="forme-magie"/>
<label class="std center wseparation borderleft"><span data-i18n="rang"></span>
<input type="number" name="attr_rang" value="1" min="0"/>
</label>
<div class="triple duo">
<label class="std wseparation"><span data-i18n="caracteristique-utilisee"></span>
<select name="attr_caracteristique">
<option value="force" data-i18n="force"></option>
<option value="dexterite" data-i18n="dexterite"></option>
<option value="constitution" data-i18n="constitution"></option>
<option value="perception" data-i18n="perception"></option>
<option value="intelligence" data-i18n="intelligence"></option>
<option value="charisme" data-i18n="charisme"></option>
</select>
</label>
<label class="std wseparation borderleft"><span data-i18n="difficulte-base"></span>
<input type="number" name="attr_difficulte" value="5" min="0"/>
</label>
</div>
<div class="triple autoex"><span name="attr_description"></span>
<textarea name="attr_description" data-i18n-placeholder="description"></textarea>
</div>
</fieldset>
</div>
<div class="grenade">
<input class="show" type="hidden" name="attr_showgrenade" value="0"/>
<div class="header">
<button type="action" name="act_showgrenade"><span class="plus">+</span><span class="minus">-</span></button>
<h1 data-i18n="grenades"></h1>
</div>
<fieldset class="repeating_wpngrenade">
<input class="modkipositif" type="hidden" name="attr_modkipositif" value="0"/>
<input class="modkinegatif" type="hidden" name="attr_modkinegatif" value="0"/>
<input class="modkipositifdgts" type="hidden" name="attr_modkipositifdgts" value="0"/>
<input class="modkinegatifdgts" type="hidden" name="attr_modkinegatifdgts" value="0"/>
<input class="wpnshow" type="hidden" name="attr_wpnshow" value="1"/>
<div class="wpnheader quintuple">
<button class="wpnshow" type="action" name="act_wpnshow"><span class="plus">&amp;</span><span class="minus">_</span></button>
<input type="text" name="attr_name" data-i18n-placeholder="nom"/>
<button class="wpnroll" type="action" name="act_wpnroll"><span></span></button>
</div>
<label class="std"><span data-i18n="utilisation"></span>
<input type="text" name="attr_utilisation" data-i18n-placeholder="une-main"/>
</label>
<label class="std borderleft"><span data-i18n="dm"></span>
<input type="text" name="attr_dm" data-i18n-placeholder="dm"/>
</label>
<label class="std borderleft"><span data-i18n="portee"></span>
<input type="text" name="attr_portee" data-i18n-placeholder="portee"/>
</label>
<label class="std borderleft"><span data-i18n="rechargement"></span>
<input type="text" name="attr_rechargement" data-i18n-placeholder="action-simple"/>
</label>
<label class="std borderleft"><span data-i18n="for-min"></span>
<input type="number" name="attr_for-min" value="0"/>
</label><span class="quintuple subheader" data-i18n="mod-attaque"></span>
<input class="modatt" type="number" name="attr_modatt" value="0"/>
<div class="checkbtn doubleMiddle borderleft modkipositif">
<button type="action" name="act_modkipositif"><span class="checked"></span><span class="unchecked"></span></button><span data-i18n="add-mod-ki-positif"></span>
</div>
<div class="checkbtn doubleEnd borderleft modkinegatif">
<button type="action" name="act_modkinegatif"><span class="checked"></span><span class="unchecked"></span></button><span data-i18n="add-mod-ki-negatif"></span>
</div><span class="quintuple subheader" data-i18n="mod-degats"></span>
<input class="modatt" type="number" name="attr_moddgts" value="0"/>
<div class="checkbtn doubleMiddle borderleft modkipositifdgts">
<button type="action" name="act_modkipositifdgts"><span class="checked"></span><span class="unchecked"></span></button><span data-i18n="add-mod-ki-positif"></span>
</div>
<div class="checkbtn doubleEnd borderleft modkinegatifdgts">
<button type="action" name="act_modkinegatifdgts"><span class="checked"></span><span class="unchecked"></span></button><span data-i18n="add-mod-ki-negatif"></span>
</div>
<div class="quintuple autoex"><span name="attr_description"></span>
<textarea name="attr_description" data-i18n-placeholder="description"></textarea>
</div>
</fieldset>
</div>
<div class="artillerie">
<input class="show" type="hidden" name="attr_showartillerie" value="0"/>
<div class="header">
<button type="action" name="act_showartillerie"><span class="plus">+</span><span class="minus">-</span></button>
<h1 data-i18n="artillerie"></h1>
</div>
<fieldset class="repeating_wpnartillerie">
<input class="modkipositif" type="hidden" name="attr_modkipositif" value="0"/>
<input class="modkinegatif" type="hidden" name="attr_modkinegatif" value="0"/>
<input class="modkipositifdgts" type="hidden" name="attr_modkipositifdgts" value="0"/>
<input class="modkinegatifdgts" type="hidden" name="attr_modkinegatifdgts" value="0"/>
<input class="wpnshow" type="hidden" name="attr_wpnshow" value="1"/>
<div class="wpnheader quintuple">
<button class="wpnshow" type="action" name="act_wpnshow"><span class="plus">&amp;</span><span class="minus">_</span></button>
<input type="text" name="attr_name" data-i18n-placeholder="nom"/>
<button class="wpnroll" type="action" name="act_wpnroll"><span></span></button>
</div>
<label class="std"><span data-i18n="utilisation"></span>
<input type="text" name="attr_utilisation" data-i18n-placeholder="une-main"/>
</label>
<label class="std borderleft"><span data-i18n="dm"></span>
<input type="text" name="attr_dm" data-i18n-placeholder="dm"/>
</label>
<label class="std borderleft"><span data-i18n="portee"></span>
<input type="text" name="attr_portee" data-i18n-placeholder="portee"/>
</label>
<label class="std borderleft"><span data-i18n="rechargement"></span>
<input type="text" name="attr_rechargement" data-i18n-placeholder="action-simple"/>
</label>
<label class="std borderleft"><span data-i18n="aire-effet"></span>
<input type="number" name="attr_aire-effet" value="0"/>
</label><span class="quintuple subheader" data-i18n="mod-attaque"></span>
<input class="modatt" type="number" name="attr_modatt" value="0"/>
<div class="checkbtn doubleMiddle borderleft modkipositif">
<button type="action" name="act_modkipositif"><span class="checked"></span><span class="unchecked"></span></button><span data-i18n="add-mod-ki-positif"></span>
</div>
<div class="checkbtn doubleEnd borderleft modkinegatif">
<button type="action" name="act_modkinegatif"><span class="checked"></span><span class="unchecked"></span></button><span data-i18n="add-mod-ki-negatif"></span>
</div><span class="quintuple subheader" data-i18n="mod-degats"></span>
<input class="modatt" type="number" name="attr_moddgts" value="0"/>
<div class="checkbtn doubleMiddle borderleft modkipositifdgts">
<button type="action" name="act_modkipositifdgts"><span class="checked"></span><span class="unchecked"></span></button><span data-i18n="add-mod-ki-positif"></span>
</div>
<div class="checkbtn doubleEnd borderleft modkinegatifdgts">
<button type="action" name="act_modkinegatifdgts"><span class="checked"></span><span class="unchecked"></span></button><span data-i18n="add-mod-ki-negatif"></span>
</div>
<div class="quintuple autoex"><span name="attr_description"></span>
<textarea name="attr_description" data-i18n-placeholder="description"></textarea>
</div>
</fieldset>
</div>
</div>
<div class="vehicules">
<fieldset class="repeating_vehicules">
<input class="vehicule-edit" type="hidden" name="attr_edit" value="0"/>
<input class="name" type="text" name="attr_vehicule-name" data-i18n-placeholder="nom"/>
<button class="edit" type="action" name="act_vehicule-edit">
<p data-i18n="editer"></p>
</button>
<div class="mainleft">
<div class="mainsa unsimple">
<div class="main red"><span class="title" data-i18n="pv"></span>
<div class="value">
<input class="score" type="number" name="attr_pv-vehicule" value="0" min="0"/><span class="separator">/</span><span class="score_max" name="attr_pv-vehicule_max">0</span>
<input type="hidden" name="attr_pv-vehicule_max" value="0"/>
</div>
</div>
<div class="submain">
<label class="demi"><span class="title" data-i18n="modificateur-short">mod.</span>
<input type="number" name="attr_pv-vehicule-mod" value="0"/>
</label>
<label class="demi"><span class="title" data-i18n="temporaire-short">mod.</span>
<input type="number" name="attr_pv-vehicule-temp" value="0"/>
</label>
<label class="full"><span class="title" data-i18n="base">base</span>
<input type="number" name="attr_pv-vehicule-base" value="0"/>
</label>
</div>
</div>
<div class="mainsa simple">
<div class="main blue"><span class="title" data-i18n="places"></span>
<div class="svalue"><span class="score" name="attr_places-vehicule">4</span></div>
</div>
</div>
</div>
<div class="vehicule_attributs">
<!--Création de la liste des attributs-->
<div class="main_block"><span class="title" data-i18n="force-short">force</span>
<div class="attr-block"><span class="score s2" name="attr_force-vehicule">0</span></div>
</div>
<div class="main_block"><span class="title" data-i18n="agilite-short">agilite</span>
<div class="attr-block"><span class="score s2" name="attr_agilite-vehicule">0</span></div>
</div>
<div class="main_block"><span class="title" data-i18n="defense-short">defense</span>
<div class="attr-block"><span class="score s2" name="attr_defense-vehicule">0</span></div>
</div>
</div>
<div class="vehicule_edit_attributs">
<!--Création de la liste des attributs en MODE EDITION-->
<div class="main_block"><span class="title" data-i18n="force-short">force</span>
<div class="attr-block"><span class="score s2" name="attr_force-vehicule">0</span><span class="toedit" data-i18n="base">base</span>
<input type="number" name="attr_force-vehicule-base" value="0" min="0"/><span class="toedit" data-i18n="divers">divers</span>
<input type="number" name="attr_force-vehicule-divers" value="0"/><span class="toedit" data-i18n="temporaire-short">temp.</span>
<input type="number" name="attr_force-vehicule-temp" value="0"/>
<input type="hidden" name="attr_force-vehicule" value="0"/>
</div>
</div>
<div class="main_block"><span class="title" data-i18n="agilite-short">agilite</span>
<div class="attr-block"><span class="score s2" name="attr_agilite-vehicule">0</span><span class="toedit" data-i18n="base">base</span>
<input type="number" name="attr_agilite-vehicule-base" value="0" min="0"/><span class="toedit" data-i18n="divers">divers</span>
<input type="number" name="attr_agilite-vehicule-divers" value="0"/><span class="toedit" data-i18n="temporaire-short">temp.</span>
<input type="number" name="attr_agilite-vehicule-temp" value="0"/>
<input type="hidden" name="attr_agilite-vehicule" value="0"/>
</div>
</div>
<div class="main_block"><span class="title" data-i18n="defense-short">defense</span>
<div class="attr-block"><span class="score s2" name="attr_defense-vehicule">0</span><span class="toedit" data-i18n="dexterite-short">dexterite</span><span class="noedit" name="attr_defense-vehicule-dexterite">0</span><span class="toedit" data-i18n="base">base</span>
<input type="number" name="attr_defense-vehicule-base" value="0" min="0"/><span class="toedit" data-i18n="divers">divers</span>
<input type="number" name="attr_defense-vehicule-divers" value="0"/><span class="toedit" data-i18n="temporaire-short">temp.</span>
<input type="number" name="attr_defense-vehicule-temp" value="0"/>
<input type="hidden" name="attr_defense-vehicule" value="0"/>
</div>
</div>
</div>
<button class="roll" type="action" name="act_vehicule-roll">
<p data-i18n="pilotage-roll"></p>
</button>
</fieldset>
</div>
<div class="profil">
<div class="col">
<label class="famille"><span data-i18n="famille"></span>
<select name="attr_profil-famille">
<option value="" selected="selected"></option>
<option value="action" data-i18n="action">action</option>
<option value="reflexion" data-i18n="reflexion">reflexion</option>
<option value="societe" data-i18n="societe">societe</option>
</select>
</label>
<label class="attaque"><span data-i18n="attaque"></span>
<input type="number" name="attr_profil-attaque" value="0" min="0"/>
</label>
<div class="subcol">
<label class="attaque-contact"><span data-i18n="attaque-contact"></span>
<input type="number" name="attr_profil-attaque-contact" value="0" min="0"/>
</label>
<label class="attaque-distance"><span data-i18n="attaque-distance"></span>
<input type="number" name="attr_profil-attaque-distance" value="0" min="0"/>
</label>
</div>
</div>
<div class="col">
<label class="dv"><span data-i18n="de-de-vie"></span>
<select name="attr_profil-dv">
<option value="10" data-i18n="d10" selected="selected"></option>
<option value="8" data-i18n="d8"></option>
<option value="6" data-i18n="d6"></option>
</select>
</label>
<label class="capacite"><span data-i18n="capacite"></span>
<input type="number" name="attr_profil-capacite" value="0" min="0"/>
</label>
<label class="serenite"><span data-i18n="serenite"></span>
<input type="number" name="attr_profil-serenite" value="0" min="0"/>
</label>
<label class="chance"><span data-i18n="chance"></span>
<input type="number" name="attr_profil-chance" value="0" min="0"/>
</label>
</div>
</div>
</div>
<div class="listetats">
<input type="hidden" name="attr_dice-special" value="0"/>
<input type="hidden" name="attr_initiative-etat" value="0"/>
<input type="hidden" name="attr_defense-etat" value="0"/>
<input type="hidden" name="attr_resistance-etat" value="0"/>
<input type="hidden" name="attr_contact-etat" value="0"/>
<input type="hidden" name="attr_distance-etat" value="0"/>
<input type="hidden" name="attr_magique-etat" value="0"/>
<h1 class="title" data-i18n="etats-prejudiciables"></h1>
<div class="etat">
<input type="hidden" name="attr_affaibli" value="0"/>
<button type="action" name="act_affaibli"><span class="checked"></span><span class="unchecked"></span></button><span class="labeletat" data-i18n="affaibli"></span><span class="data" data-i18n="affaibli-description"></span>
</div>
<div class="etat">
<input type="hidden" name="attr_aveugle" value="0"/>
<button type="action" name="act_aveugle"><span class="checked"></span><span class="unchecked"></span></button><span class="labeletat" data-i18n="aveugle"></span><span class="data" data-i18n="aveugle-description"></span>
</div>
<div class="etat">
<input type="hidden" name="attr_etourdi" value="0"/>
<button type="action" name="act_etourdi"><span class="checked"></span><span class="unchecked"></span></button><span class="labeletat" data-i18n="etourdi"></span><span class="data" data-i18n="etourdi-description"></span>
</div>
<div class="etat">
<input type="hidden" name="attr_immobilise" value="0"/>
<button type="action" name="act_immobilise"><span class="checked"></span><span class="unchecked"></span></button><span class="labeletat" data-i18n="immobilise"></span><span class="data" data-i18n="immobilise-description"></span>
</div>
<div class="etat">
<input type="hidden" name="attr_paralyse" value="0"/>
<button type="action" name="act_paralyse"><span class="checked"></span><span class="unchecked"></span></button><span class="labeletat" data-i18n="paralyse"></span><span class="data" data-i18n="paralyse-description"></span>
</div>
<div class="etat">
<input type="hidden" name="attr_ralenti" value="0"/>
<button type="action" name="act_ralenti"><span class="checked"></span><span class="unchecked"></span></button><span class="labeletat" data-i18n="ralenti"></span><span class="data" data-i18n="ralenti-description"></span>
</div>
<div class="etat">
<input type="hidden" name="attr_renverse" value="0"/>
<button type="action" name="act_renverse"><span class="checked"></span><span class="unchecked"></span></button><span class="labeletat" data-i18n="renverse"></span><span class="data" data-i18n="renverse-description"></span>
</div>
<div class="etat">
<input type="hidden" name="attr_surpris" value="0"/>
<button type="action" name="act_surpris"><span class="checked"></span><span class="unchecked"></span></button><span class="labeletat" data-i18n="surpris"></span><span class="data" data-i18n="surpris-description"></span>
</div>
</div>
</div>
</div><rolltemplate class="sheet-rolltemplate-niveau">
<h1 class="header">{{name}}</h1>
<h2 class="header">{{title}}</h2>
{{#newniveau}}
<div class="block">
<span class="label" data-i18n="niveau">niveau</span>
<div class="subBlock">
<span class="start">{{oldniveau}} </span>
<span class="separator">7</span>
<span class="end">{{newniveau}}</span>
</div>
</div>
{{/newniveau}}
{{#newpv}}
<div class="block">
<span class="label" data-i18n="pv-long">pv</span>
<div class="subBlock">
<span class="start">{{oldpv}} </span>
<span class="separator">7</span>
<span class="end">{{newpv}}</span>
</div>
</div>
{{/newpv}}
{{#newcapacite}}
<div class="block">
<span class="label" data-i18n="points-capacites-long">pc</span>
<div class="subBlock">
<span class="start">{{oldcapacite}} </span>
<span class="separator">7</span>
<span class="end">{{newcapacite}}</span>
</div>
</div>
{{/newcapacite}}
{{#newcontact}}
<div class="block">
<span class="label" data-i18n="attaque-contact">pv</span>
<div class="subBlock">
<span class="start">{{oldcontact}} </span>
<span class="separator">7</span>
<span class="end">{{newcontact}}</span>
</div>
</div>
{{/newcontact}}
{{#newdistance}}
<div class="block">
<span class="label" data-i18n="attaque-distance">pv</span>
<div class="subBlock">
<span class="start">{{olddistance}} </span>
<span class="separator">7</span>
<span class="end">{{newdistance}}</span>
</div>
</div>
{{/newdistance}}
{{#newmagique}}
<div class="block">
<span class="label" data-i18n="attaque-magique">pv</span>
<div class="subBlock">
<span class="start">{{oldmagique}} </span>
<span class="separator">7</span>
<span class="end">{{newmagique}}</span>
</div>
</div>
{{/newmagique}}
</rolltemplate><rolltemplate class="sheet-rolltemplate-std">
<h1 class="header">{{name}}</h1>
<h2 class="header">{{title}}</h2>
{{#subtitle}}
<h3 class="header">{{subtitle}}</h3>
{{/subtitle}}
{{#rollTotal() empty 0}}
<div class="allProps">
{{#typemagie}}
<div class="subBlock">
<span class="full">{{typemagie}}</span>
</div>
{{/typemagie}}
{{#formemagie}}
<div class="subBlock">
<span class="full">{{formemagie}}</span>
</div>
{{/formemagie}}
{{#allprops() name title subtitle typemagie formemagie difficulte description result destin echec critique empty}}
<div class="subBlock">
<span class="label">{{key}}</span>
{{value}}
</div>
{{/allprops() name title subtitle typemagie formemagie difficulte description result destin echec critique empty}}
</div>
{{/rollTotal() empty 0}}
{{result}}
{{#rollTotal() computed::destin 1}}
<div class="coupdepouce">
<span data-i18n="coup-de-pouce">Coup de pouce du destin</span>
</div>
{{/rollTotal() computed::destin 1}}
{{#rollTotal() computed::echec 1}}
<div class="echeccritique">
<span data-i18n="echec-critique">Échec critique</span>
</div>
{{/rollTotal() computed::echec 1}}
{{#rollTotal() computed::critique 1}}
<div class="critique">
<span data-i18n="critique">Critique</span>
</div>
{{/rollTotal() computed::critique 1}}
{{#difficulte}}
{{#rollTotal() computed::echec 0}}
{{#rollTotal() computed::critique 0}}
{{#rollTotal() computed::difficulte 1}}
<div class="critique">
<span data-i18n="succes">Succès</span>
</div>
{{/rollTotal() computed::difficulte 1}}
{{/rollTotal() computed::critique 0}}
{{/rollTotal() computed::echec 0}}
{{#rollTotal() computed::echec 0}}
{{#rollTotal() computed::critique 0}}
{{#rollTotal() computed::difficulte 0}}
<div class="echeccritique">
<span data-i18n="echec">Échec</span>
</div>
{{/rollTotal() computed::difficulte 0}}
{{/rollTotal() computed::critique 0}}
{{/rollTotal() computed::echec 0}}
{{/difficulte}}
{{#description}}
<span class="text">{{description}}</span>
{{/description}}
</rolltemplate><rolltemplate class="sheet-rolltemplate-combat">
<h1 class="header">{{name}}</h1>
<h2 class="header">{{title}}</h2>
{{#luminosite}}
<div class="doubleBlock">
<span class="label" data-i18n="luminosite">Luminosité</span>
<span class="value">{{luminosite}}</span>
</div>
{{/luminosite}}
{{#portee}}
<div class="doubleBlock">
<span class="label" data-i18n="portee">Portée</span>
<span class="value">{{portee}}</span>
</div>
{{/portee}}
{{#aireeffet}}
<div class="doubleBlock">
<span class="label" data-i18n="aire-effet">Aire d'effet</span>
<span class="value">{{aireeffet}}</span>
</div>
{{/aireeffet}}
{{#rollTotal() empty 0}}
<div class="allProps">
{{#allprops() name title attaque degats description luminosite portee incident destin echec critique empty aireeffet btn}}
<div class="subBlock">
<span class="label">{{key}}</span>
{{value}}
</div>
{{/allprops() name title attaque degats description luminosite portee incident destin echec critique empty aireeffet btn}}
</div>
{{/rollTotal() empty 0}}
{{#attaque}}
<div class="block attaque">
<span class="label" data-i18n="roll-attaque">jet d'attaque</span>
{{attaque}}
</div>
{{#incident}}
{{#rollTotal() computed::incident 1}}
<div class="incident">
<span data-i18n="incident-tir">Incident de tir</span>
</div>
{{/rollTotal() computed::incident 1}}
{{/incident}}
{{#rollTotal() computed::destin 1}}
<div class="coupdepouce">
<span data-i18n="coup-de-pouce">Coup de pouce du destin</span>
</div>
{{/rollTotal() computed::destin 1}}
{{#rollTotal() computed::echec 1}}
<div class="echeccritique">
<span data-i18n="echec-critique">Échec critique</span>
</div>
{{/rollTotal() computed::echec 1}}
{{#rollTotal() computed::critique 1}}
<div class="critique">
<span data-i18n="critique">Critique</span>
</div>
{{/rollTotal() computed::critique 1}}
{{/attaque}}
{{#degats}}
<div class="block">
{{#rollTotal() computed::critique 1}}
<span class="label" data-i18n="roll-degats-critique">jet de dégâts (Critique)</span>
<div class='dgtsCritique'>
{{computed::degats}}
<span class="sublabel">{{degats}}x2</s>
</div>
{{/rollTotal() computed::critique 1}}
{{#rollTotal() computed::critique 0}}
<span class="label" data-i18n="roll-degats">jet de dégâts</span>
{{computed::degats}}
{{/rollTotal() computed::critique 0}}
</div>
{{/degats}}
{{#description}}
<span class="text">{{description}}</span>
{{/description}}
</rolltemplate>