Files
roll20-character-sheets/Stars/stars.html
T

598 lines
30 KiB
HTML

<div class="main">
<input type="hidden" name="attr_version" value="" />
<input type="hidden" class="ongletActif" name="attr_ongletActif" value="caracteristiques" />
<div class="header">
<div class="stars"></div>
<table class="personnage-main">
<tr>
<th class="input-label">Nom</th>
<td><input type="text" name="attr_name" spellcheck="false" /></td>
</tr>
<tr>
<th class="input-label">Âge</th>
<td><input type="text" name="attr_age" spellcheck="false" /></td>
</tr>
<tr>
<th class="input-label">Sexe</th>
<td><input type="text" name="attr_sexe" spellcheck="false" /></td>
</tr>
<tr>
<th class="input-label">Nationalité</th>
<td><input type="text" name="attr_nationalite" spellcheck="false" /></td>
</tr>
</table>
<div class="personnage-genial">
<label class="input-label">Je suis génial(e)<br /><span>parce que...</span></label>
<textarea name="attr_genial_parce_que" spellcheck="false"></textarea>
</div>
<div class="personnage-problematique">
<label class="input-label"><span>Mais</span> la société a des problèmes <span>avec moi parce
que...</span></label>
<textarea name="attr_problematique_parce_que" spellcheck="false"></textarea>
</div>
</div>
<div class="onglets">
<button type="action" name="act_caracteristiques" data-id="caracteristiques">Caractéristiques</button>
<button type="action" name="act_competences" data-id="competences">Compétences</button>
<button type="action" name="act_inventaire" data-id="inventaire">Possessions</button>
</div>
<div class="contenu">
<div class="caracteristiques">
<div class="section">
<div class="sectionCol">
<h1>Caractéristiques</h1>
<table class="table sheet-table--caracteristiques">
<thead>
<tr>
<th></th>
<th>Car.</th>
<th>Valeur</th>
<th>Bonus</th>
<th>Total / 100</th>
</tr>
</thead>
<tbody>
<tr>
<td class="caracteristique-jet">
<button type="roll" name="Force"
value="&{template:competence} {{rollname=Force}} {{jet=[[1d100]]}} {{competence=[[@{force_total}]]}} {{fail=[[@{force_total} + 1]]}} {{fumble=[[{96,@{force_total} + 1}kh1]]}}"
class="roll"></button>
</td>
<td class="caracteristique-nom">FOR</td>
<td class="caracteristique-valeur"><input type="number" name="attr_FOR" value="10" />
</td>
<td class="caracteristique-bonus"><input type="number" name="attr_force_bonus"
value="0" /></td>
<td class="caracteristique-total"><input type="text" readonly disabled
name="attr_force_total" value="(@{FOR} + @{force_bonus}) * 5" /></td>
</tr>
<tr>
<td class="caracteristique-jet">
<button type="roll" name="Dextérité"
value="&{template:competence} {{rollname=Dextérité}} {{jet=[[1d100]]}} {{competence=[[@{dexterite_total}]]}} {{fail=[[@{dexterite_total} + 1]]}} {{fumble=[[{96,@{dexterite_total} + 1}kh1]]}}"
class="roll"></button>
</td>
<td class="caracteristique-nom">DEX</td>
<td class="caracteristique-valeur"><input type="number" name="attr_DEX" value="10" />
</td>
<td class="caracteristique-bonus"><input type="number" name="attr_dexterite_bonus"
value="0" /></td>
<td class="caracteristique-total"><input type="text" readonly disabled
name="attr_dexterite_total" value="(@{DEX} + @{dexterite_bonus}) * 5" /></td>
</tr>
<tr>
<td class="caracteristique-jet">
<button type="roll" name="Endurance"
value="&{template:competence} {{rollname=Endurance}} {{jet=[[1d100]]}} {{competence=[[@{endurance_total}]]}} {{fail=[[@{endurance_total} + 1]]}} {{fumble=[[{96,@{endurance_total} + 1}kh1]]}}"
class="roll"></button>
</td>
<td class="caracteristique-nom">END</td>
<td class="caracteristique-valeur"><input type="number" name="attr_END" value="10" />
</td>
<td class="caracteristique-bonus"><input type="number" name="attr_endurance_bonus"
value="0" /></td>
<td class="caracteristique-total"><input type="text" readonly disabled
name="attr_endurance_total" value="(@{END} + @{endurance_bonus}) * 5" /></td>
</tr>
<tr>
<td class="caracteristique-jet">
<button type="roll" name="Intelligence"
value="&{template:competence} {{rollname=Intelligence}} {{jet=[[1d100]]}} {{competence=[[@{intelligence_total}]]}} {{fail=[[@{intelligence_total} + 1]]}} {{fumble=[[{96,@{intelligence_total} + 1}kh1]]}}"
class="roll"></button>
</td>
<td class="caracteristique-nom">INT</td>
<td class="caracteristique-valeur"><input type="number" name="attr_INT" value="10" />
</td>
<td class="caracteristique-bonus"><input type="number" name="attr_intelligence_bonus"
value="0" /></td>
<td class="caracteristique-total"><input type="text" readonly disabled
name="attr_intelligence_total" value="(@{INT} + @{intelligence_bonus}) * 5" />
</td>
</tr>
<tr>
<td class="caracteristique-jet">
<button type="roll" name="Intuition"
value="&{template:competence} {{rollname=Intuition}} {{jet=[[1d100]]}} {{competence=[[@{intuition_total}]]}} {{fail=[[@{intuition_total} + 1]]}} {{fumble=[[{96,@{intuition_total} + 1}kh1]]}}"
class="roll"></button>
</td>
<td class="caracteristique-nom">INO</td>
<td class="caracteristique-valeur"><input type="number" name="attr_INO" value="10" />
</td>
<td class="caracteristique-bonus"><input type="number" name="attr_intuition_bonus"
value="0" /></td>
<td class="caracteristique-total"><input type="text" readonly disabled
name="attr_intuition_total" value="(@{INO} + @{intuition_bonus}) * 5" /></td>
</tr>
</tbody>
</table>
</div>
<div class="sectionCol sheet-sectionCol--divider"></div>
<div class="sectionCol">
<h1>LE PHYSIQUE</h1>
<div class="healthStats">
<div class="healthBlock">
<div class="healthInput">
<input type="text" name="attr_pv_max" min="1" />
</div>
<span>PV Max</span>
</div>
<div class="healthBlock">
<div class="healthInput">
<input type="text" name="attr_pv" min="0" />
</div>
<span>PV restants</span>
</div>
<div class="protectionBlock">
<div class="protectionInput">
<input type="text" name="attr_protection" value="0" />
</div>
<span>Protection</span>
</div>
</div>
<h1>LE MENTAL</h1>
<div class="mindStats">
<div class="mindStats-inputs">
<div class="mindBlock">
<div class="mindInput">
<input type="text" name="attr_psm_max" min="1" />
</div>
<span>Santé mentale Max</span>
</div>
<div class="mindBlock">
<div class="mindInput">
<input type="text" name="attr_psm" min="0" />
</div>
<span>Santé mentale</span>
</div>
<div class="mindBlock">
<div class="mindInput"></div>
</div>
</div>
<div class="mindEffects">
<span>Troubles mentaux</span>
<input type="text" spellcheck="false" />
</div>
</div>
</div>
</div>
<div class="section">
<div class="sectionCol sheet-sectionCol--full">
<h1>Armes</h1>
<div class="table">
<fieldset class="tableHead sheet-weapons">
<div class="fieldset">
<div class="weapon-jet"></div>
<div class="weapon-nom">Nom de l'arme</div>
<div class="weapon-degats">Dégâts</div>
<div class="weapon-commentaires">Commentaires</div>
</div>
</fieldset>
<fieldset class="repeating_weapons">
<div class="tableBody">
<div class="weapon-jet">
<button type="roll" name="Dégâts"
value="&{template:competence} {{rollname=@{weapon_name}}} {{jet=[[@{weapon_nombre_de_jets}@{weapon_type_de_de} + @{weapon_bonus}]]}}"
class="roll"></button>
</div>
<div class="weapon-nom"><input type="text" name="attr_weapon_name" spellcheck="false" />
</div>
<div class="weapon-degats">
<input type="number" name="attr_weapon_nombre_de_jets" min="0" value="1" />
<select name="attr_weapon_type_de_de">
<option value="d3">d3</option>
<option value="d4">d4</option>
<option value="d6" selected>d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
</select>
+
<input type="number" name="attr_weapon_bonus" value="0" />
</div>
<div class="weapon-commentaires"><input type="text" name="attr_weapon_comments"
spellcheck="false" /></div>
</div>
</fieldset>
</div>
</div>
</div>
</div>
<div class="competences">
<div class="section">
<div class="sectionCol sheet-sectionCol--full">
<input type="hidden" class="competence-methode" name="attr_competence_methode_hidden"
value="moyenne" />
<h1>Compétences</h1>
<p class="competence-methode-selector">
Méthode de calcul des compétences :
<select name="attr_competence_methode">
<option value="moyenne" selected>Par moyenne</option>
<option value="points">Par répartition</option>
</select>
</p>
<p class="competence-points-restants">Points restants : <input type="text" readonly
name="attr_competence_points_restants" value="50" /></p>
<div class="table competence-table">
<div class="tableHead">
<div class="competence-jet"></div>
<div class="competence-nom">Compétence</div>
<div class="competence-liens">Lien</div>
<div class="competence-base">Base</div>
<div class="competence-points">Points</div>
<div class="competence-bonus">Bonus</div>
<div class="competence-total">Total</div>
</div>
<fieldset class="repeating_competences">
<div class="tableBody">
<div class="competence-jet">
<button type="roll" name="Compétence"
value="&{template:competence} {{rollname=@{competence_nom}}} {{jet=[[1d100]]}} {{competence=[[@{competence_total}]]}} {{fail=[[@{competence_total} + 1]]}} {{fumble=[[{96,@{competence_total} + 1}kh1]]}}"
class="roll"></button>
</div>
<div class="competence-nom">
<select name="attr_competence_nom">
<option value="" selected></option>
<option value="Adaptation">Adaptation</option>
<option value="Astrophysique, mathématiques">Astrophysique, mathématiques
</option>
<option value="Biologie, géologie">Biologie, géologie</option>
<option value="Bricoler, bidouiller">Bricoler, bidouiller</option>
<option value="Combat à distance">Combat à distance</option>
<option value="Combat au corps à corps">Combat au corps à corps</option>
<option value="Comprendre l’étrange">Comprendre l’étrange</option>
<option value="Convaincre">Convaincre</option>
<option value="Courir, sauter, nager">Courir, sauter, nager</option>
<option value="Déplacement en zéro G">Déplacement en zéro G</option>
<option value="Discrétion">Discrétion</option>
<option value="Garder son calme">Garder son calme</option>
<option value="Observer">Observer</option>
<option value="Pilotage">Pilotage</option>
<option value="Programmation">Programmation</option>
<option value="Réflexes">Réflexes</option>
<option value="Soigner">Soigner</option>
<option value="Survie">Survie</option>
</select>
</div>
<div class="competence-liens">
<input type="text" readonly name="attr_competence_stat1" value="?" />
/
<input type="text" readonly name="attr_competence_stat2" value="?" />
</div>
<div class="competence-base">
<input type="text" readonly name="attr_competence_base" value="0" />
</div>
<div class="competence-points">
<input type="number" name="attr_competence_points" value="0" />
</div>
<div class="competence-bonus">
<input type="number" name="attr_competence_bonus" value="0" />
</div>
<div class="competence-total">
<input type="text" readonly name="attr_competence_total" value="0" />
</div>
</div>
</fieldset>
</div>
</div>
</div>
<div class="section">
<div class="sectionCol sheet-sectionCol--full">
<h1>Compétences spéciales</h1>
<div class="table competence-table">
<div class="tableHead">
<div class="competence-jet"></div>
<div class="competence-nom">Compétence</div>
<div class="competence-base">Base</div>
<div class="competence-bonus">Bonus</div>
<div class="competence-total">Total</div>
</div>
<fieldset class="repeating_competencesspeciales">
<div class="tableBody">
<div class="competence-jet">
<button type="roll" name="Compétence spéciale"
value="&{template:competence} {{rollname=@{nom}}} {{jet=[[1d100]]}} {{competence=[[@{total}]]}} {{fail=[[@{total} + 1]]}} {{fumble=[[{96,@{total} + 1}kh1]]}}"
class="roll"></button>
</div>
<div class="competence-nom">
<input type="text" name="attr_nom" spellcheck="false" />
</div>
<div class="competence-base">
<input type="number" name="attr_base" value="50" />
</div>
<div class="competence-bonus">
<input type="number" name="attr_bonus" value="0" />
</div>
<div class="competence-total">
<input type="text" readonly name="attr_total" value="0" />
</div>
</div>
</fieldset>
</div>
</div>
</div>
</div>
<div class="inventaire">
<div class="section">
<div class="sectionCol">
<h1>Possessions</h1>
<textarea name="attr_possessions" spellcheck="false"></textarea>
</div>
<div class="sectionCol sheet-sectionCol--divider"></div>
<div class="sectionCol">
<h1>Notes</h1>
<textarea name="attr_notes" spellcheck="false"></textarea>
</div>
</div>
</div>
</div>
</div>
<rolltemplate class="sheet-rolltemplate-competence">
<div class="sheet-template-container">
<div class="sheet-template-header">Jet de<br /><span>{{ rollname }}</span></div>
<div class="sheet-template-rolled">{{ jet }}{{#competence}} / {{ competence }}{{/competence}}</div>
{{#competence}}
<div class="sheet-template-result">
{{#rollGreater() jet 99}}Échec critique</div>{{/rollGreater() jet 99}}
{{#rollLess() jet 100}}
{{#rollBetween() jet fumble 99}}<span>Échec critique</span>{{/rollBetween() jet fumble 99}}
{{#rollBetween() jet fail 95}}<span>Échec</span>{{/rollBetween() jet fail 95}}
{{#rollBetween() jet 6 competence}}<span>Réussite</span>{{/rollBetween() jet 6 competence}}
{{#rollLess() jet 6}}<span>Réussite critique</span>{{/rollLess() jet 6}}
{{/rollLess() jet 100}}
</div>
{{/competence}}
</rolltemplate>
<script type="text/worker">
const competences = {
"Adaptation": {
"links": ["END", "INO"]
},
"Astrophysique, mathématiques": {
"links": ["INT", "INO"]
},
"Biologie, géologie": {
"links": ["DEX", "INT"]
},
"Bricoler, bidouiller": {
"links": ["DEX", "INO"]
},
"Combat à distance": {
"links": ["DEX", "INT"]
},
"Combat au corps à corps": {
"links": ["END", "FOR"]
},
"Comprendre l’étrange": {
"links": ["INT", "INO"]
},
"Convaincre": {
"links": ["FOR", "INT"]
},
"Courir, sauter, nager": {
"links": ["DEX", "END"]
},
"Déplacement en zéro G": {
"links": ["DEX", "FOR"]
},
"Discrétion": {
"links": ["DEX", "INO"]
},
"Garder son calme": {
"links": ["END", "INO"]
},
"Observer": {
"links": ["END", "INO"]
},
"Pilotage": {
"links": ["DEX", "INT"]
},
"Programmation": {
"links": ["INT", "INO"]
},
"Réflexes": {
"links": ["DEX", "FOR"]
},
"Soigner": {
"links": ["DEX", "INT"]
},
"Survie": {
"links": ["END", "INO"]
}
};
const buttonlist = ["caracteristiques","competences","inventaire"];
buttonlist.forEach(button => {
on(`clicked:${button}`, function() {
setAttrs({
ongletActif: button
});
});
});
on(`sheet:opened`, function (eventInfo) {
getAttrs(['version'], function (values) {
console.log(values);
if (values.version === "1.0") {
return;
}
const toSet = {
version: "1.0"
};
const noms = Object.keys(competences);
const base = calculateBase(10, 10, "moyenne");
for (let i = 0; i < noms.length; i += 1) {
const id = generateRowID();
const links = competences[noms[i]].links;
toSet[`repeating_competences_${id}_competence_nom`] = noms[i];
toSet[`repeating_competences_${id}_competence_stat1`] = links[0];
toSet[`repeating_competences_${id}_competence_stat2`] = links[1];
toSet[`repeating_competences_${id}_competence_base`] = base;
toSet[`repeating_competences_${id}_competence_points`] = 0;
toSet[`repeating_competences_${id}_competence_bonus`] = 0;
toSet[`repeating_competences_${id}_competence_total`] = base;
}
setAttrs(toSet);
});
});
function calculateBase(stat1, stat2, methode) {
if (methode === 'moyenne') {
return Math.floor((parseInt(stat1, 10) + parseInt(stat2, 10)) / 2) * 5;
}
return (parseInt(stat1, 10) + parseInt(stat2, 10)) * 2;
}
function calculatePoints(points, methode) {
if (methode !== 'points') {
return 0;
}
return parseInt(points, 10) || 0;
}
function refreshStatsFor(ids) {
const toGet = [
"competence_methode", "FOR", "INT", "INO", "DEX", "END",
];
for (let i = 0; i < ids.length; i += 1) {
toGet.push(
`repeating_competences_${ids[i]}_competence_nom`,
`repeating_competences_${ids[i]}_competence_points`,
`repeating_competences_${ids[i]}_competence_bonus`
);
}
getAttrs(toGet, function (values) {
const toSet = {};
for (let i = 0; i < ids.length; i += 1) {
let links = ['', ''];
let base = 0;
let points = 0;
let bonus = 0;
const nom = values[`repeating_competences_${ids[i]}_competence_nom`];
if (nom && competences[nom]) {
links = competences[nom].links;
base = calculateBase(
values[links[0]],
values[links[1]],
values.competence_methode
);
points = calculatePoints(
values[`repeating_competences_${ids[i]}_competence_points`],
values.competence_methode
);
bonus = parseInt(values[`repeating_competences_${ids[i]}_competence_bonus`], 10) || 0;
}
toSet[`repeating_competences_${ids[i]}_competence_stat1`] = links[0];
toSet[`repeating_competences_${ids[i]}_competence_stat2`] = links[1];
toSet[`repeating_competences_${ids[i]}_competence_base`] = base;
toSet[`repeating_competences_${ids[i]}_competence_total`] = base + points + bonus;
}
setAttrs(toSet);
});
}
on(`change:endurance`, function () {
getAttrs(["endurance", "pv_max", "pv"], function (values) {
if (values.pv_max !== '' || values.pv !== '') {
return;
}
const pv = Math.min(14, parseInt(values.endurance, 10));
setAttrs({
"pv_max": pv,
"pv": pv,
});
});
});
on(`change:competence_methode change:FOR change:END change:INO change:INT change:DEX`, function (eventInfo) {
setAttrs({
"competence_methode_hidden": eventInfo.newValue
});
getSectionIDs('competences', function (IDs) {
refreshStatsFor(IDs);
});
});
on(`change:repeating_competences`, function (eventInfo) {
const ID = eventInfo.sourceAttribute.split('_')[2];
refreshStatsFor([ID]);
});
on(`change:repeating_competences:competence_points`, function (eventInfo) {
getSectionIDs('competences', function (ids) {
const toGet = [];
for (let i = 0; i < ids.length; i += 1) {
toGet.push(`repeating_competences_${ids[i]}_competence_points`);
}
getAttrs(toGet, function (values) {
let sum = 0;
for (let i = 0; i < ids.length; i += 1) {
sum += parseInt(values[`repeating_competences_${ids[i]}_competence_points`], 10) || 0;
}
setAttrs({
"competence_points_restants": 50 - sum
});
});
});
});
on(`remove:repeating_competences`, function (eventInfo) {
getAttrs(["competence_points_restants"], function (values) {
setAttrs({
"competence_points_restants": parseInt(values.competence_points_restants, 10)
+ parseInt(eventInfo.removedInfo[`${eventInfo.sourceAttribute}_competence_points`] || 0, 10)
});
});
});
on(`change:repeating_competencesspeciales:base change:repeating_competencesspeciales:bonus`, function (eventInfo) {
const ID = eventInfo.sourceAttribute.split('_')[2];
getAttrs([`repeating_competencesspeciales_${ID}_base`, `repeating_competencesspeciales_${ID}_bonus`], function (values) {
setAttrs({
[`repeating_competencesspeciales_${ID}_total`]: (parseInt(values[`repeating_competencesspeciales_${ID}_base`], 10) || 0)
+ (parseInt(values[`repeating_competencesspeciales_${ID}_bonus`], 10) || 0)
});
});
});
</script>