Files
roll20-character-sheets/ButterflyAspect/ButterflyAspect.html
T
2023-10-02 19:58:56 +02:00

1399 lines
54 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<div class="container">
<div class="float head">
<div class="float head-logo">
<img class="logo" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ButterflyAspect/logo.png" alt="ButterflyAspect" />
<div class="settings">
<select name="attr_gmroll">
<option value="0" selected disabled>Auswahl treffen</option>
<option value="nogm">Für alle sichtbar würfeln</option>
<option value="gm">Für GM würfeln</option>
</select>
<input type="hidden" name="attr_abilityroll" />
</div>
</div>
<div class="float head-info">
<div class="header">
<span>Allgemeines</span>
</div>
<div class="float head-info-boxes">
<div class="formular">
<label for="attr_character_name">Charaktername</label>
<input type="text" id="attr_character_name" name="attr_character_name" />
</div>
<div class="formular">
<label for="attr_character_description">Beschreibung</label>
<textarea id="attr_character_description" name="attr_character_description" style="height: 102px"></textarea>
</div>
</div>
</div>
<div class="head-stats">
<div class="formular">
<label for="attr_leben">Leben</label>
<input type="number" class="number-20 koerperkraft" id="attr_koerperkraft" name="attr_koerperkraft" title="Körperkraft" placeholder="Körperkraft" value="1" min="1" />
<div class="health">
<input type="number" class="number-20" id="attr_leben" name="attr_leben" placeholder="Aktuell" /> /
<input type="number" class="number-20" id="attr_leben_max" name="attr_leben_max" readonly />
</div>
</div>
<div class="formular">
<label for="attr_ruestung">Rüstung</label>
<input type="number" class="number-20" id="attr_ruestung" name="attr_ruestung" readonly />
</div>
<div class="formular ressourcen">
<label for="attr_ressourcen">Ressourcen</label>
<input type="number" name="attr_ressourcen" value="10" class="number-20" />
</div>
<div class="formular">
<button type="roll" class="small-button" name="roll_schicksalRoll" value="/me hat jetzt noch [[@{schicksal}]] Schicksalspunkte">Schicksal</button>
<input type="number" name="attr_schicksal" value="4" class="number-20" />
</div>
</div>
</div>
<div class="break"></div>
<div class="float attribut">
<div class="header">
<span>Attribute</span>
</div>
<div class="float attribut-stats">
<div class="float formular">
<label>Nahkampf</label>
<input type="number" name="attr_Na" value="2" min="1" class="number-20" />
</div>
<div class="float formular">
<label>Fernkampf</label>
<input type="number" name="attr_Fe" value="2" min="1" class="number-20" />
</div>
<div class="float formular">
<label>Geschick</label>
<input type="number" name="attr_Ge" value="2" min="1" class="number-20" />
</div>
<div class="float formular">
<label>Wahrnehmung</label>
<input type="number" name="attr_Wa" value="2" min="1" class="number-20" />
</div>
<div class="float formular">
<label>Konstitution</label>
<input type="number" name="attr_Ko" value="2" min="1" class="number-20" />
</div>
<div class="float formular">
<label>Intelligenz</label>
<input type="number" name="attr_In" value="2" min="1" class="number-20" />
</div>
<div class="float formular">
<label>Wissen</label>
<input type="number" name="attr_Wi" value="2" min="1" class="number-20" />
</div>
<div class="float formular">
<label>Charisma</label>
<input type="number" name="attr_Ca" value="2" min="1" class="number-20" />
</div>
</div>
</div>
<div class="break"></div>
<div class="float full skills">
<div class="header">
<span>Fertigkeiten</span>
</div>
<div class="grid">
<div>Fertigkeit</div>
<div>Attr.</div>
<div>Wert</div>
<div>PP</div>
<div>Roll</div>
</div>
<div class="gridplace">
<div class="basicskills">
<div class="items">
<div><input class="textcenter" type="text" name="attr_unbewaffnet" title="Fertigkeit" value="Unbewaffnet" readonly /></div>
<div>
<select name="attr_attribut" title="Attribut">
<option value="@{Na}">Nahkampf</option>
</select>
</div>
<div><input type="number" name="attr_unbewaffnet_skill" title="Fertigkeitswert" value="1" min="1" /></div>
<div><input type="number" name="attr_unbewaffnet_pp" title="Praxispunkt" value="0" /></div>
<div>
<button
type="roll"
name="roll_skill"
title="Unbewaffnet Würfeln"
value="@{abilityroll} &{template:butterfly} {{name=@{unbewaffnet}}} {{rolling=[[{@{unbewaffnet_skill}d10!}k@{Na}]]}} {{rolling2=[[{@{unbewaffnet_skill}d10!}k@{Na}]]}}"
></button>
</div>
</div>
<div class="items">
<div><input class="textcenter" type="text" name="attr_werfen" title="Fertigkeit" value="Werfen" readonly /></div>
<div>
<select name="attr_attribut" title="Attribut">
<option value="@{Fe}">Fernkampf</option>
</select>
</div>
<div><input type="number" name="attr_werfen_skill" title="Fertigkeitswert" value="1" min="1" /></div>
<div><input type="number" name="attr_werfen_pp" title="Praxispunkt" value="0" /></div>
<div>
<button
type="roll"
name="roll_skill"
title="Werfen Würfeln"
value="@{abilityroll} &{template:butterfly} {{name=@{werfen}}} {{rolling=[[{@{werfen_skill}d10!}k@{Fe}]]}} {{rolling2=[[{@{werfen_skill}d10!}k@{Fe}]]}}"
></button>
</div>
</div>
<div class="items">
<div><input class="textcenter" type="text" name="attr_athletik" title="Fertigkeit" value="Athletik" readonly /></div>
<div>
<select name="attr_attribut" title="Attribut">
<option value="@{Ge}">Geschick</option>
</select>
</div>
<div><input type="number" name="attr_athletik_skill" title="Fertigkeitswert" value="1" min="1" /></div>
<div><input type="number" name="attr_athletik_pp" title="Praxispunkt" value="0" /></div>
<div>
<button
type="roll"
name="roll_skill"
title="Athletik Würfeln"
value="@{abilityroll} &{template:butterfly} {{name=@{athletik}}} {{rolling=[[{@{athletik_skill}d10!}k@{Ge}]]}} {{rolling2=[[{@{athletik_skill}d10!}k@{Ge}]]}}"
></button>
</div>
</div>
<div class="items">
<div><input class="textcenter" type="text" name="attr_aufmerksamkeit" title="Fertigkeit" value="Aufmerksamkeit" readonly /></div>
<div>
<select name="attr_attribut" title="Attribut">
<option value="@{Wa}">Wahrnehmung</option>
</select>
</div>
<div><input type="number" name="attr_aufmerksamkeit_skill" title="Fertigkeitswert" value="1" min="1" /></div>
<div><input type="number" name="attr_aufmerksamkeit_pp" title="Praxispunkt" value="0" /></div>
<div>
<button
type="roll"
name="roll_skill"
title="Aufmerksamkeit Würfeln"
value="@{abilityroll} &{template:butterfly} {{name=@{aufmerksamkeit}}} {{rolling=[[{@{aufmerksamkeit_skill}d10!}k@{Wa}]]}} {{rolling2=[[{@{aufmerksamkeit_skill}d10!}k@{Wa}]]}}"
></button>
</div>
</div>
<div class="items">
<div><input class="textcenter" type="text" name="attr_gewalt" title="Fertigkeit" value="Gewalt" readonly /></div>
<div>
<select name="attr_attribut" title="Attribut">
<option value="@{Ko}">Konstitution</option>
</select>
</div>
<div><input type="number" name="attr_gewalt_skill" title="Fertigkeitswert" value="1" min="1" /></div>
<div><input type="number" name="attr_gewalt_pp" title="Praxispunkt" value="0" /></div>
<div>
<button
type="roll"
name="roll_skill"
title="Gewalt Würfeln"
value="@{abilityroll} &{template:butterfly} {{name=@{gewalt}}} {{rolling=[[{@{gewalt_skill}d10!}k@{Ko}]]}} {{rolling2=[[{@{gewalt_skill}d10!}k@{Ko}]]}}"
></button>
</div>
</div>
<div class="items">
<div><input class="textcenter" type="text" name="attr_knobeln" title="Fertigkeit" value="Knobeln" readonly /></div>
<div>
<select name="attr_attribut" title="Attribut">
<option value="@{in}">Intelligenz</option>
</select>
</div>
<div><input type="number" name="attr_knobeln_skill" title="Fertigkeitswert" value="1" min="1" /></div>
<div><input type="number" name="attr_knobeln_pp" title="Praxispunkt" value="0" /></div>
<div>
<button
type="roll"
name="roll_skill"
title="Knobeln Würfeln"
value="@{abilityroll} &{template:butterfly} {{name=@{knobeln}}} {{rolling=[[{@{knobeln_skill}d10!}k@{in}]]}} {{rolling2=[[{@{knobeln_skill}d10!}k@{in}]]}}"
></button>
</div>
</div>
<div class="items">
<div><input class="textcenter" type="text" name="attr_geisteswissenschaft" title="Fertigkeit" value="Geisteswissenschaft" readonly /></div>
<div>
<select name="attr_attribut" title="Attribut">
<option value="@{Wi}">Wissen</option>
</select>
</div>
<div><input type="number" name="attr_geisteswissenschaft_skill" title="Fertigkeitswert" value="1" min="1" /></div>
<div><input type="number" name="attr_geisteswissenschaft_pp" title="Praxispunkt" value="0" /></div>
<div>
<button
type="roll"
name="roll_skill"
title="Geisteswissenschaft Würfeln"
value="@{abilityroll} &{template:butterfly} {{name=@{geisteswissenschaft}}} {{rolling=[[{@{geisteswissenschaft_skill}d10!}k@{Wi}]]}} {{rolling2=[[{@{geisteswissenschaft_skill}d10!}k@{Wi}]]}}"
></button>
</div>
</div>
<div class="items">
<div><input class="textcenter" type="text" name="attr_einschaetzen" title="Fertigkeit" value="Einschätzen" readonly /></div>
<div>
<select name="attr_attribut" title="Attribut">
<option value="@{Ca}">Charisma</option>
</select>
</div>
<div><input type="number" name="attr_einschaetzen_skill" title="Fertigkeitswert" value="1" min="1" /></div>
<div><input type="number" name="attr_einschaetzen_pp" title="Praxispunkt" value="0" /></div>
<div>
<button
type="roll"
name="roll_skill"
title="Einschätzen Würfeln"
value="@{abilityroll} &{template:butterfly} {{name=@{einschaetzen}}} {{rolling=[[{@{einschaetzen_skill}d10!}k@{Ca}]]}} {{rolling2=[[{@{einschaetzen_skill}d10!}k@{Ca}]]}}"
></button>
</div>
</div>
</div>
<fieldset class="repeating_basicskills">
<div><input class="textcenter" type="text" name="attr_skillname" title="Fertigkeit" /></div>
<div>
<select name="attr_attribut" title="Attribut">
<option value="@{Na}">Nahkampf</option>
<option value="@{Fe}">Fernkampf</option>
<option value="@{Ge}">Geschick</option>
<option value="@{Wa}">Wahrnehmung</option>
<option value="@{Ko}">Konstitution</option>
<option value="@{in}">Intelligenz</option>
<option value="@{Wi}">Wissen</option>
<option value="@{Ca}">Charisma</option>
</select>
</div>
<div><input type="number" name="attr_skill" title="Fertigkeitswert" value="0" /></div>
<div><input type="number" name="attr_pp" title="Praxispunkt" value="0" /></div>
<div>
<button
type="roll"
name="roll_skill"
title="Würfeln"
value="@{abilityroll} &{template:butterfly} {{name=@{skillname}}} {{rolling=[[{@{skill}d10!}k@{attribut}]]}} {{rolling2=[[{@{skill}d10!}k@{attribut}]]}}"
></button>
</div>
</fieldset>
</div>
</div>
<div class="break"></div>
<div class="float full weapons">
<div class="header">
<span>Waffen</span>
<button type="roll" class="small-button right dice" name="roll_ini" title="Initiative WÜrfeln" value="/w GM @{character_name} hat eine Initiative von [[@{Ge}d10 &{tracker}]]">Initiative</button>
</div>
<div class="grid">
<div>Waffe</div>
<div>Attr.</div>
<div>Wert</div>
<div title="Schadenswürfel">Sch.Würfel</div>
<div title="Schadenswert">Sch.Wert</div>
<div>Roll</div>
</div>
<div class="gridplace">
<fieldset class="repeating_waponskills">
<div id="weapondiv" class="repeat-weapon">
<input class="options-flag" id="weaponcheck" name="attr_options-flag" title="Show/hide options" type="checkbox" /><span>y</span>
<div><input class="textcenter" type="text" name="attr_weaponname" title="Waffenname" /></div>
<div>
<select name="attr_attribut" title="Attribut">
<option value="@{Na}">Nahkampf</option>
<option value="@{Fe}">Fernkampf</option>
<option value="@{Ge}">Geschick</option>
<option value="@{Ko}">Konstitution</option>
</select>
</div>
<div><input type="number" name="attr_weaponskill" title="Fertigkeitswert" value="0" /></div>
<div><input type="number" name="attr_weapondamagedice" title="Schadenswürfel" value="0" /></div>
<div><input type="number" name="attr_weapondamage" title="Schadenswert" value="0" /></div>
<div>
<button
type="roll"
name="roll_weapon"
title="Würfeln"
value="@{abilityroll} &{template:butterfly} {{name=@{weaponname}}} {{rolling=[[{@{weaponskill}d10!}k@{attribut}]]}} {{rolling2=[[{@{weaponskill}d10!}k@{attribut}]]}} {{damage=[[1d(@{weapondamagedice}) + @{weapondamage}]]}} {{desc=@{weaponeffekt}}}"
></button>
</div>
<input class="liketextarea hiddenBox" type="text" name="attr_weaponeffekt" placeholder="Spezialeffekt" />
</div>
</fieldset>
</div>
</div>
<div class="break"></div>
<div class="float full mage">
<div class="header">
<span>Magie</span>
<span class="right">Fertigkeitswert: <input type="number" name="attr_spellskill" title="Magischer Fertigkeitswert" value="0" /></span>
</div>
<div class="grid">
<div>Zauber</div>
<div>Zufälliger Effekt</div>
<div title="Entfernung">Entf.</div>
<div>Zeit</div>
<div title="Ziehlbereich/-anzahl">Ziel.</div>
<div title="Verbraucht">Verbr.</div>
<div>Nutzung</div>
<div>Roll</div>
</div>
<div class="gridplace">
<fieldset class="repeating_spells">
<div id="magediv" class="repeat-mage">
<input class="options-flag" id="magecheck" name="attr_options-flag" type="checkbox" title="Show/hide options" /><span>y</span>
<div><input class="textcenter" type="text" name="attr_spellname" title="Zaubername" placeholder="Name" /></div>
<div><input class="liketextarea" type="text" name="attr_spelleffekt" title="Zaubereffekt" placeholder="Zufälliger Effekt" /></div>
<div class="select-4">
<span class="hiddenBox" title="Entfernung">Entf.</span>
<input type="checkbox" name="attr_spellentfernung" value="1" title="10m + Sicht" />
<input type="checkbox" name="attr_spellentfernung" value="2" title="30m + Sicht" />
<input type="checkbox" name="attr_spellentfernung" value="3" title="Sichtreichweite" />
<input type="checkbox" name="attr_spellentfernung" value="4" title="sympathetischer Verbindung" />
</div>
<div class="select-4">
<span class="hiddenBox" title="Zeit">Zeit</span>
<input type="checkbox" name="attr_spellzeit" value="1" title="eine Stunde/2 Runden" />
<input type="checkbox" name="attr_spellzeit" value="2" title="bis zum Sonnenaufgang an/4 Runden" />
<input type="checkbox" name="attr_spellzeit" value="3" title="eine Woche lang/8 Runden" />
<input type="checkbox" name="attr_spellzeit" value="4" title="drei Monate/13 Runden." />
</div>
<div class="select-4">
<span class="hiddenBox" title="Ziehlbereich/-anzahl">Ziel.</span>
<input type="checkbox" name="attr_ziehlbereich" value="1" title="2 Wesen/Objekte" />
<input type="checkbox" name="attr_ziehlbereich" value="2" title="5 Wesen/Objekte" />
<input type="checkbox" name="attr_ziehlbereich" value="3" title="10 Wesen/Objekte" />
<input type="checkbox" name="attr_ziehlbereich" value="4" title="20 Wesen/Objekte" />
</div>
<div id="verbraucht"><input type="checkbox" name="attr_verbraucht" title="Zauber ist verbraucht" value="1" /></div>
<div><input type="number" name="attr_spelluse" title="Zauber benutzungsanzahl" value="0" /></div>
<div>
<button
type="roll"
class=""
name="roll_spell"
title="Würfeln"
value="@{abilityroll} &{template:butterfly} {{name=@{spellname}}} [[({floor(([[{@{spellskill}d10!}k@{attribut}]] - [[@{spellwiderstand} + (?{Gegnerische Intelligenz?|0} + ?{Aufrechterhaltene Zauber?|0}) * 2]]) / 5),1}kh1)]] {{rolling=$[[0]]}} {{widerstand=$[[1]]}} {{damage=@{damage}}} {{healing=@{healing}}} {{reinigung=@{spellreinigung}}} {{desc=@{spelleffekt}}} {{rolling2=[[{@{spellskill}d10!}k@{attribut}]]}}"
>
<input
type="number"
name="attr_spellwiderstand"
value="floor((@{spellbefehligen} + @{spellbewegung} + @{spellelement} + @{spellentfernung} + @{spellgestalt} + @{spellglueck} + @{spellreinigung} + @{spellwissen} + @{ziehlbereich} + @{spellzeit} + @{spelluse}) * 2)"
disabled
/>
</button>
</div>
<div class="hiddenBox">
<div class="select-4">
<div title="Befehligen">Befeh.</div>
<select name="attr_spellbefehligen" title="Befehligen">
<option value="-1">-1 Silbe</option>
<option value="0" selected>keine</option>
<option value="1">1 Silbe</option>
<option value="2">2 Silbe</option>
<option value="3">3 Silbe</option>
<option value="4">4 Silbe</option>
<option value="5">5 Silbe</option>
<option value="6">6 Silbe</option>
<option value="7">7 Silbe</option>
<option value="8">8 Silbe</option>
<option value="9">9 Silbe</option>
<option value="10">10 Silbe</option>
</select>
</div>
<div class="select-3">
<div title="Bewegung">Bew.</div>
<select name="attr_spellbewegung" title="Bewegung">
<option value="-1">-1 Silbe</option>
<option value="0" selected>keine</option>
<option value="1">1 Silbe</option>
<option value="2">2 Silbe</option>
<option value="3">3 Silbe</option>
<option value="4">4 Silbe</option>
<option value="5">5 Silbe</option>
<option value="6">6 Silbe</option>
<option value="7">7 Silbe</option>
<option value="8">8 Silbe</option>
<option value="9">9 Silbe</option>
<option value="10">10 Silbe</option>
</select>
</div>
<div class="select-3">
<div>Element</div>
<select name="attr_spellelement" title="Element">
<option value="-1">-1 Silbe</option>
<option value="0" selected>keine</option>
<option value="1">1 Silbe</option>
<option value="2">2 Silbe</option>
<option value="3">3 Silbe</option>
<option value="4">4 Silbe</option>
<option value="5">5 Silbe</option>
<option value="6">6 Silbe</option>
<option value="7">7 Silbe</option>
<option value="8">8 Silbe</option>
<option value="9">9 Silbe</option>
<option value="10">10 Silbe</option>
</select>
</div>
<div class="select-4">
<div>Gestalt</div>
<select name="attr_spellgestalt" title="Gestalt">
<option value="-1">-1 Silbe</option>
<option value="0" selected>keine</option>
<option value="1">1 Silbe</option>
<option value="2">2 Silbe</option>
<option value="3">3 Silbe</option>
<option value="4">4 Silbe</option>
<option value="5">5 Silbe</option>
<option value="6">6 Silbe</option>
<option value="7">7 Silbe</option>
<option value="8">8 Silbe</option>
<option value="9">9 Silbe</option>
<option value="10">10 Silbe</option>
</select>
</div>
<div class="select-4">
<div>Glück</div>
<select name="attr_spellglueck" title="Glück">
<option value="-1">-1 Silbe</option>
<option value="0" selected>keine</option>
<option value="1">1 Silbe</option>
<option value="2">2 Silbe</option>
<option value="3">3 Silbe</option>
<option value="4">4 Silbe</option>
<option value="5">5 Silbe</option>
<option value="6">6 Silbe</option>
<option value="7">7 Silbe</option>
<option value="8">8 Silbe</option>
<option value="9">9 Silbe</option>
<option value="10">10 Silbe</option>
</select>
</div>
<div class="select-3">
<div title="Reinigung">Rein.</div>
<select name="attr_spellreinigung" title="Reinigung">
<option value="-1">-1 Silbe</option>
<option value="0" selected>keine</option>
<option value="1">1 Silbe</option>
<option value="2">2 Silbe</option>
<option value="3">3 Silbe</option>
<option value="4">4 Silbe</option>
<option value="5">5 Silbe</option>
<option value="6">6 Silbe</option>
<option value="7">7 Silbe</option>
<option value="8">8 Silbe</option>
<option value="9">9 Silbe</option>
<option value="10">10 Silbe</option>
</select>
</div>
<div class="select-4">
<div>Wissen</div>
<select name="attr_spellwissen" title="Wissen">
<option value="-1">-1 Silbe</option>
<option value="0" selected>keine</option>
<option value="1">1 Silbe</option>
<option value="2">2 Silbe</option>
<option value="3">3 Silbe</option>
<option value="4">4 Silbe</option>
<option value="5">5 Silbe</option>
<option value="6">6 Silbe</option>
<option value="7">7 Silbe</option>
<option value="8">8 Silbe</option>
<option value="9">9 Silbe</option>
<option value="10">10 Silbe</option>
</select>
</div>
<div id="attribut">
<select name="attr_attribut" title="Attribut">
<option value="@{Na}">Nahkampf</option>
<option value="@{Fe}">Fernkampf</option>
<option value="@{Ge}">Geschick</option>
<option value="@{Wa}">Wahrnehmung</option>
<option value="@{Ko}">Konstitution</option>
<option value="@{in}" selected>Intelligenz</option>
<option value="@{Wi}">Wissen</option>
<option value="@{Ca}">Charisma</option>
</select>
</div>
<div id="damage">
<select name="attr_damage">
<option value="0" selected disabled>Schaden</option>
<option value="[[1d(@{spellbewegung}*2)]]">Bewegen</option>
<option value="[[1d(@{spellelement}*2)]]">Element</option>
<option value="">inaktiv</option>
</select>
</div>
<div id="healing">
<select name="attr_healing">
<option value="0" selected disabled>Heilung</option>
<option value="$[[2]]">aktiv</option>
<option value="">inaktiv</option>
</select>
</div>
<div id="textarea">
<textarea name="attr_spelldescription" placeholder="Inhalt"></textarea>
</div>
</div>
</div>
</fieldset>
</div>
</div>
<div class="break"></div>
<div class="float half aspects">
<div class="header">
<span>Aspekte</span>
</div>
<fieldset class="repeating_aspekte">
<input type="text" name="attr_aspekt" placeholder="Name" />
</fieldset>
</div>
<div class="float half stunts">
<div class="header">
<span>Stunts</span>
</div>
<fieldset class="repeating_stunts">
<div class="repeat-stunt">
<input class="options-flag" name="attr_options-flag" type="checkbox" title="Show/hide options" /><span>y</span>
<input type="text" name="attr_stunt" placeholder="Name" />
<textarea class="hiddenBox" name="attr_description" placeholder="Beschreibung"></textarea>
</div>
</fieldset>
</div>
<div class="break"></div>
<div class="float half inventar">
<div class="header">
<span>Inventar</span>
</div>
<div class="ruestung">
<input type="text" name="attr_ruestungName" placeholder="Rüstung/Schild" />
<input type="number" name="attr_ruestungswert" placeholder="Rüstungswert" />
</div>
<fieldset class="repeating_extras">
<div class="repeat-inv extras-row">
<input class="options-flag" name="attr_options-flag" type="checkbox" title="Show/hide options" /><span>y</span>
<input type="text" name="attr_name" placeholder="Gegenstand" />
<input type="number" name="attr_wight" placeholder="Info" />
<input type="number" name="attr_costs" placeholder="Anzahl" />
<textarea class="hiddenBox" name="attr_description" placeholder="Beschreibung"></textarea>
</div>
</fieldset>
</div>
<div class="float half notes">
<div class="header">
<span>Notizen</span>
</div>
<fieldset class="repeating_notes">
<div class="repeat-notes notes-row">
<input class="options-flag" name="attr_options-flag" type="checkbox" title="Show/hide options" /><span>y</span>
<input type="text" name="attr_title" placeholder="Titel" />
<textarea class="hiddenBox" name="attr_body" placeholder="Inhalt"></textarea>
</div>
</fieldset>
</div>
<div class="break"></div>
<div class="float full xp">
<div class="header">
<span>Erfahrungspunkte und Steigerung</span>
</div>
<div class="totalxp">
<div class="formular">
<label for="attr_XPtoSpend">Verfügbare EP</label>
<input type="number" id="attr_XPtoSpend" name="attr_XPtoSpend" class="number-20" value="@{XPTotal} - @{XPSpent}" disabled />
</div>
<div class="formular">
<label for="attr_XPSpent">Ausgegebene EP</label>
<input type="number" id="attr_XPSpent" name="attr_XPSpent" class="number-20" readonly />
</div>
<div class="formular">
<label for="attr_XPTotal">Gesamte EP</label>
<input type="number" id="attr_XPTotal" name="attr_XPTotal" class="number-20" />
</div>
</div>
<fieldset class="repeating_advancements">
<div class="item">
<input type="text" name="attr_advancement1" title="Beschreibung" />
</div>
<div class="brackets">
<input type="number" name="attr_advancement1xp" title="Kosten" />
</div>
<div class="placeholder"></div>
<div class="item">
<input type="text" name="attr_advancement2" title="Beschreibung" />
</div>
<div class="brackets">
<input type="number" name="attr_advancement2xp" title="Kosten" />
</div>
<div class="placeholder"></div>
<div class="item">
<input type="text" name="attr_advancement3" title="Beschreibung" />
</div>
<div class="brackets">
<input type="number" name="attr_advancement3xp" title="Kosten" />
</div>
</fieldset>
</div>
<div class="break"></div>
<div class="float full version">v2023-09-27</div>
</div>
<!-- rolltemplate -->
<rolltemplate class="sheet-rolltemplate-butterfly">
<div class="container">
<div class="header">
<span>{{name}}</span>
</div>
<div class="content">
<div><span>Ergebnis:</span>{{#rolling2}}{{rolling2}}<span class="spacer">|</span>{{/rolling2}}{{rolling}}</div>
{{#widerstand}}
<div><span>Widerstand:</span>{{widerstand}}</div>
{{/widerstand}}
{{#damage}}
<div><span>Schaden:</span>{{damage}}</div>
{{/damage}}
{{#healing}}
<div><span>Heilung:</span><span class="fakeroll">{{reinigung}}</span></div>
{{/healing}}
{{#desc}}
<div class="desc">
<span>Effekt:</span><br/>
{{desc}}
</div>
{{/desc}}
</div>
</div>
</rolltemplate>
<!-- worker scripts -->
<script type="text/worker">
/* ---- BEGIN: TheAaronSheet.js ---- */
// Github: https://github.com/shdwjk/TheAaronSheet/blob/master/TheAaronSheet.js
// By: The Aaron, Arcane Scriptomancer
// Contact: https://app.roll20.net/users/104025/the-aaron
var TAS = TAS || (function(){
'use strict';
var version = '0.2.5',
lastUpdate = 1504710542,
loggingSettings = {
debug: {
key: 'debug',
title: 'DEBUG',
color: {
bgLabel: '#7732A2',
label: '#F2EF40',
bgText: '#FFFEB7',
text: '#7732A2'
}
},
error: {
key: 'error',
title: 'Error',
color: {
bgLabel: '#C11713',
label: 'white',
bgText: '#C11713',
text: 'white'
}
},
warn: {
key: 'warn',
title: 'Warning',
color: {
bgLabel: '#F29140',
label: 'white',
bgText: '#FFD8B7',
text: 'black'
}
},
info: {
key: 'info',
title: 'Info',
color: {
bgLabel: '#413FA9',
label: 'white',
bgText: '#B3B2EB',
text: 'black'
}
},
notice: {
key: 'notice',
title: 'Notice',
color: {
bgLabel: '#33C133',
label: 'white',
bgText: '#ADF1AD',
text: 'black'
}
},
log: {
key: 'log',
title: 'Log',
color: {
bgLabel: '#f2f240',
label: 'black',
bgText: '#ffff90',
text: 'black'
}
},
callstack: {
key: 'TAS',
title: 'function',
color: {
bgLabel: '#413FA9',
label: 'white',
bgText: '#B3B2EB',
text: 'black'
}
},
callstack_async: {
key: 'TAS',
title: 'ASYNC CALL',
color: {
bgLabel: '#413FA9',
label: 'white',
bgText: '#413FA9',
text: 'white'
}
},
TAS: {
key: 'TAS',
title: 'TAS',
color: {
bgLabel: 'grey',
label: 'black;background:linear-gradient(#304352,#d7d2cc,#d7d2cc,#d7d2cc,#304352)',
bgText: 'grey',
text: 'black;background:linear-gradient(#304352,#d7d2cc,#d7d2cc,#d7d2cc,#304352)'
}
}
},
config = {
debugMode: false,
logging: {
log: true,
notice: true,
info: true,
warn: true,
error: true,
debug: false
}
},
callstackRegistry = [],
queuedUpdates = {}, //< Used for delaying saves till the last moment.
complexType = function(o){
switch(typeof o){
case 'string':
return 'string';
case 'boolean':
return 'boolean';
case 'number':
return (_.isNaN(o) ? 'NaN' : (o.toString().match(/\./) ? 'decimal' : 'integer'));
case 'function':
return 'function: '+(o.name ? o.name+'()' : '(anonymous)');
case 'object':
return (_.isArray(o) ? 'array' : (_.isArguments(o) ? 'arguments' : ( _.isNull(o) ? 'null' : 'object')));
default:
return typeof o;
}
},
dataLogger = function(primaryLogger,secondaryLogger,data){
_.each(data,function(m){
var type = complexType(m);
switch(type){
case 'string':
primaryLogger(m);
break;
case 'undefined':
case 'null':
case 'NaN':
primaryLogger('['+type+']');
break;
case 'number':
case 'not a number':
case 'integer':
case 'decimal':
case 'boolean':
primaryLogger('['+type+']: '+m);
break;
default:
primaryLogger('['+type+']:=========================================');
secondaryLogger(m);
primaryLogger('=========================================================');
break;
}
});
},
colorLog = function(options){
var coloredLoggerFunction,
key = options.key,
label = options.title || 'TAS',
lBGColor = (options.color && options.color.bgLabel) || 'blue',
lTxtColor = (options.color && options.color.label) || 'white',
mBGColor = (options.color && options.color.bgText) || 'blue',
mTxtColor = (options.color && options.color.text) || 'white';
coloredLoggerFunction = function(message){
/* eslint-disable no-console */
console.log(
'%c '+label+': %c '+message + ' ',
'background-color: '+lBGColor+';color: '+lTxtColor+'; font-weight:bold;',
'background-color: '+mBGColor+';color: '+mTxtColor+';'
);
/* eslint-enable no-console */
};
return function(){
if('TAS'===key || config.logging[key]){
/* eslint-disable no-console */
dataLogger(coloredLoggerFunction,function(m){console.log(m);},_.toArray(arguments));
/* eslint-enable no-console */
}
};
},
logDebug = colorLog(loggingSettings.debug),
logError = colorLog(loggingSettings.error),
logWarn = colorLog(loggingSettings.warn),
logInfo = colorLog(loggingSettings.info),
logNotice = colorLog(loggingSettings.notice),
logLog = colorLog(loggingSettings.log),
log = colorLog(loggingSettings.TAS),
logCS = colorLog(loggingSettings.callstack),
logCSA = colorLog(loggingSettings.callstack_async),
registerCallstack = function(callstack,label){
var idx=_.findIndex(callstackRegistry,function(o){
return (_.difference(o.stack,callstack).length === _.difference(callstack,o.stack).length) &&
_.difference(o.stack,callstack).length === 0 &&
o.label === label;
});
if(-1 === idx){
idx=callstackRegistry.length;
callstackRegistry.push({
stack: callstack,
label: label
});
}
return idx;
},
setConfigOption = function(options){
var newconf =_.defaults(options,config);
newconf.logging=_.defaults(
(options && options.logging)||{},
config.logging
);
config=newconf;
},
isDebugMode = function(){
return config.debugMode;
},
debugMode = function(){
config.logging.debug=true;
config.debugMode = true;
},
getCallstack = function(){
var e = new Error('dummy'),
stack = _.map(_.rest(e.stack.replace(/^[^(]+?[\n$]/gm, '')
.replace(/^\s+at\s+/gm, '')
.replace(/^Object.<anonymous>\s*\(/gm, '{anonymous}()@')
.split('\n')),function(l){
return l.replace(/\s+.*$/,'');
});
return stack;
},
logCallstackSub = function(cs){
var matches, csa;
_.find(cs,function(line){
matches = line.match(/TAS_CALLSTACK_(\d+)/);
if(matches){
csa=callstackRegistry[matches[1]];
logCSA( '===================='+(csa.label ? '> '+csa.label+' <' : '')+'====================');
logCallstackSub(csa.stack);
return true;
}
logCS(line);
return false;
});
},
logCallstack = function(){
var cs;
if(config.debugMode){
cs = getCallstack();
cs.shift();
log('==============================> CALLSTACK <==============================');
logCallstackSub(cs);
log('=========================================================================');
}
},
wrapCallback = function (label, callback, context){
var callstack;
if('function' === typeof label){
context=callback;
callback=label;
label=undefined;
}
if(!config.debugMode){
return (function(cb,ctx){
return function(){
cb.apply(ctx||{},arguments);
};
}(callback,context));
}
callstack = getCallstack();
callstack.shift();
return (function(cb,ctx,cs,lbl){
var ctxref=registerCallstack(cs,lbl);
/*jshint -W054 */
return new Function('cb','ctx','TASlog',
"return function TAS_CALLSTACK_"+ctxref+"(){"+
"var start,end;"+
"TASlog('Entering: '+(cb.name||'(anonymous function)'));"+
"start=_.now();"+
"cb.apply(ctx||{},arguments);"+
"end=_.now();"+
"TASlog('Exiting: '+(cb.name||'(anonymous function)')+' :: '+(end-start)+'ms elapsed');"+
"};")(cb,ctx,log);
/*jshint +W054 */
}(callback,context,callstack,label));
},
prepareUpdate = function( attribute, value ){
queuedUpdates[attribute]=value;
},
applyQueuedUpdates = function() {
setAttrs(queuedUpdates);
queuedUpdates = {};
},
namesFromArgs = function(args,base){
return _.chain(args)
.reduce(function(memo,attr){
if('string' === typeof attr) {
memo.push(attr);
} else if(_.isArray(args) || _.isArguments(args)){
memo = namesFromArgs(attr,memo);
}
return memo;
},(_.isArray(base) && base) || [])
.uniq()
.value();
},
addId = function(obj,value){
Object.defineProperty(obj,'id',{
value: value,
writable: false,
enumerable: false
});
},
addProp = function(obj,prop,value,fullname){
(function(){
var pname=(_.contains(['S','F','I','D'],prop) ? '_'+prop : prop),
full_pname = fullname || prop,
pvalue=value;
_.each(['S','I','F'],function(p){
if( !_.has(obj,p)){
Object.defineProperty(obj, p, {
value: {},
enumerable: false,
readonly: true
});
}
});
if( !_.has(obj,'D')){
Object.defineProperty(obj, 'D', {
value: _.reduce(_.range(10),function(m,d){
Object.defineProperty(m, d, {
value: {},
enumerable: true,
readonly: true
});
return m;
},{}),
enumerable: false,
readonly: true
});
}
// Raw value
Object.defineProperty(obj, pname, {
enumerable: true,
set: function(v){
if(v!==pvalue) {
pvalue=v;
prepareUpdate(full_pname,v);
}
},
get: function(){
return pvalue;
}
});
// string value
Object.defineProperty(obj.S, pname, {
enumerable: true,
set: function(v){
var val=v.toString();
if(val !== pvalue) {
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return pvalue.toString();
}
});
// int value
Object.defineProperty(obj.I, pname, {
enumerable: true,
set: function(v){
var val=parseInt(v,10) || 0;
if(val !== pvalue){
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return parseInt(pvalue,10) || 0;
}
});
// float value
Object.defineProperty(obj.F, pname, {
enumerable: true,
set: function(v){
var val=parseFloat(v) || 0;
if(val !== pvalue) {
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return parseFloat(pvalue) || 0;
}
});
_.each(_.range(10),function(d){
Object.defineProperty(obj.D[d], pname, {
enumerable: true,
set: function(v){
var val=(parseFloat(v) || 0).toFixed(d);
if(val !== pvalue){
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return (parseFloat(pvalue) || 0).toFixed(d);
}
});
});
}());
},
repeating = function( section ) {
return (function(s){
var sectionName = s,
attrNames = [],
fieldNames = [],
operations = [],
after = [],
repAttrs = function TAS_Repeating_Attrs(){
attrNames = namesFromArgs(arguments,attrNames);
return this;
},
repFields = function TAS_Repeating_Fields(){
fieldNames = namesFromArgs(arguments,fieldNames);
return this;
},
repReduce = function TAS_Repeating_Reduce(func, initial, final, context) {
operations.push({
type: 'reduce',
func: (func && _.isFunction(func) && func) || _.noop,
memo: (_.isUndefined(initial) && 0) || initial,
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repMap = function TAS_Repeating_Map(func, final, context) {
operations.push({
type: 'map',
func: (func && _.isFunction(func) && func) || _.noop,
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repEach = function TAS_Repeating_Each(func, final, context) {
operations.push({
type: 'each',
func: (func && _.isFunction(func) && func) || _.noop,
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repTap = function TAS_Repeating_Tap(final, context) {
operations.push({
type: 'tap',
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repAfter = function TAS_Repeating_After(callback,context) {
after.push({
callback: (callback && _.isFunction(callback) && callback) || _.noop,
context: context || {}
});
return this;
},
repExecute = function TAS_Repeating_Execute(callback,context){
var rowSet = {},
attrSet = {},
fieldIds = [],
fullFieldNames = [];
repAfter(callback,context);
// call each operation per row.
// call each operation's final
getSectionIDs("repeating_"+sectionName,function(ids){
fieldIds = ids;
fullFieldNames = _.reduce(fieldIds,function(memo,id){
return memo.concat(_.map(fieldNames,function(name){
return 'repeating_'+sectionName+'_'+id+'_'+name;
}));
},[]);
getAttrs( _.uniq(attrNames.concat(fullFieldNames)), function(values){
_.each(attrNames,function(aname){
if(values.hasOwnProperty(aname)){
addProp(attrSet,aname,values[aname]);
}
});
rowSet = _.reduce(fieldIds,function(memo,id){
var r={};
addId(r,id);
_.each(fieldNames,function(name){
var fn = 'repeating_'+sectionName+'_'+id+'_'+name;
addProp(r,name,values[fn],fn);
});
memo[id]=r;
return memo;
},{});
_.each(operations,function(op){
var res;
switch(op.type){
case 'tap':
_.bind(op.final,op.context,rowSet,attrSet)();
break;
case 'each':
_.each(rowSet,function(r){
_.bind(op.func,op.context,r,attrSet,r.id,rowSet)();
});
_.bind(op.final,op.context,rowSet,attrSet)();
break;
case 'map':
res = _.map(rowSet,function(r){
return _.bind(op.func,op.context,r,attrSet,r.id,rowSet)();
});
_.bind(op.final,op.context,res,rowSet,attrSet)();
break;
case 'reduce':
res = op.memo;
_.each(rowSet,function(r){
res = _.bind(op.func,op.context,res,r,attrSet,r.id,rowSet)();
});
_.bind(op.final,op.context,res,rowSet,attrSet)();
break;
}
});
// finalize attrs
applyQueuedUpdates();
_.each(after,function(op){
_.bind(op.callback,op.context)();
});
});
});
};
return {
attrs: repAttrs,
attr: repAttrs,
column: repFields,
columns: repFields,
field: repFields,
fields: repFields,
reduce: repReduce,
inject: repReduce,
foldl: repReduce,
map: repMap,
collect: repMap,
each: repEach,
forEach: repEach,
tap: repTap,
'do': repTap,
after: repAfter,
last: repAfter,
done: repAfter,
execute: repExecute,
go: repExecute,
run: repExecute
};
}(section));
},
repeatingSimpleSum = function(section, field, destination){
repeating(section)
.attr(destination)
.field(field)
.reduce(function(m,r){
return m + (r.F[field]);
},0,function(t,r,a){
a.S[destination]=t;
})
.execute();
};
/* eslint-disable no-console */
console.log('%c•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸ The Aaron Sheet v'+version+' ¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•','background: linear-gradient(to right,green,white,white,green); color:black;text-shadow: 0 0 8px white;');
console.log('%c•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸ Last update: '+(new Date(lastUpdate*1000))+' ¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•','background: linear-gradient(to right,green,white,white,green); color:black;text-shadow: 0 0 8px white;');
/* eslint-enable no-console */
return {
/* Repeating Sections */
repeatingSimpleSum: repeatingSimpleSum,
repeating: repeating,
/* Configuration */
config: setConfigOption,
/* Debugging */
callback: wrapCallback,
callstack: logCallstack,
debugMode: debugMode,
isDebugMode: isDebugMode,
_fn: wrapCallback,
/* Logging */
debug: logDebug,
error: logError,
warn: logWarn,
info: logInfo,
notice: logNotice,
log: logLog
};
}());
/* ---- END: TheAaronSheet.js ---- */
on("change:gmroll", function () {
getAttrs(["gmroll"], function (values) {
let gmroll = values.gmroll || "";
switch (gmroll) {
case "nogm":
setAttrs({ abilityroll: "/me" });
break;
case "gm":
setAttrs({ abilityroll: "/w GM **@{character_name}**" });
break;
}
});
});
on("change:ko change:koerperkraft", function() {
getAttrs(["ko", "koerperkraft"], function(values) {
setAttrs({
leben: Math.floor(5 + 5 * (parseInt(values.ko) + parseInt(values.koerperkraft)))
});
setAttrs({
leben_max: Math.floor(5 + 5 * (parseInt(values.ko) + parseInt(values.koerperkraft)))
});
});
});
on("change:ruestungswert", function() {
getAttrs(["ruestungswert"], function(values) {
setAttrs({
ruestung: parseInt(values.ruestungswert)
});
});
});
on('change:repeating_advancements', function () {
TAS.repeating('advancements')
.attrs('XPSpent')
.fields('advancement1xp', 'advancement2xp', 'advancement3xp')
.reduce(function (memo, row, attrSet, id, rowSet) {
memo.total += row.I.advancement1xp;
memo.total += row.I.advancement2xp;
memo.total += row.I.advancement3xp;
return memo;
}, { total: 0 }, function (memo, rowSet, attrSet) {
attrSet.I.XPSpent = memo.total;
})
.execute();
});
</script>