Files
roll20-character-sheets/Lotfp/Lotfp.html
T
2017-10-19 13:30:21 +02:00

606 lines
30 KiB
HTML

<div class="sheet-flex-between">
<div class="sheet-col-left sheet-noborder">
<!-- LOGO -->
<img src="http://i.imgur.com/uwl3LKE.jpg" class="sheet-logo">
</div>
<div class="sheet-col-right sheet-noborder">
<!-- Header Content -->
<div class="sheet-info-name sheet-info-margin">
<span>Name: </span>
<input type="text" class="sheet-bottom-line" name="attr_name">
</div>
<div class="sheet-info-row">
<input type="text" class="sheet-info3" name="attr_class">
<input type="text" class="sheet-info3" name="attr_level">
<input type="text" class="sheet-info3" name="attr_alignment">
<span class="sheet-info3">Class</span>
<span class="sheet-info3">Level</span>
<span class="sheet-info3">Alignment</span>
</div>
<div class="sheet-info-row">
<input type="text" class="sheet-info2" name="attr_age">
<input type="text" class="sheet-info1" name="attr_sex">
<input type="text" class="sheet-info3" name="attr_xp">
<input type="text" class="sheet-info3" name="attr_nextxp">
<span class="sheet-info2">Age</span>
<span class="sheet-info1">Sex</span>
<span class="sheet-info3">Current XP</span>
<span class="sheet-info3">XP for next Level</span>
</div>
</div>
</div>
<!-- ABILITIES, SAVES, ETC -->
<div class="sheet-flex-between">
<!-- ABILITIES-->
<div class="sheet-col-left sheet-thick-border">
<!-- ABILITIES -->
<h3>Abilities</h3>
<div class="sheet-flex">
<div class="sheet-ability-column-value">
<span>Charisma</span>
<input type="number" class="sheet-ability-value" name="attr_cha" value="10">
</div>
<div class="sheet-ability-column-modifier sheet-flex-between">
<input type="number" class="sheet-ability-modifier" name="attr_ChaMod" value="0" readonly>
<span class="sheet-subtext">Retainer Recruitment, Loyalty</span>
</div>
<div class="sheet-ability-column-roll sheet-flex">
<button class="sheet-ability-button" type="roll" value="&{template:lotfp_check} {{name=Charisma}} {{abilityroll=[[1d20+@{ChaMod}+(?{Bonus|0})]]}}" name="roll_ChaCheck"></button>
</div>
</div>
<div class="sheet-flex">
<div class="sheet-ability-column-value">
<span>Constitution</span>
<input type="number" class="sheet-ability-value" name="attr_con" value="10">
</div>
<div class="sheet-ability-column-modifier sheet-flex-between">
<input type="number" class="sheet-ability-modifier" name="attr_ConMod" value="0" readonly>
<span class="sheet-subtext">Hit Points,<br>Daily Travel Distance</span>
</div>
<div class="sheet-ability-column-roll sheet-flex">
<button class="sheet-ability-button" type="roll" value="&{template:lotfp_check} {{name=Constitution}} {{abilityroll=[[1d20+@{ConMod}+(?{Bonus|0})]]}}" name="roll_ConCheck"></button>
</div>
</div>
<div class="sheet-flex">
<div class="sheet-ability-column-value">
<span>Dexterity</span>
<input type="number" class="sheet-ability-value" name="attr_dex" value="10">
</div>
<div class="sheet-ability-column-modifier sheet-flex-between">
<input type="number" class="sheet-ability-modifier" name="attr_DexMod" value="0" readonly>
<span class="sheet-subtext">AC, Ranged AB, Initiative</span>
</div>
<div class="sheet-ability-column-roll sheet-flex">
<button class="sheet-ability-button" type="roll" value="&{template:lotfp_check} {{name=Dexterity}} {{abilityroll=[[1d20+@{DexMod}+(?{Bonus|0})]]}}" name="roll_DexCheck"></button>
</div>
</div>
<div class="sheet-flex">
<div class="sheet-ability-column-value">
<span>Intelligence</span>
<input type="number" class="sheet-ability-value" name="attr_int" value="10">
</div>
<div class="sheet-ability-column-modifier sheet-flex-between">
<input type="number" class="sheet-ability-modifier" name="attr_IntMod" value="0" readonly>
<span class="sheet-subtext">Saves vs Magic Effects, Languages</span>
</div>
<div class="sheet-ability-column-roll sheet-flex">
<button class="sheet-ability-button" type="roll" value="&{template:lotfp_check} {{name=Intelligence}} {{abilityroll=[[1d20+@{IntMod}+(?{Bonus|0})]]}}" name="roll_IntCheck"></button>
</div>
</div>
<div class="sheet-flex">
<div class="sheet-ability-column-value">
<span>Strength</span>
<input type="number" class="sheet-ability-value" name="attr_str" value="10">
</div>
<div class="sheet-ability-column-modifier sheet-flex-between">
<input type="number" class="sheet-ability-modifier" name="attr_StrMod" value="0" readonly>
<span class="sheet-subtext">Mêlée AB,<br>Open Doors</span>
</div>
<div class="sheet-ability-column-roll sheet-flex">
<button class="sheet-ability-button" type="roll" value="&{template:lotfp_check} {{name=Strength}} {{abilityroll=[[1d20+@{StrMod}+(?{Bonus|0})]]}}" name="roll_StrCheck"></button>
</div>
</div>
<div class="sheet-flex">
<div class="sheet-ability-column-value">
<span>Wisdom</span>
<input type="number" class="sheet-ability-value" name="attr_wis" value="10">
</div>
<div class="sheet-ability-column-modifier sheet-flex-between">
<input type="number" class="sheet-ability-modifier" name="attr_WisMod" value="0" readonly>
<span class="sheet-subtext">Saves vs Non-Magic Effects</span>
</div>
<div class="sheet-ability-column-roll sheet-flex">
<button class="sheet-ability-button" type="roll" value="&{template:lotfp_check} {{name=Wisdom}} {{abilityroll=[[1d20+@{WisMod}+(?{Bonus|0})]]}}" name="roll_WisCheck"></button>
</div>
</div>
</div>
<div class="sheet-col-right sheet-save-col sheet-flex-between">
<!-- SAVING THROWS -->
<div class="sheet-thick-border">
<!-- Saving Throws -->
<h3>Saving Throws</h3>
<div class="sheet-flex">
<div class="sheet-svblock">
<span class="sheet-svbtitle">Paralyze</span>
<input type="number" class="sheet-savingthrow" name="attr_Paralyze">
<span class="sheet-svnsubtext">Mobility Hazards (Petrification, Hold, Etc.)</span>
<button class="sheet-ability-button" type="roll" value="&{template:lotfp_check} {{name=Paralyze}} {{saveroll=[[1d20+(?{Bonus|0})]]}} {{target=[[@{Paralyze}]]}}" name="roll_ParalyzeCheck"></button>
</div>
<div class="sheet-svblock">
<span class="sheet-svbtitle">Poison</span>
<input type="number" class="sheet-savingthrow" name="attr_Poison">
<span class="sheet-svnsubtext">Instant Death/KO Situations</span>
<button class="sheet-ability-button" type="roll" value="&{template:lotfp_check} {{name=Poison}} {{saveroll=[[1d20+(?{Bonus|0})]]}} {{target=[[@{Poison}]]}}" name="roll_PoisonCheck"></button>
</div>
<div class="sheet-svblock">
<span class="sheet-svbtitle">Breath Weapon</span>
<input type="number" class="sheet-savingthrow" name="attr_Breath">
<span class="sheet-svnsubtext">Area<br>Effects</span>
<button class="sheet-ability-button" type="roll" value="&{template:lotfp_check} {{name=Breath Weapon}} {{saveroll=[[1d20+(?{Bonus|0})]]}} {{target=[[@{Breath}]]}}" name="roll_BreathCheck"></button>
</div>
<div class="sheet-svblock">
<span class="sheet-svbtitle">Magical Device</span>
<input type="number" class="sheet-savingthrow" name="attr_Device">
<span class="sheet-svnsubtext">Spell-Like Effects from Items</span>
<button class="sheet-ability-button" type="roll" value="&{template:lotfp_check} {{name=Magical Device}} {{saveroll=[[1d20+(?{Bonus|0})]]}} {{target=[[@{Device}]]}}" name="roll_DeviceCheck"></button>
</div>
<div class="sheet-svblock">
<span class="sheet-svbtitle">Magic</span>
<input type="number" class="sheet-savingthrow" name="attr_Magic">
<span class="sheet-svnsubtext">Spells or Innate Abilities</span>
<button class="sheet-ability-button" type="roll" value="&{template:lotfp_check} {{name=Magic}} {{saveroll=[[1d20+(?{Bonus|0})]]}} {{target=[[@{Magic}]]}}" name="roll_MagicCheck"></button>
</div>
</div>
</div>
<!-- AB AND HP -->
<div class="sheet-thick-border sheet-flex">
<div class="sheet-svblock">
<span class="sheet-svbtitle">Base<br>AB</span>
<input type="number" class="sheet-savingthrow" name="attr_BaseAB" value="1">
</div>
<div class="sheet-svblock">
<span class="sheet-svbtitle">Mêlée<br>AB</span>
<input type="number" class="sheet-savingthrow" name="attr_MeleeAB" value="(@{BaseAB}+@{StrMod})" disabled="true">
</div>
<div class="sheet-svblock">
<span class="sheet-svbtitle">Ranged<br>AB</span>
<input type="number" class="sheet-savingthrow" name="attr_RangedAB" value="(@{BaseAB}+@{DexMod})" disabled="true">
</div>
<div class="sheet-svblock">
<span class="sheet-svbtitle">Current<br>HP</span>
<input type="number" class="sheet-savingthrow sheet-hp" name="attr_HP">
</div>
<div class="sheet-svblock">
<span class="sheet-svbtitle">Max<br>HP</span>
<input type="number" class="sheet-savingthrow sheet-hp" name="attr_HP_max">
</div>
</div>
<!-- AC -->
<div class="sheet-thick-border sheet-flex">
<div class="sheet-svblock">
<span class="sheet-svbtitle">Mêlée<br>AC</span>
<input type="number" class="sheet-savingthrow" name="attr_MeleeAC" value="12">
</div>
<div class="sheet-svblock">
<span class="sheet-svbtitle">Ranged<br>AC</span>
<input type="number" class="sheet-savingthrow" name="attr_RangedAC" value="12">
</div>
<div class="sheet-svblock">
<span class="sheet-svbtitle">W.Shield<br>AC</span>
<input type="number" class="sheet-savingthrow" name="attr_WShieldAC" value="12">
</div>
<div class="sheet-svblock">
<span class="sheet-svbtitle">Surpr.<br>AC</span>
<input type="number" class="sheet-savingthrow" name="attr_SurprisedAC" value="12">
</div>
<div class="sheet-svblock">
<span class="sheet-svbtitle">Encumb.</span>
<input type="number" class="sheet-savingthrow" name="attr_Encumbrance">
</div>
</div>
</div>
</div>
<!-- WEAPONS -->
<div class="sheet-thick-border">
<h3>Weapons</h3>
<div class="sheet-rep-title sheet-flex-between">
<span class="sheet-weapon-name">Name</span>
<span class="sheet-weapon-type">Type</span>
<span class="sheet-attackbonus">AB</span>
<span class="sheet-damage">Damage</span>
<span class="sheet-damage">S Range</span>
<span class="sheet-damage">M Range</span>
<span class="sheet-damage">L Range</span>
<span class="sheet-dummy-attack-button"></span>
</div>
<fieldset class="repeating_weapons">
<input type="text" name="attr_weaponname" class="sheet-bottom-line sheet-weapon-name">
<select name="attr_weapontype" class="sheet-weapon-type">
<option value="@{MeleeAB}" selected>Mêlée</option>
<option value="@{RangedAB}">Ranged</option>
</select>
<input type="number" name="attr_attackbonus" value="@{weapontype}" class="sheet-bottom-line sheet-attackbonus" disabled="true">
<input type="text" name="attr_weapondamage" class="sheet-bottom-line sheet-damage">
<input type="text" name="attr_shortrange" class="sheet-bottom-line sheet-damage">
<input type="text" name="attr_mediumrange" class="sheet-bottom-line sheet-damage">
<input type="text" name="attr_longrange" class="sheet-bottom-line sheet-damage">
<button class="sheet-attack-button" type="roll" value="&{template:lotfp_check} {{name=@{weaponname}}} {{charactername=@{name}}} {{attackroll=[[1d20+@{attackbonus}+(?{Bonus|0})]]}} {{damageroll=[[@{weapondamage}]]}}" name="roll_Attack"></button>
</fieldset>
</div>
<!-- SKILLS AND EQUIPMENT -->
<div class="sheet-flex-between">
<div class="sheet-col-left sheet-thick-border">
<h3>Skills</h3>
<fieldset class="repeating_skills">
<input type="text" name="attr_skillname" class="sheet-bottom-line sheet-skillname">
<select name="attr_skillvalue" class="sheet-skillvalue">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
</select>
<button class="sheet-skill-button" type="roll" value="&{template:lotfp_check} {{name=@{skillname}}} {{skillroll=[[1d6]]}} {{target=[[@{skillvalue}]]}}" name="roll_Skill"></button>
</fieldset>
</div>
<div class="sheet-col-right sheet-thick-border sheet-equipment">
<h3>Equipment</h3>
<fieldset class="repeating_equipment">
<input type="text" name="attr_itemname" class="sheet-bottom-line sheet-equipment-name">
<input type="number" name="attr_encumbrance" class="sheet-encumbrance sheet-bottom-line" value="0" min="0">
</fieldset>
<div class="sheet-top-line sheet-flex-between sheet-encumbrance-total">
<span class="sheet-equipment-name">Total</span>
<input type="number" name="attr_encumbrance_total" class="sheet-encumbrance" value="0" readonly>
</div>
</div>
</div>
<!-- SPELLS -->
<div class="sheet-thick-border sheet-spells">
<input type="checkbox" name="attr_spells_filter" class="sheet-spellfilter" value="all" checked>
<input type="checkbox" name="attr_spells_filter" class="sheet-spellfilter" value="1">
<input type="checkbox" name="attr_spells_filter" class="sheet-spellfilter" value="2">
<input type="checkbox" name="attr_spells_filter" class="sheet-spellfilter" value="3">
<input type="checkbox" name="attr_spells_filter" class="sheet-spellfilter" value="4">
<input type="checkbox" name="attr_spells_filter" class="sheet-spellfilter" value="5">
<input type="checkbox" name="attr_spells_filter" class="sheet-spellfilter" value="6">
<input type="checkbox" name="attr_spells_filter" class="sheet-spellfilter" value="7">
<input type="checkbox" name="attr_spells_filter" class="sheet-spellfilter" value="8">
<input type="checkbox" name="attr_spells_filter" class="sheet-spellfilter" value="9">
<h3>Spells</h3>
<div class="sheet-spells-per-level sheet-flex-between">
<div class="sheet-flex-between">
<span>1: </span>
<input type="number" name="attr_spells_l1" value="0">
<span> / </span>
<input type="number" name="attr_spells_l1_max" value="0">
</div>
<div class="sheet-flex-between">
<span>2: </span>
<input type="number" name="attr_spells_l2" value="0">
<span> / </span>
<input type="number" name="attr_spells_l2_max" value="0">
</div>
<div class="sheet-flex-between">
<span>3: </span>
<input type="number" name="attr_spells_l3" value="0">
<span> / </span>
<input type="number" name="attr_spells_l3_max" value="0">
</div>
<div class="sheet-flex-between">
<span>4: </span>
<input type="number" name="attr_spells_l4" value="0">
<span> / </span>
<input type="number" name="attr_spells_l4_max" value="0">
</div>
<div class="sheet-flex-between">
<span>5: </span>
<input type="number" name="attr_spells_l5" value="0">
<span> / </span>
<input type="number" name="attr_spells_l5_max" value="0">
</div>
<div class="sheet-flex-between">
<span>6: </span>
<input type="number" name="attr_spells_l6" value="0">
<span> / </span>
<input type="number" name="attr_spells_l6_max" value="0">
</div>
<div class="sheet-flex-between">
<span>7: </span>
<input type="number" name="attr_spells_l7" value="0">
<span> / </span>
<input type="number" name="attr_spells_l7_max" value="0">
</div>
<div class="sheet-flex-between">
<span>8: </span>
<input type="number" name="attr_spells_l8" value="0">
<span> / </span>
<input type="number" name="attr_spells_l8_max" value="0">
</div>
<div class="sheet-flex-between">
<span>9: </span>
<input type="number" name="attr_spells_l9" value="0">
<span> / </span>
<input type="number" name="attr_spells_l9_max" value="0">
</div>
</div>
<div class="sheet-spell-filters sheet-flex-between">
<div>Filter:</div>
<label class="sheet-filter-button">
<input type="radio" name="attr_spells_filter" value="all" checked>
<span>all</span>
</label>
<label class="sheet-filter-button">
<input type="radio" name="attr_spells_filter" value="1">
<span>1</span>
</label>
<label class="sheet-filter-button">
<input type="radio" name="attr_spells_filter" value="2">
<span>2</span>
</label>
<label class="sheet-filter-button">
<input type="radio" name="attr_spells_filter" value="3">
<span>3</span>
</label>
<label class="sheet-filter-button">
<input type="radio" name="attr_spells_filter" value="4">
<span>4</span>
</label>
<label class="sheet-filter-button">
<input type="radio" name="attr_spells_filter" value="5">
<span>5</span>
</label>
<label class="sheet-filter-button">
<input type="radio" name="attr_spells_filter" value="6">
<span>6</span>
</label>
<label class="sheet-filter-button">
<input type="radio" name="attr_spells_filter" value="7">
<span>7</span>
</label>
<label class="sheet-filter-button">
<input type="radio" name="attr_spells_filter" value="8">
<span>8</span>
</label>
<label class="sheet-filter-button">
<input type="radio" name="attr_spells_filter" value="9">
<span>9</span>
</label>
</div>
<fieldset class="repeating_spells">
<input type="checkbox" name="attr_spelllevel" class="sheet-hidden-spell-level" value="1">
<input type="checkbox" name="attr_spelllevel" class="sheet-hidden-spell-level" value="2">
<input type="checkbox" name="attr_spelllevel" class="sheet-hidden-spell-level" value="3">
<input type="checkbox" name="attr_spelllevel" class="sheet-hidden-spell-level" value="4">
<input type="checkbox" name="attr_spelllevel" class="sheet-hidden-spell-level" value="5">
<input type="checkbox" name="attr_spelllevel" class="sheet-hidden-spell-level" value="6">
<input type="checkbox" name="attr_spelllevel" class="sheet-hidden-spell-level" value="7">
<input type="checkbox" name="attr_spelllevel" class="sheet-hidden-spell-level" value="8">
<input type="checkbox" name="attr_spelllevel" class="sheet-hidden-spell-level" value="9">
<div class="sheet-spellcontainer">
<input type="text" name="attr_spellname" class="sheet-bottom-line sheet-spell-name" placeholder="Name">
<select name="attr_spelltype" class="sheet-spell-type">
<option value="Magic-User" selected>Magic-User</option>
<option value="Cleric">Cleric</option>
</select>
<input type="text" name="attr_spelllevel" class="sheet-bottom-line sheet-spell-level" placeholder="1">
<input type="text" name="attr_spellduration" class="sheet-bottom-line sheet-spell-duration" placeholder="Duration">
<input type="text" name="attr_spellrange" class="sheet-bottom-line sheet-spell-range" placeholder="Range">
<div>
<span># prepared: </span>
<input type="number" name="attr_spellprepared" class="sheet-bottom-line sheet-spell-prepared" value="0" min="0">
</div>
<button class="sheet-attack-button" type="roll" value="&{template:lotfp_check} {{name=@{spellname}}} {{spell=1}} {{charactername=@{name}}} {{type=@{spelltype}}} {{level=@{spelllevel}}} {{duration=@{spellduration}}} {{range=@{spellrange}}} {{description=@{spelldescription}}}" name="roll_Cast"></button>
<textarea spellcheck="false" name="attr_spelldescription" class="sheet-spell-description" placeholder="Description"></textarea>
</div>
</fieldset>
</div>
<!-- RETAINERS -->
<div class="sheet-thick-border">
<h3>Retainers</h3>
<div class="sheet-rep-title sheet-flex-between">
<span class="sheet-retainer-name">Name</span>
<span class="sheet-retainer-position">Position</span>
<span class="sheet-retainer-classlevel">Class/Level</span>
<span class="sheet-retainer-hp">HP</span>
<span class="sheet-retainer-wage">Wage</span>
<span class="sheet-retainer-share">Share</span>
</div>
<fieldset class="repeating_retainers">
<input type="text" name="attr_retainername" class="sheet-bottom-line sheet-retainer-name">
<input type="text" name="attr_retainerposition" class="sheet-bottom-line sheet-retainer-position">
<input type="text" name="attr_retainerclass" class="sheet-bottom-line sheet-retainer-classlevel">
<input type="text" name="attr_retainerhp" class="sheet-bottom-line sheet-retainer-hp">
<input type="text" name="attr_retainerwage" class="sheet-bottom-line sheet-retainer-wage">
<input type="text" name="attr_retainershare" class="sheet-bottom-line sheet-retainer-share">
</fieldset>
</div>
<!-- Templates -->
<rolltemplate class="sheet-rolltemplate-lotfp_check">
<table>
{{#abilityroll}}
<tr><th>{{name}} check</th></tr>
<tr><td><span class="sheet-tcat">Roll: </span>{{abilityroll}}</td></tr>
{{/abilityroll}}
{{#attackroll}}
<tr><th>{{charactername}} attacks with {{name}}</th></tr>
<tr><td><span class="sheet-tcat">Attack Roll: </span>{{attackroll}}</td></tr>
<tr><td><span class="sheet-tcat">Damage: </span>{{damageroll}}</td></tr>
{{/attackroll}}
{{#skillroll}}
<tr><th>{{name}} check</th></tr>
<tr><td><span class="sheet-tcat">Roll: </span>{{skillroll}} &lt;= {{target}} </td></tr>
{{#rollLess() skillroll target}}
<tr><td class="sheet-subheader" style="color:green;"><b>Success!</b></td></tr>
{{/rollLess() skillroll target}}
{{#rollTotal() skillroll target}}
<tr><td class="sheet-subheader" style="color:green;"><b>Success!</b></td></tr>
{{/rollTotal() skillroll target}}
{{#rollGreater() skillroll target}}
<tr><td class="sheet-subheader" style="color:red;"><b>Failure.</b></td></tr>
{{/rollGreater() skillroll target}}
{{/skillroll}}
{{#saveroll}}
<tr><th>{{name}} save</th></tr>
<tr><td><span class="sheet-tcat">Roll: </span>{{saveroll}} &gt; {{target}}</td></tr>
{{#rollLess() saveroll target}}
<tr><td class="sheet-subheader" style="color:red;"><b>Failure.</b></td></tr>
{{/rollLess() saveroll target}}
{{#rollGreater() saveroll target}}
<tr><td class="sheet-subheader" style="color:green;"><b>Success!</b></td></tr>
{{/rollGreater() saveroll target}}
{{/saveroll}}
{{#spell}}
<tr><th>{{charactername}} casts {{name}}</th></tr>
<tr class="sheet-spellrow"><td><span class="sheet-tcat">Level: </span>{{type}} {{level}}</td></tr>
<tr class="sheet-spellrow"><td><span class="sheet-tcat">Duration: </span>{{duration}}</td></tr>
<tr class="sheet-spellrow"><td><span class="sheet-tcat">Range: </span>{{range}}</td></tr>
<tr class="sheet-spellrow"><td><span class="sheet-tcat">Description: </span>{{description}}</td></tr>
{{/spell}}
</table>
</rolltemplate>
<!-- Sheet workers -->
<script type="text/worker">
const skills = [
'Architecture',
'Bushcraft',
'Climb',
'Languages',
'Search',
'Sleight of Hand',
'Sneak Attack',
'Stealth',
'Tinker'
];
const fillRepeatingSectionFromData = (sectionName, dataList) => {
getSectionIDs(`repeating_${sectionName}`, idList => {
const existingRowAttributes = idList.map(id => `repeating_${sectionName}_${id}_name`);
getAttrs(existingRowAttributes, v => {
const createdIDs = [],
setting = dataList.map(o => {
let rowID;
while (!rowID) {
let newID = generateRowID();
if (!createdIDs.includes(newID)) {
rowID = newID;
createdIDs.push(rowID);
}
}
return Object.keys(o).reduce((m, key) => {
m[`repeating_${sectionName}_${rowID}_${key}`] = String(o[key]);
return m;
}, {});
})
.reduce((m, o) => Object.assign(m, o), {});
setAttrs(setting);
});
});
};
// Spells prepared
on('change:repeating_spells remove:repeating_spells', () => {
"use strict";
getSectionIDs('repeating_spells', idArray => {
const attrs = [
...idArray.map(id => `repeating_spells_${id}_spelllevel`),
...idArray.map(id => `repeating_spells_${id}_spellprepared`)
];
getAttrs(attrs, v => {
const levels = ['1', '2', '3', '4', '5', '6', '7', '8', '9'],
spellsPrepared = levels.reduce((m, level) => {
m[`spells_l${level}`] = 0;
return m;
}, {});
idArray.forEach(id => {
if (levels.includes(v[`repeating_spells_${id}_spelllevel`])) {
spellsPrepared['spells_l' + v[`repeating_spells_${id}_spelllevel`]] +=
(parseInt(v[`repeating_spells_${id}_spellprepared`]) || 0);
}
});
setAttrs(spellsPrepared);
});
});
});
// Equipment counter
on('change:repeating_equipment remove:repeating_equipment', () => {
"use strict";
getSectionIDs('repeating_equipment', idArray => {
getAttrs(idArray.map(id => `repeating_equipment_${id}_encumbrance`), v => {
const total = Object.values(v).reduce((m, w) => (m + (parseInt(w) || 0)), 0);
setAttrs({
encumbrance_total: total
});
});
});
});
// Ability modifiers
['Cha', 'Con', 'Dex', 'Int', 'Str', 'Wis'].forEach(ability => {
on(`sheet:opened change:${ability.toLowerCase()}`, () => {
getAttrs([ability.toLowerCase()], v => {
const value = parseInt(v[ability.toLowerCase()]) || 10,
setting = {};
if (value <= 3) setting[`${ability}Mod`] = -3;
else if (value <= 5) setting[`${ability}Mod`] = -2;
else if (value <= 8) setting[`${ability}Mod`] = -1;
else if (value <= 12) setting[`${ability}Mod`] = 0;
else if (value <= 15) setting[`${ability}Mod`] = 1;
else if (value <= 17) setting[`${ability}Mod`] = 2;
else setting[`${ability}Mod`] = 3;
setAttrs(setting);
});
});
});
// Conversion
on('sheet:opened', () => {
const generateSkills = () => {
getSectionIDs('repeating_skills', idArray => {
const skillNames = idArray.map(id => `repeating_skills_${id}_skillname`);
getAttrs(skillNames, v => {
const existingSkills = Object.values(v).map(name => (name || '').toLowerCase()),
newSkills = skills.filter(s => !existingSkills.includes(s.toLowerCase())).map(n => ({
skillname: n
}));
fillRepeatingSectionFromData('skills', newSkills);
});
});
}
getAttrs(['version', 'MaxHP'], v => {
if (!v.version) {
if (v.MaxHP) {
setAttrs({
hp_max: v.MaxHP
});
}
getSectionIDs('repeating_wepons', idArray => {
const attrsToConvert = [
'weaponname', 'weapontype', 'weapondamage', 'shortrange', 'mediumrange', 'longrange'
];
const attrs = idArray.reduce((m, id) => {
return m.concat(attrsToConvert.map(name => `repeating_wepons_${id}_${name}`));
}, []);
getAttrs(attrs, v => {
const data = idArray.map(id => {
return attrsToConvert.reduce((m, name) => {
m[name] = v[`repeating_wepons_${id}_${name}`] || '';
return m;
}, {});
});
idArray.forEach(id => removeRepeatingRow(`repeating_wepons_${id}`));
fillRepeatingSectionFromData('weapons', data);
});
});
generateSkills();
}
if (v.version === '1') generateSkills();
setAttrs({
version: '2'
});
});
});
</script>