Files
roll20-character-sheets-tester/Draci Hlidka/Draci Hlidka.html
T
2022-06-08 22:01:01 +02:00

9870 lines
713 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 id="dh_sheet" class="dh_main">
<input type="hidden" name="attr_settings" class="dh_settings">
<input type="hidden" name="attr_version" value="1.3.0">
<input type="hidden" name="attr_isBackground" value="1" class="dh_isBackground">
<input type="hidden" name="attr_isSettingVisible" value="1" class="dh_isSettingVisible">
<input type="hidden" name="attr_isAllAttributesVisible" value="0" class="dh_isAllAttributesVisible">
<input type="hidden" name="attr_xp" value="0">
<input type="hidden" name="attr_attackMacroPartialAttack" value="">
<input type="hidden" name="attr_attackMacroPartialAttackModifier" value="">
<input type="hidden" name="attr_attackMacroPartialFormula" value="">
<input type="hidden" name="attr_defenseRangeMacroPartialDefense" value="">
<input type="hidden" name="attr_defenseRangeMacroPartialFormula" value="">
<input type="hidden" name="attr_defenseMacroPartialDefense" value="">
<input type="hidden" name="attr_defenseMacroPartialFormula" value="">
<input type="hidden" name="attr_attackMacroPartialDamage" value="">
<input type="hidden" name="attr_attackMacroPartialDamageModifier" value="">
<input type="hidden" name="attr_xp_max" value="550">
<input type="hidden" name="attr_level" value="1">
<input type="hidden" name="attr_fatigue" value="0">
<input type="hidden" name="attr_fatigue_max" value="0">
<input type="hidden" name="attr_load" value="0.00">
<input type="hidden" name="attr_load_max" value="0.00">
<input type="hidden" name="attr_deathLimit" value="0">
<input type="hidden" name="attr_hp" value="0">
<input type="hidden" name="attr_hp_max" value="0">
<input type="hidden" name="attr_mana" value="0">
<input type="hidden" name="attr_mana_max" value="0">
<input type="hidden" name="attr_resources" value="0">
<input type="hidden" name="attr_resources_max" value="0">
<input type="hidden" name="attr_speed" value="0">
<input type="hidden" name="attr_raceSpeed" value="0">
<input type="hidden" name="attr_speedMod" value="0">
<input type="hidden" name="attr_loadLevel" value="nepřetížený">
<input type="hidden" name="attr_fatigueLevel" value="svěží">
<input type="hidden" name="attr_isSelfCarried" value="1">
<input type="hidden" name="attr_isBagCarried" value="1">
<input type="hidden" name="attr_isChestCarried" value="0">
<input type="hidden" name="attr_loadSelf" value="0.00">
<input type="hidden" name="attr_loadBag" value="0.00">
<input type="hidden" name="attr_loadChest" value="0.00">
<input type="hidden" name="attr_loadCoins" value="0.00">
<input type="hidden" name="attr_goldTotal" value="0">
<input type="hidden" name="attr_silverTotal" value="0">
<input type="hidden" name="attr_copperTotal" value="0">
<input type="hidden" name="attr_wealth" value="0 md">
<input type="hidden" name="attr_rollMod" value="0">
<textarea name="attr_rollModText" value="" class="dh_hidden"></textarea>
<input type="hidden" name="attr_initiativeMod" value="0">
<textarea name="attr_initiativeModText" value="" class="dh_hidden"></textarea>
<input type="hidden" name="attr_attack" value="0">
<input type="hidden" name="attr_weaponAttack" value="0">
<input type="hidden" name="attr_attackMod" value="0">
<textarea name="attr_attackModText" value="" class="dh_hidden"></textarea>
<input type="hidden" name="attr_attackRangeMod" value="0">
<textarea name="attr_attackRangeModText" value="" class="dh_hidden"></textarea>
<input type="hidden" name="attr_damage" value="+0">
<input type="hidden" name="attr_weaponDamage" value="0">
<input type="hidden" name="attr_damageMod" value="0">
<textarea name="attr_damageModText" value="" class="dh_hidden"></textarea>
<input type="hidden" name="attr_damageRangeMod" value="0">
<textarea name="attr_damageRangeModText" value="" class="dh_hidden"></textarea>
<input type="hidden" name="attr_defense" value="0">
<input type="hidden" name="attr_weaponDefense" value="0">
<input type="hidden" name="attr_shieldDefense" value="0">
<input type="hidden" name="attr_armorDefense" value="0">
<input type="hidden" name="attr_defenseMod" value="0">
<textarea name="attr_defenseModText" value="" class="dh_hidden"></textarea>
<input type="hidden" name="attr_defenseRangeMod" value="0">
<textarea name="attr_defenseRangeModText" value="0" class="dh_hidden"></textarea>
<input type="hidden" name="attr_basicDefenseMod" value="0">
<textarea name="attr_basicDefenseModText" value="" class="dh_hidden"></textarea>
<input type="hidden" name="attr_speedMod" value="0">
<input type="hidden" name="attr_loadMaxMod" value="0">
<input type="hidden" name="attr_fatigueMaxMod" value="0">
<input type="hidden" name="attr_hpMaxMod" value="0">
<input type="hidden" name="attr_manaMaxMod" value="0">
<input type="hidden" name="attr_resourcesMaxMod" value="0">
<input type="hidden" name="attr_strengthMod" value="0">
<input type="hidden" name="attr_strengthBonusMod" value="0">
<input type="hidden" name="attr_dexterityMod" value="0">
<input type="hidden" name="attr_dexterityBonusMod" value="0">
<input type="hidden" name="attr_constitutionMod" value="0">
<input type="hidden" name="attr_constitutionBonusMod" value="0">
<input type="hidden" name="attr_intelligenceMod" value="0">
<input type="hidden" name="attr_intelligenceBonusMod" value="0">
<input type="hidden" name="attr_charismaMod" value="0">
<input type="hidden" name="attr_charismaBonusMod" value="0">
<textarea name="attr_strengthModText" value="" class="dh_hidden"></textarea>
<textarea name="attr_strengthBonusModText" value="" class="dh_hidden"></textarea>
<textarea name="attr_dexterityModText" value="" class="dh_hidden"></textarea>
<textarea name="attr_dexterityBonusModText" value="" class="dh_hidden"></textarea>
<textarea name="attr_constitutionModText" value="" class="dh_hidden"></textarea>
<textarea name="attr_constitutionBonusModText" value="" class="dh_hidden"></textarea>
<textarea name="attr_intelligenceModText" value="" class="dh_hidden"></textarea>
<textarea name="attr_intelligenceBonusModText" value="" class="dh_hidden"></textarea>
<textarea name="attr_charismaModText" value="" class="dh_hidden"></textarea>
<textarea name="attr_charismaBonusModText" value="" class="dh_hidden"></textarea>
<input type="hidden" name="attr_advantage" value="0">
<input type="hidden" name="attr_advantageText" value="">
<input type="hidden" name="attr_npcHeaderImage" value="default">
<input type="hidden" name="attr_npcSize" value="B">
<input type="hidden" name="attr_npcType" value="">
<input type="hidden" name="attr_npcHp" value="0">
<input type="hidden" name="attr_npcHp_max" value="0">
<input type="hidden" name="attr_npcMana" value="0">
<input type="hidden" name="attr_npcMana_max" value="0">
<input type="hidden" name="attr_npcResources" value="0">
<input type="hidden" name="attr_npcResources_max" value="0">
<input type="hidden" name="attr_npcSelectedManaType" value="mana">
<input type="hidden" name="attr_npcSpeed" value="0">
<input type="hidden" name="attr_npcAdvantage" value="0">
<input type="hidden" name="attr_npcAdvantageText" value="">
<input type="hidden" name="attr_npcStrength" value="0">
<input type="hidden" name="attr_npcStrengthBonus" value="0">
<input type="hidden" name="attr_npcDexterity" value="0">
<input type="hidden" name="attr_npcDexterityBonus" value="0">
<input type="hidden" name="attr_npcConstitution" value="0">
<input type="hidden" name="attr_npcConstitutionBonus" value="0">
<input type="hidden" name="attr_npcIntelligence" value="0">
<input type="hidden" name="attr_npcIntelligenceBonus" value="0">
<input type="hidden" name="attr_npcCharisma" value="0">
<input type="hidden" name="attr_npcCharismaBonus" value="0">
<input type="hidden" name="attr_npcLevel" value="0">
<input type="hidden" name="attr_npcHigherPower" value="0">
<input type="hidden" name="attr_npcXp" value="0">
<input type="hidden" name="attr_npcNotes" value="">
<input type="hidden" name="attr_npcInitiative" value="0">
<input type="hidden" name="attr_npcBasicDefense" value="0">
<input type="hidden" name="attr_npcResistance" value="">
<input type="hidden" name="attr_npcImmunity" value="">
<input type="hidden" name="attr_npcWeakness" value="">
<input type="hidden" name="attr_npcAppearance" value="">
<input type="hidden" name="attr_npcRollMod" value="0">
<input type="hidden" name="attr_npcRollModText" value="">
<input type="hidden" name="attr_npcInitiativeMod" value="0">
<input type="hidden" name="attr_npcInitiativeModText" value="">
<input type="hidden" name="attr_npcAttackMod" value="0">
<input type="hidden" name="attr_npcAttackModText" value="">
<input type="hidden" name="attr_npcDamageMod" value="0">
<input type="hidden" name="attr_npcDamageModText" value="">
<input type="hidden" name="attr_npcDefenseMod" value="0">
<input type="hidden" name="attr_npcDefenseModText" value="">
<input type="hidden" name="attr_npcBasicDefenseMod" value="0">
<input type="hidden" name="attr_npcBasicDefenseModText" value="">
<input type="hidden" name="attr_npcStrengthMod" value="0">
<input type="hidden" name="attr_npcStrengthModText" value="">
<input type="hidden" name="attr_npcStrengthBonusMod" value="0">
<input type="hidden" name="attr_npcStrengthBonusModText" value="">
<input type="hidden" name="attr_npcDexterityMod" value="0">
<input type="hidden" name="attr_npcDexterityModText" value="">
<input type="hidden" name="attr_npcDexterityBonusMod" value="0">
<input type="hidden" name="attr_npcDexterityBonusModText" value="">
<input type="hidden" name="attr_npcConstitutionMod" value="0">
<input type="hidden" name="attr_npcConstitutionModText" value="">
<input type="hidden" name="attr_npcConstitutionBonusMod" value="0">
<input type="hidden" name="attr_npcConstitutionBonusModText" value="">
<input type="hidden" name="attr_npcIntelligenceMod" value="0">
<input type="hidden" name="attr_npcIntelligenceModText" value="">
<input type="hidden" name="attr_npcIntelligenceBonusMod" value="0">
<input type="hidden" name="attr_npcIntelligenceBonusModText" value="">
<input type="hidden" name="attr_npcCharismaMod" value="0">
<input type="hidden" name="attr_npcCharismaModText" value="">
<input type="hidden" name="attr_npcCharismaBonusMod" value="0">
<input type="hidden" name="attr_npcCharismaBonusModText" value="">
<div class="dh_background">
<div class="dh_sheet_type_modal"><span class="dh_p_bold dh_sheet_type_label">Jaký typ deníku chceš použít?</span>
<div
class="dh_row">
<div class="dh_col">
<div class="dh_align_center">
<button type="action" name="act_changeToPc">Vytvořit postavu</button>
</div>
</div>
<div class="dh_col">
<div class="dh_align_center">
<button type="action" name="act_changeToNpc">Vytvořit nestvůru</button>
</div>
</div>
</div>
</div>
<div class="dh_pc">
<div class="dh_grid dh_pc_main_container">
<div class="dh_grid dh_pc_header_container">
<div class="dh_header_image dh_section">
<input type="hidden" name="attr_headerImage" class="dh_headerImage" value="default">
<div class="dh_header_image_display">
<div class="dh_header_image_show"></div>
</div>
<div class="dh_header_image_modify">
<div class="dh_label"><span title="headerImage">Avatar</span>
</div>
<div class="dh_row dh_align_content_center">
<div class="dh_col">
<select name="attr_headerImage">
<option value="default" selected="selected">defaultní</option>
<option value="valecnik">Válečník</option>
<option value="hranicar">Hraničář</option>
<option value="alchymista">Alchymista</option>
<option value="kouzelnik">Kouzelník</option>
<option value="zlodej">Zloděj</option>
<option value="klerik">Klerik</option>
</select>
</div>
</div>
</div>
<button type="action" name="act_editHeaderImage" class="dh_pencil"></button>
</div>
<div class="dh_header_character_name dh_section">
<div class="dh_character_name_display dh_text_left dh_value_large"><span title="character_name" name="attr_character_name" class="dh_character_name_text"> </span><span
title="character_name" class="dh_character_name_placeholder dh_text_left">Jméno postavy</span>
</div>
<div class="dh_character_name_modify dh_value_large dh_align_content_center dh_justify_content_center">
<input type="text" size="1" title="character_name" placeholder="Jméno postavy"
name="attr_character_name" class="dh_input dh_text_left">
</div>
<button type="action" name="act_editCharacterName" class="dh_pencil"></button>
</div>
<div class="dh_header_level dh_section">
<div class="dh_level_display">
<div class="dh_label"><span title="level">Úroveň</span>
</div>
<div class="dh_col dh_value"><span name="attr_level">1</span>
</div>
</div>
<div class="dh_level_modify">
<div class="dh_label"><span title="level">Úroveň</span>
</div>
<div class="dh_row dh_align_content_center">
<input type="number" name="attr_level" placeholder="1" min="1" step="1"
max="24" class="dh_input">
</div>
</div>
<button type="action" name="act_editLevel" class="dh_pencil"></button>
</div>
<div class="dh_header_experience dh_section">
<div class="dh_xp_display">
<div class="dh_label"><span title="xp/xp_max">Zkušenosti</span>
</div>
<div class="dh_col dh_value"><span title="xp" name="attr_xp">0</span><span class="dh_divider">/</span><span
title="xp_max" name="attr_xp_max">550</span>
</div>
</div>
<div class="dh_xp_modify">
<div class="dh_label"><span title="xp/xp_max">Zkušenosti</span>
</div>
<div class="dh_row dh_align_content_center">
<div class="dh_col">
<input type="number" name="attr_xp" placeholder="0" min="0" max="485000"
step="1" value="0" class="dh_input">
</div>
</div>
</div>
<button type="action" name="act_editXp" class="dh_pencil"></button>
</div>
<div class="dh_grid dh_header_race_profession_container dh_section">
<div class="dh_header_race dh_section">
<div class="dh_race_display dh_value_medium dh_align_content_center dh_justify_content_center"><span title="race" name="attr_race" class="dh_race_text"></span><span
title="race" class="dh_race_placeholder dh_text_left">Rasa</span>
</div>
<div class="dh_race_modify">
<div class="dh_col">
<input type="hidden" name="attr_selectedRace" class="dh_selected_race">
<div class="dh_label"><span title="race">Rasa</span>
</div>
<div class="dh_row dh_align_content_center">
<div class="dh_col">
<select name="attr_selectedRace" class="dh_input">
<option value="nevybrano" selected="selected">Nevybráno</option>
<option value="Člověk">Člověk</option>
<option value="Trpaslík">Trpaslík</option>
<option value="Elf">Elf</option>
<option value="Barbar">Barbar</option>
<option value="Obr">Obr</option>
<option value="Gnóm">Gnóm</option>
<option value="Půlčík">Půlčík</option>
<option value="vlastni">Vlastní</option>
</select>
</div>
</div>
<div class="dh_row dh_race_attributes_name">
<div class="dh_col">
<input type="text" size="1" title="race" placeholder="Název rasy" name="attr_race"
class="dh_race dh_text_left dh_input">
</div>
</div>
<div class="dh_row dh_nowrap dh_race_attributes_header">
<div class="dh_col dh_label"><span title="strengthRace">SIL</span>
</div>
<div class="dh_col dh_label"><span title="dexterityRace">OBR</span>
</div>
<div class="dh_col dh_label"><span title="constitutionRace">ODO</span>
</div>
<div class="dh_col dh_label"><span title="intelligenceRace">INT</span>
</div>
<div class="dh_col dh_label"><span title="charismaRace">CHA</span>
</div>
</div>
<div class="dh_row dh_nowrap dh_race_attributes">
<div class="dh_col dh_value_small"><span name="attr_strengthRace" class="dh_text_center"> 0 </span>
</div>
<div class="dh_col dh_value_small"><span name="attr_dexterityRace" class="dh_text_center"> 0 </span>
</div>
<div class="dh_col dh_value_small"><span name="attr_constitutionRace" class="dh_text_center"> 0 </span>
</div>
<div class="dh_col dh_value_small"><span name="attr_intelligenceRace" class="dh_text_center"> 0 </span>
</div>
<div class="dh_col dh_value_small"><span name="attr_charismaRace" class="dh_text_center"> 0 </span>
</div>
</div>
<div class="dh_row dh_nowrap dh_race_attributes_editing">
<div class="dh_col">
<input type="number" name="attr_strengthRace" placeholder="0" min="0"
step="1" value="0" class="dh_grow_input">
</div>
<div class="dh_col">
<input type="number" name="attr_dexterityRace" placeholder="0" min="0"
step="1" value="0" class="dh_grow_input">
</div>
<div class="dh_col">
<input type="number" name="attr_constitutionRace" placeholder="0" min="0"
step="1" value="0" class="dh_grow_input">
</div>
<div class="dh_col">
<input type="number" name="attr_intelligenceRace" placeholder="0" min="0"
step="1" value="0" class="dh_grow_input">
</div>
<div class="dh_col">
<input type="number" name="attr_charismaRace" placeholder="0" min="0"
step="1" value="0" class="dh_grow_input">
</div>
</div>
</div>
</div>
<button type="action" name="act_editRace" class="dh_pencil"></button>
</div>
<div class="dh_header_profession dh_section">
<div class="dh_profession_display dh_value_medium dh_align_content_center dh_justify_content_center"><span title="profession" name="attr_profession" class="dh_profession_text"> </span><span
title="profession" class="dh_profession_placeholder dh_text_left">Povolání</span>
</div>
<div class="dh_profession_modify">
<div class="dh_col">
<input type="hidden" name="attr_selectedProfession" class="dh_selected_profession">
<div class="dh_label"><span title="profession">Povolání</span>
</div>
<div class="dh_row dh_align_content_center">
<div class="dh_col">
<select name="attr_selectedProfession" class="dh_input">
<option value="nevybrano" selected="selected">Nevybráno</option>
<option value="Warrior">Válečník</option>
<option value="Ranger">Hraničář</option>
<option value="Alchemist">Alchymista</option>
<option value="Mage">Kouzelník</option>
<option value="Thief">Zloděj</option>
<option value="Priest">Klerik</option>
<option value="vlastni">Vlastní</option>
</select>
</div>
</div>
<div class="dh_row dh_profession_attributes_name">
<div class="dh_col">
<input type="text" size="1" title="profession" placeholder="Název Povolání"
name="attr_profession" class="dh_profession dh_text_left dh_input">
</div>
</div>
<div class="dh_row dh_nowrap dh_profession_attributes_header">
<div class="dh_col dh_label"><span title="strengthDominant">SIL</span>
</div>
<div class="dh_col dh_label"><span title="dexterityDominant">OBR</span>
</div>
<div class="dh_col dh_label"><span title="constitutionDominant">ODO</span>
</div>
<div class="dh_col dh_label"><span title="intelligenceDominant">INT</span>
</div>
<div class="dh_col dh_label"><span title="charismaDominant">CHA</span>
</div>
</div>
<div class="dh_row dh_nowrap dh_justify_content_space_around dh_profession_attributes">
<label title="strengthDominant" class="dh_checkbox dh_disabled">
<input type="checkbox" name="attr_strengthDominant" readonly="readonly"
value="1"><span class="dh_checkmark"></span>
</label>
<label title="dexterityDominant" class="dh_checkbox dh_disabled">
<input type="checkbox" name="attr_dexterityDominant" readonly="readonly"
value="1"><span class="dh_checkmark"></span>
</label>
<label title="constitutionDominant" class="dh_checkbox dh_disabled">
<input type="checkbox" name="attr_constitutionDominant" readonly="readonly"
value="1"><span class="dh_checkmark"></span>
</label>
<label title="intelligenceDominant" class="dh_checkbox dh_disabled">
<input type="checkbox" name="attr_intelligenceDominant" readonly="readonly"
value="1"><span class="dh_checkmark"></span>
</label>
<label title="charismaDominant" class="dh_checkbox dh_disabled">
<input type="checkbox" name="attr_charismaDominant" readonly="readonly"
value="1"><span class="dh_checkmark"></span>
</label>
</div>
<div class="dh_row dh_nowrap dh_justify_content_space_around dh_profession_attributes_editing">
<label title="strengthDominant" class="dh_checkbox">
<input type="checkbox" name="attr_strengthDominant" value="1"><span class="dh_checkmark"></span>
</label>
<label title="dexterityDominant" class="dh_checkbox">
<input type="checkbox" name="attr_dexterityDominant" value="1"><span class="dh_checkmark"></span>
</label>
<label title="constitutionDominant" class="dh_checkbox">
<input type="checkbox" name="attr_constitutionDominant" value="1"><span class="dh_checkmark"></span>
</label>
<label title="intelligenceDominant" class="dh_checkbox">
<input type="checkbox" name="attr_intelligenceDominant" value="1"><span class="dh_checkmark"></span>
</label>
<label title="charismaDominant" class="dh_checkbox">
<input type="checkbox" name="attr_charismaDominant" value="1"><span class="dh_checkmark"></span>
</label>
</div>
</div>
</div>
<button type="action" name="act_editProfession" class="dh_pencil"></button>
</div>
</div>
<div class="dh_header_size dh_section">
<div class="dh_size_display">
<div class="dh_label"><span title="size">Velikost</span>
</div>
<div class="dh_col dh_value"><span name="attr_size"></span>
</div>
</div>
<div class="dh_size_modify">
<div class="dh_label"><span title="size">Velikost</span>
</div>
<div class="dh_row dh_align_content_center">
<div class="dh_col">
<select name="attr_size" value="B" class="dh_input">
<option value="A0">A0</option>
<option value="A1">A1</option>
<option value="A">A</option>
<option value="B" selected="selected">B</option>
<option value="C">C</option>
<option value="D">D</option>
<option value="E">E</option>
<option value="F">F</option>
</select>
</div>
</div>
</div>
<button type="action" name="act_editSize" class="dh_pencil"></button>
</div>
<div class="dh_header_load dh_section">
<div class="dh_load_display">
<div class="dh_label"><span title="load/load_max">Naložení [lb]</span>
</div>
<div class="dh_col dh_value"><span name="attr_load">0</span><span class="dh_divider">/</span><span
name="attr_load_max">0</span>
</div>
</div>
</div>
<div class="dh_header_fatigue dh_section">
<div class="dh_fatigue_display">
<div class="dh_label"><span title="fatigue/fatigue_max">Únava</span>
</div>
<div class="dh_col dh_value"><span name="attr_fatigue">0</span><span class="dh_divider">/</span><span
name="attr_fatigue_max">0</span>
</div>
</div>
<div class="dh_fatigue_modify">
<div class="dh_label"><span title="fatigue/fatigue_max">Únava</span>
</div>
<div class="dh_row dh_align_content_center">
<div class="dh_col">
<input type="number" name="attr_fatigue" placeholder="0" min="0" step="1"
value="0" class="dh_input">
</div>
</div>
</div>
<button type="action" name="act_editFatigue" class="dh_pencil"></button>
</div>
<div class="dh_header_hp dh_section">
<div class="dh_hp_display">
<div class="dh_label"><span title="hp/hp_max">Životy</span>
</div>
<div class="dh_col dh_value"><span name="attr_hp">0</span><span class="dh_divider">/</span><span name="attr_hp_max">0</span>
</div>
</div>
<div class="dh_hp_modify">
<div class="dh_label"><span title="hp/hp_max">Životy</span>
</div>
<div class="dh_row dh_align_content_center dh_pb">
<div class="dh_col_3 dh_label"><span>Akt.</span>
</div>
<div class="dh_col">
<input type="number" name="attr_hp" placeholder="0" value="0" step="1"
class="dh_input">
</div>
</div>
<div class="dh_row dh_align_content_center">
<div class="dh_col_3 dh_label"><span>Max.</span>
</div>
<div class="dh_col">
<input type="number" name="attr_hpMaxInput" placeholder="0" min="0" step="1"
value="0" class="dh_input">
</div>
</div>
<div class="dh_row dh_label"><span>Bonus za mod: </span><span name="attr_hpMaxMod">0</span>
</div>
</div>
<button type="action" name="act_editHp" class="dh_pencil"></button>
</div>
<div class="dh_header_deathLimit dh_section">
<div class="dh_deathLimit_display">
<div class="dh_label"><span title="deathLimit">Hr. Smrti</span>
</div>
<div class="dh_col dh_value"><span name="attr_deathLimit">0</span>
</div>
</div>
</div>
<div class="dh_header_mana dh_section">
<input type="hidden" name="attr_selectedProfession" class="dh_selected_profession">
<div class="dh_mana_display">
<div class="dh_label dh_adrenalin"><span title="mana/mana_max">Adrenalin</span>
</div>
<div class="dh_label dh_mentalStrength"><span title="mana/mana_max">Duševní síla</span>
</div>
<div class="dh_label dh_goodwill"><span title="mana/mana_max">Přízeň</span>
</div>
<div class="dh_label dh_mana"><span title="mana/mana_max">Mana</span>
</div>
<div class="dh_col dh_value"><span name="attr_mana">0</span><span class="dh_divider">/</span><span
name="attr_mana_max">0</span>
</div>
</div>
<div class="dh_mana_modify">
<div class="dh_label dh_adrenalin"><span title="mana/mana_max">Adrenalin</span>
</div>
<div class="dh_label dh_mentalStrength"><span title="mana/mana_max">Duševní síla</span>
</div>
<div class="dh_label dh_goodwill"><span title="mana/mana_max">Přízeň</span>
</div>
<div class="dh_label dh_mana"><span title="mana/mana_max">Mana</span>
</div>
<div class="dh_row dh_align_content_center dh_pb">
<div class="dh_col_3 dh_label"><span>Akt.</span>
</div>
<div class="dh_col">
<input type="number" name="attr_mana" placeholder="0" min="0" step="1"
value="0" class="dh_input">
</div>
</div>
<div class="dh_row dh_align_content_center">
<div class="dh_col_3 dh_label"><span>Max.</span>
</div>
<div class="dh_col">
<input type="number" name="attr_manaMaxInput" placeholder="0" min="0"
step="1" value="0" class="dh_input">
</div>
</div>
<div class="dh_row dh_label"><span>Bonus za mod: </span><span name="attr_manaMaxMod">0</span>
</div>
</div>
<button type="action" name="act_editMana" class="dh_pencil"></button>
</div>
<div class="dh_header_resources dh_section">
<div class="dh_resources_display">
<div class="dh_label"><span title="resources/resources_max">Suroviny</span>
</div>
<div class="dh_col dh_value"><span name="attr_resources">0</span><span class="dh_divider">/</span><span
name="attr_resources_max">0</span>
</div>
</div>
<div class="dh_resources_modify">
<div class="dh_label"><span title="resources/resources_max">Suroviny</span>
</div>
<div class="dh_row dh_align_content_center dh_pb">
<div class="dh_col_3 dh_label"><span>Akt.</span>
</div>
<div class="dh_col">
<input type="number" name="attr_resources" placeholder="0" min="0" step="1"
value="0" class="dh_input">
</div>
</div>
<div class="dh_row dh_align_content_center">
<div class="dh_col_3 dh_label"><span>Max.</span>
</div>
<div class="dh_col">
<input type="number" name="attr_resourcesMaxInput" placeholder="0" min="0"
step="1" value="0" class="dh_input">
</div>
</div>
<div class="dh_row dh_label"><span>Bonus za mod: </span><span name="attr_resourcesMaxMod"></span>
</div>
</div>
<button type="action" name="act_editResources" class="dh_pencil"></button>
</div>
<div class="dh_header_speed dh_section">
<div class="dh_speed_display">
<div class="dh_label"><span title="speed">Pohyblivost</span>
</div>
<div class="dh_col dh_value"><span name="attr_speed">0</span>
</div>
</div>
<div class="dh_speed_modify">
<div class="dh_label"><span title="speed">Pohyblivost</span>
</div>
<div class="dh_row dh_align_content_center">
<div class="dh_col_3 dh_label"><span>Rasa</span>
</div>
<div class="dh_col">
<input type="number" name="attr_raceSpeed" placeholder="0" min="0" step="1"
value="0" class="dh_input">
</div>
</div>
<div class="dh_row dh_label"><span>Bonus za mod: </span><span name="attr_speedMod">0</span>
</div>
</div>
<button type="action" name="act_editSpeed" class="dh_pencil"></button>
</div>
<div class="dh_header_loadLevel dh_section">
<div class="dh_col_12">
<div class="dh_label"><span title="loadLevel">Stupeň naložení</span>
</div>
<div class="dh_col dh_align_self_center dh_value dh_text_truncate"><span name="attr_loadLevel"></span>
</div>
</div>
</div>
<div class="dh_header_fatigueLevel dh_section">
<div class="dh_col_12">
<div class="dh_label"><span title="fatigueLevel">Stupeň únavy</span>
</div>
<div class="dh_col dh_align_self_center dh_value"><span name="attr_fatigueLevel"></span>
</div>
</div>
</div>
</div>
<div class="dh_grid dh_pc_tabs_container">
<div class="dh_section dh_tabs">
<div class="dh_row dh_justify_content_center dh_align_content_end">
<div class="dh_col dh_text_left">
<button type="action" name="act_changeToCharacterTab" class="dh_tab dh_character_tab">Postava</button>
<button type="action" name="act_changeToInventoryTab"
class="dh_tab dh_inventory_tab">Inventář</button>
<button type="action" name="act_changeToNotesTab" class="dh_tab dh_notes_tab">Poznámky</button>
<button type="action" name="act_changeToSettingsTab"
class="dh_tab dh_settings_tab">Nastavení</button>
</div>
<div class="dh_col_auto">
<div class="dh_row dh_section dh_pa dh_nowrap dh_align_center">
<div class="dh_row">
<div class="dh_col_auto dh_shrink">
<div class="dh_label"><span title="whisper">Hod</span>
</div>
</div>
<div class="dh_col_auto dh_grow">
<div class="dh_row dh_justify_content_end">
<label class="dh_border_none dh_box_shadow_none dh_radio dh_button dh_transparent">
<input type="radio" name="attr_whisper" value="" checked="checked"><span class="dh_checkmark"></span><span class="dh_small_font dh_radio_text">věrejný</span>
</label>
<label class="dh_border_none dh_box_shadow_none dh_radio dh_button dh_transparent">
<input type="radio" name="attr_whisper" value="/w GM "><span class="dh_checkmark"></span><span class="dh_small_font dh_radio_text">PJ</span>
</label>
</div>
</div>
</div>
<div class="dh_row dh_border_left">
<div class="dh_col_auto dh_shrink">
<div class="dh_label"><span title="advantage">Výhoda</span>
</div>
</div>
<div class="dh_col_auto dh_grow">
<div class="dh_row dh_justify_content_end">
<label class="dh_border_none dh_box_shadow_none dh_radio dh_button dh_transparent">
<input type="radio" name="attr_advantage" value="0" checked="checked"><span class="dh_checkmark"></span><span class="dh_small_font dh_radio_text">žádná</span>
</label>
<label class="dh_border_none dh_box_shadow_none dh_radio dh_button dh_transparent">
<input type="radio" name="attr_advantage" value="5"><span class="dh_checkmark"></span><span class="dh_small_font dh_radio_text">+5</span>
</label>
<label class="dh_border_none dh_box_shadow_none dh_radio dh_button dh_transparent">
<input type="radio" name="attr_advantage" value="-5"><span class="dh_checkmark"></span><span class="dh_small_font dh_radio_text">-5</span>
</label>
</div>
</div>
</div>
<div class="dh_row dh_border_left">
<div class="dh_col_auto dh_shrink">
<div class="dh_label"><span title="advantage">Kostky</span>
</div>
</div>
</div>
<div class="dh_col_auto dh_grow">
<div class="dh_row dh_justify_content_end">
<button type="roll" name="roll_k6" value="@{whisper}&amp;{template:custom}{{subtitle=@{character_name}}}{{roll=Hod k6 [[1d6]]}}"
class="dh_button"><span>k6</span>
<div class="dh_icon dh_icon_d6"></div>
<button type="roll" name="roll_k10" value="@{whisper}&amp;{template:custom}{{subtitle=@{character_name}}}{{roll=Hod k10 [[1d10]]}}"
class="dh_button"><span>k10</span>
<div class="dh_icon dh_icon_d10"></div>
</button>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="dh_grid dh_pc_content_container">
<div class="dh_character_tab_content dh_grid">
<div class="dh_section dh_left_panel">
<div class="dh_col_12">
<div class="dh_attributes_container">
<div class="dh_section dh_mb">
<input type="hidden" name="attr_strength" value="0">
<input type="hidden" name="attr_strengthValue" value="0">
<input type="hidden" name="attr_strengthRace" value="0">
<input type="hidden" name="attr_strengthMod" value="0">
<input type="hidden" name="attr_strengthBonus" value="0">
<input type="hidden" name="attr_strengthBonusMod" value="0">
<div class="dh_strength_display">
<button type="roll" name="roll_strength" value="@{whisper}&amp;{template:custom}{{title=Síla (SIL)}}{{subtitle=@{character_name}}}{{attributeRoll=Hod na sílu: [[1d10+(@{strengthBonus})+([[(@{rollMod})+(@{advantage})]])]]}} {{formula=(1k10 + SIL + Modifikátory)}} {{modifier=@{advantageText}@{rollModText}@{strengthModText}@{strengthBonusModText}}}"
class="dh_button dh_bottom_right">
<div class="dh_icon dh_icon_d10"></div>
</button>
<div class="dh_label"><span title="strength/strengthBonus">Síla</span>
</div>
<div class="dh_col dh_align_self_center dh_value_medium"><span title="strengthBonus" name="attr_strengthBonus">0</span>
</div>
<div class="dh_col dh_align_self_center"><span title="strength" name="attr_strength" class="dh_value_small">0</span>
</div>
</div>
<div class="dh_strength_modify">
<div class="dh_label"><span title="strength/strengthBonus">Síla</span>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col"><span title="strength" name="attr_strength" class="dh_value_small">0</span>(<span
title="strengthBonus" name="attr_strengthBonus" class="dh_value_small dh_pa_0">0</span>)</div>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col dh_label dh_text_left"><span title="strengthRace">Rasa</span>
</div>
<div class="dh_col">
<input type="number" name="attr_strengthRace" placeholder="0" min="0"
step="1" title="strengthRace" readonly="readonly" class="dh_input dh_disabled">
</div>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col dh_label dh_text_left"><span title="strengthDominant">Povolání</span>
</div>
<div class="dh_col dh_shrink">
<label title="strengthDominant" class="dh_checkbox dh_disabled">
<input type="checkbox" name="attr_strengthDominant" readonly="readonly"
value="1"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col dh_label dh_text_left"><span title="strengthValue">Body</span>
</div>
<div class="dh_col">
<input type="number" name="attr_strengthValue" placeholder="0" min="0"
step="1" title="strengthValue" class="dh_input">
</div>
</div>
</div>
<button type="action" name="act_editStrength" class="dh_pencil"></button>
</div>
<div class="dh_section dh_mb">
<input type="hidden" name="attr_dexterity" value="0">
<input type="hidden" name="attr_dexterityValue" value="0">
<input type="hidden" name="attr_dexterityRace" value="0">
<input type="hidden" name="attr_dexterityMod" value="0">
<input type="hidden" name="attr_dexterityBonus" value="0">
<input type="hidden" name="attr_dexterityBonusMod" value="0">
<div class="dh_dexterity_display">
<button type="roll" name="roll_dexterity" value="@{whisper}&amp;{template:custom}{{title=Obratnost (OBR)}}{{subtitle=@{character_name}}}{{attributeRoll=Hod na obratnost: [[1d10+(@{dexterityBonus})+([[(@{rollMod})+(@{advantage})]])]]}} {{formula=(1k10 + OBR + Modifikátory)}} {{modifier=@{advantageText}@{rollModText}@{dexterityModText}@{dexterityBonusModText}}}"
class="dh_button dh_bottom_right">
<div class="dh_icon dh_icon_d10"></div>
</button>
<div class="dh_label"><span title="dexterity/dexterityBonus">Obratnost</span>
</div>
<div class="dh_col dh_align_self_center dh_value_medium"><span title="dexterityBonus" name="attr_dexterityBonus">0</span>
</div>
<div class="dh_col dh_align_self_center"><span title="dexterity" name="attr_dexterity" class="dh_value_small">0</span>
</div>
</div>
<div class="dh_dexterity_modify">
<div class="dh_label"><span title="dexterity/dexterityBonus">Obratnost</span>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col"><span title="dexterity" name="attr_dexterity" class="dh_value_small">0</span>(<span
title="dexterityBonus" name="attr_dexterityBonus" class="dh_value_small dh_pa_0">0</span>)</div>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col dh_label dh_text_left"><span title="dexterityRace">Rasa</span>
</div>
<div class="dh_col">
<input type="number" name="attr_dexterityRace" placeholder="0" min="0"
step="1" title="dexterityRace" readonly="readonly" class="dh_input dh_disabled">
</div>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col dh_label dh_text_left"><span title="dexterityDominant">Povolání</span>
</div>
<div class="dh_col dh_shrink">
<label title="dexterityDominant" class="dh_checkbox dh_disabled">
<input type="checkbox" name="attr_dexterityDominant" readonly="readonly"
value="1"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col dh_label dh_text_left"><span title="dexterityValue">Body</span>
</div>
<div class="dh_col">
<input type="number" name="attr_dexterityValue" placeholder="0" min="0"
step="1" title="dexterityValue" class="dh_input">
</div>
</div>
</div>
<button type="action" name="act_editDexterity" class="dh_pencil"></button>
</div>
<div class="dh_section dh_mb">
<input type="hidden" name="attr_constitution" value="0">
<input type="hidden" name="attr_constitutionValue" value="0">
<input type="hidden" name="attr_constitutionRace" value="0">
<input type="hidden" name="attr_constitutionMod" value="0">
<input type="hidden" name="attr_constitutionBonus" value="0">
<input type="hidden" name="attr_constitutionBonusMod" value="0">
<div class="dh_constitution_display">
<button type="roll" name="roll_constitution" value="@{whisper}&amp;{template:custom}{{title=Odolnost (ODO)}}{{subtitle=@{character_name}}}{{attributeRoll=Hod na odolnost: [[1d10+(@{constitutionBonus})+([[(@{rollMod})+(@{advantage})]])]]}} {{formula=(1k10 + ODO + Modifikátory)}} {{modifier=@{advantageText}@{rollModText}@{constitutionModText}@{constitutionBonusModText}}}"
class="dh_button dh_bottom_right">
<div class="dh_icon dh_icon_d10"></div>
</button>
<div class="dh_label"><span title="constitution/constitutionBonus">Odolnost</span>
</div>
<div class="dh_col dh_align_self_center dh_value_medium"><span title="constitutionBonus" name="attr_constitutionBonus">0</span>
</div>
<div class="dh_col dh_align_self_center"><span title="constitution" name="attr_constitution" class="dh_value_small">0</span>
</div>
</div>
<div class="dh_constitution_modify">
<div class="dh_label"><span title="constitution/constitutionBonus">Odolnost</span>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col"><span title="constitution" name="attr_constitution" class="dh_value_small">0</span>(<span
title="constitutionBonus" name="attr_constitutionBonus" class="dh_value_small dh_pa_0">0</span>)</div>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col dh_label dh_text_left"><span title="constitutionRace">Rasa</span>
</div>
<div class="dh_col">
<input type="number" name="attr_constitutionRace" placeholder="0" min="0"
step="1" title="constitutionRace" readonly="readonly" class="dh_input dh_disabled">
</div>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col dh_label dh_text_left"><span title="constitutionDominant">Povolání</span>
</div>
<div class="dh_col dh_shrink">
<label title="constitutionDominant" class="dh_checkbox dh_disabled">
<input type="checkbox" name="attr_constitutionDominant" readonly="readonly"
value="1"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col dh_label dh_text_left"><span title="constitutionValue">Body</span>
</div>
<div class="dh_col">
<input type="number" name="attr_constitutionValue" placeholder="0" min="0"
step="1" title="constitutionValue" class="dh_input">
</div>
</div>
</div>
<button type="action" name="act_editConstitution" class="dh_pencil"></button>
</div>
<div class="dh_section dh_mb">
<input type="hidden" name="attr_intelligence" value="0">
<input type="hidden" name="attr_intelligenceValue" value="0">
<input type="hidden" name="attr_intelligenceRace" value="0">
<input type="hidden" name="attr_intelligenceMod" value="0">
<input type="hidden" name="attr_intelligenceBonus" value="0">
<input type="hidden" name="attr_intelligenceBonusMod" value="0">
<div class="dh_intelligence_display">
<button type="roll" name="roll_intelligence" value="@{whisper}&amp;{template:custom}{{title=Inteligence (INT)}}{{subtitle=@{character_name}}}{{attributeRoll=Hod na inteligenci: [[1d10+(@{intelligenceBonus})+([[(@{rollMod})+(@{advantage})]])]]}} {{formula=(1k10 + INT + Modifikátory)}} {{modifier=@{advantageText}@{rollModText}@{intelligenceModText}@{intelligenceBonusModText}}}"
class="dh_button dh_bottom_right">
<div class="dh_icon dh_icon_d10"></div>
</button>
<div class="dh_label"><span title="intelligence/intelligenceBonus">Inteligence</span>
</div>
<div class="dh_col dh_align_self_center dh_value_medium"><span title="intelligenceBonus" name="attr_intelligenceBonus">0</span>
</div>
<div class="dh_col dh_align_self_center"><span title="intelligence" name="attr_intelligence" class="dh_value_small">0</span>
</div>
</div>
<div class="dh_intelligence_modify">
<div class="dh_label"><span title="intelligence/intelligenceBonus">Inteligence</span>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col"><span title="intelligence" name="attr_intelligence" class="dh_value_small">0</span>(<span
title="intelligenceBonus" name="attr_intelligenceBonus" class="dh_value_small dh_pa_0">0</span>)</div>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col dh_label dh_text_left"><span title="intelligenceRace">Rasa</span>
</div>
<div class="dh_col">
<input type="number" name="attr_intelligenceRace" placeholder="0" min="0"
step="1" title="intelligenceRace" readonly="readonly" class="dh_input dh_disabled">
</div>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col dh_label dh_text_left"><span title="intelligenceDominant">Povolání</span>
</div>
<div class="dh_col dh_shrink">
<label title="intelligenceDominant" class="dh_checkbox dh_disabled">
<input type="checkbox" name="attr_intelligenceDominant" readonly="readonly"
value="1"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col dh_label dh_text_left"><span title="intelligenceValue">Body</span>
</div>
<div class="dh_col">
<input type="number" name="attr_intelligenceValue" placeholder="0" min="0"
step="1" title="intelligenceValue" class="dh_input">
</div>
</div>
</div>
<button type="action" name="act_editIntelligence" class="dh_pencil"></button>
</div>
<div class="dh_section dh_mb">
<input type="hidden" name="attr_charisma" value="0">
<input type="hidden" name="attr_charismaValue" value="0">
<input type="hidden" name="attr_charismaRace" value="0">
<input type="hidden" name="attr_charismaMod" value="0">
<input type="hidden" name="attr_charismaBonus" value="0">
<input type="hidden" name="attr_charismaBonusMod" value="0">
<div class="dh_charisma_display">
<button type="roll" name="roll_charisma" value="@{whisper}&amp;{template:custom}{{title=Charisma (CHA)}}{{subtitle=@{character_name}}}{{attributeRoll=Hod na charisma: [[1d10+(@{charismaBonus})+([[(@{rollMod})+(@{advantage})]])]]}} {{formula=(1k10 + CHA + Modifikátory)}} {{modifier=@{advantageText}@{rollModText}@{charismaModText}@{charismaBonusModText}}}"
class="dh_button dh_bottom_right">
<div class="dh_icon dh_icon_d10"></div>
</button>
<div class="dh_label"><span title="charisma/charismaBonus">Charisma</span>
</div>
<div class="dh_col dh_align_self_center dh_value_medium"><span title="charismaBonus" name="attr_charismaBonus">0</span>
</div>
<div class="dh_col dh_align_self_center"><span title="charisma" name="attr_charisma" class="dh_value_small">0</span>
</div>
</div>
<div class="dh_charisma_modify">
<div class="dh_label"><span title="charisma/charismaBonus">Charisma</span>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col"><span title="charisma" name="attr_charisma" class="dh_value_small">0</span>(<span
title="charismaBonus" name="attr_charismaBonus" class="dh_value_small dh_pa_0">0</span>)</div>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col dh_label dh_text_left"><span title="charismaRace">Rasa</span>
</div>
<div class="dh_col">
<input type="number" name="attr_charismaRace" placeholder="0" min="0"
step="1" title="charismaRace" readonly="readonly" class="dh_input dh_disabled">
</div>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col dh_label dh_text_left"><span title="charismaDominant">Povolání</span>
</div>
<div class="dh_col dh_shrink">
<label title="charismaDominant" class="dh_checkbox dh_disabled">
<input type="checkbox" name="attr_charismaDominant" readonly="readonly"
value="1"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_row dh_align_center">
<div class="dh_col dh_label dh_text_left"><span title="charismaValue">Body</span>
</div>
<div class="dh_col">
<input type="number" name="attr_charismaValue" placeholder="0" min="0"
step="1" title="charismaValue" class="dh_input">
</div>
</div>
</div>
<button type="action" name="act_editCharisma" class="dh_pencil"></button>
</div>
</div>
</div>
</div>
<div class="dh_section dh_center_panel">
<div class="dh_col_12">
<div class="dh_grid dh_combat dh_justify_content_stretch">
<div class="pc_rollButtons dh_row">
<div class="dh_shrink dh_section dh_initiative">
<div class="dh_col_12">
<button type="roll" name="roll_initiative" value="@{whisper}&amp;{template:custom}{{title=Iniciativa v souboji}}{{subtitle=@{character_name}}}{{roll=Iniciativa [[1d6+(@{dexterityBonus})+([[(@{initiativeMod})+(@{rollMod})+(@{advantage})]]) &amp;{tracker}]]}} {{formula=(1k6 + OBR + Modifikátory)}} {{modifier=@{advantageText}@{rollModText}@{initiativeModText}}}"
class="dh_button dh_bottom_right">
<div class="dh_icon dh_icon_d6"></div>
</button>
<div class="dh_label"><span title="initiative">Iniciativa</span>
</div>
<div class="dh_col dh_value_medium"><span title="initiative" name="attr_initiative"> 0 </span>
</div>
</div>
</div>
<div class="dh_grow dh_section dh_attack">
<div class="dh_col_12">
<button type="roll" name="roll_attack" value="@{attackMacro}" class="dh_button dh_bottom_right">
<div class="dh_icon dh_icon_d6"></div>
</button>
<div class="dh_label"><span title="attack">Útok</span>
</div>
<div class="dh_col dh_value_medium"><span title="attack" name="attr_attack">0</span> (<span title="damage"
name="attr_damage"></span>)</div>
<div class="dh_col dh_value_medium"></div>
</div>
</div>
<div class="dh_shrink dh_section dh_defense">
<div class="dh_col_12">
<button type="roll" name="roll_defense" value="@{defenseMacro}" class="dh_button dh_bottom_right">
<div class="dh_icon dh_icon_d6"></div>
</button>
<div class="dh_label"><span title="defense">Obrana</span>
</div>
<div class="dh_col dh_value_medium"><span title="defense" name="attr_defense"> 0 </span>
</div>
</div>
</div>
<div class="dh_shrink dh_section dh_defenseRanged">
<div class="dh_col_12">
<button type="roll" name="roll_rangedDefense" value="@{defenseRangeMacro}"
class="dh_button dh_bottom_right">
<div class="dh_icon dh_icon_d6"></div>
</button>
<div class="dh_label"><span title="defenseRanged">Obrana na dálku</span>
</div>
<div class="dh_col dh_value_medium"><span title="defenseRanged" name="attr_defenseRanged"> 0 </span>
</div>
</div>
</div>
<div class="dh_shrink dh_section dh_basicDefense">
<div class="dh_col_12">
<button type="roll" name="roll_basicDefense" value="@{whisper}&amp;{template:custom}{{title=Pasivní obrana}}{{subtitle=@{character_name}}}{{roll=Pasivní obrana [[(@{dexterityBonus})+(@{armorDefense})+([[(@{basicDefenseMod})+(@{rollMod})+(@{advantage})]])]]}} {{formula=(OBR + Zbroj + Modifikátory)}} {{modifier=@{advantageText}@{rollModText}@{basicDefenseModText}}}"
class="dh_button dh_bottom_right">
<div class="dh_icon dh_icon_d6"></div>
</button>
<div class="dh_label"><span title="basicDefense">Pasivní obrana</span>
</div>
<div class="dh_col dh_value_medium"><span title="basicDefense" name="attr_basicDefense"> 0 </span>
</div>
</div>
</div>
</div>
<div class="dh_section dh_weapons dh_pa">
<div class="dh_col_12">
<div class="dh_row dh_melee">
<div class="dh_col_12">
<div class="dh_label"><span title="repeating_melee">Zbraně na boj zblízka</span>
</div>
<div class="dh_row dh_table dh_header">
<div title="isEqquiped" class="dh_col dh_shrink dh_cell dh_isEqquiped"></div>
<div title="name" class="dh_col_auto dh_grow dh_cell dh_name dh_justify_content_start">
<div class="dh_label"><span>Název</span>
</div>
</div>
<div title="isTwoHanded" class="dh_col_auto dh_shrink dh_cell dh_isTwoHanded">
<div class="dh_label"><span>Typ</span>
</div>
</div>
<div title="attack" class="dh_col_auto dh_shrink dh_cell dh_attack">
<div class="dh_label"><span>Útočnost</span>
</div>
</div>
<div title="damage" class="dh_col_auto dh_shrink dh_cell dh_damage">
<div class="dh_label"><span>Zranění</span>
</div>
</div>
<div title="defense" class="dh_col_auto dh_shrink dh_cell dh_defense">
<div class="dh_label"><span>Obrana</span>
</div>
</div>
<div title="reach" class="dh_col_auto dh_shrink dh_cell dh_reach">
<div class="dh_label"><span>Dosah</span>
</div>
</div>
</div>
<fieldset class="repeating_melee">
<div>
<div class="dh_row dh_table">
<input type="hidden" name="attr_hands" class="dh_hands" value="none">
<div class="dh_col_auto dh_shrink dh_cell dh_isEqquiped">
<button type="action" name="act_none" class="dh_checkbox dh_equipButton dh_none"></button>
<button type="action" name="act_left" class="dh_checkbox dh_equipButton dh_left"><span>L</span>
</button>
<button type="action" name="act_right" class="dh_checkbox dh_equipButton dh_right"><span>P</span>
</button>
<button type="action" name="act_both" class="dh_checkbox dh_equipButton dh_both"><span>LP</span>
</button>
</div>
<div class="dh_col_auto dh_grow dh_cell dh_name">
<input type="text" name="attr_name" size="1" readonly="readonly" class="dh_input dh_disabled dh_text_left">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_isTwoHanded">
<label title="isTwoHanded" class="dh_checkbox dh_button dh_transparent dh_disabled dh_pa_0">
<input type="checkbox" name="attr_isTwoHanded" value="1" readonly="readonly"><span class="dh_checkmark dh_twoHanded"></span>
</label>
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_attack">
<input type="text" name="attr_attack" size="1" readonly="readonly" class="dh_input dh_disabled">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_damage">
<input type="text" name="attr_damage" size="1" readonly="readonly" class="dh_input dh_disabled">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_defense">
<input type="text" name="attr_defense" size="1" readonly="readonly" class="dh_input dh_disabled">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_reach">
<input type="text" name="attr_reach" size="1" readonly="readonly" class="dh_input dh_disabled">
</div>
</div>
</div>
</fieldset>
</div>
</div>
<div class="dh_row dh_throwing">
<div class="dh_col_12">
<div class="dh_label"><span title="repeating_throwing">Vrhací zbraně</span>
</div>
<div class="dh_row dh_table dh_header">
<div title="isEqquiped" class="dh_col dh_shrink dh_cell dh_isEqquiped"></div>
<div title="name" class="dh_col_auto dh_grow dh_cell dh_name dh_justify_content_start">
<div class="dh_label dh_text_left"><span>Název</span>
</div>
</div>
<div title="count" class="dh_col dh_shrink dh_cell dh_count">
<div class="dh_label">
<div class="dh_icon dh_icon_counter"></div>
</div>
</div>
<div title="isTwoHanded" class="dh_col_auto dh_shrink dh_cell dh_isTwoHanded">
<div class="dh_label"><span>Typ</span>
</div>
</div>
<div title="attack" class="dh_col_auto dh_shrink dh_cell dh_attack">
<div class="dh_label"><span>Útočnost</span>
</div>
</div>
<div title="damage" class="dh_col_auto dh_shrink dh_cell dh_damage">
<div class="dh_label"><span>Zranění</span>
</div>
</div>
<div title="defense" class="dh_col_auto dh_shrink dh_cell dh_defense">
<div class="dh_label"><span>Obrana</span>
</div>
</div>
<div title="reachRange" class="dh_col_auto dh_shrink dh_cell dh_reachRange">
<div class="dh_label"><span>Dostřel</span>
</div>
</div>
</div>
<fieldset class="repeating_throwing">
<div>
<div class="dh_row dh_table">
<input type="hidden" name="attr_hands" class="dh_hands" value="none">
<div class="dh_col_auto dh_shrink dh_cell dh_isEqquiped">
<button type="action" name="act_none" class="dh_checkbox dh_equipButton dh_none"></button>
<button type="action" name="act_left" class="dh_checkbox dh_equipButton dh_left"><span>L</span>
</button>
<button type="action" name="act_right" class="dh_checkbox dh_equipButton dh_right"><span>P</span>
</button>
<button type="action" name="act_both" class="dh_checkbox dh_equipButton dh_both"><span>LP</span>
</button>
</div>
<div class="dh_col_auto dh_grow dh_cell dh_name">
<input type="text" name="attr_name" size="1" readonly="readonly" class="dh_input dh_disabled dh_text_left">
</div>
<div class="dh_col dh_shrink dh_cell dh_count">
<input type="number" name="attr_count" placeholder="0" min="0" step="1"
value="0" class="dh_input">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_isTwoHanded">
<label title="isTwoHanded" class="dh_checkbox dh_button dh_transparent dh_disabled dh_pa_0">
<input type="checkbox" name="attr_isTwoHanded" value="1" readonly="readonly"><span class="dh_checkmark dh_twoHanded"></span>
</label>
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_attack">
<input type="text" name="attr_attack" size="1" readonly="readonly" class="dh_input dh_disabled">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_damage">
<input type="text" name="attr_damage" size="1" readonly="readonly" class="dh_input dh_disabled">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_defense">
<input type="text" name="attr_defense" size="1" readonly="readonly" class="dh_input dh_disabled">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_reachRange">
<input type="text" name="attr_reachRange" size="1" readonly="readonly"
class="dh_input dh_disabled">
</div>
</div>
</div>
</fieldset>
</div>
</div>
<div class="dh_row dh_ranged">
<div class="dh_col_12">
<div class="dh_label"><span title="repeating_ranged">Střelné zbraně</span>
</div>
<div class="dh_row dh_table dh_header">
<div title="isEqquiped" class="dh_col dh_shrink dh_cell dh_isEqquiped"></div>
<div title="name" class="dh_col_auto dh_grow dh_cell dh_name dh_justify_content_start">
<div class="dh_label dh_text_left"><span>Název</span>
</div>
</div>
<div title="count" class="dh_col dh_shrink dh_cell dh_count">
<div class="dh_label">
<div class="dh_icon dh_icon_ammunition"></div>
</div>
</div>
<div title="isTwoHanded" class="dh_col_auto dh_shrink dh_cell dh_isTwoHanded">
<div class="dh_label"><span>Typ</span>
</div>
</div>
<div title="attack" class="dh_col_auto dh_shrink dh_cell dh_attack">
<div class="dh_label"><span>Útočnost</span>
</div>
</div>
<div title="damage" class="dh_col_auto dh_shrink dh_cell dh_damage">
<div class="dh_label"><span>Zranění</span>
</div>
</div>
<div title="defense" class="dh_col_auto dh_shrink dh_cell dh_defense">
<div class="dh_label"><span>Obrana</span>
</div>
</div>
<div title="reachRange" class="dh_col_auto dh_shrink dh_cell dh_reachRange">
<div class="dh_label"><span>Dostřel</span>
</div>
</div>
</div>
<fieldset class="repeating_ranged">
<div>
<div class="dh_row dh_table">
<input type="hidden" name="attr_hands" class="dh_hands" value="none">
<div class="dh_col_auto dh_shrink dh_cell dh_isEqquiped">
<button type="action" name="act_none" class="dh_checkbox dh_equipButton dh_none"></button>
<button type="action" name="act_left" class="dh_checkbox dh_equipButton dh_left"><span>L</span>
</button>
<button type="action" name="act_right" class="dh_checkbox dh_equipButton dh_right"><span>P</span>
</button>
<button type="action" name="act_both" class="dh_checkbox dh_equipButton dh_both"><span>LP</span>
</button>
</div>
<div class="dh_col_auto dh_grow dh_cell dh_name">
<input type="text" size="1" name="attr_name" readonly="readonly" class="dh_input dh_disabled dh_text_left">
</div>
<div class="dh_col dh_shrink dh_cell dh_count">
<input type="number" name="attr_count" placeholder="0" min="0" step="1"
value="0" class="dh_input">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_isTwoHanded">
<label title="isTwoHanded" class="dh_checkbox dh_button dh_transparent dh_disabled dh_pa_0">
<input type="checkbox" name="attr_isTwoHanded" value="1" readonly="readonly"><span class="dh_checkmark dh_twoHanded"></span>
</label>
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_attack">
<input type="text" size="1" name="attr_attack" readonly="readonly" class="dh_input dh_disabled">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_damage">
<input type="text" size="1" name="attr_damage" readonly="readonly" class="dh_input dh_disabled">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_defense">
<input type="text" size="1" name="attr_defense" readonly="readonly" class="dh_input dh_disabled">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_reachRange">
<input type="text" size="1" name="attr_reachRange" readonly="readonly"
class="dh_input dh_disabled">
</div>
</div>
</div>
</fieldset>
</div>
</div>
<div class="dh_row dh_shields">
<div class="dh_col_12">
<div class="dh_label"><span title="repeating_shields">Štíty</span>
</div>
<div class="dh_row dh_table dh_header">
<div title="isEqquiped" class="dh_col dh_shrink dh_cell dh_isEqquiped"></div>
<div title="name" class="dh_col_auto dh_grow dh_cell dh_name dh_justify_content_start">
<div class="dh_label dh_text_left"><span>Název</span>
</div>
</div>
<div title="isTwoHanded" class="dh_col_auto dh_shrink dh_cell dh_isTwoHanded">
<div class="dh_label"><span>Typ</span>
</div>
</div>
<div title="quality" class="dh_col_auto dh_shrink dh_cell dh_quality">
<div class="dh_label"><span>Kvalita</span>
</div>
</div>
</div>
<fieldset class="repeating_shields">
<div>
<div class="dh_row dh_table">
<input type="hidden" name="attr_hands" class="dh_hands" value="none">
<div class="dh_col_auto dh_shrink dh_cell dh_isEqquiped">
<button type="action" name="act_none" class="dh_checkbox dh_equipButton dh_none"></button>
<button type="action" name="act_left" class="dh_checkbox dh_equipButton dh_left"><span>L</span>
</button>
<button type="action" name="act_right" class="dh_checkbox dh_equipButton dh_right"><span>P</span>
</button>
<button type="action" name="act_both" class="dh_checkbox dh_equipButton dh_both"><span>LP</span>
</button>
</div>
<div class="dh_col_auto dh_grow dh_cell dh_name">
<input type="text" size="1" name="attr_name" readonly="readonly" class="dh_input dh_disabled dh_text_left">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_isTwoHanded">
<label title="isTwoHanded" class="dh_checkbox dh_button dh_transparent dh_disabled dh_pa_0">
<input type="checkbox" name="attr_isTwoHanded" value="1" readonly="readonly"><span class="dh_checkmark dh_twoHanded"></span>
</label>
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_quality">
<input type="text" size="1" name="attr_shieldQuality" value="1" class="dh_input dh_disabled">
</div>
</div>
</div>
</fieldset>
</div>
</div>
<div class="dh_row dh_armors">
<div class="dh_col_12">
<div class="dh_label"><span title="repeating_armors">Zbroje</span>
</div>
<div class="dh_row dh_table dh_header">
<div title="isEqquiped" class="dh_col dh_shrink dh_cell dh_isEqquiped"></div>
<div title="name" class="dh_col_auto dh_grow dh_cell dh_name dh_justify_content_start">
<div class="dh_label dh_text_left"><span>Název</span>
</div>
</div>
<div title="size" class="dh_col_auto dh_cell dh_size">
<div class="dh_label"><span>Velikost</span>
</div>
</div>
<div title="quality" class="dh_col_auto dh_cell dh_quality">
<div class="dh_label"><span>Kvalita</span>
</div>
</div>
</div>
<fieldset class="repeating_armors">
<div>
<div class="dh_row dh_table">
<div class="dh_col_auto dh_shrink dh_cell dh_isEqquiped">
<label title="isEquipped" class="dh_checkbox">
<input type="checkbox" name="attr_isEquipped" value="1"><span class="dh_checkmark"></span>
</label>
</div>
<div class="dh_col_auto dh_grow dh_cell dh_name">
<input type="text" size="1" name="attr_name" readonly="readonly" class="dh_input dh_disabled dh_text_left">
</div>
<div class="dh_col_auto dh_cell dh_size">
<input type="text" size="1" name="attr_size" readonly="readonly" class="dh_input dh_disabled">
</div>
<div class="dh_col_auto dh_cell dh_quality">
<input type="text" name="attr_armorQuality" value="1" readonly="readonly"
class="dh_input dh_disabled">
</div>
</div>
</div>
</fieldset>
</div>
</div>
</div>
</div>
<div class="dh_section dh_modifiers dh_pa">
<div class="dh_col_12">
<div class="dh_row">
<div class="dh_col_12">
<div class="dh_label"><span title="repeating_modifiers">Modifikátory</span>
</div>
<div class="dh_row dh_table dh_header">
<div title="isActive" class="dh_col dh_shrink dh_cell dh_isActive"></div>
<div title="name" class="dh_col_auto dh_grow dh_cell dh_name dh_justify_content_start">
<div class="dh_label dh_text_left"><span>Název</span>
</div>
</div>
<div title="modifier" class="dh_col_auto dh_shrink dh_cell dh_modifier">
<div class="dh_label"><span>Mod</span>
</div>
</div>
<div title="attribute" class="dh_col_auto shrink dh_cell dh_attribute">
<div class="dh_label"><span>Atribut</span>
</div>
</div>
</div>
<fieldset class="repeating_modifiers">
<div>
<div class="dh_row dh_table">
<div class="dh_col_auto dh_shrink dh_cell dh_isActive">
<label title="isActive" class="dh_checkbox">
<input type="checkbox" name="attr_isActive" value="1"><span class="dh_checkmark"></span>
</label>
</div>
<div class="dh_col_auto dh_grow dh_cell dh_name">
<input type="text" size="1" name="attr_name" class="dh_input dh_text_left">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_modifier">
<input type="number" name="attr_modifier" placeholder="0" step="1" value="0"
class="dh_input">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_attribute dh_text_left">
<select size="1" name="attr_attribute" value="rollMod" class="dh_input">
<option value="rollMod" selected="selected">všechny hody</option>
<option value="initiativeMod">iniciativa</option>
<option value="attackMod">útok na blízko</option>
<option value="attackRangeMod">útok na dálku</option>
<option value="damageMod">zranění na blízko</option>
<option value="damageRangeMod">zranění na dálku</option>
<option value="defenseMod">obrana na blízko</option>
<option value="defenseRangeMod">obrana na dálku</option>
<option value="basicDefenseMod">základní obrana</option>
<option value="speedMod">rychlost</option>
<option value="fatigueMaxMod">max. únava</option>
<option value="hpMaxMod">max. životů</option>
<option value="manaMaxMod">max. many</option>
<option value="resourcesMaxMod">max. surovin</option>
<option value="strengthMod">síla (základ)</option>
<option value="strengthBonusMod">SIL (oprava)</option>
<option value="dexterityMod">obratnost (základ)</option>
<option value="dexterityBonusMod">OBR (oprava)</option>
<option value="constitutionMod">odolnost (základ)</option>
<option value="constitutionBonusMod">ODO (oprava)</option>
<option value="intelligenceMod">inteligence (základ)</option>
<option value="intelligenceBonusMod">INT (oprava)</option>
<option value="charismaMod">charisma (základ)</option>
<option value="charismaBonusMod">CHA (oprava)</option>
</select>
</div>
</div>
</div>
</fieldset>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="dh_section dh_right_panel">
<div class="dh_col_12">
<div class="dh_skills dh_section dh_pa">
<div class="dh_col_12">
<input type="hidden" name="attr_selectedProfession" value="nevybrano"
class="dh_selected_profession">
<div class="dh_label"><span title="repeating_skills">Dovednosti</span>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="availableSkillPoints">Dovednostní body</span>
</div>
<div class="dh_col dh_shrink">
<input type="number" name="attr_availableSkillPoints" placeholder="0"
value="0" step="1">
</div>
</div>
<div class="dh_addSkillSectionLabel dh_label"><span>Přidat dovednost</span>
</div>
<div class="dh_row dh_nowrap dh_pb">
<input type="hidden" name="attr_addSkillType" value="general" class="dh_skillTypeInput">
<input type="hidden" name="attr_allocatedPoints" class="dh_skillTypeInput"
value="0">
<select name="attr_addSkillType" class="dh_skillType dh_input">
<option value="general" selected="selected">Obecná</option>
<option value="professionBased">Profesní</option>
</select>
<select name="attr_addSkillGeneral" class="dh_generalSkills dh_input">
<option selected="selected">Vlastní</option>
<option>Akrobacie</option>
<option>Atletika</option>
<option>Cizí jazyky</option>
<option>Čtení a psaní</option>
<option>Historie</option>
<option>Jízda na zvířeti</option>
<option>Mechanika</option>
<option>Plavání</option>
<option>Plížení</option>
<option>Postřeh</option>
<option>První pomoc</option>
<option>Přežití v přírodě</option>
<option>Reflex</option>
<option>Řemesla</option>
<option>Umění</option>
<option>Teologie</option>
<option>Vůle</option>
<option>Výdrž</option>
<option>Znalost přírody</option>
<option>Zpracování zvěře</option>
</select>
<select name="attr_addSkillWarrior" class="dh_warriorSkills dh_input">
<option selected="selected">Vlastní</option>
</select>
<select name="attr_addSkillRanger" class="dh_rangerSkills dh_input">
<option selected="selected">Vlastní</option>
<option>Pouto s přírodou</option>
<option>Lov</option>
<option>Orientace</option>
<option>Předpovídání počasí</option>
<option>Stopování</option>
<option>Ochočování zvířat</option>
<option>Kamufláž</option>
<option>Líčení pastí</option>
<option>Zahlazování stop</option>
</select>
<select name="attr_addSkillAlchemist" class="dh_alchemistSkills dh_input">
<option selected="selected">Vlastní</option>
<option>Vidění many</option>
<option>Destilace many</option>
<option>Lučba</option>
<option>Pokročilá identifikace</option>
<option>Výroba svitků</option>
</select>
<select name="attr_addSkillMage" class="dh_mageSkills dh_input">
<option selected="selected">Vlastní</option>
<option>Sesílání kouzel</option>
</select>
<select name="attr_addSkillCleric" class="dh_priestSkills dh_input">
<option selected="selected">Vlastní</option>
<option>Prosby</option>
</select>
<select name="attr_addSkillThief" class="dh_thiefSkills dh_input">
<option selected="selected">Vlastní</option>
<option>Hazardní hry</option>
<option>Odhad ceny</option>
<option>Presvědčování</option>
<option>Vybírání kapes</option>
<option>Falešný útok</option>
<option>Imitace</option>
<option>Lezení</option>
<option>Mimika</option>
<option>Odhad lidí</option>
<option>Odstranění pastí</option>
<option>Odvedení pozornosti</option>
<option>Ohebnost</option>
<option>Oko střelce</option>
<option>Omráčení</option>
<option>Otevírání zámků</option>
<option>Pád z výšky</option>
<option>Padělání</option>
<option>Převleky</option>
<option>Schování se ve stínu</option>
<option>Splynutí s davem</option>
<option>Tichý pohyb</option>
<option>Získání důvěry</option>
</select>
<button type="action" name="act_addSkill" class="dh_button">
<div class="dh_icon dh_icon_plus"></div>
</button>
</div>
<fieldset class="repeating_skills">
<div>
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"
class="dh_isEditing">
<input type="hidden" name="attr_description">
<input type="hidden" name="attr_skillLevel" value="0">
<input type="checkbox" name="attr_settingsVisible" value="0" checked="checked"
class="dh_settingsVisible">
<div class="dh_row dh_nowrap dh_table dh_read">
<input type="hidden" name="attr_rollStrength">
<input type="hidden" name="attr_rollDexterity">
<input type="hidden" name="attr_rollConstitution">
<input type="hidden" name="attr_rollIntelligence">
<input type="hidden" name="attr_rollCharisma">
<div class="dh_col_auto dh_grow dh_cell dh_printText">
<button type="roll" name="roll_printText" value="@{whisper}&amp;{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}"
class="dh_button">
<div class="dh_icon dh_icon_scroll"></div>
</button>
</div>
<div class="dh_col dh_cell dh_grow dh_skillLevel"><span name="attr_skillLevel" value="0" placeholder="0" step="1" min="0"></span>
</div>
<div class="dh_col_fill dh_cell dh_text_truncate dh_justify_content_start dh_name"><span name="attr_name"></span>
</div>
<div class="dh_col dh_cell dh_shrink">
<input type="checkbox" name="attr_isStrength" value="1" class="dh_isStrengthCondition">
<button type="roll" name="roll_skillStrength" value="@{rollStrength}"
class="dh_button dh_skill_strength">
<div class="dh_icon dh_icon_d10"></div>
<div class="dh_label"><span>SIL</span>
</div>
</button>
<input type="checkbox" name="attr_isDexterity" value="1" class="dh_isDexterityCondition">
<button type="roll" name="roll_skillDexterity" value="@{rollDexterity}"
class="dh_button dh_skill_dexterity">
<div class="dh_icon dh_icon_d10"></div>
<div class="dh_label"><span>OBR</span>
</div>
</button>
<input type="checkbox" name="attr_isConstitution" value="1" class="dh_isConstitutionCondition">
<button type="roll" name="roll_skillConstitution" value="@{rollConstitution}"
class="dh_button dh_skill_constitution">
<div class="dh_icon dh_icon_d10"></div>
<div class="dh_label"><span>ODO</span>
</div>
</button>
<input type="checkbox" name="attr_isIntelligence" value="1" class="dh_isIntelligenceCondition">
<button type="roll" name="roll_skillIntelligence" value="@{rollIntelligence}"
class="dh_button dh_skill_intelligence">
<div class="dh_icon dh_icon_d10"></div>
<div class="dh_label"><span>INT</span>
</div>
</button>
<input type="checkbox" name="attr_isCharisma" value="1" class="dh_isCharismaCondition">
<button type="roll" name="roll_skillCharisma" value="@{rollCharisma}"
class="dh_button dh_skill_charisma">
<div class="dh_icon dh_icon_d10"></div>
<div class="dh_label"><span>CHA</span>
</div>
</button>
</div>
<div class="dh_col_auto dh_cell">
<label title="isEditing" class="dh_checkbox dh_button dh_pa_0">
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"><span class="dh_checkmark dh_pencil"></span>
</label>
</div>
</div>
<div class="dh_row dh_table dh_modify">
<div class="dh_col_12">
<div class="dh_row dh_nowrap">
<div class="dh_col_fill">
<div class="dh_label dh_nameLabel"><span title="name">Název</span>
</div>
</div>
<div class="dh_col">
<label title="isEditing" class="dh_checkbox dh_button dh_pa_0">
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"><span class="dh_checkmark dh_pencil"></span>
</label>
</div>
</div>
<div class="dh_row dh_pb">
<input type="text" placeholder="Název" name="attr_name" size="1" class="dh_skillName dh_input">
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="skillLevel">Stupeň dovednosti</span>
</div>
<div class="dh_col dh_shrink">
<input type="number" placeholder="0" min="0" step="1" name="attr_skillLevel"
class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="skillPoints">Dovednostní body</span>
</div>
<div class="dh_col dh_shrink"><span name="attr_skillPoints" value="0"></span>
</div>
</div>
<div class="dh_settingsVisibleToggle dh_col_auto dh_cell"><span class="dh_moreSettings">Více</span><span class="dh_lessSettings">Méně</span>
<label
title="settingsVisible" class="dh_checkbox">
<input type="checkbox" name="attr_settingsVisible"><span class="dh_settingsVisibleButton dh_settingVisibility"></span>
</label>
</div>
<div class="dh_row dh_table dh_settingsVisibleBlock">
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="isKnowledgeBased">Znalostní</span>
</div>
<div class="dh_col dh_shrink">
<label class="dh_checkbox">
<input type="checkbox" name="attr_isKnowledgeBased" value="1"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="isProfessionBased">Profesní</span>
</div>
<div class="dh_col dh_shrink">
<label class="dh_checkbox">
<input type="checkbox" name="attr_isProfessionBased" value="1"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="skillBonus">Startovací úroveň</span>
</div>
<div class="dh_col dh_shrink">
<input type="number" placeholder="0" min="0" step="1" name="attr_skillBonus"
class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_nowrap">
<div class="dh_col dh_label"><span>SIL</span>
</div>
<div class="dh_col dh_label"><span>OBR</span>
</div>
<div class="dh_col dh_label"><span>ODO</span>
</div>
<div class="dh_col dh_label"><span>INT</span>
</div>
<div class="dh_col dh_label"><span>CHA</span>
</div>
</div>
<div class="dh_row dh_nowrap dh_justify_content_space_around dh_pb">
<label title="isStrength" class="dh_checkbox">
<input type="checkbox" name="attr_isStrength" value="1" class="dh_isStrengthValue"><span class="dh_checkmark"></span>
</label>
<label title="isDexterity" class="dh_checkbox">
<input type="checkbox" name="attr_isDexterity" value="1" class="dh_isDexterityValue"><span class="dh_checkmark"></span>
</label>
<label title="isConstitution" class="dh_checkbox">
<input type="checkbox" name="attr_isConstitution" value="1" class="dh_isConstitutionValue"><span class="dh_checkmark"></span>
</label>
<label title="isIntelligence" class="dh_checkbox">
<input type="checkbox" name="attr_isIntelligence" value="1" class="dh_isIntelligenceValue"><span class="dh_checkmark"></span>
</label>
<label title="isCharisma" class="dh_checkbox">
<input type="checkbox" name="attr_isCharisma" value="1" class="dh_col dh_isCharismaValue"><span class="dh_checkmark"></span>
</label>
</div>
<div class="dh_label"><span title="description">Popis</span>
</div>
<textarea name="attr_description" rows="2" class="dh_input"></textarea>
<div class="dh_label"><span title="printText">Text v makru</span>
</div>
<textarea name="attr_printText" rows="2" class="dh_input"></textarea>
<div class="dh_label"><span title="macro">Makro</span>
</div>
<textarea name="attr_macro" rows="2" class="dh_input"></textarea>
</div>
</div>
</div>
</div>
</fieldset>
</div>
</div>
</div>
<div class="dh_col_12">
<div class="dh_activeAbilities dh_section dh_pa">
<div class="dh_col_12">
<input type="hidden" name="attr_selectedProfession" value="nevybrano"
class="dh_selected_profession">
<div class="dh_label"><span title="repeating_activeabilities">Aktivní schopnosti</span>
</div>
<div class="dh_ActiveSkillAdd">
<div class="dh_label"><span>Přidat Aktivní schopnost</span>
</div>
<input type="hidden" name="attr_selectedProfession" value="nevybrano"
class="dh_selected_profession">
<div class="dh_row dh_nowrap dh_pb dh_activeAbilitiesAdd">
<input type="hidden" name="attr_addActiveAbilityProfession" value="nevybrano"
class="dh_addActiveAbilityProfession">
<input type="hidden" name="attr_addActiveAbility" value="" class="dh_addActiveAbilityHidden">
<input type="hidden" name="attr_secondaryRollAttributeMacroName" value="">
<input type="hidden" name="attr_skillLevelSecondaryRoll" value="">
<select name="attr_addActiveAbilityProfession" class="dh_activeProfession dh_input">
<option value="Warrior">Válečník</option>
<option value="Ranger">Hraničář</option>
<option value="Alchemist">Alchymista</option>
<option value="Mage">Kouzelník</option>
<option value="Thief">Zloděj</option>
<option value="Priest">Klerik</option>
</select>
<select name="attr_addActiveAbility" class="dh_activeWarrior dh_input">
<option value="WarriorGeneral">Obecné triky</option>
</select>
<select name="attr_addActiveAbility" class="dh_activeRanger dh_input">
<option value="RangerGeneral">Hraničářská magie</option>
</select>
<select name="attr_addActiveAbility" class="dh_activeAlchemist dh_input">
<option value="AlchemistGeneral">Obecné recepty</option>
</select>
<select name="attr_addActiveAbility" class="dh_activeMage dh_input">
<option value="MageGeneral">Obecná magie</option>
</select>
<select name="attr_addActiveAbility" class="dh_activeThief dh_input">
<option value="-">-</option>
</select>
<select name="attr_addActiveAbility" class="dh_activeNevybrano dh_input">
<option value="-">-</option>
</select>
<select name="attr_addActiveAbility" class="dh_activePriest dh_input">
<option value="PriestGeneral">Obecné prosby</option>
</select>
<select name="attr_addActiveAbilitySelection" class="dh_activeWarriorGeneral dh_input">
<option value="-">-</option>
<option value="Zuřivý útok">Zuřivý útok</option>
<option value="Bojová připravenost">Bojová připravenost</option>
</select>
<select name="attr_addActiveAbilitySelection" class="dh_activeRangerGeneral dh_input">
<option value="-">-</option>
<option value="Rozdělej oheň">Rozdělej oheň</option>
<option value="Najdi úkryt">Najdi úkryt</option>
<option value="Znamení">Znamení</option>
<option value="Najdi vodu">Najdi vodu</option>
</select>
<select name="attr_addActiveAbilitySelection" class="dh_activeAlchemistGeneral dh_input">
<option value="-">-</option>
<option value="Bomba">Bomba</option>
<option value="Dýmovnice">Dýmovnice</option>
<option value="Kouzelný inkoust">Kouzelný inkoust</option>
<option value="Lakmusový papírek">Lakmusový papírek</option>
<option value="Lektvar medvědí síly">Lektvar medvědí síly</option>
<option value="Lektvar neutralizace">Lektvar neutralizace</option>
<option value="Lektvar mucholapka">Lektvar mucholapka</option>
<option value="Lektvar rychlost">Lektvar rychlost</option>
<option value="Lektvar ranhojič">Lektvar ranhojič</option>
<option value="Lektvar změny velikosti">Lektvar změny velikosti</option>
<option value="Zápalná Šňůra">Zápalná Šňůra</option>
<option value="Univerzální protijed">Univerzální protijed</option>
<option value="Zředěný líh">Zředěný líh</option>
</select>
<select name="attr_addActiveAbilitySelection" class="dh_activeMageGeneral dh_input">
<option value="-">-</option>
<option value="Bertoldův zámek">Bertoldův zámek</option>
<option value="Blesk">Blesk</option>
<option value="Kukátko">Kukátko</option>
<option value="Levitace">Levitace</option>
<option value="Magický štít">Magický štít</option>
<option value="Magická střela">Magická střela</option>
<option value="Najdi předmět">Najdi předmět</option>
<option value="Neviditelnost">Neviditelnost</option>
<option value="Očaruj zbraň">Očaruj zbraň</option>
<option value="Oheň">Oheň</option>
<option value="Rychlost">Rychlost</option>
<option value="Světlo">Světlo</option>
<option value="Teleport">Teleport</option>
</select>
<select name="attr_addActiveAbilitySelection" class="dh_activePriestGeneral dh_input">
<option value="-">-</option>
<option value="Léčivé ruce">Léčivé ruce</option>
<option value="Očištení">Očištení</option>
<option value="Štít víry">Štít víry</option>
<option value="Úder moci">Úder moci</option>
<option value="Uzdrav otravu">Uzdrav otravu</option>
</select>
<button type="action" name="act_addActiveAbility" class="dh_button">
<div class="dh_icon dh_icon_plus"></div>
</button>
</div>
</div>
<fieldset class="repeating_activeabilities">
<div>
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"
class="dh_isEditing">
<input type="checkbox" name="attr_settingsVisible" value="0" checked="checked"
class="dh_settingsVisible">
<input type="hidden" name="attr_skillLevel" value="0">
<input type="hidden" name="attr_printMacro">
<div class="dh_row dh_nowrap dh_table dh_read">
<div class="dh_col_auto dh_grow dh_cell dh_printText">
<button type="roll" name="roll_printText" value="@{printMacro}" class="dh_button">
<div class="dh_icon dh_icon_scroll"></div>
</button>
</div>
<div class="dh_col_fill dh_cell dh_text_truncate dh_justify_content_start dh_name"><span name="attr_name"></span>
</div>
<div class="dh_col dh_cell dh_shrink">
<button type="roll" name="roll_macro" value="@{macro}" class="dh_button">
<div class="dh_icon dh_icon_d10"></div>
</button>
</div>
<div class="dh_col_auto dh_cell">
<label title="isEditing" class="dh_checkbox dh_button dh_pa_0">
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"><span class="dh_checkmark dh_pencil"></span>
</label>
</div>
</div>
<div class="dh_row dh_table dh_modify">
<div class="dh_col_12">
<div class="dh_row dh_nowrap">
<div class="dh_col_fill">
<div class="dh_label dh_nameLabel"><span title="name">Název</span>
</div>
</div>
<div class="dh_col">
<label title="isEditing" class="dh_checkbox dh_button dh_pa_0">
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"><span class="dh_checkmark dh_pencil"></span>
</label>
</div>
</div>
<div class="dh_row dh_pb">
<input type="text" name="attr_name" placeholder="Název" size="1" class="dh_input">
</div>
<div class="
dh_row
dh_align_center
dh_priest
dh_mage
dh_ranger
dh_alchemist
dh_warrior
dh_custom
dh_isAllAttributesVisibleToggle
dh_pb
">
<div title="mana" class="dh_col dh_warrior dh_label dh_text_left"><span>Adrenalin</span>
</div>
<div title="mana" class="dh_col dh_priest dh_label dh_text_left"><span>Přízeň</span>
</div>
<div class="dh_col dh_mage dh_alchemist dh_thief dh_custom dh_label dh_text_left"><span title="mana">Mana</span>
</div>
<div class="dh_col dh_ranger dh_label dh_text_left"><span title="mana">Duševní síla</span>
</div>
<div class="dh_col dh_shrink">
<input type="number" name="attr_mana" placeholder="0" min="0" step="1"
value="0" class="dh_input_grow">
</div>
</div>
<div class="
dh_row
dh_align_center
dh_priest
dh_mage
dh_ranger
dh_alchemist
dh_warrior
dh_custom
dh_isAllAttributesVisibleToggle
dh_pb
">
<div title="additionalMana" class="dh_col dh_warrior dh_label dh_text_left"><span>Dodatečný adrenalin (text)</span>
</div>
<div title="additionalMana" class="dh_col dh_priest dh_label dh_text_left"><span>Dodatečná přízeň (text)</span>
</div>
<div class="dh_col dh_mage dh_alchemist dh_thief dh_custom dh_label dh_text_left"><span title="additionalMana">Dodatečná mana (text)</span>
</div>
<div class="dh_col dh_ranger dh_label dh_text_left"><span title="additionalMana">Dodatečná duševní síla (text)</span>
</div>
<div class="dh_col">
<input type="text" name="attr_additionalMana" placeholder="2 za další kolo"
size="1" class="dh_input_grow">
</div>
</div>
<div class="
dh_row
dh_align_center
dh_priest
dh_mage
dh_ranger
dh_alchemist
dh_warrior
dh_custom
dh_isAllAttributesVisibleToggle
dh_pb
">
<div title="additionalMana" class="dh_col dh_warrior dh_label dh_text_left"><span>Dodatečný adrenalin</span>
</div>
<div title="additionalMana" class="dh_col dh_priest dh_label dh_text_left"><span>Dodatečná přízeň</span>
</div>
<div class="dh_col dh_mage dh_alchemist dh_thief dh_custom dh_label dh_text_left"><span title="additionalMana">Dodatečná mana</span>
</div>
<div class="dh_col dh_ranger dh_label dh_text_left"><span title="additionalMana">Dodatečná duševní síla</span>
</div>
<div class="dh_col dh_shrink">
<input type="number" name="attr_additionalManaNum" placeholder="0" min="0"
step="1" value="0" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_alchemist dh_custom dh_isAllAttributesVisibleToggle dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="resources">Suroviny</span>
</div>
<div class="dh_col dh_shrink">
<input type="number" name="attr_resources" placeholder="0" min="0" step="1"
value="0" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_alchemist dh_custom dh_isAllAttributesVisibleToggle dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="base">Základ</span>
</div>
<div class="dh_col">
<input type="text" name="attr_base" size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_priest dh_mage dh_ranger dh_custom dh_isAllAttributesVisibleToggle dh_pb">
<div title="range" class="dh_col dh_label dh_text_left"><span>Dosah</span>
</div>
<div class="dh_col">
<input type="text" name="attr_range" placeholder="10 sáhů" size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_priest dh_mage dh_ranger dh_custom dh_isAllAttributesVisibleToggle dh_pb">
<div title="target" class="dh_col dh_label dh_text_left"><span>Rozsah</span>
</div>
<div class="dh_col">
<input type="text" name="attr_target" placeholder="1 tvor" size="1" class="dh_input_grow">
</div>
</div>
<div class="
dh_row
dh_align_center
dh_alchemist
dh_priest
dh_mage
dh_ranger
dh_custom
dh_isAllAttributesVisibleToggle
dh_pb
">
<div title="duration" class="dh_col dh_label dh_text_left"><span>Trvání</span>
</div>
<div class="dh_col">
<input type="text" name="attr_duration" placeholder="ihned" size="1" class="dh_input_grow">
</div>
</div>
<div class="
dh_row
dh_align_center
dh_priest
dh_mage
dh_ranger
dh_alchemist
dh_custom
dh_isAllAttributesVisibleToggle
dh_pb
">
<div title="castingTime" class="dh_col dh_mage dh_ranger dh_warrior dh_thief dh_label dh_text_left dh_custom"><span>Vyvolání</span>
</div>
<div title="castingTime" class="dh_col dh_priest dh_label dh_text_left"><span>Vzývání</span>
</div>
<div class="dh_col dh_alchemist dh_label dh_text_left"><span title="castingTime">Výroba</span>
</div>
<div class="dh_col">
<input type="text" name="attr_castingTime" placeholder="1 kolo" size="1"
class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_alchemist dh_custom dh_isAllAttributesVisibleToggle dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="frequency">Četnost</span>
</div>
<div class="dh_col">
<input type="text" name="attr_frequency" placeholder="10 minut" size="1"
class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_warrior dh_alchemist dh_custom dh_isAllAttributesVisibleToggle dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="usage">Použití</span>
</div>
<div class="dh_col">
<input type="text" name="attr_usage" placeholder="do útoku" size="1" class="dh_input_grow">
</div>
</div>
<div class="
dh_row
dh_align_center
dh_mage
dh_priest
dh_alchemist
dh_ranger
dh_custom
dh_isAllAttributesVisibleToggle
dh_pb
">
<div title="difficulty" class="dh_col dh_label dh_text_left"><span>Obtížnost</span>
</div>
<div class="dh_col dh_shrink">
<input type="number" name="attr_difficulty" placeholder="0" min="0" step="1"
value="0" class="dh_input_grow">
</div>
</div>
<div class="
dh_row
dh_align_center
dh_mage
dh_priest
dh_alchemist
dh_ranger
dh_custom
dh_isAllAttributesVisibleToggle
dh_pb
">
<div title="additionalDifficulty" class="dh_col dh_label dh_text_left"><span>Dodatečná obtížnost</span>
</div>
<div class="dh_col dh_shrink">
<input type="number" name="attr_additionalDifficulty" placeholder="0"
min="0" step="1" value="0" class="dh_input_grow">
</div>
</div>
<div class="
dh_row
dh_align_center
dh_warrior
dh_mage
dh_priest
dh_alchemist
dh_ranger
dh_custom
dh_isAllAttributesVisibleToggle
dh_pb
">
<div title="prerequisite" class="dh_col dh_label dh_text_left"><span>Vyžaduje</span>
</div>
<div class="dh_col">
<input type="text" name="attr_prerequisite" placeholder="Název schopnosti"
size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_label"><span title="description">Popis</span>
</div>
<textarea name="attr_description" rows="2" class="dh_input"></textarea>
<div class="dh_settingsVisibleToggle dh_col_auto dh_cell"><span class="dh_moreSettings">Více</span><span class="dh_lessSettings">Méně</span>
<label
title="settingsVisible" class="dh_checkbox">
<input type="checkbox" name="attr_settingsVisible"><span class="dh_settingsVisibleButton dh_settingVisibility"></span>
</label>
</div>
<div class="dh_row dh_table dh_settingsVisibleBlock">
<div class="dh_row dh_align_center dh_isAllAttributesVisibleToggle dh_custom dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="isAttackRoll">Hod na útok</span>
</div>
<div class="dh_col">
<label class="dh_checkbox">
<input type="checkbox" name="attr_isAttackRoll" value="1"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_row dh_align_center dh_custom dh_isAllAttributesVisibleToggle dh_pb">
<div title="attackRollBonus" class="dh_col dh_label dh_text_left"><span>Bonus do útoku</span>
</div>
<div class="dh_col">
<input type="text" name="attr_attackRollBonus" placeholder="5" size="1"
class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_custom dh_isAllAttributesVisibleToggle dh_pb">
<div title="attackDamageBonus" class="dh_col dh_label dh_text_left"><span>Bonus do zranění</span>
</div>
<div class="dh_col">
<input type="text" name="attr_attackDamageBonus" placeholder="2" size="1"
class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_isAllAttributesVisibleToggle dh_custom dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="isDefenseRoll">Hod na obranu</span>
</div>
<div class="dh_col">
<label class="dh_checkbox">
<input type="checkbox" name="attr_isDefenseRoll" value="1"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_row dh_align_center dh_custom dh_isAllAttributesVisibleToggle dh_pb">
<div title="defenseRollType" class="dh_col dh_label dh_text_left"><span>Typ obrany</span>
</div>
<div class="dh_col">
<select name="attr_defenseRollType" value="melee" class="dh_input">
<option value="melee">Obrana na blízko</option>
<option value="ranged">Obrana na dálku</option>
<option value="basic">ZO</option>
<option value="all">Všechny typy</option>
</select>
</div>
</div>
<div class="dh_row dh_align_center dh_custom dh_isAllAttributesVisibleToggle dh_pb">
<div title="defenseRollBonus" class="dh_col dh_label dh_text_left"><span>Bonus do obrany</span>
</div>
<div class="dh_col">
<input type="text" name="attr_defenseRollBonus" placeholder="5" size="1"
class="dh_input_grow">
</div>
</div>
<div class="
dh_row
dh_align_center
dh_mage
dh_priest
dh_alchemist
dh_ranger
dh_custom
dh_isAllAttributesVisibleToggle
dh_pb
">
<div title="selectedProfessionSkill" class="dh_col dh_label dh_text_left"><span>Ověřovací dovednost</span>
</div>
<div class="dh_col">
<input type="text" name="attr_selectedProfessionSkill" placeholder="Název dovednosti"
size="1" class="dh_input_grow">
</div>
</div>
<div class="
dh_row
dh_align_center
dh_mage
dh_priest
dh_alchemist
dh_ranger
dh_custom
dh_isAllAttributesVisibleToggle
dh_pb
">
<div title="castingAttribute" class="dh_col dh_label dh_text_left"><span>Atribut pro ověření</span>
</div>
<div class="dh_col">
<select name="attr_castingAttribute" value="" class="dh_input">
<option value="" selected="selected">žádný</option>
<option value="SIL">SIL</option>
<option value="OBR">OBR</option>
<option value="ODO">ODO</option>
<option value="INT">INT</option>
<option value="CHA">CHA</option>
</select>
</div>
</div>
<div class="
dh_row
dh_align_center
dh_mage
dh_priest
dh_alchemist
dh_ranger
dh_custom
dh_isAllAttributesVisibleToggle
dh_pb
">
<div title="secondaryRoll" class="dh_col dh_label dh_text_left"><span>Past dovednosti</span>
</div>
<div class="dh_col">
<input type="text" name="attr_secondaryRoll" placeholder="Vůle" size="1"
class="dh_input_grow">
</div>
</div>
<div class="
dh_row
dh_align_center
dh_mage
dh_priest
dh_alchemist
dh_ranger
dh_custom
dh_isAllAttributesVisibleToggle
dh_pb
">
<div title="secondaryCastingAttribute" class="dh_col dh_label dh_text_left"><span>Atribut pro past</span>
</div>
<div class="dh_col">
<select name="attr_secondaryCastingAttribute" value="" class="dh_input">
<option value="" selected="selected">žádný</option>
<option value="SIL">SIL</option>
<option value="OBR">OBR</option>
<option value="ODO">ODO</option>
<option value="INT">INT</option>
<option value="CHA">CHA</option>
</select>
</div>
</div>
<div class="
dh_row
dh_align_center
dh_mage
dh_priest
dh_alchemist
dh_ranger
dh_custom
dh_isAllAttributesVisibleToggle
dh_pb
">
<div title="secondaryRollAgainst" class="dh_col dh_label dh_text_left"><span>Past proti</span>
</div>
<div class="dh_col">
<input type="text" name="attr_secondaryRollAgainst" placeholder="Vůle (CHAR) protivníka"
size="1" class="dh_input_grow">
</div>
</div>
<div class="
dh_row
dh_align_center
dh_mage
dh_priest
dh_alchemist
dh_ranger
dh_custom
dh_isAllAttributesVisibleToggle
dh_pb
">
<div title="damage" class="dh_col dh_label dh_text_left"><span>Zranění / Efekt</span>
</div>
<div class="dh_col">
<input type="text" name="attr_damage" placeholder="2k6" size="1" class="dh_input_grow">
</div>
</div>
<div class="
dh_row
dh_align_center
dh_mage
dh_priest
dh_alchemist
dh_ranger
dh_custom
dh_isAllAttributesVisibleToggle
dh_pb
">
<div title="damageType" class="dh_col dh_label dh_text_left"><span>Typ zranění</span>
</div>
<div class="dh_col">
<input type="text" name="attr_damageType" placeholder="ledové zranění"
size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_custom dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="isMulticast">Vícenásobné seslání</span>
</div>
<div class="dh_col">
<label class="dh_checkbox">
<input type="checkbox" name="attr_isMulticast" value="1"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_row dh_align_center dh_custom dh_pb">
<div title="multicastLabel" class="dh_col dh_label dh_text_left"><span>Text vícenásobného sesílání</span>
</div>
<div class="dh_col">
<input type="text" name="attr_multicastLabel" placeholder="Vícenásobné sesílání"
size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_custom dh_pb">
<div title="obtainedLevel" class="dh_col dh_label dh_text_left"><span>Získaná na úrovni</span>
</div>
<div class="dh_col">
<input type="text" name="attr_obtainedLevel" placeholder="5" size="1"
class="dh_input_grow">
</div>
</div>
<div class="dh_label"><span title="printText">Text v makru</span>
</div>
<textarea name="attr_printText" rows="2" class="dh_input"></textarea>
<input type="checkbox" name="attr_customMacro" class="dh_macroEditable">
<div class="dh_row dh_align_center dh_custom dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="Rekalkulovat makro pri změně parametrŮ (customMacro)">Vlastní makro</span>
</div>
<div class="dh_col">
<label class="dh_checkbox">
<input type="checkbox" name="attr_customMacro"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_label"><span title="macro">Makro</span>
</div>
<textarea name="attr_macro" rows="2" class="dh_input dh_macro"></textarea>
</div>
</div>
</div>
</div>
</fieldset>
</div>
</div>
</div>
<div class="dh_col_12">
<div class="dh_passiveAbilities dh_section dh_pa">
<div class="dh_col_12">
<div class="dh_label"><span title="repeating_passiveabilities">Pasivní schopnosti</span>
</div>
<div class="dh_PassiveSkillAdd">
<div class="dh_label"><span>Přidat pasivní schopnost</span>
</div>
<input type="hidden" name="attr_selectedProfession" value="nevybrano"
class="dh_selected_profession">
<div class="dh_row dh_nowrap dh_pb dh_passiveAbilitiesAdd">
<input type="hidden" name="attr_addPassiveAbilityProfession" value="nevybrano"
class="dh_addPassiveAbilityProfession">
<select name="attr_addPassiveAbilityProfession" class="dh_passiveProfession dh_input">
<option value="Warrior">Válečník</option>
<option value="Ranger">Hraničář</option>
<option value="Alchemist">Alchymista</option>
<option value="Mage">Kouzelník</option>
<option value="Thief">Zloděj</option>
<option value="Priest">Klerik</option>
</select>
<select name="attr_addPassiveAbility" class="dh_passiveWarrior dh_input">
<option value="Léčba vlastních zranění">Léčba vlastních zranění</option>
<option value="Bojové triky">Bojové triky</option>
</select>
<select name="attr_addPassiveAbility" class="dh_passiveRanger dh_input">
<option value="Hraničářské umění">Hraničářské umění</option>
<option value="Hraničářská magie">Hraničářská magie</option>
</select>
<select name="attr_addPassiveAbility" class="dh_passiveAlchemist dh_input">
<option value="Alchymie">Alchymie</option>
</select>
<select name="attr_addPassiveAbility" class="dh_passiveMage dh_input">
<option value="Kouzelnické triky">Kouzelnické triky</option>
<option value="Obecná magie">Obecná magie</option>
</select>
<select name="attr_addPassiveAbility" class="dh_passiveThief dh_input">
<option value="Boj beze zbraně">Boj beze zbraně</option>
<option value="Základy zlodějského umění">Základy zlodějského umění</option>
</select>
<select name="attr_addPassiveAbility" class="dh_passivePriest dh_input">
<option value="Spojení s bohem">Spojení s bohem</option>
<option value="Svěcení">Svěcení</option>
</select>
<button type="action" name="act_addPassiveAbility" class="dh_button">
<div class="dh_icon dh_icon_plus"></div>
</button>
</div>
</div>
<fieldset class="repeating_passiveabilities">
<div>
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"
class="dh_isEditing">
<div class="dh_row dh_nowrap dh_table dh_read">
<div class="dh_col_auto dh_grow dh_cell dh_printText">
<button type="roll" name="roll_printText" value="@{whisper}&amp;{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}"
class="dh_button">
<div class="dh_icon dh_icon_scroll"></div>
</button>
</div>
<div class="dh_col_fill dh_cell dh_text_truncate dh_justify_content_start dh_name"><span name="attr_name"></span>
</div>
<div class="dh_col_auto dh_cell">
<label title="isEditing" class="dh_checkbox dh_button dh_pa_0">
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"><span class="dh_checkmark dh_pencil"></span>
</label>
</div>
</div>
<div class="dh_row dh_table dh_modify">
<div class="dh_col_12">
<div class="dh_row dh_nowrap">
<div class="dh_col_fill">
<div class="dh_label dh_nameLabel"><span title="name">Název</span>
</div>
</div>
<div class="dh_col">
<label title="isEditing" class="dh_checkbox dh_button dh_pa_0">
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"><span class="dh_checkmark dh_pencil"></span>
</label>
</div>
</div>
<div class="dh_row dh_pb">
<input type="text" size="1" placeholder="Název" name="attr_name" class="dh_input">
</div>
<div class="dh_label"><span title="description">Popis</span>
</div>
<textarea name="attr_description" rows="2" class="dh_input"></textarea>
</div>
</div>
</div>
</fieldset>
</div>
</div>
</div>
</div>
</div>
<div class="dh_grid dh_inventory_tab_content">
<div class="dh_section dh_load dh_pa">
<div class="dh_col_12">
<div class="dh_row">
<div class="dh_label"><span title="loadSelf/loadBag/loadCoins/loadChest">Započteno do naložení [lb]</span>
</div>
</div>
<div class="dh_row dh_justify_content_space_around dh_mx">
<label title="isSelfCarried" class="dh_checkbox dh_button dh_transparent">
<input type="checkbox" checked="checked" name="attr_isSelfCarried" value="1">
<div class="dh_checkmark"></div>
<div class="dh_checkbox_text dh_icon dh_icon_person"></div><span name="attr_loadSelf" class="dh_checkbox_text">0</span>
</label>
<label title="isBagCarried" class="dh_checkbox dh_button dh_transparent">
<input type="checkbox" checked="checked" name="attr_isBagCarried" value="1">
<div class="dh_checkmark"></div>
<div class="dh_checkbox_text dh_icon dh_icon_bag"></div><span name="attr_loadBag" class="dh_checkbox_text">0</span>
</label>
<label title="isCoinsCarried" class="dh_checkbox dh_button dh_transparent">
<input type="checkbox" checked="checked" name="attr_isCoinsCarried" value="1">
<div class="dh_checkmark"></div>
<div class="dh_checkbox_text dh_icon dh_icon_coinBag"></div><span name="attr_loadCoins" class="dh_checkbox_text">0</span>
</label>
<label title="isChestCarried" class="dh_checkbox dh_button dh_transparent">
<input type="checkbox" name="attr_isChestCarried" value="1">
<div class="dh_checkmark"></div>
<div class="dh_checkbox_text dh_icon dh_icon_chest"></div><span name="attr_loadChest" class="dh_checkbox_text">0</span>
</label>
</div>
</div>
</div>
<div class="dh_section dh_wealth dh_pa">
<div class="dh_col_12">
<div class="dh_row">
<div class="dh_label"><span title="wealth">Majetek</span>
</div>
</div>
<div class="dh_row">
<div title="wealth" class="dh_col_auto"><span name="attr_wealth"></span>
</div>
</div>
</div>
</div>
<div class="dh_section dh_money dh_pa">
<div class="dh_col_12">
<div class="dh_row">
<div class="dh_label"><span title="gold/silver/copper">Měšec</span>
</div>
</div>
<div class="dh_row dh_nowrap dh_mb dh_mx">
<div class="dh_col_4">
<div class="dh_row dh_nowrap dh_align_center dh_align_content_center">
<div class="dh_col dh_shrink dh_mr">
<div title="gold" class="dh_icon dh_icon_gold"></div>
</div>
<div class="dh_col dh_mr">
<input type="number" name="attr_gold" placeholder="0" min="0" step="1"
value="0" class="dh_input">
</div>
</div>
</div>
<div class="dh_col_4">
<div class="dh_row dh_nowrap dh_align_center dh_align_content_center">
<div class="dh_col dh_shrink dh_mr">
<div title="silver" class="dh_icon dh_icon_silver"></div>
</div>
<div class="dh_col dh_mr">
<input type="number" name="attr_silver" placeholder="0" step="1" min="0"
value="0" class="dh_input">
</div>
</div>
</div>
<div class="dh_col_4">
<div class="dh_row dh_nowrap dh_align_center dh_align_content_center">
<div class="dh_col dh_shrink dh_mr">
<div title="copper" class="dh_icon dh_icon_copper"></div>
</div>
<div class="dh_col dh_mr">
<input type="number" name="attr_copper" placeholder="0" min="0" step="1"
value="0" class="dh_input">
</div>
</div>
</div>
</div>
</div>
</div>
<div class="dh_section dh_inventory">
<div class="dh_col_12">
<div class="dh_row">
<div class="dh_label"><span title="repeating_items">Předměty</span>
</div>
</div>
<div class="dh_row dh_table dh_header">
<div title="count" class="dh_col dh_shrink dh_cell dh_count dh_label"><span>Počet</span>
</div>
<div title="name" class="dh_col_auto dh_grow dh_cell dh_name dh_label"><span>Název</span>
</div>
<div title="category" class="dh_col_auto dh_shrink dh_cell dh_category dh_label"><span>Kategorie</span>
</div>
<div title="placement" class="dh_col_auto dh_shrink dh_cell dh_placement">
<div class="dh_row dh_justify_content_space_around">
<div class="dh_icon dh_icon_person dh_col_auto"></div>
<div class="dh_icon dh_icon_bag dh_col_auto"></div>
<div class="dh_icon dh_icon_chest dh_col_auto"></div>
</div>
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_type">
<div class="dh_row dh_justify_content_space_around">
<div title="isMelee" class="dh_icon dh_icon_melee dh_col_auto"></div>
<div title="isThrowing" class="dh_icon dh_icon_throwing dh_col_auto"></div>
<div title="isRanged" class="dh_icon dh_icon_ranged dh_col_auto"></div>
<div title="isAmmunition" class="dh_icon dh_icon_ammunition dh_col_auto"></div>
<div title="isShield" class="dh_icon dh_icon_shield dh_col_auto"></div>
<div title="isArmor" class="dh_icon dh_icon_armor dh_col_auto"></div>
</div>
</div>
<div title="priceTotal" class="dh_col_auto dh_shrink dh_cell dh_price">
<div class="dh_row">
<div class="dh_col_auto">
<div class="dh_icon dh_icon_coins"></div>
</div>
</div>
</div>
<div title="weightTotal" class="dh_col_auto dh_shrink dh_cell dh_weight">
<div class="dh_row">
<div class="dh_col_auto">
<div class="dh_icon dh_icon_scale dh_col"></div>
</div>
</div>
</div>
<div title="isEditing" class="dh_col_auto dh_cell dh_edit_header"></div>
</div>
<fieldset class="repeating_items">
<div>
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"
class="dh_isEditing">
<div class="dh_row dh_nowrap dh_table dh_read">
<div class="dh_col dh_shrink dh_cell dh_count">
<input type="number" name="attr_count" placeholder="1" step="1" min="0"
value="1" class="dh_input">
</div>
<div class="dh_col_auto dh_grow dh_cell dh_name dh_text_left">
<input type="text" size="1" placeholder="Název" name="attr_name" class="dh_input">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_category dh_text_left">
<input type="text" size="1" placeholder="Kategorie" name="attr_category"
class="dh_input">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_placement">
<div class="dh_row dh_justify_content_space_around">
<label class="dh_radio">
<input type="radio" checked="checked" name="attr_placement" value="self"><span class="dh_checkmark"></span>
</label>
<label class="dh_radio">
<input type="radio" name="attr_placement" value="bag"><span class="dh_checkmark"></span>
</label>
<label class="dh_radio">
<input type="radio" name="attr_placement" value="chest"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_type">
<div class="dh_row dh_justify_content_space_around">
<label title="isMelee" class="dh_checkbox">
<input type="checkbox" name="attr_isMelee" value="1" class="dh_isMelee"><span class="dh_checkmark"></span>
</label>
<label title="isThrowing" class="dh_checkbox">
<input type="checkbox" name="attr_isThrowing" value="1" class="dh_isThrowing"><span class="dh_checkmark"></span>
</label>
<label title="isRanged" class="dh_checkbox">
<input type="checkbox" name="attr_isRanged" value="1" class="dh_isRanged"><span class="dh_checkmark"></span>
</label>
<label title="isAmmunition" class="dh_checkbox">
<input type="checkbox" name="attr_isAmmunition" value="1" class="dh_isAmmunition"><span class="dh_checkmark"></span>
</label>
<label title="isShield" class="dh_checkbox">
<input type="checkbox" name="attr_isShield" value="1" class="dh_isShield"><span class="dh_checkmark"></span>
</label>
<label title="isArmor" class="dh_checkbox">
<input type="checkbox" name="attr_isArmor" value="1" class="dh_isArmor"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_col_auto dh_shrink dh_wrap dh_cell dh_price">
<input type="hidden" name="attr_priceTotal" value="0 md"><span title="priceTotal" name="attr_priceTotal">0 md</span>
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_weight">
<input type="hidden" name="attr_weightTotal" value="0"><span title="weightTotal" name="attr_weightTotal">0</span>
</div>
<div class="dh_col_auto dh_cell">
<label title="isEditing" class="dh_checkbox dh_button dh_pa_0">
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"><span class="dh_checkmark dh_pencil"></span>
</label>
</div>
</div>
<div class="dh_row dh_table dh_modify dh_pa">
<div class="dh_col_12">
<div class="dh_row dh_nowrap">
<div class="dh_col_1 dh_mr">
<div class="dh_label"><span title="count" class="dh_text_left">Počet</span>
</div>
<div class="dh_col">
<input type="number" name="attr_count" placeholder="1" min="0" step="1"
value="1" class="dh_grow_input">
</div>
</div>
<div class="dh_col_fill dh_mr">
<div class="dh_label"><span title="name" class="dh_text_left">Název</span>
</div>
<div class="dh_col">
<input type="text" placeholder="Název" size="1" name="attr_name" class="dh_input">
</div>
</div>
<div class="dh_col_3 dh_mr">
<div class="dh_label"><span title="category" class="dh_text_left">Kategorie</span>
</div>
<div class="dh_col">
<input type="text" placeholder="Kategorie" size="1" name="attr_category"
class="dh_input">
</div>
</div>
<div class="dh_col_2 dh_mr">
<div class="dh_label"><span title="placement" class="dh_text_left">Umístění</span>
</div>
<div class="dh_col">
<select size="1" name="attr_placement" default="default" class="dh_input">
<option value="self" selected="selected">Na sobě</option>
<option value="bag">V batohu</option>
<option value="chest">V truhle</option>
</select>
</div>
</div>
<div class="dh_col_auto">
<label title="isEditing" class="dh_checkbox dh_button dh_pa_0">
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"><span class="dh_checkmark dh_pencil"></span>
</label>
</div>
</div>
<input type="hidden" name="attr_itemId" value="0" class="dh_itemId">
<div class="dh_row dh_itemType">
<div class="dh_col_12">
<div class="dh_label"><span title="isMelee/isThrowing/isRanged/isShield/isArmor/isAmmunition"
class="dh_text_left">Typ</span>
</div>
<div class="dh_row dh_align_content_start dh_justify_content_start">
<input type="checkbox" name="attr_isMelee" value="1" class="dh_hidden dh_isMelee">
<input type="checkbox" name="attr_isThrowing" value="1" class="dh_hidden dh_isThrowing">
<input type="checkbox" name="attr_isRanged" value="1" class="dh_hidden dh_isRanged">
<input type="checkbox" name="attr_isShield" value="1" class="dh_hidden dh_isShield">
<input type="checkbox" name="attr_isArmor" value="1" class="dh_hidden dh_isArmor">
<input type="checkbox" name="attr_isAmmunition" value="1" class="dh_hidden dh_isAmmunition">
<div class="dh_row dh_shrink dh_align_content_start dh_justify_content_start dh_mr dh_mb">
<label title="isMelee" class="dh_checkbox dh_button dh_transparent">
<input type="checkbox" name="attr_isMelee" value="1">
<div class="dh_checkmark"></div>
<div class="dh_checkbox_text dh_icon dh_icon_melee"></div><span class="dh_checkbox_text">zbraň na boj zblízka</span>
</label>
</div>
<div class="dh_row dh_shrink dh_align_content_start dh_justify_content_start dh_mr dh_mb">
<label title="isThrowing" class="dh_checkbox dh_button dh_transparent">
<input type="checkbox" name="attr_isThrowing" value="1">
<div class="dh_checkmark"></div>
<div class="dh_checkbox_text dh_icon dh_icon_throwing"></div><span class="dh_checkbox_text">vrhací zbraň</span>
</label>
</div>
<div class="dh_row dh_shrink dh_align_content_start dh_justify_content_start dh_mr dh_mb">
<label title="isRanged" class="dh_checkbox dh_button dh_transparent">
<input type="checkbox" name="attr_isRanged" value="1">
<div class="dh_checkmark"></div>
<div class="dh_checkbox_text dh_icon dh_icon_ranged"></div><span class="dh_checkbox_text">střelná zbraň</span>
</label>
</div>
<div class="dh_row dh_shrink dh_align_content_start dh_justify_content_start dh_mr dh_mb">
<label title="isShield" class="dh_checkbox dh_button dh_transparent">
<input type="checkbox" name="attr_isShield" value="1">
<div class="dh_checkmark"></div>
<div class="dh_checkbox_text dh_icon dh_icon_shield"></div><span class="dh_checkbox_text">štít</span>
</label>
</div>
<div class="dh_row dh_shrink dh_align_content_start dh_justify_content_start dh_mr dh_mb">
<label title="isArmor" class="dh_checkbox dh_button dh_transparent">
<input type="checkbox" name="attr_isArmor" value="1">
<div class="dh_checkmark"></div>
<div class="dh_checkbox_text dh_icon dh_icon_armor"></div><span class="dh_checkbox_text">zbroj</span>
</label>
</div>
<div class="dh_row dh_shrink dh_align_content_start dh_justify_content_start dh_mr dh_mb">
<label title="isAmmunition" class="dh_checkbox dh_button dh_transparent">
<input type="checkbox" name="attr_isAmmunition" value="1">
<div class="dh_checkmark"></div>
<div class="dh_checkbox_text dh_icon dh_icon_ammunition"></div><span class="dh_checkbox_text">munice</span>
</label>
</div>
<div class="dh_row dh_align_content_center dh_justify_content_start dh_mb">
<div class="dh_col dh_shrink dh_meleeWeapon dh_rangedWeapon dh_throwingWeapon dh_shield">
<div class="dh_col dh_mr">
<div class="dh_label"><span title="isTwoHanded">Typ</span>
</div>
<div class="dh_row">
<label title="isTwoHanded" class="dh_checkbox dh_button">
<input type="checkbox" name="attr_isTwoHanded" value="1"><span class="dh_checkmark dh_twoHanded"></span>
</label>
</div>
</div>
</div>
<div class="dh_col dh_shrink dh_meleeWeapon dh_rangedWeapon dh_throwingWeapon">
<div class="dh_col dh_mr">
<div class="dh_label dh_text_left"><span title="attack">Útočnost</span>
</div>
<div class="dh_row">
<input type="number" name="attr_attack" placeholder="0" min="0" step="1"
value="0" class="dh_input">
</div>
</div>
<div class="dh_col dh_mr">
<div class="dh_label dh_text_left"><span title="damage">Zranění</span>
</div>
<div class="dh_row">
<input type="number" name="attr_damage" placeholder="0" min="0" step="1"
value="0" class="dh_input">
</div>
</div>
<div class="dh_col dh_mr">
<div class="dh_label dh_text_left"><span title="defense">Obrana</span>
</div>
<div class="dh_row">
<input type="number" name="attr_defense" placeholder="0" min="0" step="1"
value="0" class="dh_input">
</div>
</div>
<div class="dh_col dh_mr">
<div class="dh_label dh_text_left"><span title="damageType">Typ Zranění</span>
</div>
<div class="dh_row">
<input type="text" placeholder="sečné" size="1" name="attr_damageType"
class="dh_input">
</div>
</div>
</div>
<div class="dh_col dh_mr dh_shrink dh_meleeWeapon">
<div class="dh_col">
<div class="dh_label"><span title="reach">Dosah</span>
</div>
<div class="dh_row">
<input type="text" placeholder="1.5" size="1" name="attr_reach" value="1.5"
class="dh_input">
</div>
</div>
</div>
<div class="dh_col dh_mr dh_shrink dh_rangedWeapon dh_throwingWeapon">
<div class="dh_col">
<div class="dh_label dh_text_left"><span title="reachRange">Dostřel</span>
</div>
<div class="dh_row">
<input type="text" placeholder="60/180" size="1" name="attr_reachRange"
class="dh_input">
</div>
</div>
</div>
<div class="dh_col dh_mr dh_shrink dh_shield">
<div class="dh_col">
<div class="dh_label"><span title="shieldQuality">Kvalita štítu</span>
</div>
<div class="dh_row">
<input type="number" name="attr_shieldQuality" placeholder="0" min="0"
step="1" value="0" class="dh_input">
</div>
</div>
</div>
<div class="dh_col dh_shrink dh_armor">
<div class="dh_col dh_mr">
<div class="dh_label"><span title="armorQuality">Kvalita zbroje</span>
</div>
<div class="dh_row">
<input type="number" name="attr_armorQuality" placeholder="0" min="0"
step="1" value="0" class="dh_input">
</div>
</div>
<div class="dh_col dh_mr">
<div class="dh_label"><span title="size">Velikost</span>
</div>
<div class="dh_row">
<select size="1" name="attr_size" value="B" class="dh_input">
<option value="A0">A0</option>
<option value="A1">A1</option>
<option value="A">A</option>
<option value="B" selected="selected">B</option>
<option value="C">C</option>
<option value="D">D</option>
<option value="E">E</option>
<option value="F">F</option>
</select>
</div>
</div>
</div>
<div class="
dh_col
dh_mr
dh_shrink
dh_meleeWeapon
dh_rangedWeapon
dh_throwingWeapon
dh_shield
dh_armor
">
<div class="dh_col">
<div class="dh_label dh_text_left"><span title="weightClass">Váhová kategorie</span>
</div>
<div class="dh_row">
<select size="1" name="attr_weightClass" class="dh_input">
<option value="lehké (bez omezení SIL)" selected="selected">lehké (bez omezení SIL)</option>
<option value="střední (požadovaná SIL 0 a vyšší)">střední (požadovaná SIL 0 a vyšší)</option>
<option value="těžké (požadovaná SIL +2 a vyšší)">těžké (požadovaná SIL +2 a vyšší)</option>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="dh_row dh_itemType">
<div class="dh_col_12">
<div class="dh_label"><span title="description" class="dh_text_left">Popis</span>
</div>
<div class="dh_col">
<textarea type="text" name="attr_description" rows="2" class="dh_input"></textarea>
</div>
</div>
</div>
<div class="dh_row dh_itemType dh_justify_content_start">
<div class="dh_col_1 dh_mr">
<div class="dh_label"><span title="weight" class="dh_text_left">Váha [lb]</span>
</div>
<div class="dh_row dh_align_content_center">
<input type="number" name="attr_weight" placeholder="0.00" step="0.01"
value="0.00" class="dh_input">
</div>
</div>
<div class="dh_col_4 dh_mr">
<div class="dh_label"><span title="name" class="dh_text_left">Cena</span>
</div>
<div class="dh_row dh_justify_content_space_around">
<div class="dh_col_auto">
<div class="dh_row dh_nowrap dh_align_content_center">
<div class="dh_col dh_mr dh_shrink">
<div title="gold" class="dh_icon dh_icon_gold"></div>
</div>
<div class="dh_col_auto dh_mr">
<input type="number" name="attr_gold" placeholder="0" step="1" value="0"
class="dh_input_grow">
</div>
</div>
</div>
<div class="dh_col_auto">
<div class="dh_row dh_nowrap dh_align_content_center">
<div class="dh_col dh_mr dh_shrink">
<div title="silver" class="dh_icon dh_icon_silver"></div>
</div>
<div class="dh_col_auto dh_mr">
<input type="number" name="attr_silver" placeholder="0" step="1" value="0"
class="dh_input_grow">
</div>
</div>
</div>
<div class="dh_col_auto">
<div class="dh_row dh_nowrap dh_align_content_center">
<div class="dh_col dh_mr dh_shrink">
<div title="copper" class="dh_icon dh_icon_copper"></div>
</div>
<div class="dh_col_auto dh_mr">
<input type="number" name="attr_copper" placeholder="0" step="1" value="0"
class="dh_input_grow">
</div>
</div>
</div>
</div>
</div>
<div class="dh_col dh_mr">
<div class="dh_label"><span title="rulebook" class="dh_text_left">Pravidla</span>
</div>
<div class="dh_col_auto">
<input type="text" placeholder="ppz" size="1" name="attr_rulebook" class="dh_input">
</div>
</div>
<div class="dh_col_auto">
<div class="dh_label"><span title="id" class="dh_text_left">ID (pro makra)</span>
</div>
<div class="dh_col_auto"><span name="attr_itemId" class="dh_id dh_span_input"></span>
</div>
</div>
</div>
</div>
</div>
</div>
</fieldset>
</div>
</div>
</div>
<div class="dh_grid dh_notes_tab_content">
<div class="dh_section dh_notes_center dh_px">
<div class="dh_col_12">
<div class="dh_row">
<div class="dh_label"><span title="repeating_notes">Poznámky</span>
</div>
</div>
<fieldset class="repeating_notes">
<dh class="dh_row dh_section">
<div class="dh_col_12">
<input type="text" size="1" title="title" name="attr_title" placeholder="Nadpis"
value="" class="dh_input dh_value_large">
</div>
<div class="dh_col_12">
<textarea type="text" name="attr_text" placeholder="text" class="dh_input"></textarea>
</div>
</dh>
</fieldset>
</div>
</div>
</div>
<div class="dh_grid dh_settings_tab_content">
<div class="dh_section dh_settings_center dh_px">
<div class="dh_col_12">
<div class="dh_row">
<div class="dh_label"><span>Nastavení</span>
</div>
</div>
<div class="dh_row dh_justify_content_start dh_align_content_center dh_pa">
<label title="isBackground" class="dh_checkbox dh_button">
<input type="checkbox" name="attr_isBackground" value="1" checked="checked"><span class="dh_checkmark"></span><span class="dh_checkbox_text">pozadí deníku</span>
</label>
<label title="isSettingVisible" class="dh_checkbox dh_button">
<input type="checkbox" name="attr_isSettingVisible" value="1"><span class="dh_checkmark"></span><span class="dh_checkbox_text">pokročilé funkce</span>
</label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="dh_npc">
<div class="dh_grid dh_npc_main_container">
<div class="dh_grid dh_npc_header_container">
<div class="dh_npc_header_image dh_section">
<div class="dh_npc_header_image_show"></div>
</div>
<div class="dh_npc_header_character_name dh_section">
<div class="dh_npc_character_name_display dh_text_left dh_value_large"><span title="character_name" name="attr_character_name" class="dh_character_name_text"> </span><span
title="character_name" class="dh_character_name_placeholder dh_text_left">Jméno nestvůry</span>
</div>
<div class="dh_npc_character_name_modify dh_value_large dh_align_content_center dh_justify_content_center">
<input type="text" size="1" title="character_name" placeholder="Jméno nestvůry"
name="attr_character_name" class="dh_input dh_text_left">
</div>
<button type="action" name="act_editNpcCharacterName" class="dh_pencil"></button>
</div>
<div class="dh_npc_header_size dh_section">
<div class="dh_npc_size_display">
<div class="dh_label"><span title="npcSize">Velikost</span>
</div>
<div class="dh_col dh_value"><span name="attr_npcSize"></span>
</div>
</div>
<div class="dh_npc_size_modify">
<div class="dh_label"><span title="npcSize">Velikost</span>
</div>
<div class="dh_row dh_align_content_center">
<div class="dh_col">
<select name="attr_npcSize" value="B" class="dh_input">
<option value="A0">A0</option>
<option value="A1">A1</option>
<option value="A">A</option>
<option value="B" selected="selected">B</option>
<option value="C">C</option>
<option value="D">D</option>
<option value="E">E</option>
<option value="F">F</option>
</select>
</div>
</div>
</div>
<button type="action" name="act_editNpcSize" class="dh_pencil"></button>
</div>
<div class="dh_npc_header_type dh_section">
<div class="dh_npc_type_display dh_value_medium dh_align_start dh_justify_content_center"><span title="npcType" name="attr_npcType" class="dh_npcType_text"></span><span
title="npcType" class="dh_npcType_placeholder dh_text_left">Typ nestvůry</span>
</div>
<div class="dh_npc_type_modify">
<div class="dh_label"><span title="npcSize">Typ nestvůry</span>
</div>
<input type="text" name="attr_npcType" placeholder="Typ nestvůry" size="1"
class="dh_input dh_value_medium">
</div>
<button type="action" name="act_editNpcType" class="dh_pencil"></button>
</div>
<div class="dh_npc_header_hp dh_section">
<div class="dh_npc_hp_display">
<div class="dh_label"><span title="npcHp/npcHp_max">Životy</span>
</div>
<div class="dh_col dh_value"><span name="attr_npcHp">0</span><span class="dh_divider">/</span><span
name="attr_npcHp_max">0</span>
</div>
</div>
<div class="dh_npc_hp_modify">
<div class="dh_label"><span title="npcHp/npcHp_max">Životy</span>
</div>
<div class="dh_row dh_align_content_center dh_pb">
<div class="dh_col_3 dh_label"><span>Akt.</span>
</div>
<div class="dh_col">
<input type="number" name="attr_npcHp" placeholder="0" value="0" step="1"
class="dh_input">
</div>
</div>
<div class="dh_row dh_align_content_center">
<div class="dh_col_3 dh_label"><span>Max.</span>
</div>
<div class="dh_col">
<input type="number" name="attr_npcHp_max" placeholder="0" min="0" step="1"
value="0" class="dh_input">
</div>
</div>
</div>
<button type="action" name="act_editNpcHp" class="dh_pencil"></button>
</div>
<div class="dh_npc_header_mana dh_section">
<input type="hidden" name="attr_npcSelectedManaType" value="mana" class="dh_npcSelectedManaType">
<div class="dh_npc_mana_display">
<div class="dh_label dh_npc_adrenalin"><span title="npcMana/npcMana_max">Adrenalin</span>
</div>
<div class="dh_label dh_npc_mentalStrength"><span title="npcMana/npcMana_max">Duševní síla</span>
</div>
<div class="dh_label dh_npc_goodwill"><span title="npcMana/npcMana_max">Přízeň</span>
</div>
<div class="dh_label dh_npc_mana"><span title="npcMana/npcMana_max">Mana</span>
</div>
<div class="dh_col dh_value"><span name="attr_npcMana">0</span><span class="dh_divider">/</span><span
name="attr_npcMana_max">0</span>
</div>
</div>
<div class="dh_npc_mana_modify">
<div class="dh_row dh_align_content_center">
<div class="dh_col_9">
<select name="attr_npcSelectedManaType" class="dh_input">
<option value="mana" selected="selected">Mana</option>
<option value="adrenalin">Adrenalin</option>
<option value="mentalStrength">Duševní síla</option>
<option value="goodwill">Přízeň</option>
</select>
</div>
</div>
<div class="dh_row dh_align_content_center dh_pb">
<div class="dh_col_3 dh_label"><span>Akt.</span>
</div>
<div class="dh_col">
<input type="number" name="attr_npcMana" placeholder="0" min="0" step="1"
value="0" class="dh_input">
</div>
</div>
<div class="dh_row dh_align_content_center">
<div class="dh_col_3 dh_label"><span>Max.</span>
</div>
<div class="dh_col">
<input type="number" name="attr_npcMana_max" placeholder="0" min="0" step="1"
value="0" class="dh_input">
</div>
</div>
</div>
<button type="action" name="act_editNpcMana" class="dh_pencil"></button>
</div>
<div class="dh_npc_header_resources dh_section">
<div class="dh_npc_resources_display">
<div class="dh_label"><span title="npcResources/npcResources_max">Suroviny</span>
</div>
<div class="dh_col dh_value"><span name="attr_npcResources">0</span><span class="dh_divider">/</span><span
name="attr_npcResources_max">0</span>
</div>
</div>
<div class="dh_npc_resources_modify">
<div class="dh_label"><span title="npcResources/npcResources_max">Suroviny</span>
</div>
<div class="dh_row dh_align_content_center dh_pb">
<div class="dh_col_3 dh_label"><span>Akt.</span>
</div>
<div class="dh_col">
<input type="number" name="attr_npcResources" placeholder="0" min="0"
step="1" value="0" class="dh_input">
</div>
</div>
<div class="dh_row dh_align_content_center">
<div class="dh_col_3 dh_label"><span>Max.</span>
</div>
<div class="dh_col">
<input type="number" name="attr_npcResources_max" placeholder="0" min="0"
step="1" value="0" class="dh_input">
</div>
</div>
</div>
<button type="action" name="act_editNpcResources" class="dh_pencil"></button>
</div>
<div class="dh_npc_header_speed dh_section">
<div class="dh_npc_speed_display">
<div class="dh_label"><span title="npcSpeed">Pohyblivost</span>
</div>
<div class="dh_col dh_value"><span name="attr_npcSpeed">0</span>
</div>
</div>
<div class="dh_npc_speed_modify">
<div class="dh_label"><span title="npcSpeed">Pohyblivost</span>
</div>
<div class="dh_row dh_align_content_center">
<div class="dh_col">
<input type="text" name="attr_npcSpeed" placeholder="0" value="0" size="1"
class="dh_input">
</div>
</div>
</div>
<button type="action" name="act_editNpcSpeed" class="dh_pencil"></button>
</div>
</div>
<div class="dh_grid dh_npc_tabs_container">
<div class="dh_section dh_tabs">
<div class="dh_row dh_justify_content_center dh_align_content_end">
<div class="dh_col dh_text_left">
<button type="action" name="act_changeToNpcTab" class="dh_tab dh_npc_tab">Nestvůra</button>
<button type="action" name="act_changeToNpcSettingTab"
class="dh_tab dh_npc_settings_tab">Nastavení</button>
</div>
<div class="dh_col_auto">
<div class="dh_row dh_section dh_pa dh_nowrap dh_align_center">
<div class="dh_col_auto dh_shrink">
<div class="dh_label"><span title="npcWhisper">Hod</span>
</div>
</div>
<div class="dh_col_auto dh_grow">
<div class="dh_row dh_justify_content_end">
<label class="dh_radio dh_button dh_transparent">
<input type="radio" name="attr_npcWhisper" value="" checked="checked"><span class="dh_checkmark"></span><span class="dh_radio_text">Věrejný</span>
</label>
<label class="dh_radio dh_button dh_transparent">
<input type="radio" name="attr_npcWhisper" value="/w GM "><span class="dh_checkmark"></span><span class="dh_radio_text">PJ</span>
</label>
</div>
</div>
<div class="dh_col_auto dh_shrink">
<div class="dh_label"><span title="npcAdvantage">Modifikátor</span>
</div>
</div>
<div class="dh_col_auto dh_grow">
<div class="dh_row dh_justify_content_end">
<label class="dh_radio dh_button dh_transparent">
<input type="radio" name="attr_npcAdvantage" value="0" checked="checked"><span class="dh_checkmark"></span><span class="dh_radio_text">žádný</span>
</label>
<label class="dh_radio dh_button dh_transparent">
<input type="radio" name="attr_npcAdvantage" value="5"><span class="dh_checkmark"></span><span class="dh_radio_text">výhoda +5</span>
</label>
<label class="dh_radio dh_button dh_transparent">
<input type="radio" name="attr_npcAdvantage" value="-5"><span class="dh_checkmark"></span><span class="dh_radio_text">nevýhoda -5</span>
</label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="dh_grid dh_npc_content_container">
<div class="dh_grid dh_npc_tab_content">
<div class="dh_section dh_npc_left_panel">
<div class="dh_col_12">
<div class="dh_grid dh_npc_attributes_container">
<div class="dh_section dh_npcAttributes dh_pa">
<div class="dh_npcAttributes_display">
<div class="dh_label"><span>Atributy</span>
</div>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcStrength">Síla</span>
</div>
<div class="dh_col">
<button type="roll" name="roll_npcStrength" value="@{npcWhisper}&amp;{template:custom}{{title=Síla (SIL)}}{{subtitle=@{character_name}}}{{attributeRoll=Hod na sílu: [[1d10+(@{npcStrengthBonus})+([[(@{npcRollMod})+(@{npcAdvantage})]])]]}} {{formula=(1k10 + SIL + Modifikátory)}} {{modifier=@{npcAdvantageText}@{npcRollModText}@{npcStrengthModText}@{npcStrengthBonusModText}}}"
class="dh_button dh_npcStrength">
<div class="dh_icon dh_icon_d10"></div><span name="attr_npcStrength"></span>(<span name="attr_npcStrengthBonus"></span>)</button>
</div>
</div>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcDexterity">Obratnost</span>
</div>
<div class="dh_col">
<button type="roll" name="roll_npcDexterity" value="@{npcWhisper}&amp;{template:custom}{{title=Obratnost (OBR)}}{{subtitle=@{character_name}}}{{attributeRoll=Hod na obratnost: [[1d10+(@{npcDexterityBonus})+([[(@{npcRollMod})+(@{npcAdvantage})]])]]}} {{formula=(1k10 + OBR + Modifikátory)}} {{modifier=@{npcAdvantageText}@{npcRollModText}@{npcDexterityModText}@{npcDexterityBonusModText}}}"
class="dh_button dh_npcDexterity">
<div class="dh_icon dh_icon_d10"></div><span name="attr_npcDexterity"></span>(<span name="attr_npcDexterityBonus"></span>)</button>
</div>
</div>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcConstitution">Odolnost</span>
</div>
<div class="dh_col">
<button type="roll" name="roll_npcConstitution" value="@{npcWhisper}&amp;{template:custom}{{title=Odolnost (ODO)}}{{subtitle=@{character_name}}}{{attributeRoll=Hod na odolnost: [[1d10+(@{npcConstitutionBonus})+([[(@{npcRollMod})+(@{npcAdvantage})]])]]}} {{formula=(1k10 + ODO + Modifikátory)}} {{modifier=@{npcAdvantageText}@{npcRollModText}@{npcConstitutionModText}@{npcConstitutionBonusModText}}}"
class="dh_button dh_npcConstitution">
<div class="dh_icon dh_icon_d10"></div><span name="attr_npcConstitution"></span>(<span name="attr_npcConstitutionBonus"></span>)</button>
</div>
</div>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcIntelligence">Inteligence</span>
</div>
<div class="dh_col">
<button type="roll" name="roll_npcIntelligence" value="@{npcWhisper}&amp;{template:custom}{{title=Inteligence (INT)}}{{subtitle=@{character_name}}}{{attributeRoll=Hod na inteligenci: [[1d10+(@{npcIntelligenceBonus})+([[(@{npcRollMod})+(@{npcAdvantage})]])]]}} {{formula=(1k10 + INT + Modifikátory)}} {{modifier=@{npcAdvantageText}@{npcRollModText}@{npcIntelligenceModText}@{npcIntelligenceBonusModText}}}"
class="dh_button dh_npcIntelligence">
<div class="dh_icon dh_icon_d10"></div><span name="attr_npcIntelligence"></span>(<span name="attr_npcIntelligenceBonus"></span>)</button>
</div>
</div>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcCharisma">Charisma</span>
</div>
<div class="dh_col">
<button type="roll" name="roll_npcCharisma" value="@{npcWhisper}&amp;{template:custom}{{title=Charisma (CHA)}}{{subtitle=@{character_name}}}{{attributeRoll=Hod na charisma: [[1d10+(@{npcCharismaBonus})+([[(@{npcRollMod})+(@{npcAdvantage})]])]]}} {{formula=(1k10 + CHA + Modifikátory)}} {{modifier=@{npcAdvantageText}@{npcRollModText}@{npcCharismaModText}@{npcCharismaBonusModText}}}"
class="dh_button dh_npcCharisma">
<div class="dh_icon dh_icon_d10"></div><span name="attr_npcCharisma"></span>(<span name="attr_npcCharismaBonus"></span>)</button>
</div>
</div>
<br>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcLevel">Úroveň</span>
</div>
<div class="dh_col_3"><span name="attr_npcLevel" class="dh_float_right dh_input"></span>
</div>
</div>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcHigherPower">Vyšší moc</span>
</div>
<div class="dh_col_3"><span name="attr_npcHigherPower" class="dh_float_right dh_input"></span>
</div>
</div>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcXp">Zkušenosti</span>
</div>
<div class="dh_col_3"><span name="attr_npcXp" class="dh_float_right dh_input"></span>
</div>
</div>
</div>
<div class="dh_npcAttributes_modify">
<div class="dh_label"><span>Atributy</span>
</div>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcStrength">Síla</span> (<span name="attr_npcStrengthBonus"></span>)</div>
<div
class="dh_col">
<input type="number" name="attr_npcStrength" placeholder="0" min="0" step="1"
title="npcStrength" class="dh_input">
</div>
</div>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcDexterity">Obratnost</span> (<span name="attr_npcDexterityBonus"></span>)</div>
<div
class="dh_col">
<input type="number" name="attr_npcDexterity" placeholder="0" min="0"
step="1" title="npcDexterity" class="dh_input">
</div>
</div>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcConstitution">Odolnost</span> (<span name="attr_npcConstitutionBonus"></span>)</div>
<div
class="dh_col">
<input type="number" name="attr_npcConstitution" placeholder="0" min="0"
step="1" title="npcConstitution" class="dh_input">
</div>
</div>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcIntelligence">Inteligence</span> (<span name="attr_npcIntelligenceBonus"></span>)</div>
<div
class="dh_col">
<input type="number" name="attr_npcIntelligence" placeholder="0" min="0"
step="1" title="npcIntelligence" class="dh_input">
</div>
</div>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcCharisma">Charisma</span> (<span name="attr_npcCharismaBonus"></span>)</div>
<div
class="dh_col">
<input type="number" name="attr_npcCharisma" placeholder="0" min="0" step="1"
title="npcCharisma" class="dh_input">
</div>
</div>
<br>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcLevel">Úroveň</span>
</div>
<div class="dh_col">
<input type="number" name="attr_npcLevel" placeholder="0" min="0" step="1"
title="npcLevel" class="dh_input">
</div>
</div>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcHigherPower">Vyšší moc</span>
</div>
<div class="dh_col">
<input type="number" name="attr_npcHigherPower" placeholder="0" min="0"
step="1" title="npcHigherPower" class="dh_input">
</div>
</div>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcXp">Zkušenosti</span>
</div>
<div class="dh_col">
<input type="number" name="attr_npcXp" placeholder="0" min="0" step="1"
title="npcXp" class="dh_input">
</div>
</div>
</div>
<button type="action" name="act_editNpcAttributes" class="dh_pencil"></button>
</div>
<div class="dh_section dh_npcNotes dh_pa">
<div class="dh_col_12">
<div class="dh_label"><span title="npcNotes">Poznámky</span>
</div>
<div class="dh_row">
<textarea name="attr_npcNotes" rows="4" class="dh_input"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="dh_section dh_npc_center_panel">
<div class="dh_col_12">
<div class="dh_grid dh_npc_combat_container">
<div class="dh_section dh_npcCombat dh_pa">
<div class="dh_npcCombat_display">
<div class="dh_label"><span>Souboj</span>
</div>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcInitiative">Iniciativa</span>
</div>
<div class="dh_col">
<button type="roll" name="roll_npcInitiative" value="@{npcWhisper}&amp;{template:custom}{{title=Iniciativa v souboji}}{{subtitle=@{character_name}}}{{roll=Iniciativa [[1d6+(@{npcInitiative})+([[(@{npcInitiativeMod})+(@{npcRollMod})+(@{npcAdvantage})]]) &amp;{tracker}]]}} {{formula=(1k6 + OBR + Modifikátory)}} {{modifier=@{npcAdvantageText}@{npcRollModText}@{npcInitiativeModText}}}"
class="dh_button dh_npcInitiative">
<div class="dh_icon dh_icon_d6"></div><span name="attr_npcInitiative"></span>
</button>
</div>
</div>
<div class="dh_row dh_pa">
<div class="dh_col_4">
<div class="dh_label dh_text_left"><span title="repeating_npcattacks">Útok</span>
</div>
</div>
<div class="dh_col_8">
<fieldset class="repeating_npcattacks">
<div>
<div class="dh_row dh_justify_content_end">
<button type="roll" name="roll_npcAttack" value="@{npcWhisper}&amp;{template:custom}{{title=Útok @{name}}}{{subtitle=@{character_name}}}{{roll=Útok [[1d6!+(@{attack})+([[(@{attackMod})+(@{npcRollMod})+(@{npcAdvantage})]])]]}} {{formula=(1k6 + Útočné číslo + Modifikátory)}} {{modifier=@{npcAdvantageText}@{npcRollModText}@{npcAttackModText}}} {{damage=Zranění zbraně [[(@{damage})+(@{npcDamageMod})]] }} {{modifierDamage=@{npcDamageModText}}}"
class="dh_button dh_npcAttack">
<div class="dh_icon dh_icon_d6"></div><span name="attr_name"></span><span name="attr_attack"></span> (+<span
name="attr_damage"></span>)</button>
<input type="hidden" name="attr_name" value="">
<input type="hidden" name="attr_attack" value="1">
<input type="hidden" name="attr_damage" value="0">
</div>
</div>
</fieldset>
</div>
</div>
<div class="dh_row dh_pa">
<div class="dh_col_4">
<div class="dh_label dh_text_left"><span title="repeating_npcdefenses">Obrana</span>
</div>
</div>
<div class="dh_col_8">
<fieldset class="repeating_npcdefenses">
<div>
<div class="dh_row dh_justify_content_end">
<button type="roll" name="roll_npcDefense" value="@{npcWhisper}&amp;{template:custom}{{title=Obrana @{name}}}{{subtitle=@{character_name}}}{{roll=Obrana [[1d6!+(@{defense})+([[(@{npcBasicDefenseMod})+(@{npcDefenseMod})+(@{npcRollMod})+(@{npcAdvantage})]])]]}} {{formula=(1k6 + Obranné číslo + Modifikátory)}}{{modifier=@{npcAdvantageText}@{npcRollModText}@{npcDefenseModText}@{npcBasicDefenseModText}}}"
class="dh_button dh_npcDefense">
<div class="dh_icon dh_icon_d6"></div><span name="attr_name"></span><span name="attr_defense"></span>
</button>
<input type="hidden" name="attr_name" value="" class="dh_hidden">
<input type="hidden" name="attr_defense" value="0" class="dh_hidden">
</div>
</div>
</fieldset>
</div>
</div>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcBasicDefense">Pasivní obrana</span>
</div>
<div class="dh_col">
<button type="roll" name="roll_npcBasicDefense" value="@{npcWhisper}&amp;{template:custom}{{title=Pasivní obrana}}{{subtitle=@{character_name}}}{{roll=Pasivní obrana [[(@{npcBasicDefense})+([[(@{npcBasicDefenseMod})+(@{npcRollMod})+(@{npcAdvantage})]])]]}} {{formula=(Pasivní obrana + Modifikátory)}} {{modifier=@{npcAdvantageText}@{npcRollModText}@{npcBasicDefenseModText}}}"
class="dh_button dh_npcBasicDefense">
<div class="dh_icon dh_icon_d6"></div><span name="attr_npcBasicDefense"></span>
</button>
</div>
</div>
</div>
<div class="dh_npcCombat_modify">
<div class="dh_label"><span>Souboj</span>
</div>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcInitiative">Iniciativa</span>
</div>
<div class="dh_col">
<input type="number" name="attr_npcInitiative" placeholder="0" min="0"
step="1" title="npcInitiative" class="dh_input">
</div>
</div>
<div class="dh_label dh_text_left dh_pa"><span title="repeating_npcattacks">Útok</span>
</div>
<div class="dh_row dh_table dh_header">
<div title="name" class="dh_col_auto dh_grow dh_cell dh_name dh_justify_content_start">
<div class="dh_label"><span title="name">Název</span>
</div>
</div>
<div title="attack" class="dh_col_auto dh_shrink dh_cell dh_attack">
<div class="dh_label"><span title="attack">Útočné číslo</span>
</div>
</div>
<div title="damage" class="dh_col_auto dh_shrink dh_cell dh_damage">
<div class="dh_label"><span title="damage">Zranění</span>
</div>
</div>
</div>
<fieldset class="repeating_npcattacks">
<div>
<div class="dh_row dh_table">
<div class="dh_col_auto dh_grow dh_cell dh_name">
<input type="text" name="attr_name" size="1" class="dh_input dh_text_left">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_attack">
<input type="number" name="attr_attack" step="1" class="dh_input">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_damage">
<input type="number" name="attr_damage" min="0" step="1" class="dh_input">
</div>
</div>
</div>
</fieldset>
<div class="dh_label dh_text_left dh_pa"><span title="repeating_npcdefenses">Obrana</span>
</div>
<div class="dh_row dh_table dh_header">
<div title="name" class="dh_col_auto dh_grow dh_cell dh_name dh_justify_content_start">
<div class="dh_label"><span title="name">Název</span>
</div>
</div>
<div title="defense" class="dh_col_auto dh_shrink dh_cell dh_defense">
<div class="dh_label"><span title="defense">Obranné číslo</span>
</div>
</div>
</div>
<fieldset class="repeating_npcdefenses">
<div>
<div class="dh_row dh_table">
<div class="dh_col_auto dh_grow dh_cell dh_name">
<input type="text" name="attr_name" size="1" class="dh_input dh_text_left">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_defense">
<input type="number" name="attr_defense" step="1" class="dh_input">
</div>
</div>
</div>
</fieldset>
<div class="dh_row dh_align_center dh_pa">
<div class="dh_col dh_label dh_text_left"><span title="npcBasicDefense">Pasivní obrana</span>
</div>
<div class="dh_col">
<input type="number" name="attr_npcBasicDefense" placeholder="0" step="1"
title="npcBasicDefense" class="dh_input">
</div>
</div>
<br>
<br>
</div>
<button type="action" name="act_editNpcCombat" class="dh_pencil"></button>
</div>
<div class="dh_section dh_npcModifiers dh_pa">
<div class="dh_col_12">
<div class="dh_row">
<div class="dh_col_12">
<div class="dh_label"><span title="repeating_npcmodifiers">Modifikátory</span>
</div>
<div class="dh_row dh_table dh_header">
<div title="isActive" class="dh_col dh_shrink dh_cell dh_isActive"></div>
<div title="name" class="dh_col_auto dh_grow dh_cell dh_name dh_justify_content_start">
<div class="dh_label dh_text_left"><span title="name">Název</span>
</div>
</div>
<div title="modifier" class="dh_col_auto dh_shrink dh_cell dh_modifier">
<div class="dh_label"><span title="modifier">Mod</span>
</div>
</div>
<div title="attribute" class="dh_col_auto shrink dh_cell dh_attribute">
<div class="dh_label"><span title="attribute">Atribut</span>
</div>
</div>
</div>
<fieldset class="repeating_npcmodifiers">
<div>
<div class="dh_row dh_table">
<div class="dh_col_auto dh_shrink dh_cell dh_isActive">
<label title="isActive" class="dh_checkbox">
<input type="checkbox" name="attr_isActive" value="1"><span class="dh_checkmark"></span>
</label>
</div>
<div class="dh_col_auto dh_grow dh_cell dh_name">
<input type="text" size="1" name="attr_name" class="dh_input dh_text_left">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_modifier">
<input type="number" name="attr_modifier" placeholder="0" step="1" value="0"
class="dh_input">
</div>
<div class="dh_col_auto dh_shrink dh_cell dh_attribute dh_text_left">
<select size="1" name="attr_attribute" value="npcRollMod" class="dh_input">
<option value="npcRollMod" selected="selected">všechny hody</option>
<option value="npcInitiativeMod">iniciativa</option>
<option value="npcAttackMod">útok</option>
<option value="npcDamageMod">zranění</option>
<option value="npcDefenseMod">obrana</option>
<option value="npcBasicDefenseMod">základní obrana</option>
</select>
</div>
</div>
</div>
</fieldset>
</div>
</div>
</div>
</div>
<div class="dh_section dh_npcResistance dh_pa">
<div class="dh_col_12">
<div class="dh_label"><span title="npcResistance">Rezistence</span>
</div>
<div class="dh_row">
<textarea name="attr_npcResistance" rows="2" class="dh_input"></textarea>
</div>
</div>
</div>
<div class="dh_section dh_npcImmunity dh_pa">
<div class="dh_col_12">
<div class="dh_label"><span title="npcImmunity">Imunita</span>
</div>
<div class="dh_row">
<textarea name="attr_npcImmunity" rows="2" class="dh_input"></textarea>
</div>
</div>
</div>
<div class="dh_section dh_npcWeakness dh_pa">
<div class="dh_col_12">
<div class="dh_label"><span title="npcWeakness">Slabina</span>
</div>
<div class="dh_row">
<textarea name="attr_npcWeakness" rows="2" class="dh_input"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="dh_section dh_npc_right_panel">
<div class="dh_col_12">
<div class="dh_grid dh_npc_right_container">
<div class="dh_section dh_npcSkills dh_pa">
<div class="dh_col_12">
<div class="dh_label"><span title="repeating_npcskills">Dovednosti</span>
</div>
<div class="dh_addSkillSectionLabel dh_label"><span>Přidat dovednost</span>
</div>
<div class="dh_row dh_nowrap dh_pb">
<input type="hidden" name="attr_npcSelectedSkillType" value="general"
class="dh_npcSelectedSkillType">
<input type="hidden" name="attr_npcSelectedGeneralSkill" value="own" class="dh_npcGeneralSkill">
<input type="hidden" name="attr_npcSelectedWarriorSkill" value="own" class="dh_npcWarriorSkill">
<input type="hidden" name="attr_npcSelectedRangerSkill" value="own" class="dh_npcRangerSkill">
<input type="hidden" name="attr_npcSelectedMageSkill" value="own" class="dh_npcMageSkill">
<input type="hidden" name="attr_npcSelectedClericSkill" value="own" class="dh_clericSkill">
<input type="hidden" name="attr_npcSelectedClericSkill" value="own" class="dh_clericSkill">
<input type="hidden" name="attr_npcSelectedThiefSkill" value="own" class="dh_thiefSkill">
<select name="attr_npcSelectedSkillType" class="dh_input">
<option value="general" selected="selected">Obecná</option>
<option value="warrior">Válečník</option>
<option value="ranger">Hraničář</option>
<option value="alchemist">Alchymista</option>
<option value="mage">Kouzelník</option>
<option value="thief">Zloděj</option>
<option value="cleric">Klerik</option>
</select>
<select name="attr_npcSelectedGeneralSkill" class="dh_input dh_npcGeneralSkills">
<option value="own" selected="selected">Vlastní</option>
<option>Akrobacie</option>
<option>Atletika</option>
<option>Cizí jazyky</option>
<option>Čtení a psaní</option>
<option>Historie</option>
<option>Jízda na zvířeti</option>
<option>Mechanika</option>
<option>Plavání</option>
<option>Plížení</option>
<option>Postřeh</option>
<option>První pomoc</option>
<option>Přežití v přírodě</option>
<option>Reflex</option>
<option>Řemesla</option>
<option>Umění</option>
<option>Teologie</option>
<option>Vůle</option>
<option>Výdrž</option>
<option>Znalost přírody</option>
<option>Zpracování zvěře</option>
</select>
<select name="attr_npcSelectedWarriorSkill" class="dh_npcWarriorSkills dh_input">
<option value="own" selected="selected">Vlastní</option>
</select>
<select name="attr_npcSelectedRangerSkill" class="dh_npcRangerSkills dh_input">
<option value="own" selected="selected">Vlastní</option>
<option>Pouto s přírodou</option>
<option>Lov</option>
<option>Orientace</option>
<option>Předpovídání počasí</option>
<option>Stopování</option>
<option>Ochočování zvířat</option>
<option>Kamufláž</option>
<option>Líčení pastí</option>
<option>Zahlazování stop</option>
</select>
<select name="attr_npcSelectedAlchemistSkill" class="dh_npcAlchemistSkills dh_input">
<option value="own" selected="selected">Vlastní</option>
<option>Vidění many</option>
<option>Destilace many</option>
<option>Lučba</option>
<option>Pokročilá identifikace</option>
<option>Výroba svitků</option>
</select>
<select name="attr_npcSelectedMageSkill" class="dh_npcMageSkills dh_input">
<option value="own" selected="selected">Vlastní</option>
<option>Sesílání kouzel</option>
</select>
<select name="attr_npcSelectedThiefSkill" class="dh_npcThiefSkills dh_input">
<option value="own" selected="selected">Vlastní</option>
<option>Hazardní hry</option>
<option>Odhad ceny</option>
<option>Presvědčování</option>
<option>Vybírání kapes</option>
<option>Falešný útok</option>
<option>Imitace</option>
<option>Lezení</option>
<option>Mimika</option>
<option>Odhad lidí</option>
<option>Odstranění pastí</option>
<option>Odvedení pozornosti</option>
<option>Ohebnost</option>
<option>Oko střelce</option>
<option>Omráčení</option>
<option>Otevírání zámků</option>
<option>Pád z výšky</option>
<option>Padělání</option>
<option>Převleky</option>
<option>Schování se ve stínu</option>
<option>Splynutí s davem</option>
<option>Tichý pohyb</option>
<option>Získání důvěry</option>
</select>
<select name="attr_npcSelectedClericSkill" class="dh_npcClericSkills dh_input">
<option value="own" selected="selected">Vlastní</option>
<option>Prosby</option>
</select>
<button type="action" name="act_addNpcSkill" class="dh_button">
<div class="dh_icon dh_icon_plus"></div>
</button>
</div>
<fieldset class="repeating_npcskills">
<div>
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"
class="dh_isEditing">
<input type="hidden" name="attr_description">
<input type="hidden" name="attr_skillLevel" value="0">
<input type="hidden" name="attr_printText">
<div class="dh_row dh_table dh_nowrap dh_read">
<input type="hidden" name="attr_rollStrength">
<input type="hidden" name="attr_rollDexterity">
<input type="hidden" name="attr_rollConstitution">
<input type="hidden" name="attr_rollIntelligence">
<input type="hidden" name="attr_rollCharisma">
<div class="dh_col_auto dh_grow dh_cell dh_printText">
<button type="roll" name="roll_printText" value="@{npcWhisper}&amp;{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}"
class="dh_button">
<div class="dh_icon dh_icon_scroll"></div>
</button>
</div>
<div class="dh_col dh_cell dh_grow dh_skillLevel"><span name="attr_skillLevel" value="0" placeholder="0" step="1" min="0"></span>
</div>
<div class="dh_col_fill dh_cell dh_text_truncate dh_justify_content_start dh_name"><span name="attr_name"></span>
</div>
<div class="dh_col dh_cell dh_shrink">
<input type="checkbox" name="attr_isStrength" value="1" class="dh_isStrengthCondition">
<button type="roll" name="roll_skillStrength" value="@{rollStrength}"
class="dh_button dh_skill_strength">
<div class="dh_icon dh_icon_d10"></div>
<div class="dh_label"><span>SIL</span>
</div>
</button>
<input type="checkbox" name="attr_isDexterity" value="1" class="dh_isDexterityCondition">
<button type="roll" name="roll_skillDexterity" value="@{rollDexterity}"
class="dh_button dh_skill_dexterity">
<div class="dh_icon dh_icon_d10"></div>
<div class="dh_label"><span>OBR</span>
</div>
</button>
<input type="checkbox" name="attr_isConstitution" value="1" class="dh_isConstitutionCondition">
<button type="roll" name="roll_skillConstitution" value="@{rollConstitution}"
class="dh_button dh_skill_constitution">
<div class="dh_icon dh_icon_d10"></div>
<div class="dh_label"><span>ODO</span>
</div>
</button>
<input type="checkbox" name="attr_isIntelligence" value="1" class="dh_isIntelligenceCondition">
<button type="roll" name="roll_skillIntelligence" value="@{rollIntelligence}"
class="dh_button dh_skill_intelligence">
<div class="dh_icon dh_icon_d10"></div>
<div class="dh_label"><span>INT</span>
</div>
</button>
<input type="checkbox" name="attr_isCharisma" value="1" class="dh_isCharismaCondition">
<button type="roll" name="roll_skillCharisma" value="@{rollCharisma}"
class="dh_button dh_skill_charisma">
<div class="dh_icon dh_icon_d10"></div>
<div class="dh_label"><span>CHA</span>
</div>
</button>
</div>
<div class="dh_col_auto dh_cell">
<label title="isEditing" class="dh_checkbox dh_button dh_pa_0">
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"><span class="dh_checkmark dh_pencil"></span>
</label>
</div>
</div>
<div class="dh_row dh_table dh_modify">
<div class="dh_col_12">
<div class="dh_row dh_nowrap">
<div class="dh_col_fill">
<div title="name" class="dh_label dh_nameLabel"><span title="repeating_melee">Název</span>
</div>
</div>
<div class="dh_col">
<label title="isEditing" class="dh_checkbox dh_button dh_pa_0">
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"><span class="dh_checkmark dh_pencil"></span>
</label>
</div>
</div>
<div class="dh_row dh_pb">
<input type="text" placeholder="Název" name="attr_name" size="1" class="dh_skillName dh_input">
</div>
<div class="dh_row dh_align_center dh_pb">
<div title="skillLevel" class="dh_col dh_label dh_text_left"><span>Stupeň dovednosti</span>
</div>
<div class="dh_col dh_shrink">
<input type="number" placeholder="0" min="0" step="1" name="attr_skillLevel"
class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div title="isKnowledgeBased" class="dh_col dh_label dh_text_left"><span>Znalostní</span>
</div>
<div class="dh_col dh_shrink">
<label class="dh_checkbox">
<input type="checkbox" name="attr_isKnowledgeBased" value="1"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div title="isProfessionBased" class="dh_col dh_label dh_text_left"><span>Profesní</span>
</div>
<div class="dh_col dh_shrink">
<label class="dh_checkbox">
<input type="checkbox" name="attr_isProfessionBased" value="1"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_row dh_nowrap">
<div class="dh_col dh_label"><span>SIL</span>
</div>
<div class="dh_col dh_label"><span>OBR</span>
</div>
<div class="dh_col dh_label"><span>ODO</span>
</div>
<div class="dh_col dh_label"><span>INT</span>
</div>
<div class="dh_col dh_label"><span>CHA</span>
</div>
</div>
<div class="dh_row dh_nowrap dh_justify_content_space_around dh_pb">
<label title="isStrength" class="dh_checkbox">
<input type="checkbox" name="attr_isStrength" value="1" class="dh_isStrengthValue"><span class="dh_checkmark"></span>
</label>
<label title="isDexterity" class="dh_checkbox">
<input type="checkbox" name="attr_isDexterity" value="1" class="dh_isDexterityValue"><span class="dh_checkmark"></span>
</label>
<label title="isConstitution" class="dh_checkbox">
<input type="checkbox" name="attr_isConstitution" value="1" class="dh_isConstitutionValue"><span class="dh_checkmark"></span>
</label>
<label title="isIntelligence" class="dh_checkbox">
<input type="checkbox" name="attr_isIntelligence" value="1" class="dh_isIntelligenceValue"><span class="dh_checkmark"></span>
</label>
<label title="isCharisma" class="dh_checkbox">
<input type="checkbox" name="attr_isCharisma" value="1" class="dh_col dh_isCharismaValue"><span class="dh_checkmark"></span>
</label>
</div>
<div title="description" class="dh_label"><span>Popis</span>
</div>
<textarea name="attr_description" rows="2" class="dh_input"></textarea>
<div title="printText" class="dh_label"><span>Text v makru</span>
</div>
<textarea name="attr_printText" rows="2" class="dh_input"></textarea>
<div title="macro" class="dh_label"><span>Makro</span>
</div>
<textarea name="attr_macro" rows="2" class="dh_input"></textarea>
</div>
</div>
</div>
</fieldset>
</div>
</div>
<div class="dh_section dh_npcActiveAbilities dh_pa">
<div class="dh_col_12">
<input type="hidden" name="attr_npcSelectedManaType" value="mana" class="dh_npcSelectedManaType">
<div class="dh_label"><span title="repeating_npcactiveabilities">Aktivní schopnosti</span>
</div>
<div class="dh_row dh_nowrap dh_pb dh_npcActiveAbilitiesAdd">
<input type="hidden" name="attr_addActiveAbilityProfession" value="Warrior"
class="dh_addActiveAbilityProfession">
<input type="hidden" name="attr_addActiveAbility" value="WarriorGeneral"
class="dh_addActiveAbilityHidden">
<select name="attr_addActiveAbilityProfession" class="dh_activeProfession dh_input">
<option value="Warrior" selected="selected">Válečník</option>
<option value="Ranger">Hraničář</option>
<option value="Alchemist">Alchymista</option>
<option value="Mage">Kouzelník</option>
<option value="Thief">Zloděj</option>
<option value="Priest">Klerik</option>
</select>
<select name="attr_addActiveAbility" class="dh_activeWarrior dh_input">
<option value="WarriorGeneral">Obecné triky</option>
</select>
<select name="attr_addActiveAbility" class="dh_activeRanger dh_input">
<option value="RangerGeneral">Hraničářská magie</option>
</select>
<select name="attr_addActiveAbility" class="dh_activeAlchemist dh_input">
<option value="AlchemistGeneral">Obecné recepty</option>
</select>
<select name="attr_addActiveAbility" class="dh_activeMage dh_input">
<option value="MageGeneral">Obecná magie</option>
</select>
<select name="attr_addActiveAbility" class="dh_activeThief dh_input"></select>
<select name="attr_addActiveAbility" class="dh_activePriest dh_input">
<option value="PriestGeneral">Obecné prosby</option>
</select>
<select name="attr_addActiveAbilitySelection" class="dh_activeWarriorGeneral dh_input">
<option value="-">-</option>
<option value="Zuřivý útok">Zuřivý útok</option>
<option value="Bojová připravenost">Bojová připravenost</option>
</select>
<select name="attr_addActiveAbilitySelection" class="dh_activeRangerGeneral dh_input">
<option value="-">-</option>
<option value="Rozdělej oheň">Rozdělej oheň</option>
<option value="Najdi úkryt">Najdi úkryt</option>
<option value="Znamení">Znamení</option>
<option value="Najdi vodu">Najdi vodu</option>
</select>
<select name="attr_addActiveAbilitySelection" class="dh_activeAlchemistGeneral dh_input">
<option value="-">-</option>
<option value="Bomba">Bomba</option>
<option value="Dýmovnice">Dýmovnice</option>
<option value="Kouzelný inkoust">Kouzelný inkoust</option>
<option value="Lakmusový papírek">Lakmusový papírek</option>
<option value="Lektvar medvědí síly">Lektvar medvědí síly</option>
<option value="Lektvar neutralizace">Lektvar neutralizace</option>
<option value="Lektvar mucholapka">Lektvar mucholapka</option>
<option value="Lektvar rychlost">Lektvar rychlost</option>
<option value="Lektvar ranhojič">Lektvar ranhojič</option>
<option value="Lektvar změny velikosti">Lektvar změny velikosti</option>
<option value="Zápalná Šňůra">Zápalná Šňůra</option>
<option value="Univerzální protijed">Univerzální protijed</option>
<option value="Zředěný líh">Zředěný líh</option>
</select>
<select name="attr_addActiveAbilitySelection" class="dh_activeMageGeneral dh_input">
<option value="-">-</option>
<option value="Bertoldův zámek">Bertoldův zámek</option>
<option value="Blesk">Blesk</option>
<option value="Kukátko">Kukátko</option>
<option value="Levitace">Levitace</option>
<option value="Magický štít">Magický štít</option>
<option value="Magická střela">Magická střela</option>
<option value="Najdi předmět">Najdi předmět</option>
<option value="Neviditelnost">Neviditelnost</option>
<option value="Očaruj zbraň">Očaruj zbraň</option>
<option value="Oheň">Oheň</option>
<option value="Rychlost">Rychlost</option>
<option value="Světlo">Světlo</option>
<option value="Teleport">Teleport</option>
</select>
<select name="attr_addActiveAbilitySelection" class="dh_activePriestGeneral dh_input">
<option value="-">-</option>
<option value="Léčivé ruce">Léčivé ruce</option>
<option value="Očištení">Očištení</option>
<option value="Štít víry">Štít víry</option>
<option value="Úder moci">Úder moci</option>
<option value="Uzdrav otravu">Uzdrav otravu</option>
</select>
<button type="action" name="act_addNpcActiveAbility" class="dh_button">
<div class="dh_icon dh_icon_plus"></div>
</button>
</div>
<fieldset class="repeating_npcactiveabilities">
<div>
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"
class="dh_isEditing">
<input type="checkbox" name="attr_settingsVisible" value="0" checked="checked"
class="dh_settingsVisible">
<input type="hidden" name="attr_skillLevel" value="0">
<input type="hidden" name="attr_printMacro">
<div class="dh_row dh_nowrap dh_table dh_read">
<div class="dh_col_auto dh_grow dh_cell dh_printText">
<button type="roll" name="roll_printText" value="@{printMacro}" class="dh_button">
<div class="dh_icon dh_icon_scroll"></div>
</button>
</div>
<div class="dh_col_fill dh_cell dh_text_truncate dh_justify_content_start dh_name"><span name="attr_name"></span>
</div>
<div class="dh_col dh_cell dh_shrink">
<button type="roll" name="roll_macro" value="@{macro}" class="dh_button">
<div class="dh_icon dh_icon_d10"></div>
</button>
</div>
<div class="dh_col_auto dh_cell">
<label title="isEditing" class="dh_checkbox dh_button dh_pa_0">
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"><span class="dh_checkmark dh_pencil"></span>
</label>
</div>
</div>
<div class="dh_row dh_table dh_modify">
<div class="dh_col_12">
<div class="dh_row dh_nowrap">
<div class="dh_col_fill">
<div class="dh_label dh_nameLabel"><span title="name">Název</span>
</div>
</div>
<div class="dh_col">
<label title="isEditing" class="dh_checkbox dh_button dh_pa_0">
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"><span class="dh_checkmark dh_pencil"></span>
</label>
</div>
</div>
<div class="dh_row dh_pb">
<input type="text" name="attr_name" placeholder="Název" size="1" class="dh_input">
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_isAllAttributesVisibleToggle dh_text_left"><span title="isAttackRoll">Hod na útok</span>
</div>
<div class="dh_col">
<label class="dh_checkbox">
<input type="checkbox" name="attr_isAttackRoll" value="1"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_row dh_align_center dh_isAllAttributesVisibleToggle dh_pb">
<div title="attackRollBonus" class="dh_col dh_label dh_text_left"><span>Bonus do útoku</span>
</div>
<div class="dh_col">
<input type="text" name="attr_attackRollBonus" placeholder="5" size="1"
class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_isAllAttributesVisibleToggle dh_pb">
<div title="attackDamageBonus" class="dh_col dh_label dh_text_left"><span>Bonus do zranění</span>
</div>
<div class="dh_col">
<input type="text" name="attr_attackDamageBonus" placeholder="2" size="1"
class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_isAllAttributesVisibleToggle dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="isDefenseRoll">Hod na obranu</span>
</div>
<div class="dh_col">
<label class="dh_checkbox">
<input type="checkbox" name="attr_isDefenseRoll" value="1"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_row dh_align_center dh_isAllAttributesVisibleToggle dh_pb">
<div title="defenseRollType" class="dh_col dh_label dh_text_left"><span>Typ obrany</span>
</div>
<div class="dh_col">
<select name="attr_defenseRollType" value="melee" class="dh_input">
<option value="melee">Obrana na blízko</option>
<option value="ranged">Obrana na dálku</option>
<option value="basic">ZO</option>
<option value="all">Všechny typy</option>
</select>
</div>
</div>
<div class="dh_row dh_align_center dh_isAllAttributesVisibleToggle dh_pb">
<div title="defenseRollBonus" class="dh_col dh_label dh_text_left"><span>Bonus do obrany</span>
</div>
<div class="dh_col">
<input type="text" name="attr_defenseRollBonus" placeholder="5" size="1"
class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_npc_adrenalin dh_label dh_text_left"><span title="mana">Adrenalin</span>
</div>
<div class="dh_col dh_npc_goodwill dh_label dh_text_left"><span title="mana">Přízeň</span>
</div>
<div class="dh_col dh_npc_mana dh_label dh_text_left"><span title="mana">Mana</span>
</div>
<div class="dh_col dh_npc_mentalStrength dh_label dh_text_left"><span title="mana">Duševní síla</span>
</div>
<div class="dh_col dh_shrink">
<input type="number" name="attr_mana" placeholder="0" min="0" step="1"
value="0" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_npc_adrenalin dh_label dh_text_left"><span title="additionalMana">Dodatečný adrenalin (text)</span>
</div>
<div class="dh_col dh_npc_goodwill dh_label dh_text_left"><span title="additionalMana">Dodatečná přízeň (text)</span>
</div>
<div class="dh_col dh_npc_mana dh_label dh_text_left"><span title="additionalMana">Dodatečná mana (text)</span>
</div>
<div class="dh_col dh_npc_mentalStrength dh_label dh_text_left"><span title="additionalMana">Dodatečná duševní síla (text)</span>
</div>
<div class="dh_col">
<input type="text" name="attr_additionalMana" placeholder="2 za další kolo"
size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_npc_adrenalin dh_label dh_text_left"><span title="additionalManaNum">Dodatečný adrenalin</span>
</div>
<div class="dh_col dh_npc_goodwill dh_label dh_text_left"><span title="additionalManaNum">Dodatečná přízeň</span>
</div>
<div class="dh_col dh_npc_mana dh_label dh_text_left"><span title="additionalManaNum">Dodatečná mana</span>
</div>
<div class="dh_col dh_npc_mentalStrength dh_label dh_text_left"><span title="additionalManaNum">Dodatečná duševní síla</span>
</div>
<div class="dh_col dh_shrink">
<input type="number" name="attr_additionalManaNum" placeholder="0" min="0"
step="1" value="0" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="resources">Suroviny</span>
</div>
<div class="dh_col dh_shrink">
<input type="number" name="attr_resources" placeholder="0" min="0" step="1"
value="0" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="base">Základ</span>
</div>
<div class="dh_col">
<input type="text" name="attr_base" size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="range">Dosah</span>
</div>
<div class="dh_col">
<input type="text" name="attr_range" placeholder="10 sáhů" size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="target">Rozsah</span>
</div>
<div class="dh_col">
<input type="text" name="attr_target" placeholder="1 tvor" size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="duration">Trvání</span>
</div>
<div class="dh_col">
<input type="text" name="attr_duration" placeholder="ihned" size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="castingTime">Vyvolání/Vzývání/Výroba</span>
</div>
<div class="dh_col">
<input type="text" name="attr_castingTime" placeholder="1 kolo" size="1"
class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="frequency">Četnost</span>
</div>
<div class="dh_col">
<input type="text" name="attr_frequency" placeholder="10 minut" size="1"
class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="usage">Použití</span>
</div>
<div class="dh_col">
<input type="text" name="attr_usage" placeholder="do útoku" size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="difficulty">Obtížnost</span>
</div>
<div class="dh_col dh_shrink">
<input type="number" name="attr_difficulty" placeholder="0" min="0" step="1"
value="0" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="difficulty">Dodatečná obtížnost</span>
</div>
<div class="dh_col dh_shrink">
<input type="number" name="attr_additionalDifficulty" placeholder="0"
min="0" step="1" value="0" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="prerequisite">Vyžaduje</span>
</div>
<div class="dh_col">
<input type="text" name="attr_prerequisite" placeholder="Název schopnosti"
size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_label"><span title="description">Popis</span>
</div>
<textarea name="attr_description" rows="2" class="dh_input"></textarea>
<div class="dh_settingsVisibleToggle dh_col_auto dh_cell"><span>Nastavení </span><span class="dh_moreSettings">více</span><span
class="dh_lessSettings">méně</span>
<label title="settingsVisible" class="dh_checkbox">
<input type="checkbox" name="attr_settingsVisible"><span class="dh_settingsVisibleButton dh_settingVisibility"></span>
</label>
</div>
<div class="dh_row dh_table dh_settingsVisibleBlock">
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="selectedProfessionSkill">Ověrovací dovednost</span>
</div>
<div class="dh_col">
<input type="text" name="attr_selectedProfessionSkill" placeholder="Název dovednosti"
size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="castingAttribute">Atribut pro ověření</span>
</div>
<div class="dh_col">
<select name="attr_castingAttribute" value="none" class="dh_input">
<option value="" selected="selected">žádný</option>
<option value="SIL">SIL</option>
<option value="OBR">OBR</option>
<option value="ODO">ODO</option>
<option value="INT">INT</option>
<option value="CHA">CHA</option>
</select>
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="selectedProfessionSkill">Past dovednosti</span>
</div>
<div class="dh_col">
<input type="text" name="attr_secondaryRoll" placeholder="Název dovednosti"
size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="castingAttribute">Atribut pro past</span>
</div>
<div class="dh_col">
<select name="attr_secondaryCastingAttribute" value="none" class="dh_input">
<option value="" selected="selected">žádný</option>
<option value="SIL">SIL</option>
<option value="OBR">OBR</option>
<option value="ODO">ODO</option>
<option value="INT">INT</option>
<option value="CHA">CHA</option>
</select>
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div title="secondaryRollAgainst" class="dh_col dh_label dh_text_left"><span>Past proti</span>
</div>
<div class="dh_col">
<input type="text" name="attr_secondaryRollAgainst" placeholder="Vůle (CHAR) protivníka"
size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div title="damage" class="dh_col dh_label dh_text_left"><span>Zranění / Efekt</span>
</div>
<div class="dh_col">
<input type="text" name="attr_damage" placeholder="2k6" size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_pb">
<div title="damageType" class="dh_col dh_label dh_text_left"><span>Typ zranění</span>
</div>
<div class="dh_col">
<input type="text" name="attr_damageType" placeholder="ledové zranění"
size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_custom dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="isMulticast">Vícenásobné seslání</span>
</div>
<div class="dh_col">
<label class="dh_checkbox">
<input type="checkbox" name="attr_isMulticast" value="1"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_row dh_align_center dh_custom dh_pb">
<div title="multicastLabel" class="dh_col dh_label dh_text_left"><span>Text vícenásobného sesílání</span>
</div>
<div class="dh_col">
<input type="text" name="attr_multicastLabel" placeholder="Vícenásobné sesílání"
size="1" class="dh_input_grow">
</div>
</div>
<div class="dh_row dh_align_center dh_custom dh_pb">
<div title="obtainedLevel" class="dh_col dh_label dh_text_left"><span>Získaná na úrovni</span>
</div>
<div class="dh_col">
<input type="text" name="attr_obtainedLevel" placeholder="5" size="1"
class="dh_input_grow">
</div>
</div>
<div class="dh_label"><span title="printText">Text v makru</span>
</div>
<textarea name="attr_printText" rows="2" class="dh_input"></textarea>
<input type="checkbox" name="attr_customMacro" class="dh_macroEditable">
<div class="dh_row dh_align_center dh_custom dh_pb">
<div class="dh_col dh_label dh_text_left"><span title="Rekalkulovat makro pri změně parametrŮ (customMacro)">Vlastní makro</span>
</div>
<div class="dh_col">
<label class="dh_checkbox">
<input type="checkbox" name="attr_customMacro"><span class="dh_checkmark"></span>
</label>
</div>
</div>
<div class="dh_label"><span title="macro">Makro</span>
</div>
<textarea name="attr_macro" rows="2" class="dh_input dh_macro"></textarea>
</div>
</div>
</div>
</div>
</fieldset>
</div>
</div>
<div class="dh_section dh_npcPassiveAbilities dh_pa">
<div class="dh_col_12">
<div class="dh_label"><span title="repeating_npcpassivebilities">Pasivní schopnosti</span>
</div>
<fieldset class="repeating_npcpassivebilities">
<div>
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"
class="dh_isEditing">
<div class="dh_row dh_nowrap dh_table dh_read">
<div class="dh_col_auto dh_grow dh_cell dh_printText">
<button type="roll" name="roll_printText" value="@{whisper}&amp;{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}"
class="dh_button">
<div class="dh_icon dh_icon_scroll"></div>
</button>
</div>
<div class="dh_col_fill dh_cell dh_text_truncate dh_justify_content_start dh_name"><span name="attr_name"></span>
</div>
<div class="dh_col_auto dh_cell">
<label title="isEditing" class="dh_checkbox dh_button dh_pa_0">
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"><span class="dh_checkmark dh_pencil"></span>
</label>
</div>
</div>
<div class="dh_row dh_table dh_modify">
<div class="dh_col_12">
<div class="dh_row dh_nowrap">
<div class="dh_col_fill">
<div class="dh_label dh_nameLabel"><span title="name">Název</span>
</div>
</div>
<div class="dh_col">
<label title="isEditing" class="dh_checkbox dh_button dh_pa_0">
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"><span class="dh_checkmark dh_pencil"></span>
</label>
</div>
</div>
<div class="dh_row dh_pb">
<input type="text" size="1" placeholder="Název" name="attr_name" class="dh_input">
</div>
<div class="dh_label"><span title="description">Popis</span>
</div>
<textarea name="attr_description" rows="2" class="dh_input"></textarea>
</div>
</div>
</div>
</fieldset>
</div>
</div>
<div class="dh_section dh_npcInventory dh_pa">
<div class="dh_col_12">
<div class="dh_label"><span title="npcInventory">Inventář</span>
</div>
<div class="dh_row">
<textarea name="attr_npcInventory" rows="2" class="dh_input"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="dh_grid dh_npc_settings_tab_content">
<div class="dh_section dh_settings_center dh_px">
<div class="dh_col_12">
<div class="dh_row">
<div class="dh_label"><span>Nastavení</span>
</div>
</div>
<div class="dh_row dh_justify_content_start dh_align_content_center dh_pa">
<label title="isBackground" class="dh_checkbox dh_button">
<input type="checkbox" name="attr_isBackground" value="1" checked="checked"><span class="dh_checkmark"></span><span class="dh_checkbox_text">zobrazit pozadí</span>
</label>
<label title="isSettingVisible" class="dh_checkbox dh_button">
<input type="checkbox" name="attr_isSettingVisible" value="1"><span class="dh_checkmark"></span><span class="dh_checkbox_text">pokročilé funkce</span>
</label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script type="text/worker">
const Abilities = [
{
'name': 'Zuřivý útok',
'content': 'Válečník dokáže přetavit své bojové vzrušení do zuřivého útoku. V něm je pak rychlejší, silnější a nebezpečnější. Tímto trikem získává válečník bonus +3 do útoku.',
'data': {
'name': 'Zuřivý útok',
'description': 'Válečník získává bonus +3 do útoku.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Válečník',
'profession': 'Válečník',
'isAttackRoll': true,
'attackRollBonus': '3',
'attackDamageBonus': '0',
'cost': '2',
'additionalCost': '',
'prerequisite': '-',
'usage': 'do útoku',
'printText': 'Používám bojový trik: Zuřivý útok. Válečník získává bonus +3 do útoku. Používá se do útoku.',
'macro': '&{template:default}{{name=abilityName}}{{Adrenalin=2}}'
}
},
{
'name': 'Bojová připravenost',
'content': 'Pokud se schyluje k boji, dokáže válečník rozpoznat nebezpečí a reagovat na něj dříve než ostatní. Díky tomuto triku získá válečník bonus +2 k první bojové akci (útok / obrana), kterou v daném kole provede. Tento trik lze uplatnit pouze na začátku boje. Nedá se navíc použít v případě, kdy válečník útok nečekal (přepadení ze zálohy a podobně). ',
'data': {
'name': 'Bojová připravenost',
'isAttackRoll': true,
'attackRollBonus': '2',
'isDefenseRoll': true,
'defenseRollType': 'all',
'defenseRollBonus': '2',
'description': 'Bonus +2 k první bojové akci (útok / obrana), kterou v prvním kole provede.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Válečník',
'profession': 'Válečník',
'cost': '0',
'additionalCost': '',
'prerequisite': '-',
'usage': 'v začátku boje',
'printText': 'Používám bojový trik: Bojová připravenost. Bonus +2 k první bojové akci (útok / obrana), kterou v prvním kole provede. Používá se v začátku boje.',
'macro': '&{template:default}{{name=abilityName}}{{Adrenalin=0}}'
}
},
{
'name': 'Rozdělej oheň',
'content': 'Tímto kouzlem dokáže hraničář zapálit i zcela mokré dřevo, listí a podobně. Zvládne to i za silného deště či bouřky. Oheň pak bude hořet tak dlouho, dokud je do něj přikládáno. Kouzlo nelze použít pod vodou ani na předměty v ní ponořené. Stejně tak nebude fungovat ani na živé tvory.',
'data': {
'name': 'Rozdělej oheň',
'description': 'Hraničář zapálí zcela mokré dřevo, listí či podobný materiál. Zvládne to za silného deště či bouřky.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Hraničář',
'profession': 'Hraničář',
'cost': '2',
'additionalCost': '',
'selectedProfessionSkill': 'Pouto s přírodou',
'castingAttribute': 'INT',
'range': '0,5 sáhu',
'target': 'hořlavý materiál',
'duration': 'ihned',
'castingTime': '1 minuta',
'difficulty': 6,
'prerequisite': '',
'printText': 'Používám kouzlo: Rozdělej oheň. Hraničář zapálí zcela mokré dřevo, listí či podobný materiál. Zvládne to za silného deště či bouřky.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Duševní síla=2}}{{Dosah=0,5 sáhu}}{{Vyvolání=10}}{{Obtížnost=6}}'
}
},
{
'name': 'Najdi úkryt',
'content': 'Tímto kouzlem dokáže hraničář vycítit směr k nejbližšímu přírodnímu úkrytu (pokud se v okolí nějaký takový nachází). Úkrytem je míněno místo, které dokáže ochránit před větrem, deštěm či zvědavými pohledy tuláků. Běžně se může jednat o skalní převis, vykotlaný kmen stromu nebo třeba jeskyni. Hraničář zároveň vytuší, zda je toto místo dostatečně velké pouze pro něj, nebo i pro zbytek družiny.',
'data': {
'name': 'Najdi úkryt',
'description': 'Hraničář po 1 kolo vycítí směr k nejbližšímu přírodnímu úkrytu (pokud se v okolí nějaký takový nachází).',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Hraničář',
'profession': 'Hraničář',
'cost': '3',
'additionalCost': '',
'selectedProfessionSkill': 'Pouto s přírodou',
'castingAttribute': 'INT',
'range': '1000 sáhů',
'target': 'hraničář',
'duration': '1kolo',
'castingTime': '1 kolo',
'difficulty': 8,
'prerequisite': '',
'printText': 'Používám kouzlo: Najdi úkryt. Hraničář po 1 kolo vycítí směr k nejbližšímu přírodnímu úkrytu (pokud se v okolí nějaký takový nachází).',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Duševní síla=3}}{{Dosah=1000 sáhů}}{{Vyvolání=1}}{{Obtížnost=8}}'
}
},
{
'name': 'Znamení',
'content': 'Znamení se používá tehdy, pokud nechce hraničář zabloudit nebo potřebuje někam navést ostatní. Lze jím vytvořit značku na přírodním materiálu. Na stromě může začít jemně vytékat (i světélkovat) pryskyřice, na kameni může začít prosakovat voda a podobně. V okamžiku seslání může hraničář rozhodnout, jestli má být značka viditelná stále a všem, nebo jen jemu samotnému, pokud se nachází do deseti stáhů od ní.',
'data': {
'name': 'Znamení',
'description': 'Hraničář vytvoří až 10 „značek“ na přírodním materiálu, které vydrží až 1 den. Může se rozhodnout, jestli bude značka viditelná všem, nebo jen jemu samotnému.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Hraničář',
'profession': 'Hraničář',
'cost': '1',
'additionalCost': '',
'selectedProfessionSkill': 'Pouto s přírodou',
'castingAttribute': 'INT',
'range': 'dotek',
'target': 'až 10 značek',
'duration': '1den',
'castingTime': '1 kolo',
'difficulty': 6,
'prerequisite': '',
'printText': 'Používám kouzlo: Znamení. Hraničář vytvoří až 10 „značek“ na přírodním materiálu, které vydrží až 1 den. Může se rozhodnout, jestli bude značka viditelná všem, nebo jen jemu samotnému.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Duševní síla=1}}{{Dosah=dotek}}{{Vyvolání=1}}{{Obtížnost=6}}'
}
},
{
'name': 'Najdi vodu',
'content': 'S pomocí tohoto kouzla dokáže hraničář vycítit směr a vzdálenost k nejbližšímu zdroji pitné vody (pokud v dosahu nějaká je). Vždy se navíc musí jednat o její přírodní zdroj (tj. nejbližší řeku, jezírko, pramen a podobně). Nehrozí tedy, že by ho kouzlo zavedlo k měchu na vodou, sudu a podobně.',
'data': {
'name': 'Najdi vodu',
'description': 'Hraničář po 1 kolo vycítí směr a vzdálenost k nejbližšímu zdroji pitné vody (pokud v dosahu nějaká je).',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Hraničář',
'profession': 'Hraničář',
'cost': '3',
'additionalCost': '',
'selectedProfessionSkill': 'Pouto s přírodou',
'castingAttribute': 'INT',
'range': '1000 sáhů',
'target': 'hraničář',
'duration': '1kolo',
'castingTime': '1 kolo',
'difficulty': 6,
'prerequisite': '',
'printText': 'Používám kouzlo: Najdi vodu. Hraničář po 1 kolo vycítí směr a vzdálenost k nejbližšímu zdroji pitné vody (pokud v dosahu nějaká je).',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Duševní síla=3}}{{Dosah=1000 sáhů}}{{Vyvolání=1}}{{Obtížnost=6}}'
}
},
{
'name': 'Bomba',
'content': 'Bomba je železná koule o velikosti lidské dlaně naplněná třaskavinou. K jejímu odpálení se používá zápalná šňůra. Její délka určuje počet kol do výbuchu (kolo za každých 10 coulů délky). Při explozi je každý tvor v okruhu pěti sáhů kolem bomby zraněn střepinami za 2k6+4 životů. Používá se vržením.',
'data': {
'name': 'Bomba',
'description': 'Bomba je železná koule o velikosti lidské dlaně naplněná třaskavinou se zápalnou šňůrou. Při explozi je každý tvor v okruhu pěti sáhů kolem bomby zraněn střepinami za 2k6+4 životů.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'profession': 'Alchymista',
'cost': '0',
'additionalCost': '',
'selectedProfessionSkill': 'Lučba',
'castingAttribute': 'OBR',
'materialCost': '35',
'base': 'železná koule a zápalná šňůra',
'duration': 'ihned',
'castingTime': '10 minut',
'difficulty': 8,
'prerequisite': '',
'damage': '2d6 + 4',
'damageType': 'životů',
'usage': 'vržením',
'printText': 'Vyrábím předmět: Bomba. Je to železná koule s kusem zápalné šnůry a k výrobě trvající 10 minut je potřeba: železná koule a zápalná šňůra.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=0}} {{Suroviny=35}} {{Obtížnost=8}}'
}
},
{
'name': 'Dýmovnice',
'content': 'K výrobě dýmovnice stačí jakákoliv utěsnitelná schránka – dutá trubička nebo třeba z hlíny upatlaná koule. Její obsah lze zapálit buďto přímo, nebo pomocí zápalné šňůry (podobně jako u bomby). Když se rozhoří, vytvoří kolem sebe hustý oblak dýmu. Ten je dusivý, vyvolává kašel a dráždí oči. Jediná dýmovnice dokáže zamořit kruh o poloměru deseti sáhů kolem ní. Viditelnost uvnitř je maximálně jeden sáh a zvenčí dovnitř není vidět vůbec. Používá se vržením.',
'data': {
'name': 'Dýmovnice',
'description': 'K výrobě dýmovnice stačí jakákoliv utěsnitelná schránka. Když se rozhoří, vytvoří kolem sebe hustý oblak dýmu. Ten je dusivý, vyvolává kašel a dráždí oči. Jediná dýmovnice dokáže zamořit kruh o poloměru deseti sáhů kolem ní.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'profession': 'Alchymista',
'cost': '0',
'additionalCost': '',
'selectedProfessionSkill': 'Lučba',
'castingAttribute': 'OBR',
'materialCost': '25',
'base': 'listí nebo zápalná šňůra',
'duration': '5 minut',
'castingTime': '10 minut',
'difficulty': 6,
'prerequisite': '',
'usage': 'vržením',
'printText': 'Vyrábím předmět: Dýmovnice. Je to malá, obvykle dřevěná nebo hliněná trubička a k výrobě trvající 10 minut je potřeba: listí nebo zápalná šňůra.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=0}} {{Suroviny=25}} {{Obtížnost=6}}'
}
},
{
'name': 'Kouzelný inkoust',
'content': 'Alchymista dokáže proměnit klasický olej v upravený inkoust. Ten má pak vysokou odolnost vůči vodě (smyje ho jen velmi silný proud vody nebo vytrvalý déšť). Kromě toho dokáže alchymista malými úpravami v receptu vytvořit ještě další tři jeho varianty: • Neviditelný inkoust – Inkoust se ihned při použití stává neviditelným. Je možné jej zviditelnit působením tepla (například svíčka pod pergamenem). • Světélkující inkoust – Tento inkoust slabě světélkuje. Lze ho vytvořit v barevné podobě podle potřeby alchymisty. Dá se použít k ohromení laiků stejně jako ke značkování cesty. • Mizející inkoust – U této varianty se jedná o rychle se odpařující formu. Inkoust se do hodiny po použití kompletně odpaří. Nezanechá po sobě žádné stopy. Jeden flakón obsahuje dostatek inkoustu k popsání pěti stran pergamenu. Používá se psaním.',
'data': {
'name': 'Kouzelný inkoust',
'description': 'Velmi odolný inkoust s magickými efekty. Neviditelný inkoust se stává viditelným působením tepla. Světélkující inkoust k značení cesty nebo ohromení laiků. Mizející inkoust se do hodiny kompletně odpaří a nezanechá žádné stopy. Jeden flakón obsahuje inkoust k popsání pěti stran pergamenu.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'profession': 'Alchymista',
'cost': '4',
'additionalCost': '',
'selectedProfessionSkill': 'Lučba',
'castingAttribute': 'OBR',
'materialCost': '6',
'base': 'olej',
'duration': '-',
'castingTime': '5 minut',
'difficulty': 6,
'prerequisite': '',
'usage': 'psaním',
'printText': 'Vyrábím předmět: Kouzelný inkoust. Je to flakón s upraveným olejem libovolné barvy a k výrobě trvající 5 minut je potřeba: olej.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=4}} {{Suroviny=6}} {{Obtížnost=6}}'
}
},
{
'name': 'Lakmusový papírek',
'content': 'Ponořením papírku do vybrané tekutiny dokážeš určit, co je zač. Jestliže ji umíš sám vyrobit, přesně poznáš, o jaký jed či lektvar se jedná. V opačném případě aspoň určíš, zda je či není nebezpečná. Jedy, kyseliny a podobné tekutiny totiž zbarví papírek do zelena. Lakmusový papírek lze stejným způsobem použít i na vzorek krve. Z něj pak lze zjistit, zda je postava otrávená či nikoliv a případně jakým jedem. Používá se namáčením.',
'data': {
'name': 'Lakmusový papírek',
'description': 'Ponořením papírku do vybrané tekutiny dokážeš určit, co je zač. Jestliže ji umíš sám vyrobit, přesně poznáš, o jaký jed či lektvar se jedná. V opačném případě aspoň určíš, zda je či není nebezpečná.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'profession': 'Alchymista',
'cost': '1',
'additionalCost': '',
'selectedProfessionSkill': 'Lučba',
'castingAttribute': 'OBR',
'materialCost': '5',
'base': 'pergamen',
'duration': 'ihned',
'castingTime': '10 minut',
'difficulty': 6,
'prerequisite': '',
'usage': 'namáčením',
'printText': 'Vyrábím předmět: Lakmusový papírek. Je to bílý, asi deset coulů dlouhý proužek pergamenu a k výrobě trvající 10 minut je potřeba: pergamen.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=1}} {{Suroviny=5}} {{Obtížnost=6}}'
}
},
{
'name': 'Lektvar Medvědí síly',
'content': 'Po pozření této husté tekutiny se začne postava potit, její svaly se napumpují a začne rychle dýchat. Po dobu trvání efektu lektvaru se jí pak zvýší Oprava za Sílu (SIL) o 3 body. Jakmile však efekt lektvaru vyprchá, bude se cítit velmi vyčerpaná. Získá tak pět Bodů únavy či půl Stupně únavy dle vámi hrané varianty (viz Únava). Používá se pozřením.',
'data': {
'name': 'Lektvar Medvědí síly',
'description': 'Po dobu trvání efektu lektvaru se postavě zvýší Oprava za Sílu (SIL) o 3 body. Jakmile však efekt lektvaru vyprchá, bude se cítit velmi vyčerpaná.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'profession': 'Alchymista',
'cost': '30',
'additionalCost': '',
'selectedProfessionSkill': 'Lučba',
'castingAttribute': 'OBR',
'materialCost': '35',
'base': 'zvířecí krev šelmy',
'duration': 'půl hodiny',
'castingTime': '10 minut',
'frequency': '24 hodin',
'difficulty': 6,
'prerequisite': '',
'usage': 'pozřením',
'printText': 'Vyrábím předmět: Lektvar Medvědí síly. Je to lektvar hnědé barvy, odporně slané chuti a silného zápachu a k výrobě trvající 10 minut je potřeba: zvířecí krev šelmy.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=30}} {{Suroviny=35}} {{Obtížnost=6}}'
}
},
{
'name': 'Lektvar Mucholapka',
'content': 'Minutu po pozření tohoto lektvaru se změní sliny toho, kdo jej vypil, na zvláštní pěnu. Dochází k tomu mimo ústa, na vzduchu. Tato pěna dokáže silně přilnout k jakémukoliv předmětu. Sliny si lze plivnout do dlaní či na chodidla a lézt tak po zdech či po stropě podobně jako moucha. Odtrhávat se od přilepených ploch je možné speciálními pohyby – odtažením a kroucením prstů. Není až tak složité tuto techniku zvládnout. Napoprvé to však může být problém, který zabere nějaký čas. Rychlost pohybu je dána třídou velikosti postavy. Postavy velikosti A zvládnou překonat 2 sáhy za kolo, velikosti B pak 4 sáhy za kolo a velikosti C dokonce 6 sáhů za kolo. Používá se pozřením.',
'data': {
'name': 'Lektvar Mucholapka',
'description': 'Minutu po vypití Mucholapky se změní sliny hráče, na zvláštní pěnu. Sliny si lze plivnout do dlaní či na chodidla a lézt tak po zdech či po stropě podobně jako moucha. ',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'profession': 'Alchymista',
'cost': '15',
'additionalCost': '',
'selectedProfessionSkill': 'Lučba',
'castingAttribute': 'OBR',
'materialCost': '10',
'base': 'pivo a pryskyřice',
'duration': '1 směna / 15 minut',
'castingTime': '5 minut',
'frequency': '12 hodin',
'difficulty': 8,
'prerequisite': '',
'usage': 'pozřením',
'printText': 'Vyrábím předmět: Lektvar Mucholapka. Je to lektvar zlatavé barvy, sladké chuti s vůní medu a borovice a k výrobě trvající 5 minut je potřeba: pivo a pryskyřice.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=15}} {{Suroviny=10}} {{Obtížnost=8}}'
}
},
{
'name': 'Lektvar Neutralizace',
'content': 'Lektvar Neutralizace dokáže během jednoho kola zrušit efekty všech dalších lektvarů, který na postavu právě aktivně působí. Neúčinkuje na lektvary, které měly jednorázový efekt a jejichž účinky se už projevily (vyléčení či omlazení postavy a podobně). Stejně tak tento lektvar neúčinkuje na žádné jedy. Vypití Lektvaru Neutralizace navíc odstraňuje omezení četnosti rušeného lektvaru. Můžeš ho proto použít znovu bez obav z účinků předávkování. Používá se pozřením.',
'data': {
'name': 'Lektvar Neutralizace',
'description': 'Lektvar Neutralizace dokáže během jednoho kola zrušit četnost i efekty všech dalších lektvarů, který na postavu právě aktivně působí. Neúčinkuje na žádné jedy.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'profession': 'Alchymista',
'cost': '5',
'additionalCost': '',
'selectedProfessionSkill': 'Lučba',
'castingAttribute': 'OBR',
'materialCost': '10',
'base': '3 dcl lihu',
'duration': 'ihned',
'castingTime': '5 kol',
'difficulty': 8,
'prerequisite': '',
'usage': 'pozřením',
'printText': 'Vyrábím předmět: Lektvar Neutralizace. Je to jasně oranžová, slabě bublající tekutina bez chuti a zápachu a k výrobě trvající 5 kol je potřeba: 3 dcl lihu.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=5}} {{Suroviny=10}} {{Obtížnost=8}}'
}
},
{
'name': 'Lektvar Ranhojič',
'content': 'Použitím tohoto lektvaru se postavě vyléčí 1k6+2 životů. Zároveň je možné jím zastavit ztrátu životů při kritickém zranění. V takovém případě se vyleje na ránu a ta se během kola zacelí. Při tomto použití už však k obnově počtu životů nedochází. Používá se pozřením.',
'data': {
'name': 'Lektvar Ranhojič',
'description': 'Použitím lektvaru se postavě vyléčí 1k6+2 životů. Nebo je možné jej vylít na ránu a zastavit jím krvácení - pak k obnově životů nedochází.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'profession': 'Alchymista',
'cost': '5',
'additionalCost': '',
'selectedProfessionSkill': 'Lučba',
'castingAttribute': 'OBR',
'materialCost': '15',
'base': 'víno',
'duration': 'ihned',
'castingTime': '5 minut',
'frequency': '12 hodin',
'difficulty': 6,
'damage': '1d6 + 2',
'damageType': 'vyléčených životů',
'prerequisite': '',
'usage': 'pozřením',
'printText': 'Vyrábím předmět: Lektvar Ranhojič. Je to rudá tekutina s chutí i vůní po skořici, hřebíčku a víně a k výrobě trvající 5 minut je potřeba: víno.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=5}} {{Suroviny=15}} {{Obtížnost=6}}'
}
},
{
'name': 'Lektvar Rychlost',
'content': 'Vypitím tohoto lektvaru se postava stane extrémně pohyblivou. Její rychlost se zdvojnásobí a získá tak každé kolo jeden útok (a tím i obranu) navíc. Zároveň získá bonus +2 k hodům na obranu, iniciativu a všem akcím vyžadujícím Obratnost. V případě, že postava používá výrazně pomalou zbraň (např. těžkou kuši), bude s ní moci útočit každé kolo. Lektvar už ze své podstaty nedokáže zkrátit dobu potřebnou k sesílání kouzel, vzývání proseb a podobně. Používá se pozřením.',
'data': {
'name': 'Lektvar Rychlost',
'description': 'Rychlost postavy zdvojnásobí a získá každé kolo jeden útok a obranu navíc, bonus +2 k hodům na obranu, iniciativu a akcím vyžadujícím Obratnost. Těžkou kuší je možné útočit každé kolo. Nezkracuje však dobu k sesílání kouzel a proseb.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'profession': 'Alchymista',
'cost': '12',
'additionalCost': '',
'selectedProfessionSkill': 'Lučba',
'castingAttribute': 'OBR',
'materialCost': '20',
'base': 'voda a ještěrčí ocásky',
'duration': '10 kol / 1 minuta',
'castingTime': '2 minuty',
'frequency': '24 hodin',
'difficulty': 8,
'prerequisite': '',
'usage': 'pozřením',
'printText': 'Vyrábím předmět: Lektvar Rychlost. Je to bleděmodrá tekutina s nasládlou chutí a vůní máty a k výrobě trvající 2 minuty je potřeba: voda a ještěrčí ocásky.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=12}} {{Suroviny=20}} {{Obtížnost=8}}'
}
},
{
'name': 'Lektvar Změny velikosti',
'content': 'Lektvar Změny velikosti existuje ve dvou podobách. Pokud je k jeho výrobě použita oslí moč, jedná o lektvar zmenšování. Pokud koňská, jde o lektvar zvětšování. Po jeho vypití dochází ke zvětšení či zmenšení postavy o jednu třídu velikosti. Na velikost předmětů, které má postava u sebe, nemá tento lektvar žádný vliv. Používá se pozřením.',
'data': {
'name': 'Lektvar Změny velikosti',
'description': 'Po vypití dochází ke zvětšení či zmenšení postavy o jednu třídu velikosti. Na velikost předmětů na postavě nemá lektvar vliv.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'profession': 'Alchymista',
'cost': '25',
'additionalCost': '',
'selectedProfessionSkill': 'Lučba',
'castingAttribute': 'OBR',
'materialCost': '30',
'base': 'koňská nebo oslí moč',
'duration': 'půl hodiny / směny',
'castingTime': '10 minut',
'frequency': '24 hodin',
'difficulty': 8,
'prerequisite': '',
'usage': 'pozřením',
'printText': 'Vyrábím předmět: Lektvar Změny velikosti. Je to lektvar oranžové barvy, octově kyselé chuti a zápachu po moči a k výrobě trvající 10 minut je potřeba: koňská nebo oslí moč.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=25}} {{Suroviny=30}} {{Obtížnost=8}}'
}
},
{
'name': 'Univerzální protijed',
'content': 'Tento lektvar dokáže neutralizovat jedy s nebezpečností menší než 7. Silnější jedy pak oslabí na polovinu jejich účinku po celou dobu jejich trvání. Používá se pozřením.',
'data': {
'name': 'Univerzální protijed',
'description': 'Neutralizuje jedy s nebezpečností menží než 7. Silnější jedy oslabí na polovinu účinku po dobu jejich trvání.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'profession': 'Alchymista',
'cost': '5',
'additionalCost': '',
'selectedProfessionSkill': 'Lučba',
'castingAttribute': 'OBR',
'materialCost': '10',
'base': 'voda a uhlí',
'duration': '1minuta / 10 kol',
'castingTime': '1 minuta',
'frequency': '2 hodiny',
'difficulty': 6,
'prerequisite': '',
'usage': 'pozřením',
'printText': 'Vyrábím předmět: Univerzální protijed. Je to tmavě šedá tekutina s hořkou chutí, bez zápachu a k výrobě trvající 10 kol je potřeba: voda a uhlí.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=5}} {{Suroviny=10}} {{Obtížnost=6}}'
}
},
{
'name': 'Zápalná Šňůra',
'content': 'Zápalná šňůra je obvykle cca 60 coulů dlouhý kus provazu. Alchymista do něj vpraví speciální suroviny, které mu zajišťují stabilní hoření (vítr ho neuhasí) a drobné jiskření. Rychlost hoření šňůry je zhruba 10 coulů za kolo. Šňůra se využívá především ke odpalu výbušnin všeho druhu. Používá se zapálením.',
'data': {
'name': 'Zápalná Šňůra',
'description': 'Cca 60 coulů dlouhý kus provazu zajišťující stabilní hoření a drobné jiskření. Rychlost hoření je 10 coulů za kolo.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'profession': 'Alchymista',
'additionalCost': '',
'selectedProfessionSkill': 'Lučba',
'castingAttribute': 'OBR',
'materialCost': '5',
'base': 'lano, šňůra nebo liána (aspoň 60 coulů)',
'duration': '1 kolo na 10 coulů',
'castingTime': '5 minut',
'difficulty': 6,
'prerequisite': '',
'usage': 'zapálením',
'printText': 'Vyrábím předmět: Zápalná Šňůra. Je to hořlavé vlákno a k výrobě trvající 5 minut je potřeba: lano, šňůra nebo liána (aspoň 60 coulů).',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=}} {{Suroviny=5}} {{Obtížnost=6}}'
}
},
{
'name': 'Zředěný líh',
'content': 'Zředěný líh se používá k čištění alchymistického vybavení. Stejně tak dokáže dezinfikovat rány a zabránit vzniku infekce. Jeden flakón obvykle obsahuje dostatek lihu k provedení deseti takových akcí. Tato látka je vysoce hořlavá (stejně jako olej). Lze ji proto použít jako zápalnou láhev nebo zdroj pro výrobu „hraček“ pyromantů. Používá se nanesením.',
'data': {
'name': 'Zředěný líh',
'description': 'Zředěný líh se používá k čištění alchymistického vybavení či dezinfekci ran. Tato látka je vysoce hořlavá (stejně jako olej).',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'profession': 'Alchymista',
'additionalCost': '',
'selectedProfessionSkill': 'Lučba',
'castingAttribute': 'OBR',
'materialCost': '10',
'base': 'jakýkoliv alkohol',
'duration': '-',
'castingTime': '30 minut',
'difficulty': 6,
'prerequisite': '',
'usage': 'nanesením',
'printText': 'Vyrábím předmět: Zředěný líh. Je to čirá tekutina a k výrobě trvající 2 směny je potřeba: jakýkoliv alkohol.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=}} {{Suroviny=10}} {{Obtížnost=6}}'
}
},
{
'name': 'Bertoldův zámek',
'content': 'Bertoldův zámek je kouzlo, které dokáže zvýšit odolnost zamčených či zavřených dveří, oken, brány nebo truhly. Ty přitom nemusí mít vůbec žádný zámek či jiný zabezpečovací mechanismus. Při sesílání kouzla se jich stačí dotknout a ochranná bariéra je zasekne v poloze, ve které jsou. Sesilatel kouzla je však dokáže otevřít bez omezení. V takovém případě se však efekt kouzla přeruší a mana vyprchá. Pokud chce dveře otevřít někdo jiný, musí překonat Nebezpečnost pasti určenou kouzelníkem. Příklad: Kouzelník Meredil seslal kouzlo na bránu pevnosti. Základ nutný pro seslání kouzla je 1 mana. K ní Meredil přidal ještě 5 bodů many, které pak ovlivní sílu kouzla. Finální obtížnost pasti tedy bude pro vyrážejícího 11 (základ 6 a dodatečná Síla 5). Překonat něco takového bude pro útočníka velká výzva.',
'data': {
'name': 'Bertoldův zámek',
'description': 'Kouzlo na 1 hodinu zvýší obtížnost při otevření či vyražení zamčených či zavřených dveří, oken, brány nebo truhly. Ochranná bariéra je zasekne v poloze, ve které jsou. Sesílatel je dokáže otevřít bez omezení, přeruší tím ale kouzlo.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Kouzelník',
'profession': 'Kouzelník',
'cost': '1',
'additionalCost': '1 mana za bod síly',
'additionalCostNum': '1',
'selectedProfessionSkill': 'Sesílání kouzel',
'secondaryRollAgainst': 'Atletika(SIL) vs. Síla dveří + dodatečná past',
'isMulticast': true,
'multicastLabel': 'Kolik celkové many',
'secondaryRoll': '',
'secondaryCastingAttribute': '',
'damage': '1d1-1',
'damageType': 'dodatečná past',
'castingAttribute': 'INT',
'range': 'dotek',
'target': 'jeden objekt',
'duration': '1 hodina',
'castingTime': '2 kola',
'difficulty': 6,
'prerequisite': '',
'printText': 'Sesílám kouzlo: Bertoldův zámek. Kouzlo na 1 hodinu zvýší obtížnost při otevření či vyražení zamčených či zavřených dveří, oken, brány nebo truhly. Ochranná bariéra je zasekne v poloze, ve které jsou. Sesílatel je dokáže otevřít bez omezení, přeruší tím ale kouzlo.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=1}} {{Dodatek =1 mana za bod síly}} {{Dosah =dotek}} {{Obtížnost=6}}'
}
},
{
'name': 'Blesk',
'content': 'Blesk je asi nejznámější útočné kouzlo. Při jeho seslání se uvolní ničivá energie proti jednomu cíli. Ta pak způsobí zranění za 1k6 životů. Kouzelník může seslat v jednom kole najednou i více blesků, které se spojí do jednoho mohutného výboje.',
'data': {
'name': 'Blesk',
'description': 'Při seslání se uvolní ničivá energie proti jednomu cíli. Ta mu způsobí zranění za 1k6 životů za každý blesk. Kouzelník jich může seslat v jednom kole i více, které spojí do jednoho mohutného výboje.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Kouzelník',
'profession': 'Kouzelník',
'cost': '3',
'additionalCost': '2 many za další blesk',
'additionalCostNum': '2',
'selectedProfessionSkill': 'Sesílání kouzel',
'castingAttribute': 'INT',
'damage': '1d6',
'damageType': 'zranění',
'isMulticast': true,
'multicastLabel': 'Kolik blesků',
'range': '20 sáhů',
'target': 'jeden cíl',
'duration': 'ihned',
'castingTime': '0.5 kola',
'difficulty': 6,
'additionalDifficulty': 2,
'prerequisite': '',
'printText': 'Sesílám kouzlo: Blesk. Při seslání se uvolní ničivá energie proti jednomu cíli. Ta mu způsobí zranění za 1k6 životů za každý blesk. Kouzelník jich může seslat v jednom kole i více, které spojí do jednoho mohutného výboje.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=3}} {{Dodatek =2 many za další blesk}} {{Dosah =20 sáhů}} {{Obtížnost=6}}'
}
},
{
'name': 'Kukátko',
'content': 'Po seslání tohoto kouzla se stěna, jež se kouzelník dotkne, stává pro něj průhlednou. Pro všechny ostatní tvory pak stěna vypadá stejně, jako vždycky. Maximální šíře překážky, kterou dokáže kouzlo překonat, je nejvýše 1 sáh. Kouzlo dokáže působit i skrze organické materiály (dřevo ale i těla živých tvorů).',
'data': {
'name': 'Kukátko',
'description': 'Stěna, maximálních rozměrů 1x1x1 sáh, které se kouzelník dotkne, se pro něj stává na 15 minut průhlednou. Pro všechny ostatní tvory ale vypadá stejně, jako vždycky.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Kouzelník',
'profession': 'Kouzelník',
'cost': '2',
'additionalCost': '',
'selectedProfessionSkill': 'Sesílání kouzel',
'castingAttribute': 'INT',
'range': 'dotek',
'target': 'stěna 1x1x1 sáh',
'duration': '15 minut',
'castingTime': '1 kolo',
'difficulty': 6,
'prerequisite': '',
'printText': 'Sesílám kouzlo: Kukátko. Stěna, maximálních rozměrů 1x1x1 sáh, které se kouzelník dotkne, se pro něj stává na 15 minut průhlednou. Pro všechny ostatní tvory ale vypadá stejně, jako vždycky.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=2}} {{Dosah =dotek}} {{Obtížnost=6}}'
}
},
{
'name': 'Levitace',
'content': 'Pomocí tohoto kouzla se dokáže postava vznášet lehce nad zemí. Nedokáže sice volně létat, může však třeba zlézat zdi, aniž by se musela obávat pádu z výšky a podobně. Pokud by k tomu došlo, začne se volně snášet k zemi rychlostí 1 sáh za kolo. V případě běžné chůze či běhu se pak pohybuje rychlostí běžné chůze. Ačkoliv může efekt kouzla vypadat tak, jako že postava nic neváží, není to pravda. Zůstává jí totiž její původní hmotnost, ale nepůsobí na ni žádné tření. Neodvane ji proto žádný vítr, ale dá se poměrně jednoduše odtáhnout na jiné místo. Kouzelník dokáže toto kouzlo seslat i na různě těžké předměty. Očarovaný subjekt se pak volně vznáší asi jeden sáh nad zemí. Celková hmotnost cíle (včetně vybavení) však nesmí překročit 100 liber. V takovém případě by kouzlo postavu neuneslo. Kouzelník by musel použít větší množství many. Za každý dodatečný bod many vložený do kouzla se nosnost levitace zvyšuje o dalších 20 lb.',
'data': {
'name': 'Levitace',
'description': 'Cíl o váze do 100 kg se na 15 minut začne vznášet lehce nad zemí. Nedokáže sice volně létat, může však třeba slézat zdi bez obav z pádu z výšky.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Kouzelník',
'profession': 'Kouzelník',
'cost': '4',
'additionalCost': '1 mana za každých 20lb',
'additionalCostNum': '1',
'selectedProfessionSkill': 'Sesílání kouzel',
'isMulticast': true,
'multicastLabel': 'Posílit kouzlo (1 - základ 100 lb, každý bod nad 1 - dodatečných 20 lb)',
'damage': '100 + (20 * 1d1) - 20',
'damageType': 'lb maximální nosnosti kouzla',
'castingAttribute': 'INT',
'range': 'dotek',
'target': 'jedna bytost / předmět o váze 100 liber',
'duration': '15 minut',
'castingTime': '1 kolo',
'difficulty': 6,
'prerequisite': '',
'printText': 'Sesílám kouzlo: Levitace. Cíl o váze do 100 kg se na 15 minut začne vznášet lehce nad zemí. Nedokáže sice volně létat, může však třeba slézat zdi bez obav z pádu z výšky.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=4}} {{Dodatek =1 mana za každých 20lb}} {{Dosah =dotek}} {{Obtížnost=6}}'
}
},
{
'name': 'Magická střela',
'content': 'Tato bílá střela divoké energie má schopnost narušovat magické vazby. Po seslání vyletí vysokou rychlostí směrem, který si kouzelník zvolil. Ten ji může nechat explodovat kdykoliv během letu (jinak vybuchne sama, jakmile se vzdálí nad sto sáhů od kouzelníka nebo narazí na jakoukoli překážku). Exploze se projevuje oslnivým zábleskem, který zraní všechny magické tvory a nadpozemské bytosti v dosahu za 2k6 životů. Jestliže kouzelník sešle v jednom kole více magických střel, spojí se do jedné veliké. Její rozsah se pak zvýší o 2 sáhy za každou střelu v ní obsaženou a jimi způsobená zranění se sčítají.',
'data': {
'name': 'Magická střela',
'description': 'Záblesk divoké energie zasáhne plochu o poloměru 5 sáhů a zraní magické a nadpozemské tvory za 2k6 životů. Kouzelník jich může v jednom kole spojit několik do jedné veliké střely. Pak se zranění sčítá a rozsah se zvýšuje o 2 sáhy za každou další střelu.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Kouzelník',
'profession': 'Kouzelník',
'cost': '8',
'additionalCost': '7 many za další střelu',
'additionalCostNum': '7',
'selectedProfessionSkill': 'Sesílání kouzel',
'castingAttribute': 'INT',
'isMulticast': true,
'multicastLabel': 'Kolik střel',
'additionalDifficulty': '2',
'damage': '2d6',
'damageType': 'zranění',
'range': '100 sáhů',
'target': 'koule o poloměru 5 sáhu',
'duration': 'ihned',
'castingTime': '1 kolo',
'difficulty': 8,
'prerequisite': '',
'printText': 'Sesílám kouzlo: Magická střela. Záblesk divoké energie zasáhne plochu o poloměru 5 sáhů a zraní magické a nadpozemské tvory za 2k6 životů. Kouzelník jich může v jednom kole spojit několik do jedné veliké střely. Pak se zranění sčítá a rozsah se zvýšuje o 2 sáhy za každou další střelu.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=8}} {{Dodatek =7 many za další střelu}} {{Dosah =100 sáhů}} {{Obtížnost=8}}'
}
},
{
'name': 'Magický štít',
'content': 'Toto kouzlo vytvoří kolem cíle ochrannou auru, která se pohybuje spolu s ním. Obvykle je neviditelná či slabě světélkuje ve vzdálenosti jednoho sáhu od něj. Postavě zvyšuje Obranné číslo o 5. Délku trvání kouzla určí kouzelník při jeho seslání.',
'data': {
'name': 'Magický štít',
'description': 'Zjeví se světélkující aura, která vybrané postavě zvyšuje Obranné číslo o +5. Délku trvání kouzla určí kouzelník při jeho seslání.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Kouzelník',
'profession': 'Kouzelník',
'cost': '2',
'additionalCost': '1 mana za další kolo',
'additionalCostNum': '1',
'selectedProfessionSkill': 'Sesílání kouzel',
'castingAttribute': 'INT',
'isMulticast': true,
'multicastLabel': 'Seslat na kolik kol',
'damage': '1d1',
'damageType': 'kol zvýšená ZO o 5',
'range': 'dotek',
'target': '1 tvor',
'duration': 'dle many',
'castingTime': '0.5 kola',
'difficulty': 6,
'prerequisite': '',
'printText': 'Sesílám kouzlo: Magický štít. Zjeví se světélkující aura, která vybrané postavě zvyšuje Obranné číslo o +5. Délku trvání kouzla určí kouzelník při jeho seslání.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=2}} {{Dodatek =1 mana za další kolo}} {{Dosah =dotek}} {{Obtížnost=6}}'
}
},
{
'name': 'Najdi předmět',
'content': 'Kouzelník prostřednictvím tohoto zaklínadla dokáže najít libovolný předmět. Prostě jeho polohu intuitivně vycítí. Při sesílání se musí pět kol soustředit a vybavit si, jak daná věc vypadá. Pokud se mu to povede a předmět je v dosahu, dokáže určit směr, vzdálenost a přesné místo, kde se nachází. Pokud je podobných předmětů v okolí víc, kouzelník vycítí vždy ten, který je mu nejblíže. V případě, že se kouzelník pokusí najít předmět, který nikdy předtím neviděl (a zná ho třeba jen z vyprávění), zvyšuje se obtížnost seslání kouzla na 8.',
'data': {
'name': 'Najdi předmět',
'description': 'Kouzelník se zasoustředí a vybaví si, jak daná věc vypadá. Pokud se mu to povede a předmět je v dosahu, dokáže na 15 minut cítit směr, vzdálenost a přesné místo, kde se nachází.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Kouzelník',
'profession': 'Kouzelník',
'cost': '4',
'additionalCost': '',
'selectedProfessionSkill': 'Sesílání kouzel',
'castingAttribute': 'INT',
'range': '50 sáhů',
'target': 'jeden objekt',
'duration': '15 minut',
'castingTime': '5 kol',
'difficulty': 6,
'prerequisite': '',
'printText': 'Sesílám kouzlo: Najdi předmět. Kouzelník se zasoustředí a vybaví si, jak daná věc vypadá. Pokud se mu to povede a předmět je v dosahu, dokáže na 15 minut cítit směr, vzdálenost a přesné místo, kde se nachází.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=4}} {{Dosah =50 sáhů}} {{Obtížnost=6}}'
}
},
{
'name': 'Neviditelnost',
'content': 'Tvor nebo předmět, na nějž je kouzlo sesláno, se stane neviditelným. To se týká i předmětů, které má na sobě, tedy neživých věcí běžné velikosti, které postava unese. Pokud je však odloží, tyto předměty se zviditelní. Kouzlo nemá žádný vliv na později uchopené předměty. Ty zůstávají i nadále viditelné. Pokud s nimi bude neviditelná postava manipulovat, budou pro okolí vypadat, jako by se vznášely. Neviditelnost nijak nemění další fyzikální vlastnosti postavy. Postava nadále zanechává stopy a psi ji mohou vyčenichat. Během doby trvání kouzla je potřeba být opatrný. Neviditelnost se totiž může velmi snadno narušit. Stačí promluvit, zaútočit, seslat kouzlo (a to i z předmětu) nebo provést nějakou komplexnější akci (jako je třeba výroba předmětů a podobně).',
'data': {
'name': 'Neviditelnost',
'description': 'Cíl se stane na 15 minut neviditelným včetně předmětů, které má na sobě. Pokud je odloží, tyto předměty se zviditelní. Kouzlo nemá vliv na později uchopené předměty. Neviditelnost se může snadno narušit. Stačí promluvit, zaútočit, seslat kouzlo nebo provést nějakou komplexnější akci.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Kouzelník',
'profession': 'Kouzelník',
'cost': '6',
'additionalCost': '',
'selectedProfessionSkill': 'Sesílání kouzel',
'castingAttribute': 'INT',
'range': '50 sáhů',
'target': 'jeden tvor nebo předmět (do velikosti C)',
'duration': '15 minut',
'castingTime': '1 kolo',
'difficulty': 6,
'prerequisite': '',
'printText': 'Sesílám kouzlo: Neviditelnost. Cíl se stane na 15 minut neviditelným včetně předmětů, které má na sobě. Pokud je odloží, tyto předměty se zviditelní. Kouzlo nemá vliv na později uchopené předměty. Neviditelnost se může snadno narušit. Stačí promluvit, zaútočit, seslat kouzlo nebo provést nějakou komplexnější akci.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=6}} {{Dosah =50 sáhů}} {{Obtížnost=6}}'
}
},
{
'name': 'Očaruj zbraň',
'content': 'Tímto kouzlem lze změnit samotnou podstatu zbraně z obyčejné na magickou. Ta se pak stává dočasně nebezpečnou i pro všechny magické a nadpozemské tvory. Působí tak zranění i bytostem, které jsou jinak běžnými zbraněmi nezranitelné. Proti běžným tvorům pak zbraň žádný zvláštní bonus nemá.',
'data': {
'name': 'Očaruj zbraň',
'description': 'Kouzlo změní na 15 minut samotnou podstatu jedné zbraně z obyčejné na magickou. Ta se pak stává dočasně nebezpečnou i pro všechny magické a nadpozemské tvory, kteří by proti běžným zbraním mohli být imunní.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Kouzelník',
'profession': 'Kouzelník',
'cost': '4',
'additionalCost': '',
'selectedProfessionSkill': 'Sesílání kouzel',
'castingAttribute': 'INT',
'range': 'dotek',
'target': 'jedna zbraň',
'duration': '15 minut',
'castingTime': '2 kola',
'difficulty': 6,
'prerequisite': '',
'printText': 'Sesílám kouzlo: Očaruj zbraň. Kouzlo změní na 15 minut samotnou podstatu jedné zbraně z obyčejné na magickou. Ta se pak stává dočasně nebezpečnou i pro všechny magické a nadpozemské tvory, kteří by proti běžným zbraním mohli být imunní.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=4}} {{Dosah =dotek}} {{Obtížnost=6}}'
}
},
{
'name': 'Oheň',
'content': 'Kouzelník dokáže vyvolat ohýnek o velikosti jablka. Magický plamen hoří maximálně jednu směnu, než pohasne (pokud do té doby nezapálil něco dalšího). Tento druh ohně je možné uhasit stejně jako kterýkoliv jiný. Pokud plamen zasáhne živého tvora, způsobí mu zranění za 1–3 životy (1k6 / 2) a pohasne.',
'data': {
'name': 'Oheň',
'description': 'Kouzelník dokáže vyvolat ohýnek o velikosti jablka, který vydrží 15 minut. Pokud plamen zasáhne živého tvora, způsobí mu zranění za 1–3 životy (1k6/2) a pohasne.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Kouzelník',
'profession': 'Kouzelník',
'cost': '2',
'additionalCost': '',
'selectedProfessionSkill': 'Sesílání kouzel',
'castingAttribute': 'INT',
'damage': '1d6 / 2',
'damageType': 'zranění',
'range': '10 sáhů',
'target': 'oheň o velikosti dlaně',
'duration': '15 minut',
'castingTime': '1 kolo',
'difficulty': 6,
'prerequisite': '',
'printText': 'Sesílám kouzlo: Oheň. Kouzelník dokáže vyvolat ohýnek o velikosti jablka, který vydrží 15 minut. Pokud plamen zasáhne živého tvora, způsobí mu zranění za 1–3 životy (1k6/2) a pohasne.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=2}} {{Dosah =10 sáhů}} {{Obtížnost=6}}'
}
},
{
'name': 'Rychlost',
'content': 'Očarovaná bytost se pohybuje dvakrát rychleji, než je obvyklé, a v boji má jeden útok navíc. Její obrana a hody na Iniciativu a Obratnost se po dobu účinku kouzla zvyšují o 2. V případě, že postava používá výrazně pomalou zbraň (např. těžkou kuši), bude s ní moci útočit v každém kole. Kouzlo působí pouze na fyzickou rychlost a nemá žádný vliv na rychlost sesílání jiných kouzel a podobně. Cena kouzla je 2 body many za první kolo a 1 za každé další. Dobu trvání kouzla určuje kouzelník při jeho seslání.',
'data': {
'name': 'Rychlost',
'description': 'Cíl se začne pohybovat dvakrát rychleji. V boji má 1 útok a 1 obranu navíc. Jeho Obrana, hody na Iniciativu a na Obratnost se po dobu účinku kouzla zvyšují o +2. Těžkou kuší je tak možné útočit každé kolo. Dobu sesílání kouzel a proseb Rychlost se nezkacuje. Trvání kouzelník určuje při seslání.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Kouzelník',
'profession': 'Kouzelník',
'cost': '2',
'additionalCost': '1 mana za další kolo',
'additionalCostNum': '1',
'isMulticast': true,
'multicastLabel': 'Kolik kol',
'damage': '1d1',
'damageType': 'kol +2 k Obraně, Iniciativě a hodům na OBR + útok navíc',
'selectedProfessionSkill': 'Sesílání kouzel',
'castingAttribute': 'INT',
'range': '10 sáhů',
'target': 'jeden tvor ',
'duration': 'dle many',
'castingTime': '1 kolo',
'difficulty': 6,
'prerequisite': '',
'printText': 'Sesílám kouzlo: Rychlost. Cíl se začne pohybovat dvakrát rychleji. V boji má 1 útok a 1 obranu navíc. Jeho Obrana, hody na Iniciativu a na Obratnost se po dobu účinku kouzla zvyšují o +2. Těžkou kuší je tak možné útočit každé kolo. Dobu sesílání kouzel a proseb Rychlost se nezkacuje. Trvání kouzelník určuje při seslání.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=2}} {{Dodatek =1 mana za další kolo}} {{Dosah =10 sáhů}} {{Obtížnost=6}}'
}
},
{
'name': 'Světlo',
'content': 'Po seslání tohoto kouzla se v místě určeném kouzelníkem rozzáří koule jasného světla. V ní je pak vidět jako za slunného dne. Barvu světla si může kouzelník zvolit. O velikosti rozsahu světla rozhoduje množství many v zaklínadle. Kouzelník může seslat zaklínadlo na určité místo nebo přímo na sebe či svou hůl. V takovém případě se světlo pohybuje spolu s ním, případně vychází z jeho hole. Magické světlo se chová podobně jako to běžné (vrhá stíny, neprojde zdí a podobně).',
'data': {
'name': 'Světlo',
'description': 'Ve vybraném místě se na 1 hodinu rozzáří koule jasného světla, díky které je vidět jako za slunného dne. Barvu světla si může kouzelník zvolit. A kouzlo je možné seslat na určité místo, předmět nebo přímo na sebe. ',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Kouzelník',
'profession': 'Kouzelník',
'cost': '1',
'additionalCost': '1 mana za 2 sáhy pol.',
'additionalCostNum': '1',
'selectedProfessionSkill': 'Sesílání kouzel',
'castingAttribute': 'INT',
'isMulticast': true,
'multicastLabel': 'Kolik many (1 mana - 2 sáhy poloměru)',
'range': '30 sáhů',
'damage': '2 * 1d1',
'damageType': 'sáhů poloměru',
'target': 'koule o poloměru dle vložené many',
'duration': '1 hodina',
'castingTime': '1 kolo',
'difficulty': 6,
'prerequisite': '',
'printText': 'Sesílám kouzlo: Světlo. Ve vybraném místě se na 1 hodinu rozzáří koule jasného světla, díky které je vidět jako za slunného dne. Barvu světla si může kouzelník zvolit. A kouzlo je možné seslat na určité místo, předmět nebo přímo na sebe. ',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=1}} {{Dodatek =1 mana za 2 sáhy pol.}} {{Dosah =30 sáhů}} {{Obtížnost=6}}'
}
},
{
'name': 'Teleport',
'content': 'Teleportem dokáže kouzelník přesunout sebe či jinou živou bytost z jednoho místa na druhé. Největší vzdálenost, kterou lze takto překonat, je 60 sáhů. Při teleportaci se zároveň přenese i vše, co má dotyčný na sobě. Lze takto přesunout i živé tvory o velikosti A0, které má kouzelník u sebe. Nelze však přesunout strom, kterého se kouzelník drží, a podobně (viz níže). Aby se kouzlo zdařilo, je nutné vědět, kam se má dotyčný teleportovat. V opačném případě hrozí, že se pokusí o přenos na místo, kde je nějaká překážka (běžně skála, strom a podobně). V takovém případě dojde ke zranění za 1k6 životů a přenos se nezdaří. Jestliže je postava pevně připoutaná k místu (např. řetězy ke stěně), kouzlo se automaticky nezdaří. Běžné svázání však teleportu nijak nevadí (postava prostě zůstane svázaná, jen se objeví jinde).',
'data': {
'name': 'Teleport',
'description': 'Kouzlo přesune 1 tvora z jednoho místa na druhé do vzdálenosti 60 sáhů. Při teleportaci se přenese i vše, co má dotyčný na sobě včetně živých tvorů o velikosti A0. V případě fyzické překážky dojde ke zranění za 1k6 životů a přenos se nezdaří.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Kouzelník',
'profession': 'Kouzelník',
'cost': '4',
'additionalCost': '',
'selectedProfessionSkill': 'Sesílání kouzel',
'castingAttribute': 'INT',
'range': 'dotek',
'target': 'jeden tvor',
'duration': 'ihned',
'castingTime': '1 kolo',
'difficulty': 6,
'prerequisite': '',
'printText': 'Sesílám kouzlo: Teleport. Kouzlo přesune 1 tvora z jednoho místa na druhé do vzdálenosti 60 sáhů. Při teleportaci se přenese i vše, co má dotyčný na sobě včetně živých tvorů o velikosti A0. V případě fyzické překážky dojde ke zranění za 1k6 životů a přenos se nezdaří.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Mana=4}} {{Dosah =dotek}} {{Obtížnost=6}}'
}
},
{
'name': 'Léčivé ruce',
'content': 'Přiložením rukou a provedením prosby dokáže klerik uzdravit rozličná zranění. Léčba dokáže zacelit rány a zastavuje krvácení. Působení božích sil dokáže vyléčit 1k6 životů. Navíc dokáže zahojit čerstvé rány tak, aby po nich nezůstaly žádné viditelné jizvy. Temná alternativa: Klerik dokáže svým dotykem způsobit zranění za 1k6 životů.',
'data': {
'name': 'Léčivé ruce',
'description': 'Přiložením rukou na cíl klerik uzdraví rozličná zranění. Léčba dokáže zacelit rány a zastavuje krvácení. Působení božích sil dokáže vyléčit 1k6 životů.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Klerik',
'profession': 'Klerik',
'cost': '3',
'additionalCost': '',
'selectedProfessionSkill': 'Prosby',
'castingAttribute': 'CHA',
'range': 'dotek',
'target': '1 tvor',
'duration': 'ihned',
'castingTime': '1 kolo',
'damage': '1k6',
'damageType': 'životů vyléčeno nebo způsobeno zranění',
'difficulty': 6,
'prerequisite': '',
'printText': 'Vzývám prosbu: Léčivé ruce. Přiložením rukou na cíl klerik uzdraví rozličná zranění. Léčba dokáže zacelit rány a zastavuje krvácení. Působení božích sil dokáže vyléčit 1k6 životů.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Přízeň=3}} {{Dosah =dotek}} {{Obtížnost=8}}'
}
},
{
'name': 'Očištení',
'content': 'Touto prosbou dokáže klerik „očistit“ jednu běžnou porci jídla či měch vody od jedů či zárodků nákazy (týden hnijící králík však nebude poživatelný ani po deseti Očištěních). Efekt prosby působí na všechny přírodní a magické jedy v nich obsažené. Prosba nemá žádný účinek na živé tvory. Pokud by klerik narazil na vzácný Jed temnoty, očištění se nezdaří úplně. Průběh a účinky otravy po pozření by však byly pouze poloviční. Temná alternativa: Jídlo a pití je Očištěné pouze pro klerika (a jím vybrané osoby). Pro ostatní má stejné vlastnosti jako předtím.',
'data': {
'name': 'Očištení',
'description': 'Klerik „očistí“ jednu běžnou porci jídla či měch vody od jedů či zárodků nákazy. Vzácné magické jedy očistit neumí.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Klerik',
'profession': 'Klerik',
'cost': '3',
'additionalCost': '',
'selectedProfessionSkill': 'Prosby',
'castingAttribute': 'CHA',
'range': 'dotek',
'target': '1 jídlo',
'duration': 'ihned',
'castingTime': '10 kol',
'difficulty': 6,
'prerequisite': '',
'printText': 'Vzývám prosbu: Očištení. Klerik „očistí“ jednu běžnou porci jídla či měch vody od jedů či zárodků nákazy. Vzácné magické jedy očistit neumí.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Přízeň=3}} {{Dosah =dotek}} {{Obtížnost=6}}'
}
},
{
'name': 'Štít víry',
'content': 'Tato prosba vytvoří kolem klerika ochrannou bariéru, která zvyšuje jeho obranu proti všem druhům útoků o +5. Efekt prosby trvá tak dlouho, dokud má klerik dostatek přízně. Pokud však chce, může ho svou vůlí kdykoliv zrušit. Jakmile je prosba jednou vyvolána, není třeba se na ni dále soustředit. V dalším kole tak můžeš klidně vzývat jinou.',
'data': {
'name': 'Štít víry',
'description': 'Kolem klerika se zjeví ochranná bariéra, která zvyšuje jeho obranu proti všem druhům útoků o +5. Efekt prosby trvá, dokud má klerik dostatek přízně.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Klerik',
'profession': 'Klerik',
'cost': '3',
'additionalCost': '2 za další kolo',
'additionalCostNum': '2',
'selectedProfessionSkill': 'Prosby',
'isMulticast': true,
'multicastLabel': 'Kolik kol',
'castingAttribute': 'CHA',
'range': 'koule o pol. 2 sáhy',
'damage': '1d1',
'damageType': 'kol zvýšení ZO o +5',
'target': 'klerik',
'duration': 'dle přízně',
'castingTime': 'ihned',
'difficulty': 6,
'prerequisite': '',
'printText': 'Vzývám prosbu: Štít víry. Kolem klerika se zjeví ochranná bariéra, která zvyšuje jeho obranu proti všem druhům útoků o +5. Efekt prosby trvá, dokud má klerik dostatek přízně.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Přízeň=3}} {{Dodatek =2}} {{Dosah =koule o pol. 2 sáhy}} {{Obtížnost=6}}'
}
},
{
'name': 'Úder moci',
'content': 'Klerik může využít božské síly k psychickému úderu. Cíl, který je modlitbou zasažen, je zraněn za 1k10 životů. Zranění není fyzické, ale způsobí dotyčnému silný duševní otřes. Viditelný efekt je především překvapení a bázlivost zasaženého před boží mocí. Vzácně pak také krvácení z nosu a podobně (pokud bylo zranění vyšší).',
'data': {
'name': 'Úder moci',
'description': 'Silný psychický úder způsobený božskou silou. Cíl, je zraněn za 1k10 životů. Zranění není fyzické, ale způsobí dotyčnému silný duševní otřes.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Klerik',
'profession': 'Klerik',
'cost': '5',
'additionalCost': '',
'selectedProfessionSkill': 'Prosby',
'castingAttribute': 'CHA',
'range': '20',
'target': '1 tvor',
'duration': 'ihned',
'castingTime': '1 kolo',
'damage': '1k10',
'damageType': 'psychického zranění',
'difficulty': 6,
'prerequisite': '',
'printText': 'Vzývám prosbu: Úder moci. Silný psychický úder způsobený božskou silou. Cíl, je zraněn za 1k10 životů. Zranění není fyzické, ale způsobí dotyčnému silný duševní otřes.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Přízeň=5}} {{Dosah =20}} {{Obtížnost=6}}'
}
},
{
'name': 'Uzdrav otravu',
'content': 'Touto prosbou dokáže klerik vyprosit zrušení jakéhokoliv druhu otravy jednoho tvora. Cena prosby odpovídá Nebezpečnosti jedu, který otravu způsobil. Klerik se musí sám rozhodnout, kolik Přízně této prosbě obětuje. Pokud jí však bude málo, může se stát, že k uzdravení dotyčného nepostačí. Příklad: Klerik Věrovít se bude snažit zachránit obchodníka Renárda, zasaženého otrávenou šipkou. Ta byla vystřelena velmi zkušeným assassinem, který na ní použil magický jed (nebezpečnost 14). Věrovít se sice pokusí udělat maximum (vroucími prosbami vyčerpá všechnu svou přízeň - 10 bodů), avšak ani to nebude k uzdravení Renárda stačit. Jed je prostě natolik silný, že zvrátit jeho účinky by se rovnalo téměř zázraku. Jedinou nadějí tak zůstává vyhledání alchymisty, který by snad mohl mít protijed, nebo mocnějšího kněze v některém chrámu či klášteře.',
'data': {
'name': 'Uzdrav otravu',
'description': 'Zrušení jakéhokoliv druhu otravy jednoho tvora. Cena prosby musí odpovídat mimiálně Nebezpečnosti jedu, který otravu způsobil. Klerik se musí sám rozhodnout, kolik Přízně této prosbě obětuje.',
'type': 'spell',
'rulebook': 'PPZ: Příručka hráče: kapitola Klerik',
'profession': 'Klerik',
'cost': '1',
'additionalCost': '1 přízeň za bod nebezpečnosti jedu',
'additionalCostNum': '1',
'isMulticast': true,
'multicastLabel': 'Kolik přízně',
'selectedProfessionSkill': 'Prosby',
'castingAttribute': 'CHA',
'range': 'dotek',
'target': '1 tvor',
'duration': 'ihned',
'castingTime': '3 kola',
'difficulty': 6,
'prerequisite': '',
'printText': 'Vzývám prosbu: Uzdrav otravu. Zrušení jakéhokoliv druhu otravy jednoho tvora. Cena prosby musí odpovídat mimiálně Nebezpečnosti jedu, který otravu způsobil. Klerik se musí sám rozhodnout, kolik Přízně této prosbě obětuje.',
'macro': '&{template:default}{{name=abilityName}}{{skillName= [[1d10 + @{attributeBonus} + @{skillLevel}]] (1k10+attributeBonusName+skillName)}} {{Přízeň=X}} {{Dosah =dotek}} {{Obtížnost=6}}'
}
}
];
const AbilitiesPassive = [
{
'content': 'Tvrdý život učinil barbary velmi odolnými. Dokázali se vyrovnat s nepřízní počasí, zraněními i nemocemi. Díky tomu se jejich tělo naučilo lépe hojit a regenerovat. Při každém léčení se jim tak doplňuje více životní energie než ostatním. Kdykoliv se barbar nějakou formou léčí, získává 2 životy navíc.',
'data': {
'description': 'Kdykoliv se barbar nějakou formou léčí, získává 2 životy navíc.',
'envelopeAbilities': [],
'envelopeSkills': [],
'isFirstLevel': true,
'name': 'Houževnatost',
'race': 'Barbar',
'rulebook': 'PPZ: Příručka hráče: kapitola Herní postava',
'type': 'ability'
},
'name': 'Houževnatost'
},
{
'content': 'Lidé jsou odedávna známí svou přirozenou zvídavostí. Dokáží se zabývat mnoha rozličnými obory a vyniknout v nich. Právě jejich schopnost učit se a použít své znalosti v praxi jim poskytla vzácný dar Všestrannosti. Ovládají tak více dovedností než ostatní. Díky Všestrannosti získávají lidé na každé úrovni 2 dovednostní body navíc. Toto platí už od první úrovně.',
'data': {
'description': 'Lidé získávají na každé úrovni 2 dovednostní body navíc. Včetně první úrovně.',
'envelopeAbilities': [],
'envelopeSkills': [],
'isFirstLevel': true,
'name': 'Všestrannost',
'race': 'Člověk',
'rulebook': 'PPZ: Příručka hráče: kapitola Herní postava',
'type': 'ability'
},
'name': 'Všestrannost'
},
{
'content': 'Říká se, že orel spatří myš, která se mihne na úpatí velehor, zatímco on se vznáší nad jejich vrcholky. Stejným darem obdařila příroda i elfy. Dokáží tak dohlédnout mnohem dál a všimnout si navíc detailů, které by jinak byly ostatním na takovou vzdálenost skryty. Díky této schopnosti mají elfové bonus +2 ke všem akcím vyžadujícím ostrý zrak (Stopování, Postřeh a podobně). Poznámka: Pokud tě PJ nechá hodit na Postřeh, oznam mu výsledek svého hodu. Zároveň mu připomeň, že máš Orlí zrak. Pokud se ověřuje něco, co lze postřehnout očima, připočte ti patřičný bonus.',
'data': {
'description': 'Elfové mají bonus +2 ke všem akcím vyžadujícím ostrý zrak (Stopování, Postřeh a podobně).',
'envelopeAbilities': [],
'envelopeSkills': [],
'isFirstLevel': true,
'name': 'Orlí zrak',
'race': 'Elf',
'rulebook': 'PPZ: Příručka hráče: kapitola Herní postava',
'type': 'ability'
},
'name': 'Orlí zrak'
},
{
'content': 'Gnómy příroda obdařila zvláštním darem Zručnosti. Jde o vzácnou kombinaci několika faktorů. Mají citlivé ruce, velkou představivost, smysl pro detail a přesný odhad. Není tak divu, že jsou gnómové těmi nejlepšími řemeslníky. Díky této schopnosti mají gnómové bonus +2 ke všem akcím založeným na jemné práci rukou (všemožná Řemesla, Umění, Alchymie, ale také Mechanika, Otevírání zámků a podobně). Bonus se nevztahuje na akce spoléhající se na koordinaci celého těla (např. dovednost Akrobacie, šplh, střelba a boj obecně).',
'data': {
'description': 'Gnómové mají bonus +2 k akcím s jemnou prácí rukou (Řemesla, Umění, Alchymie, ale také Mechanika, Otevírání zámků a podobně).',
'envelopeAbilities': [],
'envelopeSkills': [],
'isFirstLevel': true,
'name': 'Zručnost',
'race': 'Gnóm',
'rulebook': 'PPZ: Příručka hráče: kapitola Herní postava',
'type': 'ability'
},
'name': 'Zručnost'
},
{
'content': 'Kůže obrů je tvrdá a rohovitá. Trny rostlin, střepy ani špičaté větve jí nedokáží proniknout. Aby obr utrpěl zranění, muselo by jej zranit něco mnohem ostřejšího či silnějšího. Díky této schopnosti získávají obři k Základní obraně zvláštní bonus +2.',
'data': {
'description': 'Díky této schopnosti získávají obři k Základní obraně zvláštní bonus +2.',
'envelopeAbilities': [],
'envelopeSkills': [],
'isFirstLevel': true,
'name': 'Hroší kůže',
'race': 'Obr',
'rulebook': 'PPZ: Příručka hráče: kapitola Herní postava',
'type': 'ability'
},
'name': 'Hroší kůže'
},
{
'content': 'Půlčíci jsou od přírody obdařeni chlupatými chodidly. Díky nim se dokáží pohybovat naprosto neslyšně. Dokonce ani na štěrkové cestě je obvykle nezaslechneš. Tato schopnost se ovšem projevuje pouze tehdy, pokud nemají na nohou boty. Díky této schopnosti mají půlčíci bonus +2 ke všem akcím vyžadujícím nenápadné přesuny (plížení, tichý pohyb a podobně). Poznámka: Tento bonus zaniká, jestliže má na sobě půlčík nějaké nezajištěné zdroje hluku (kroužkovou košili, nádobí, hromadu amuletů a podobně).',
'data': {
'description': 'Půlčíci mají bonus +2 ke všem akcím vyžadujícím nenápadné přesuny (plížení, tichý pohyb a podobně).',
'envelopeAbilities': [],
'envelopeSkills': [],
'isFirstLevel': true,
'name': 'Tichošlápek',
'race': 'Půlčík',
'rulebook': 'PPZ: Příručka hráče: kapitola Herní postava',
'type': 'ability'
},
'name': 'Tichošlápek'
},
{
'content': 'Trpaslíci jsou obdařeni zvláštním darem nočního vidění. Jde o následek jejich odvěkého života v podzemí. Díky němu dokáží vidět na určitou vzdálenost i v naprosté tmě. Nerozeznají v ní sice barvy, ale vidí vše v různých odstínech šedi. Dokáží se tak ve tmě rychle a bezpečně pohybovat. S touto schopností vidí trpaslík ve tmě až na vzdálenost 30 sáhů.',
'data': {
'description': 'Trpaslíci dokáží vidět až na 30 sáhů i v naprosté tmě. Nerozeznají sice barvy, ale vidí vše v odstínech šedi.',
'envelopeAbilities': [],
'envelopeSkills': [],
'isFirstLevel': true,
'name': 'Vidění ve tmě',
'race': 'Trpaslík',
'rulebook': 'PPZ: Příručka hráče: kapitola Herní postava',
'type': 'ability'
},
'name': 'Vidění ve tmě'
},
{
'name': 'Léčba vlastních zranění',
'content': 'Po skončení boje může válečník využít zbytkový adrenalin. Ten pak nenechá vyprchat, ale použije ho k vybuzení svých regeneračních schopností. Každé kolo léčby ho stojí 1 bod adrenalinu a uzdraví mu 2 životy (ze zranění, které v posledním boji utrpěl).',
'data': {
'name': 'Léčba vlastních zranění',
'description': 'Léčení 2 životů za každý 1 adrenalin po souboji.',
'type': 'ability',
'rulebook': 'Příručka pro hráče',
'profession': 'Válečník',
'isFirstLevel': true,
'envelopeAbilities': [],
'envelopeSkills': []
}
},
{
'name': 'Bojové triky',
'content': 'Bojové triky jsou speciální akce válečníka. Na začátku hry ovládáš dva z nich a při přestupu na vyšší úroveň se můžeš naučit vždy jeden další. Každý bojový trik má přesně určené použití. Některé lze provést pouze při útoku, jiné pouze při obraně. Každý trik vyžaduje určité množství adrenalinu, bez kterého nelze provést. Toto množství si válečník upíše, jakmile se o daný trik pokusí (a to bez ohledu na to, zda v něm uspěl nebo ne). Bojový trik se obvykle vztahuje pouze na jednu konkrétní bojovou akci (výpad, kryt a podobně). Pokud můžeš v daném kole zaútočit nebo se bránit víckrát (a máš dostatek adrenalinu), můžeš použít ke každé akci samostatný bojový trik. Provedení bojových triků může vyžadovat nejen adrenalin, ale i zvládnutí určité bojové školy.',
'data': {
'name': 'Bojové triky',
'type': 'ability',
'rulebook': 'Příručka pro hráče',
'description': 'Každý trik vyžaduje určité množství adrenalinu, který si válečník upíše, jakmile se o něj pokusí (a to bez ohledu na to, zda v něm uspěl nebo ne). Každý bojový trik má přesně určené použití (do útoku, do obrany...).',
'profession': 'Válečník',
'isFirstLevel': true,
'envelopeAbilities': ['Bojová připravenost', 'Zuřivý útok'],
'envelopeSkills': []
}
},
{
'name': 'Hraničářské umění',
'content': 'Nikdo jiný netráví v přírodě tolik času jako právě hraničář. Díky tomu si osvojil několik speciálních (profesních) dovedností. Jde o Lov, Orientaci, Předpovídání počasí a Stopování. Každou z nich dokážeš provádět rovnou na třetí stupeň zvládnutí a na vyšších úrovních vylepšovat.',
'data': {
'name': 'Hraničářské umění',
'type': 'ability',
'rulebook': 'Příručka pro hráče',
'description': 'Hraničář si od první úrovně osvojí dovednosti Lov, Orientace, Předpovídání počasí a Stopování.',
'profession': 'Hraničář',
'isFirstLevel': false,
'envelopeAbilities': [],
'envelopeSkills': ['Lov', 'Orientace', 'Předpovídání počasí', 'Stopování']
}
},
{
'name': 'Hraničářská magie',
'content': 'Hraničářská magie je tajemné umění, které umožňuje navázat silné pouto s přírodou. Děje se tak skrze speciální dovednost, kterou ovládají pouze hraničáři. Díky ní pak dokáží sesílat různá přírodní kouzla.',
'data': {
'name': 'Hraničářská magie',
'type': 'ability',
'rulebook': 'Příručka pro hráče',
'description': 'Hraničářská magie umožňuje používat dovednost Pouto s přírodou. Díky ní pak dokáží sesílat různá přírodní kouzla jako Najdi úkryt, Najdi vodu, Rozdělej oheň nebo Znamení. Na vyšších úrovních se hraničář může naučit nová kouzla zvládnutím směru hraničářské magie.',
'profession': 'Hraničář',
'isFirstLevel': true,
'envelopeAbilities': ['Najdi úkryt', 'Najdi vodu', 'Rozdělej oheň', 'Znamení'],
'envelopeSkills': ['Pouto s přírodou']
}
},
{
'name': 'Alchymie',
'content': 'Alchymista ovládá od první úrovně tři vzácné profesní dovednosti. Jedna mu umožňuje manu vidět, a tak ji i nacházet. Druhá mu dává znalosti destilace potřebné k jejímu zpracování. Pomocí třetí pak sám dokáže vyrábět různé magické předměty a zná i recepty potřebné k jejich výrobě.',
'data': {
'name': 'Alchymie',
'type': 'ability',
'rulebook': 'Příručka pro hráče',
'description': 'Alchymista ovládá od první úrovně tři vzácné profesní dovednosti. Jedna mu umožňuje manu vidět, a tak ji i nacházet. Druhá mu dává znalosti destilace potřebné k jejímu zpracování. Pomocí třetí pak sám dokáže vyrábět různé magické předměty a zná i recepty potřebné k jejich výrobě.',
'profession': 'Alchymista',
'isFirstLevel': true,
'envelopeAbilities': ['Bomba', 'Dýmovnice', 'Kouzelný inkoust', 'Lakmusový papírek', 'Lektvar Medvědí síly', 'Lektvar Mucholapka', 'Lektvar Neutralizace', 'Lektvar Ranhojič', 'Lektvar Rychlost', 'Lektvar Změny velikosti', 'Univerzální protijed', 'Zápalná Šňůra', 'Zředěný líh'],
'envelopeSkills': ['Vidění many', 'Destilace many', 'Lučba']
}
},
{
'name': 'Identifikace předmětu',
'content': 'Díky praxi v oboru dokáže alchymista automaticky identifikovat předměty, které umí sám vyrobit. Tedy pokud umí vyrobit Lektvar Ranhojič, dokáže ho také rozpoznat mezi flakóny s neznámým obsahem a podobně. Pokud byl předmět vyroben v netradiční podobě (třeba létající židle místo létajícího koštěte), může si PJ vyžádat hod na úspěch v jeho rozpoznání (INT). Jestliže bys chtěl rozpoznávat i složitější předměty, které alchymista zatím vyrobit nedokáže, musíš nejprve ovládnout speciální dovednost Pokročilá identifikace.',
'data': {
'name': 'Identifikace předmětu',
'type': 'ability',
'rulebook': 'Příručka pro hráče',
'description': 'Alchymista dokáže automaticky identifikovat předměty, které umí sám vyrobit. Tedy pokud umí vyrobit Lektvar Ranhojič, dokáže ho také rozpoznat mezi flakóny s neznámým obsahem a podobně.',
'profession': 'Alchymista',
'isFirstLevel': true,
'envelopeAbilities': [],
'envelopeSkills': []
}
},
{
'name': 'Kouzelnické triky',
'content': 'Magie je velmi komplexní a složitý obor. Existují však i malá kouzla, kterým se říká kouzelnické triky. Ty jsou natolik jednoduché, že je zvládne seslat i začínající kouzelník. Obvykle jde o různé proměny barev, vůní, chutí a podobně. Tato malá kouzla jsou dobrá spíše pro efekt. Jejich hlavním úkolem je obvykle nějak zaujmout ostatní. Příkladem takového triku může být třeba vyvolání třepotavého světélka libovolné barvy (nelze pořádně použít ke svícení, ale může ohromit ostatní). Stejně tak lze vyčarovat nějaký obrázek na kus pergamenu, přidat jídlu nějakou chuť, změnit barvu čepice nebo třeba způsobit praskavý zvuk nedaleko kouzelníka. Tato zvláštní schopnost dává kouzelníkovi možnost základní improvizace. Nedokážeš s nimi nikoho zranit nebo třeba něco zapálit. Jde o natolik primitivní kouzla, že ani nevyžadují ověření úspěchu jejich seslání. Každý kouzelnický trik stojí 1 manu a vyvolává se jedno kolo. Není k němu potřeba žádných magických formulí ani gest. Dosah triku bývá pět sáhů a roste o jeden sáh za každou další úroveň kouzelníka. ',
'data': {
'name': 'Kouzelnické triky',
'type': 'ability',
'rulebook': 'Příručka pro hráče',
'description': 'Kouzelnické triky jsou malá kouzla dobrá spíše pro efekt. Nedokážeš s nimi nikoho zranit nebo třeba něco zapálit, lze s nimi však improvizovat. Můžeš jimi vyvolat třepotavá světélka, způsobit praskavý zvuk nedaleko kouzelníka nebo změnit barvu čepice. Každý kouzelnický trik stojí 1 manu.',
'profession': 'Kouzelník',
'isFirstLevel': true,
'envelopeAbilities': [],
'envelopeSkills': []
}
},
{
'name': 'Obecná magie',
'content': 'Obecná magie je naprostým základem kouzelnické profese. Dává ti na výběr z celé škály jednoduchých kouzel, která se můžeš naučit. Zároveň ti poskytne speciální dovednost potřebné k jejich seslání. Tato dovednost se nazývá Sesílání kouzel a na její úspěch kouzelník háže při sesílání jakéhokoliv kouzla.',
'data': {
'name': 'Obecná magie',
'type': 'ability',
'rulebook': 'Příručka pro hráče',
'description': 'Dává ti na výběr z celé škály jednoduchých kouzel, která se můžeš naučit. Zároveň ti poskytne speciální dovednost Sesílání kouzel.',
'profession': 'Kouzelník',
'isFirstLevel': true,
'envelopeAbilities': [],
'envelopeSkills': ['Sesílání kouzel']
}
},
{
'name': 'Boj beze zbraně',
'content': 'Se zloději se život příliš nemazlil. Pouliční rvačky a šarvátky byly jedním z mnoha příkoří, kterým museli každý den čelit. Ten, kdo v nich chtěl uspět, musel být chytřejší, rychlejší nebo drsnější než jeho protivník. Právě to pak dalo základ jejich perfektní znalosti boje beze zbraně. Zloději v něm nehrají fér a ani se o to nesnaží. Útočí na citlivá místa, umí vykrývat rány a dokáží dostat protivníka na lopatky. Díky této schopnosti získává zloděj při jakémkoliv boji beze zbraně bonus +3 do útoku i do obrany.',
'data': {
'name': 'Boj beze zbraně',
'type': 'ability',
'rulebook': 'Příručka pro hráče',
'description': 'Díky této schopnosti získává zloděj při jakémkoliv boji beze zbraně bonus +3 do útoku i do obrany.',
'profession': 'Zloděj',
'isFirstLevel': true,
'envelopeAbilities': [],
'envelopeSkills': []
}
},
{
'name': 'Základy zlodějského umění',
'content': 'Život na ulici naučil zloděje základům jeho profese. Osvojili si tak několik dovedností, ve kterých nevyniká nikdo jiný. Základy zlodějského umění obsahují tyto dovednosti: Hazardní hry, Odhad ceny, Přesvědčování a Vybírání kapes.',
'data': {
'name': 'Základy zlodějského umění',
'type': 'ability',
'rulebook': 'Příručka pro hráče',
'description': 'Základy zlodějského umění obsahují tyto dovednosti: Hazardní hry, Odhad ceny, Přesvědčování a Vybírání kapes.',
'profession': 'Zloděj',
'isFirstLevel': true,
'envelopeAbilities': [],
'envelopeSkills': ['Hazardní hry', 'Odhad ceny', 'Přesvědčování', 'Vybírání kapes']
}
},
{
'name': 'Spojení s bohem',
'content': 'Spojení s bohem je jedinečný dar, bez kterého by klerik nemohl vykonávat svou profesi. Jeho součástí je znalost základních modliteb (proseb), kterými lze boží sílu přivolat skrze dovednost Prosby.',
'data': {
'name': 'Spojení s bohem',
'type': 'ability',
'rulebook': 'Příručka pro hráče',
'description': 'Znalost základních modliteb (proseb), kterými lze boží sílu přivolat skrze dovednost Prosby.',
'profession': 'Klerik',
'isFirstLevel': true,
'envelopeAbilities': ['Léčivé ruce', 'Očištení', 'Štít víry', 'Úder moci', 'Uzdrav otravu'],
'envelopeSkills': ['Prosby']
}
},
{
'name': 'Svěcení',
'content': 'Svěcení je základní rituál, při kterém klerik předá část boží síly určitému předmětu či tekutině. Klerika tento úkon stojí 1 bod přízně a díky své jednoduchosti nevyžaduje žádný ověřovací hod. Svěcení trvá zhruba minutu a lze při něm posvětit litr tekutiny (5 flakónů svěcené vody) nebo jeden vybraný předmět. Je-li tímto předmětem zbraň, získá zvláštní moc v boji proti magickým tvorům, neviděným, nemrtvým či nadpozemským bytostem. Ta jí zůstane až do konce prvního souboje s těmito tvory.',
'data': {
'name': 'Svěcení',
'type': 'ability',
'rulebook': 'Příručka pro hráče',
'description': 'Klerika tento úkon stojí 1 bod přízně. Svěcení trvá zhruba minutu a lze při něm posvětit litr tekutiny (5 flakónů svěcené vody) nebo jeden vybraný předmět.',
'profession': 'Klerik',
'isFirstLevel': true,
'envelopeAbilities': [],
'envelopeSkills': []
}
}
];
const Attributes = {
Charisma: 'charisma',
Constitution: 'constitution',
Dexterity: 'dexterity',
Intelligence: 'intelligence',
Strength: 'strength'
};
const Hands = {
None: 'none',
Left: 'left',
Right: 'right',
Both: 'both'
};
const Professions = {
Alchemist: 'Alchymista',
Priest: 'Klerik',
Ranger: 'Hraničář',
Thief: 'Zloděj',
Mage: 'Kouzelník',
Warrior: 'Válečník'
};
const RacePassiveAbilities = {
'Barbar': 'Houževnatost',
'Trpaslík': 'Vidění ve tmě',
'Elf': 'Orlí zrak',
'Obr': 'Hroší kůže',
'Gnóm': 'Zručnost',
'Půlčík': 'Tichošlápek',
'Člověk': 'Všestrannost',
'nevybrano': '',
'vlastni': ''
};
const Skills = [
{
'content': 'Tato dovednost spojuje několik disciplín, které jsou založeny na jisté dávce obratnosti. S jejich pomocí dokáže postava zvládat kotouly, salta, stoj na rukou nebo třeba chůzi po provaze. Zároveň dává prostor pro speciální akce, jako jsou udržení rovnováhy při výbuchu či otřesech nebo zachycení se při pádu z výšky. Při šplhu ti pomůže v případě, kdy je k lezení potřeba hlavně Obratnost (obvykle pokud je překážka pohyblivá, kluzká a podobně).',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'S pomocí Akrobacie dokáže postava zvládat kotouly, salta, stoj na rukou nebo třeba chůzi po provaze.',
'isKnowledgeBased': false,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Akrobacie',
'printText': 'Používám svou obecnou dovednost Akrobacii (OBR).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Akrobacie'
},
{
'content': 'Atletika je umění, které vyžaduje nejen sílu, ale také znalosti toho, jak ji správně využít. S její pomocí není problém zvládat běh na dlouhé vzdálenosti, vrhání předmětů a skoky do výšky i do dálky. Zároveň je to dovednost, kterou využiješ při vzpírání, veslování a zvedání či nošení těžkých břemen obecně. Při šplhu ti pomůže v případě, kdy je k lezení potřeba hlavně síla (obvykle pokud někoho táhneš nebo máš zdolat dlouhý úsek překážky).',
'data': {
'baseAttributes': [
'strength'
],
'description': 'S pomocí Atletiky není problém zvládat běh na dlouhé vzdálenosti, vrhání předmětů a skoky do výšky i do dálky.',
'isKnowledgeBased': false,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Atletika',
'printText': 'Používám svou obecnou dovednost Atletiku (SIL).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Atletika'
},
{
'content': 'Na cestách se leckdy toulají cizinci, kteří nehovoří obecnou řečí. A když už, tak jen velmi špatně. Znalost cizích jazyků ti může pomoci získat jejich důvěru nebo odposlechnout důležitou informaci. Čím lépe tuto dovednost ovládáš, tím větší počet jazyků znáš a dokážeš je použít.',
'data': {
'baseAttributes': [
'intelligence'
],
'description': 'Na cestách se leckdy toulají cizinci, kteří nehovoří obecnou řečí. Znalost cizích jazyků ti může pomoci získat jejich důvěru nebo odposlechnout důležitou informaci.',
'isKnowledgeBased': true,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Cizí jazyky',
'printText': 'Používám svou obecnou, znalostní dovednost Cizí jazyky (INT).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Cizí jazyky'
},
{
'content': 'Gramotnost je základem vzdělanosti. Díky ní si poradíš s knihami, dopisy i tajnými zprávami. Na prvních stupních ovládáš pouze abecedu obecného jazyka. Postupem času se však naučíš i další z nich, včetně tajů runového písma. Mistři v oboru nakonec získají povědomí i o symbolech a znacích dávno zapomenutých civilizací.',
'data': {
'baseAttributes': [
'intelligence'
],
'description': 'Gramotnost je základem vzdělanosti. Díky ní si poradíš s knihami, dopisy i tajnými zprávami.',
'isKnowledgeBased': true,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Čtení a psaní',
'printText': 'Používám svou obecnou, znalostní dovednost Čtení a psaní (INT).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Čtení a psaní'
},
{
'content': 'Se znalostí historie si dokážeš vybavit známá místa, jména, příběhy či události. Zároveň znáš i legendy, které se váží ke starým válkám či dávno zapomenutým tvorům. Právě tyto znalosti ti mohou občas zachránit život. Je velká výhoda vědět, co můžeš čekat na neznámém místě nebo jak nejlépe čelit dávno zapomenuté bytosti',
'data': {
'baseAttributes': [
'intelligence'
],
'description': 'Se znalostí historie si dokážeš vybavit známá místa, jména, příběhy či události.',
'isKnowledgeBased': true,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Historie',
'printText': 'Používám svou obecnou, znalostní dovednost Historii (INT).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Historie'
},
{
'content': 'K rychlým přesunům na dlouhé vzdálenosti ti pomůže jízda na zvířeti. Tato dovednost tě navíc naučí, jak zvíře uklidnit, osedlat a ovládat jeho pohyb. Začátečník si dobře poradí s poklusem na ochočeném koni. Zkušený jezdec však zvládne i rychlou jízdu na divokém hřebci či některém z magických tvorů.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Tato dovednost tě navíc naučí, jak zvíře uklidnit, osedlat a ovládat jeho pohyb.',
'isKnowledgeBased': false,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Jízda na zvířeti',
'printText': 'Používám svou obecnou dovednost Jízdu na zvířeti (OBR).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Jízda na zvířeti'
},
{
'content': 'Všechny stroje, strojky a „hejblata“ mají svůj základ v mechanice. Díky ní chápeš, proč a jak věci fungují. Navíc ti otevírá možnost takové předměty vyrábět a upravovat. Stejně tak s ní zvládneš opravit hodinový strojek, výtah či otáčivé dveře. Zkušení mechanici pak dokáží navrhnout i kuši, balistu, či válečný katapult.',
'data': {
'baseAttributes': [
'intelligence',
'dexterity'
],
'description': 'Všechny stroje, strojky a „hejblata“ mají svůj základ v mechanice. Díky ní chápeš, proč a jak věci fungují.',
'isKnowledgeBased': true,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Mechanika',
'printText': 'Používám svou obecnou, znalostní dovednost Mechaniku (INT/OBR).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Mechanika'
},
{
'content': 'Na svých cestách jistě narazíš na rozličné potoky, řeky a jezera. Jestliže neumíš plavat, může to pro tebe znamenat velký problém. Buď tě čeká zdlouhavá cesta k nejbližšímu brodu, nebo riziko utonutí. Zkušenému plavci však nic z toho nehrozí. Dokáže skrz vodu uniknout nepřátelům nebo proniknout tam, kde by ho nikdo nečekal.',
'data': {
'baseAttributes': [
'strength',
'dexterity'
],
'description': 'Na svých cestách jistě narazíš na rozličné potoky, řeky a jezera. Jestliže neumíš plavat, může to pro tebe znamenat velký problém.',
'isKnowledgeBased': true,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Plavání',
'printText': 'Používám svou obecnou dovednost Plavání (SIL/OBR).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Plavání'
},
{
'content': 'Na svých cestách jistě narazíš na rozličné potoky, řeky a jezera. Jestliže neumíš plavat, může to pro tebe znamenat velký problém. Buď tě čeká zdlouhavá cesta k nejbližšímu brodu, nebo riziko utonutí. Zkušenému plavci však nic z toho nehrozí. Dokáže skrz vodu uniknout nepřátelům nebo proniknout tam, kde by ho nikdo nečekal.',
'data': {
'baseAttributes': [
'strength',
'dexterity'
],
'description': 'Pokud se potřebuješ někam nenápadně přesunout, je plížení tou nejlepší volbou. Postava je při něm přikrčená nebo se přímo plazí po zemi. Díky tomu může uniknout pozornosti protivníka a proklouznout na místo, kam potřebuje. Cenou za to je však velmi nízká rychlost, kterou může plížení provést. Ta odpovídá 1/10 Pohyblivosti postavy. Jestliźe máš v této dovednosti uspět, musíš navíc v ověřovacím hodu překonat Postřeh protivníka.',
'isKnowledgeBased': false,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}} {{Ověření= Plížení (OBR) vs. Postřeh (INT)}}',
'name': 'Plížení',
'printText': 'Používám svou obecnou dovednost Plížení (OBR).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Plížení'
},
{
'content': 'Postřeh zahrnuje vše, co se týká vnímavosti postavy. Vypovídá o tom, jak dobře si dokážeš všímat drobných detailů kolem sebe. Jeho zvládnutí je klíčový faktor pro nalézání tajných dveří, nastražených pastí nebo skrytých stop. Stejně tak tě může varovat před blížícím se protivníkem nebo tím, že jsi sledován.',
'data': {
'baseAttributes': [
'intelligence'
],
'description': 'Postřeh zahrnuje vše, co se týká vnímavosti postavy. Vypovídá o tom, jak dobře si dokážeš všímat drobných detailů kolem sebe.',
'isKnowledgeBased': false,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Postřeh',
'printText': 'Používám svou obecnou dovednost Postřeh (INT).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Postřeh'
},
{
'content': 'První pomoc je klíčová dovednost, která rozhoduje o životě a smrti. Díky ní totiž víš, jak rychle zastavit krvácení, vytáhnout zapadlý jazyk nebo třeba rozdýchat tonoucího. Zároveň je to nezbytná dovednost pro ošetření kritických zranění. S její pomocí můžeš raněného stabilizovat a zabránit tak další ztrátě jeho životů.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Díky První pomoci víš, jak rychle zastavit krvácení, vytáhnout zapadlý jazyk nebo třeba rozdýchat tonoucího.',
'isKnowledgeBased': false,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'První pomoc',
'printText': 'Používám svou obecnou dovednost První pomoc (OBR).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'První pomoc'
},
{
'content': 'Na cestách se můžeš dostat do nehostinných krajů. Můžeš být vystaven hladu, žízni či nepřízni počasí. V takovém případě je nejdůležitější přežít. Díky této dovednosti umíš rozdělat oheň, ovládáš základy vaření, chytání drobné zvěře, vyrábění úkrytu a mnoho dalších užitečných věcí.',
'data': {
'baseAttributes': [
'dexterity',
'constitution'
],
'description': 'Díky této dovednosti umíš rozdělat oheň, ovládáš základy vaření, chytání drobné zvěře, vyrábění úkrytu a mnoho dalších užitečných věcí.',
'isKnowledgeBased': false,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Přežití v přírodě',
'printText': 'Používám svou obecnou dovednost Přežití v přírodě (OBR/ODO).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Přežití v přírodě'
},
{
'content': 'Reflexy jsou instinktivní reakcí těla na podněty z okolí. Vhodnými technikami se však dají trénovat a zlepšovat. Jestliže po tobě sekne nastražená čepel nebo se propadne podlaha, dokáže tvé tělo zareagovat. Můžeš díky tomu uhnout, uskočit nebo třeba strnout uprostřed pohybu. To všechno jsou akce, které ti mohou zachránit život.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Jestliže po tobě sekne nastražená čepel nebo se propadne podlaha, dokáže tvé tělo zareagovat. Můžeš díky tomu uhnout, uskočit nebo třeba strnout uprostřed pohybu.',
'isKnowledgeBased': false,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Reflex',
'printText': 'Používám svou obecnou dovednost Reflex (OBR).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Reflex'
},
{
'content': 'S touto dovedností zvládneš opracovat dřevo, kovy i kameny. Ovládáš základy tesařství, truhlářství, kovářství i kamenictví. Umíš také rozeznat jednotlivé druhy materiálů a víš, který se k čemu nejlépe hodí. Na prvních stupních dokážeš vyrobit třeba luk nebo podkovu. Později si však poradíš i se stavbou lodí, domů nebo mostů.',
'data': {
'baseAttributes': [
'dexterity',
'strength'
],
'description': 'Ovládáš základy tesařství, truhlářství, kovářství i kamenictví. Umíš také rozeznat jednotlivé druhy materiálů a víš, který se k čemu nejlépe hodí.',
'isKnowledgeBased': false,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Řemesla',
'printText': 'Používám svou obecnou dovednost Řemesla (OBR/SIL).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Řemesla'
},
{
'content': 'Pokud chceš zaujmout ostatní, musíš jim obvykle předvést něco zajímavého. K tomu ti může pomoci dovednost Umění. Ta v sobě zahrnuje základy mnoha užitečných disciplín. Může se jednat o hru na hudební nástroj, zpěv, vyprávění příběhů, tanec, herectví, kreslení nebo jinou formu zábavy.',
'data': {
'baseAttributes': [
'charisma',
'dexterity'
],
'description': 'Může se jednat o hru na hudební nástroj, zpěv, vyprávění příběhů, tanec, herectví, kreslení nebo jinou formu zábavy.',
'isKnowledgeBased': false,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Umění',
'printText': 'Používám svou obecnou dovednost Umění (CHAR/OBR).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Umění'
},
{
'content': 'Víra v bohy provází lidi odjakživa. Znalost Teologie ti poskytne obecné povědomí o bozích, modlitbách i obřadech, dále pak o posvátných bytostech, svatých symbolech i praktikách či hierarchii kultů. Základní informace o jejím fungování získáš v kapitole „Užitečné informace“ – „Náboženství a víra“.',
'data': {
'baseAttributes': [
'intelligence'
],
'description': 'Znalost Teologie ti poskytne obecné povědomí o bozích, modlitbách i obřadech, dále pak o posvátných bytostech, svatých symbolech i praktikách či hierarchii kultů.',
'isKnowledgeBased': true,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Teologie',
'printText': 'Používám svou obecnou, znalostní dovednost Teologii (INT).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Teologie'
},
{
'content': 'Vůle je kombinací sebekázně, disciplíny a vnitřní rovnováhy. Díky ní si dokážeš zachovat vlastní názor, jednat svobodně a dle vlastního uvážení. Čím lépe ji ovládáš, tím snadněji se dokážeš ubránit manipulaci, sugesci či psychickým kouzlům. Navíc dokážeš prosadit svůj názor a myšlenky u ostatních.',
'data': {
'baseAttributes': [
'charisma'
],
'description': 'Díky Vůli si dokážeš zachovat vlastní názor, jednat svobodně a dle vlastního uvážení. Čím lépe ji ovládáš, tím snadněji se dokážeš ubránit manipulaci, sugesci či psychickým kouzlům.',
'isKnowledgeBased': false,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Vůle',
'printText': 'Používám svou obecnou dovednost Vůli (CHAR).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Vůle'
},
{
'content': 'Pro tuto dovednost se používá také název Vytrvalost. Díky ní dokážeš zvládnout činnosti vyžadující déle trvající fyzický výkon. Běžným příkladem může být běh na dlouhé vzdálenosti nebo udržení se na skalním převisu. Z logiky věci pak nemá žádný vliv na odolnost postavy vůči jedům a otravám. ',
'data': {
'baseAttributes': [
'constitution'
],
'description': 'Díky ní dokážeš zvládnout činnosti vyžadující déle trvající fyzický výkon. Běžným příkladem může být běh na dlouhé vzdálenosti nebo udržení se na skalním převisu.',
'isKnowledgeBased': false,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Výdrž',
'printText': 'Používám svou obecnou dovednost Výdrž (ODO).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Výdrž'
},
{
'content': 'S touto dovedností získáš znalosti o zvířatech, rostlinách, ale i o neživé přírodě. U rostlin víš, jak vypadají, k čemu se hodí a také kdy a kde je hledat. V případě živočichů pak znáš jejich chování, jaká jsou jejich slabá místa, čím se živí, jaké vydávají zvuky, jaké mají stopy a podobně. ',
'data': {
'baseAttributes': [
'intelligence'
],
'description': 'S touto dovedností získáš znalosti o zvířatech, rostlinách, ale i o neživé přírodě.',
'isKnowledgeBased': false,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Znalost přírody',
'printText': 'Používám svou obecnou dovednost Znalost přírody (INT).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Znalost přírody'
},
{
'content': 'Zpracování zvěře tě naučí, jak správně vykuchat zvíře. Víš, jak z něj získat maso a upravit ho tak, aby se nezkazilo. Umíš rozeznat jednotlivé orgány a to, zda nejsou jedovaté. Umíš stáhnout a vydělat kůži, aby šla využít, a také zvíře vycpat. Ze šlach umíš udělat provázky, ze střev či žaludku měch na vodu, z kůstek hroty šípů a podobně.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Umíš rozeznat jednotlivé orgány a to, zda nejsou jedovaté. Umíš stáhnout a vydělat kůži, aby šla využít, a také zvíře vycpat.',
'isKnowledgeBased': false,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Zpracování zvěře',
'printText': 'Používám svou obecnou dovednost Zpracování zvěře (OBR).',
'profession': null,
'rulebook': 'PPZ: Příručka hráče: kapitola Dovednosti',
'type': 'skill'
},
'name': 'Zpracování zvěře'
},
{
'content': 'Pouto s přírodou je forma duševního cvičení, kterým hraničář propojí své city a emoce s prastarým zdrojem přírodních sil. Stane se tak jejich součástí, což mu umožní pracovat s jejich energií a proměnit ji na kouzla. Tento druh magie je zcela intuitivní. Na rozdíl od kouzelníka při něm nemusíš provádět žádná gesta či pronášet zaklínadla. Zvládnutí této dovednosti ovlivňuje tvé šance na úspěšné „seslání“ kouzel.',
'data': {
'baseAttributes': [
'intelligence'
],
'description': 'Pouto s přírodou je forma duševního cvičení, kterým hraničář propojí své city a emoce s prastarým zdrojem přírodních sil. Zvládnutí této dovednosti ovlivňuje tvé šance na úspěšné „seslání“ kouzel.',
'isKnowledgeBased': true,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Pouto s přírodou',
'printText': 'Sesílám kouzlo skrze svou profesní dovednost Pouto s přírodou (INT).',
'profession': 'Hraničář',
'rulebook': 'PPZ: Příručka hráče: kapitola Hraničář',
'type': 'skill'
},
'name': 'Pouto s přírodou'
},
{
'content': 'Díky této dovednosti dokáže hraničář uspět v lovu nejrůznějších druhů zvířat (včetně ryb, ptáků a podobně). Využívá k tomu jejich návyků, slabin a znalostí prostředí, ve kterém žijí. Abys v Lovu uspěl, musíš překonat obtížnost danou PJem.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Díky této dovednosti dokáže hraničář uspět v lovu nejrůznějších druhů zvířat (včetně ryb, ptáků a podobně).',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Lov',
'printText': 'Používám svou profesní dovednost Lov (OBR) zvěře.',
'profession': 'Hraničář',
'rulebook': 'PPZ: Příručka hráče: kapitola Hraničář',
'type': 'skill'
},
'name': 'Lov'
},
{
'content': 'Díky této dovednosti se hraničář dokáže skvěle orientovat v terénu. Pomáhá mu v tom znalost polohy hvězd a slunce, uchycení lišejníků na stromech a mnoho dalších znamení přírody. Výsledkem je, že na svých cestách nebloudí a dokáže najít správný směr. Mimo to zvládá znalosti kartografie (čtení a tvorby map), lodní navigace a podobných disciplín. ',
'data': {
'baseAttributes': [
'intelligence'
],
'description': 'Díky této dovednosti se hraničář dokáže skvěle orientovat v terénu.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Orientace',
'printText': 'Používám svou obecnou dovednost Orientaci (INT) v terénu.',
'profession': 'Hraničář',
'rulebook': 'PPZ: Příručka hráče: kapitola Hraničář',
'type': 'skill'
},
'name': 'Orientace'
},
{
'content': 'Hraničář dokáže pomocí různých náznaků přírody (tvaru mraků, chování hmyzu atd.) předpovídat počasí. Předpověď je tím náročnější (a méně přesná), čím je předpovídané období vzdálenější. Pokud PJ neuvede jinak, platí, že předpověď počasí na následujících 24 hodin není příliš složitá. Náhlý a nečekaný výkyv počasí může navíc hraničář vycítit intuitivně. PJ ho v takovém případě sám upozorní, že je „něco ve vzduchu“.',
'data': {
'baseAttributes': [
'intelligence'
],
'description': 'Hraničář dokáže pomocí různých náznaků přírody (tvaru mraků, chování hmyzu atd.) předpovídat počasí.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Předpovídání počasí',
'printText': 'Používám svou profesní dovednost a z náznaků přírody Předpovídám počasí (INT).',
'profession': 'Hraničář',
'rulebook': 'PPZ: Příručka hráče: kapitola Hraničář',
'type': 'skill'
},
'name': 'Předpovídání počasí'
},
{
'content': 'Hraničář dokáže pomocí této schopnosti najít a sledovat cizí stopy. Z hloubky otisku dokáží vyčíst netypický druh chůze (zda někdo kulhá a podobně), odhadnout váhu tvora, ale také mnoho dalších detailů. Díky praxi v terénu navíc dokáže odhadnout i to, která cesta byla pro pronásledovaného nejpříhodnější a jakým směrem zřejmě šel. Při stopování tak nemusí ztrácet drahocenný čas a dokáže při něm postupovat rychlostí běžné chůze.',
'data': {
'baseAttributes': [
'intelligence'
],
'description': 'Hraničář dokáže pomocí této schopnosti najít a sledovat cizí stopy.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Stopování',
'printText': 'Sleduju otisky v terénu pomocí své profesní dovednosti Stopování (INT).',
'profession': 'Hraničář',
'rulebook': 'PPZ: Příručka hráče: kapitola Hraničář',
'type': 'skill'
},
'name': 'Stopování'
},
{
'content': 'Použití této dovednosti trvá 1 směnu. Během ní hraničář dokáže ošetřit všechna zranění jedné postavy. Aby se o to mohl pokusit, musí mít k dispozici základní zdravotnické vybavení (obvazy). V případě úspěchu se raněnému vyléčí tolik životů, kolik je hraničářův stupeň zvládnutí této dovednosti. Jestliže neuspěješ (nebo tuto dovednost vůbec neovládáš), raněného sice nějak ošetříš, ale k dodatečné obnově jeho životů nedojde.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Použití této dovednosti trvá 1 směnu. Během ní hraničář dokáže ošetřit všechna zranění jedné postavy.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Léčitelství',
'printText': 'Po 1 směnu ošetřuju obvazy zranění svou profesní dovedností Léčitelství (INT). Pokud uspěju, vyléčím raněnému životy v hodnotě stupně zvládnutí dovednosti.',
'profession': 'Hraničář',
'rulebook': 'PPZ: Příručka hráče: kapitola Hraničář',
'type': 'skill'
},
'name': 'Léčitelství'
},
{
'content': 'Souznění s přírodou a jejími bytostmi umožňuje hraničáři získat si jejich důvěru. Takoví tvorové k němu přilnou a on si k nim vytvoří silné citové pouto. Za svého pána jsou pak zvířata ochotna bojovat a hraničář nikdy nedopustí, aby jim bylo ubližováno. Díky této dovednosti se může hraničář pokusit ochočit zvíře. Jeho šance na úspěch se mohou lišit podle druhu zvířete.',
'data': {
'baseAttributes': [
'charisma'
],
'description': 'Souznění s přírodou a jejími bytostmi umožňuje hraničáři získat si jejich důvěru. Takoví tvorové k němu přilnou a on si k nim vytvoří silné citové pouto.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Ochočování zvířat',
'printText': 'Po 1k6 směn získávám přízeň zvířete svou profesní dovedností Ochočování zvířat (INT).',
'profession': 'Hraničář',
'rulebook': 'PPZ: Příručka hráče: kapitola Hraničář',
'type': 'skill'
},
'name': 'Ochočování zvířat'
},
{
'content': 'Kamufláž je specifická dovednost, kterou lze použít pouze v přírodě či terénu obecně (nikoliv ve městech či budovách). S trochou bláta, trávy, větví a díky charakteru krajiny dokáže hraničář dokonale splynout s okolím. Stejné maskování pak dokáže provést i na jiné osobě. V případě úspěchu by musel někdo svým hodem na Postřeh překonat sílu Hraničářovy Kamufláže s Výhodou (bonus +5).',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'S trochou bláta, trávy, větví a díky charakteru krajiny dokáže hraničář dokonale splynout s okolím.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Kamufláž',
'printText': 'Snažím se o zamaskování a splynutí s okolním terénem svou profesní dovedností Kamufláž (OBR).',
'profession': 'Hraničář',
'rulebook': 'PPZ: Příručka hráče: kapitola Hraničář',
'type': 'skill'
},
'name': 'Kamufláž'
},
{
'content': 'Pokud je potřeba někoho polapit, zpomalit nebo zastrašit, dokáže si hraničář poradit. Umí totiž nalíčit jednoduché pasti. Potřebný čas i vybavení k jejich přípravě se pak liší podle jejich typu. Aby hraničář uspěl, musí hodem na ověření úspěchu překonat obtížnost přípravy dané pasti.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Pokud je potřeba někoho polapit, zpomalit nebo zastrašit, dokáže si hraničář poradit. Umí totiž nalíčit jednoduché pasti.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Líčení pastí',
'printText': 'Připravuju past pomocí své profesní dovednosti Líčení pastí (OBR).',
'profession': 'Hraničář',
'rulebook': 'PPZ: Příručka hráče: kapitola Hraničář',
'type': 'skill'
},
'name': 'Líčení pastí'
},
{
'content': 'Znalost stopování dává hraničářům jednu velkou výhodu. Mají dostatečné znalosti, aby se naučili stopy perfektně maskovat, anebo je dokonce falšovat. Není pak problém navést pronásledovatele jiným směrem nebo do připravené pasti. Odhalit by je dokázal pouze ten, kdo ovládá dovednost Stopování a překonal by svým hodem hraničářův výsledek na Zahlazování stop.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Znalost stopování dává hraničářům jednu velkou výhodu. Mají dostatečné znalosti, aby se naučili stopy perfektně maskovat, anebo je dokonce falšovat.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Zahlazování stop',
'printText': 'Maskuju či falšuju stopy k zmatení pronásledovatelů svou profesní dovedností Zahlazování stop (OBR).',
'profession': 'Hraničář',
'rulebook': 'PPZ: Příručka hráče: kapitola Hraničář',
'type': 'skill'
},
'name': 'Zahlazování stop'
},
{
'content': 'Alchymisté dokáží rozeznat, zda a kolik many v sobě určitý předmět má. Tyto informace jsou klíčové k jeho dalšímu zpracování. Zda se ti tato činnost povedla, zjistíš provedením hodu na ověření úspěchu akce. Její obtížnost se liší podle množství many v předmětu obsaženého.',
'data': {
'baseAttributes': [
'intelligence'
],
'description': 'Alchymisté dokáží rozeznat, zda a kolik many v sobě určitý předmět má.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Vidění many',
'printText': 'Po 1 minutu v předmětu hledám magii pomocí své profesní dovednosti Vidění many (INT).',
'profession': 'Alchymista',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'type': 'skill'
},
'name': 'Vidění many'
},
{
'content': 'Aby si alchymisté mohli dovolit vyrábět složitější předměty, potřebují dostatek many. Mohou si ji sice koupit od kolegů, ale její cena bývá vysoká. Většina se ji proto snaží získávat z vlastních zdrojů. Pomocí této schopnosti dokáže alchymista separovat manu z různých předmětů, které ji obsahují.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Aby si alchymisté mohli dovolit vyrábět složitější předměty, potřebují dostatek many.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Destilace many',
'printText': 'Ve své destilační sadě separuji manu pomocí své profesní dovednosti Destilace (OBR). Výsledek hodu určí kolik bodů many vydestiluju za 1 hodinu.',
'profession': 'Alchymista',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'type': 'skill'
},
'name': 'Destilace many'
},
{
'content': 'Lučba je věda, která se zabývá vlastnostmi, složením a přípravou různých látek. Je to právě ona, která je nejdůležitějším uměním celé alchymie. Zvládnutí této dovednosti je klíčové pro výrobu všech alchymistických předmětů. Čím lépe ji ovládáš, tím větší máš šanci ve výrobě uspět.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Lučba je věda, která se zabývá vlastnostmi, složením a přípravou různých látek. Čím lépe ji ovládáš, tím větší máš šanci ve výrobě uspět.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Lučba',
'printText': 'Vyrábím alchymistický předmět pomocí své profesní dovednosti Lučby (OBR).',
'profession': 'Alchymista',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'type': 'skill'
},
'name': 'Lučba'
},
{
'content': 'Léta praxe a studia jsou v alchymii nenahraditelné. S jejich pomocí lze rozeznat charakteristické znaky různých druhů alchymie a vše, co s nimi souvisí. Alchymista může předmět identifikovat a zjistit, jak se používá, čeho se s ním vyvarovat a do jakého oboru alchymie náleží.',
'data': {
'baseAttributes': [
'intelligence'
],
'description': 'Alchymista může předmět identifikovat a zjistit, jak se používá, čeho se s ním vyvarovat a do jakého oboru alchymie náleží.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Pokročilá identifikace',
'printText': 'Rozpoznávám charakteristiky předmětu pomocí své profesní dovednosti Pokročilé identifikace (INT).',
'profession': 'Alchymista',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'type': 'skill'
},
'name': 'Pokročilá identifikace'
},
{
'content': 'S touto dovedností dokáže alchymista vyrábět magické svitky, ze kterých lze sesílat kouzla. Svitek funguje jako určité pouzdro, do kterého je kouzlo uzamčeno a které lze zlomením pečeti uvolnit a seslat. K výrobě svitků je potřeba (kromě many a surovin) ještě pergamen, vosk a pomoc kouzelníka. Kouzla hraničářů ani prosby kleriků do něj vložit nelze.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'S touto dovedností dokáže alchymista vyrábět magické svitky, ze kterých lze sesílat kouzla.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}} {{Ověření= Výroba svitků (OBR) vs. Obtížnost kouzla}}',
'name': 'Výroba svitků',
'printText': 'S kouzelníkem uzamykám magii do pergamenu pomocí své profesní dovednosti Výroba svitků (OBR).',
'profession': 'Alchymista',
'rulebook': 'PPZ: Příručka hráče: kapitola Alchymista',
'type': 'skill'
},
'name': 'Výroba svitků'
},
{
'content': 'Sesílání kouzel je dovednost, která v sobě formuje zvládnutí tří technik – slov, gest a myšlenek. Všechny tři se vzájemně doplňují a pomáhají kouzelníkovi zvládnout proměnu many v kouzlo. Zvládnutí této dovednosti ovlivňuje tvé šance na úspěšné seslání kouzel. Čím lépe tuto dovednost ovládáš, tím je tvá šance na jejich správné formování vyšší.',
'data': {
'baseAttributes': [
'intelligence'
],
'description': 'Sesílání kouzel je dovednost, která v sobě formuje zvládnutí tří technik – slov, gest a myšlenek. Zvládnutí této dovednosti ovlivňuje tvé šance na úspěšné seslání kouzel.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Sesílání kouzel',
'printText': 'Slovy a gestikulací přetvářím myšlenky v kouzlo svou profesní dovedností Sesílání kouzel (INT).',
'profession': 'Kouzelník',
'rulebook': 'PPZ: Příručka hráče: kapitola Kouzelník',
'type': 'skill'
},
'name': 'Sesílání kouzel'
},
{
'content': 'Hazardní hry patří k oblíbeným činnostem zlodějů, ve kterých zpravidla neprohrávají. Nenechávají totiž nic náhodě. Kromě cinknutých karet a různých triků se jistí i pečlivým výběrem těch, koho oberou. Nemají problém nechat zbohatlíky nejprve několikrát vyhrát, aby pak ve správném okamžiku štěstěnu otočit a obrat chudáka až na kost.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Hazardní hry patří k oblíbeným činnostem zlodějů, ve kterých zpravidla neprohrávají. Kromě cinknutých karet a různých triků se jistí i pečlivým výběrem těch, koho oberou.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Hazardní hry',
'printText': 'Falšuju hru ve svůj prospěch pomocí své profesní dovednosti Hazardní hry (OBR).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Hazardní hry'
},
{
'content': 'Pokud už se zloděj pokouší něco ukrást, nedělá to obvykle bez rozmyslu. Musí si být totiž jistý, že daná věc za to riziko stojí. Své rozhodnutí činí na základě odhadu ceny. Dokáže totiž určit, za kolik peněz se dá vybraný předmět na černém trhu prodat. Tento odhad bývá většinou dosti přesný.',
'data': {
'baseAttributes': [
'intelligence'
],
'description': 'Pokud už se zloděj pokouší něco ukrást, nedělá to obvykle bez rozmyslu. Své rozhodnutí činí na základě odhadu ceny.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Odhad ceny',
'printText': 'Zkoumám cenu předmětu pomocí své profesní dovednosti Odhad ceny (INT).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Odhad ceny'
},
{
'content': 'Každý se může pokusit využít kouzlo své osobnosti a zapůsobit jím na ostatní. Zloděj má však znalosti, které mu v tom mohou výrazně pomoci. Ovládá základy herectví, rétoriky, empatie, diplomacie, etikety a zná také pravou cenu různých věcí. Díky tomu dokáže mnohem snáz přesvědčit ostatní, aby souhlasili s jeho návrhy. Neváhá k tomu použít všemožné formy blafování, podbízení se, klamání i skrytých hrozeb. ',
'data': {
'baseAttributes': [
'charisma'
],
'description': 'Zloděj ovládá základy herectví, rétoriky, empatie, diplomacie, etikety a zná také pravou cenu různých věcí. Díky tomu dokáže mnohem snáz přesvědčit ostatní, aby souhlasili s jeho návrhy.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}} {{Ověření= Přesvědčování (CHAR) vs. Vůle (CHAR)}}',
'name': 'Přesvědčování',
'printText': 'Využívám kouzlo osobnosti použitím své profesní dovednosti Přesvědčování (CHAR).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Přesvědčování'
},
{
'content': 'S touto dovedností dokáže zloděj někoho nenápadně prošacovat, ale také ho připravit o majetek. Může jít o klasické vybírání kapes, stejně jako o rychlé odříznutí měšce uprostřed tlačenice. Dovednost lze použít i ke krádeži lépe chráněných předmětů (přívěšek na krku). Takováto akce je však výrazně obtížnější.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'S touto dovedností dokáže zloděj někoho nenápadně prošacovat, ale také ho připravit o majetek.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}} {{Ověření= Vybírání kapes (OBR) vs. Postřeh (INT)}}',
'name': 'Vybírání kapes',
'printText': 'Mrštnými prsty okrádám protivníka pomocí své profesní dovednosti Vybírání kapes (OBR).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Vybírání kapes'
},
{
'content': 'Mezi zloději platí obecná shoda, že nejzajímavější kořist se nachází nejvýše. Je jedno, zda jde o hnízdo gryfa, laboratoř alchymisty nebo pokladnici barona. Tam všude je třeba vylézt. Není proto překvapení, že zdolávání skalních stěn, hradeb či domovních zdí považuje zkušený zloděj za samozřejmost.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Není překvapení, že zdolávání skalních stěn, hradeb či domovních zdí považuje zkušený zloděj za samozřejmost.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Lezení',
'printText': 'Snažím se zdolat vertikální stěnu pomocí své profesní dovednosti Lezení (OBR).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Lezení'
},
{
'content': 'Čas od času se v kraji objeví kočovná společnost. Tehdy je šance vidět akrobaty, kteří sílu této dovednosti předvádějí v praxi. Zloději stejně jako oni dokáží překonat hranice lidského těla. Není pak divu, že se dokáží dostat z různých okovů či pout. Nebo že dokáží prolézt otvory, které nejsou o moc širší, než je jejich hlava.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Zloději dokáží překonat hranice lidského těla. Dostat se z okovů či pout, nebo prolézt otvory, které nejsou o moc širší než je jejich hlava.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Ohebnost',
'printText': 'Kroutím, ohýbám a lámu své tělo do nepřirozených poloh pomocí své profesní dovednosti Ohebnost (OBR).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Ohebnost'
},
{
'content': 'Mnozí zloději zažili situace, kdy jim nezbylo nic jiného než skočit. Naučili se tak tlumit pád zachytáváním za všemožné výčnělky a nakonec utlumit náraz s plynulým přechodem do kotoulu. Dovednost je pro zloděje natolik přirozená, že je ochrání i v případě, kdy s pádem vůbec nepočítali.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Zloději se naučili tlumit pád zachytáváním za všemožné výčnělky a nakonec utlumit náraz s plynulým přechodem do kotoulu.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Pád z výšky',
'printText': 'Snažím se zmírnit svůj pád svou profesní dovedností Pád z výšky (OBR).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Pád z výšky'
},
{
'content': 'Zloději brzy pochopili potenciál, který jim obličej nabízí. Naučili se proto dokonale ovládat své mimické svaly a otevřeli prostor pro změnu svého vzhledu. Umí udržet své čelo nakrabacené, mít zdvižené jedno obočí, svěsit koutek úst, mít nafouklé tváře, vypoulené nebo zapadlé oči a podobně. Jeho vzhled se tak změní k nepoznání. Popis osoby, která vykradla zlatnictví, je pak zcela jiný, než jaká je skutečnost.',
'data': {
'baseAttributes': [
'charisma'
],
'description': 'Zloděj umí udržet své čelo nakrabacené, mít zdvižené jedno obočí, svěsit koutek úst, mít nafouklé tváře, vypoulené nebo zapadlé oči a podobně. Jeho vzhled se tak změní k nepoznání.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}} {{Ověření= Mimika (CHAR) vs. Postřeh (INT)}}',
'name': 'Mimika',
'printText': 'Měním vzhled a výraz svého obličeje svou profesní dovedností Mimika (CHAR).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Mimika'
},
{
'content': 'Zloději rádi využívají všemožné převleky a masky. Dokáží tak zvýšit svou důvěryhodnost, proniknout na chráněná místa nebo se stát nenápadnými. Za tímto účelem se umí maskovat za postavu své třídy velikosti. Budeš ale potřebovat alespoň základní herecké rekvizity. Jde o vak s různými hadry, líčidly a užitečnými cetkami.',
'data': {
'baseAttributes': [
'charisma'
],
'description': 'Zloději rádi využívají všemožné převleky a masky. Dokáží tak zvýšit svou důvěryhodnost, proniknout na chráněná místa nebo se stát nenápadnými. Za tímto účelem se umí maskovat za postavu své třídy velikosti. Budeš ale potřebovat alespoň základní herecké rekvizity.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}} {{Ověření= Převleky (CHAR) vs. Postřeh (INT)}}',
'name': 'Převleky',
'printText': 'Hereckými rekvizitami měním svůj vzhled pomocí své profesní dovednosti Převleky (CHAR).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Převleky'
},
{
'content': 'Zloděj má dar skvělého sluchu a hlasové paměti. Není proto divu, že je skvělý v napodobování cizí mluvy. Zloděj dokáže imitovat každého, koho někdy slyšel zřetelně mluvit. Umí pak snadno zopakovat jednotlivá slova, rozkazy nebo výkřiky. Pokud by však chtěl daným hlasem hovořit plynule, musí ho pořádně naposlouchat. Taková akce zabere zhruba pět minut.',
'data': {
'baseAttributes': [
'charisma'
],
'description': 'Zloděj dokáže imitovat každého, koho někdy slyšel zřetelně mluvit. Umí pak snadno zopakovat jednotlivá slova, rozkazy nebo výkřiky. Pokud by však chtěl daným hlasem hovořit plynule, musí ho pořádně naposlouchat. Taková akce zabere zhruba pět minut.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}} {{Ověření= Imitace (CHAR) vs. Postřeh (INT)}}',
'name': 'Imitace',
'printText': 'Hlasem napodobuji naposlouchanou postavu pomocí své profesní dovednosti Imitace (CHAR).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Imitace'
},
{
'content': 'Tmavé kouty zapadlých dvorků či chatrně osvětlené domy jsou pravým rájem každého zloděje. V jejich temných stínech totiž dokáží zmizet a čekat na svou příležitost. Pokud se zloděj pohybuje v místech, kde je stín nebo tma, může se v nich ukrýt. Tato akce trvá jedno kolo. Pro její úspěch je nezbytné, aby během ní nebyl zloděj spatřen tím, před kým se ukrývá. V opačném případě by byla akce automaticky neúspěšná.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Pokud se zloděj pohybuje v místech, kde je stín nebo tma, může se v nich ukrýt. Tato akce trvá jedno kolo. Pro její úspěch je nezbytné, aby během ní nebyl zloděj spatřen tím, před kým se ukrývá.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Schování se ve stínu',
'printText': 'Mizím v místech terénu, kam nedopadá světlo za pomoci své profesní dovednosti Schování se ve Stínu (OBR).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Schování se ve stínu'
},
{
'content': 'Přeplněná města a davy lidí jsou hotovým rájem zlodějů. Ti je využívají nejen jako zdroj zisku, ale i jako úkryt. Pokud se zloděj cítí pronásledován nebo naopak někoho sleduje, dokáže nenápadně splynout s davem. Splynutí s davem trvá jedno kolo a vyžaduje blízkou přítomnost větší skupiny lidí (obvykle alespoň 10).',
'data': {
'baseAttributes': [
'dexterity',
'charisma'
],
'description': 'Pokud se zloděj cítí pronásledován nebo naopak někoho sleduje, dokáže nenápadně splynout s davem. Splynutí s davem trvá jedno kolo a vyžaduje blízkou přítomnost větší skupiny lidí (obvykle alespoň 10).',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}} {{Ověření= Splynutí s davem (OBR/CHAR) vs. Postřeh (INT)}}',
'name': 'Splynutí s davem',
'printText': 'Snažím se ukrýt pomocí své profesní dovednosti Splynutí s davem (OBR/CHAR).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Splynutí s davem'
},
{
'content': 'Tato dovednost není jen o způsobu chůze, ale také o instinktu, který zloději napoví, kde a jak bezhlučně našlapovat. Díky tomu je neslyšný jako duch a dokáže proniknout takřka kamkoliv. Aby mohl zloděj tuto dovednost použít, musí respektovat základní pravidlo. Tím je důkladné upevnění či obalení předmětů, které by mohly způsobovat hluk. Je k tomu potřeba několik kusů látek a podobně. Jestliže se však zloděj pohybuje v plátové zbroji (či něčem podobně neforemném), pak ho ani všechny látky světa před hlukem neochrání.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Tato dovednost není jen o způsobu chůze, ale také o instinktu, který zloději napoví, kde a jak bezhlučně našlapovat. Díky tomu je neslyšný jako duch a dokáže proniknout takřka kamkoliv.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}} {{Ověření= Tichý pohyb (OBR) vs. Postřeh (INT)}}',
'name': 'Tichý pohyb',
'printText': 'Opatrným našlapováním a znehybněním hlučného vybavení se pokouším o svou profesní dovednost Tichý pohyb (OBR).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Tichý pohyb'
},
{
'content': 'Odhad lidí lze provést dvěma způsoby. Prvním je pouhé pozorování, při kterém využíváš k poznání druhého jen svou přirozenou inteligenci. Druhým je pak aktivní kontakt (mluvení), při kterém využíváš své charisma a vedeš hovor směrem, který odhalí protivníkovo skryté já. Je jen na zloději, kterou variantu v dané situaci zvolí. K Odhadu lidí potřebuje zloděj aspoň deset kol (1 minuta).',
'data': {
'baseAttributes': [
'charisma',
'intelligence'
],
'description': 'Odhad lidí lze provést dvěma způsoby. Pozorováním, při kterém využíváš k poznání druhého jen svou přirozenou inteligenci. Nebo aktivní kontakt (mluvení), při kterém využíváš své charisma a vedeš hovor směrem, který odhalí protivníkovo skryté já.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}} {{Ověření= Odhad lidí (CHAR/INT) vs. Vůle (CHAR)}}',
'name': 'Odhad lidí',
'printText': 'Minutou vedení hovoru nebo pozorování se pokouším zjistit úmysly cíle pomocí profesní dovednosti Odhad lidí (CHAR/INT).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Odhad lidí'
},
{
'content': 'Získání důvěry je založeno na zlodějových zkušenostech při jednání s lidmi a značné dávce empatie. Dokáže se tak vcítit do jiných, což mu otvírá jejich srdce a mysl. Může pak snadno získat důležité informace, ovlivnit cizí názory a podobně. Aby se mohl zloděj o získání důvěry pokusit, potřebuje s danou osobou aspoň chvíli hovořit (nejméně však minutu, tedy 10 kol).',
'data': {
'baseAttributes': [
'charisma'
],
'description': 'Získání důvěry je založeno na zlodějových zkušenostech při jednání s lidmi a značné dávce empatie. Dokáže se tak vcítit do jiných, což mu otvírá jejich srdce a mysl. Aby se mohl zloděj o získání důvěry pokusit, potřebuje s danou osobou aspoň chvíli hovořit (nejméně však minutu, tedy 10 kol). ',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}} {{Ověření= Získání důvěry (CHAR) vs. Vůle (CHAR)}}',
'name': 'Získání důvěry',
'printText': 'Po 1 minutu se vciťuji do osoby a ucházím se o její přízeň svou profesní dovedností Získání důvěry (CHAR).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Získání důvěry'
},
{
'content': 'Zloděj je mistrem historek a hvězdou každého vystoupení. Dokáže zaujmout a ovlivnit publikum, které tím ztrácí svou pozornost. Tuto dovednost lze použít dvěma způsoby. První umožňuje zloději upoutat pozornost okolí a druhý nenápadně odvést téma hovoru jiným směrem. Je jen na zloději, kterou formu zvolí. Efekt odvedení pozornosti trvá tak dlouho, dokud se o něj zloděj snaží. Pokud by však došlo k mimořádné situaci (boj či cokoliv podobně vážného), efekt dovednosti automaticky končí.',
'data': {
'baseAttributes': [
'charisma'
],
'description': 'Tuto dovednost lze použít dvěma způsoby. První umožňuje zloději upoutat pozornost okolí a druhý nenápadně odvést téma hovoru jiným směrem. Efekt odvedení pozornosti trvá tak dlouho, dokud se o něj zloděj snaží.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}} {{Ověření= Odvedení pozornosti (CHAR) vs. Vůle (CHAR)}}',
'name': 'Odvedení pozornosti',
'printText': 'Upoutávám okolí nebo odvádím téma hovoru svou profesní dovedností Odvedení pozornosti (CHAR).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Odvedení pozornosti'
},
{
'content': 'Falešný útok je speciální akce, která nestojí žádný čas a je součástí běžného útoku. Abys v něm uspěl, musíš hodem na dovednost Falešný útok překonat Reflex protivníka. Pokud se ti to podaří, cíl se v daném kole nebrání, respektive snaží se bránit falešnému útoku a nekryje se před tím skutečným. Dovednost lze použít na každého protivníka pouze jednou. Při dalším útoku už si dá totiž dobrý pozor.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Falešný útok je speciální akce, která nestojí žádný čas a je součástí běžného útoku. Pokud se podaří, cíl se v daném kole nebrání skutečnému útoku zloděje. Lze použít na každého protivníka pouze jednou.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}} {{Ověření= Falešný útok (OBR) vs. Reflex (OBR)}}',
'name': 'Falešný útok',
'printText': 'Jako součást své útočné akce použiju svou profesní dovednost Falešný útok (OBR). Naznačím výpad a zaútočím z jiné strany.',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Falešný útok'
},
{
'content': 'Tato akce zabere 3 kola, během kterých zloděj zaujímá střelecký postoj, upřesňuje podmínky střelby (sílu větru, vzdálenost atd.) a nakonec vystřelí. V případě úspěchu je zloděj schopen přesně zasáhnout neživý cíl. V případě, že zloděj střílí na libovolného tvora, hází si cíl na Reflex (OBR) a jestliže v hodu neuspěje, získává zloděj k běžnému střeleckému útoku Výhodu (bonus +5).',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Tato akce zabere 3 kola. V případě úspěchu je zloděj schopen přesně zasáhnout neživý cíl. V případě, že zloděj střílí na libovolného tvora, hází si cíl na Reflex (OBR) a jestliže v hodu neuspěje, získává zloděj k běžnému střeleckému útoku Výhodu (bonus +5).',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}} {{Ověření= Oko střelce (OBR) vs. Reflex (OBR)}}',
'name': 'Oko střelce',
'printText': 'Po 3 kola zpřesňuji zaměření a pak vystřelím. Využívám svou profesní dovednost Oko střelce (OBR). Při úspěchu dostanu Výhodu (bonus +5) k útoku.',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Oko střelce'
},
{
'content': 'Omráčení je speciální formou zlodějského útoku. Lze ho použít pouze v případě, kdy protivník o zloději neví (a netuší, že bude napaden). Celá akce se provádí v momentu překvapení z místa mimo zorné pole protivníka. Jejím cílem je protivníka pouze omráčit. Jakmile se zloděj o tuto akci pokusí, musí překonat svým hodem na ověření úspěchu Výdrž (ODO) protivníka. Jestliže uspěje, klesnou protivníkovy životy na -1 a ocitne se v bezvědomí.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Omráčení je speciální formou zlodějského útoku. Lze ho použít pouze v případě, kdy protivník o zloději neví (a netuší, že bude napaden). Jestliže zloděj uspěje, klesnou protivníkovy životy na -1 a ocitne se v bezvědomí.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}} {{Ověření= Omráčení (OBR) vs. Výdrž (ODO)}}',
'name': 'Omráčení',
'printText': 'Překvapím protivníka svou profesní dovedností Omráčení (OBR) a úderem do spánku se pokouším ho zneškodnit. Při úspěchu klesnou protivníkovy životy na -1 a ocitne se v bezvědomí.',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Omráčení'
},
{
'content': 'Pasti všeho druhu, od nášlapných dlaždic až po nastražená lanka nebo mechanické hračky s otráveným ostřím, chrání cenné poklady odjakživa. Na každou past však existuje řešení a možnost, jak ji odstranit nebo obejít. Obvykle je k tomu potřeba zlodějské náčiní, trochu obratnosti a také štěstí. S touto dovedností dokáže zloděj odstranit každou běžnou past. Ty nejjednodušší se dají deaktivovat během minuty, složitější pak během jedné směny nebo i déle.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'Na každou past však existuje řešení a možnost, jak ji odstranit nebo obejít. Obvykle je k tomu potřeba zlodějské náčiní, trochu obratnosti a také štěstí.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Odstranění pastí',
'printText': 'Zkoumám past a svým zlodějským náčiním se ji snažím zneškodnit pomocí profesní dovednosti Odstranění pastí (OBR).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Odstranění pastí'
},
{
'content': 'Proniknout přes zámek dveří nebo truhly patří k žádaným dovednostem. Zloděj, který chce uspět, k tomu obvykle potřebuje své zlodějské náčiní. To obsahuje všechny možné kovové háčky, planžety a další užitečné věci. Někdy si však lze poradit i bez něj a využít třeba sponu do vlasů. S touto dovedností dokáže zloděj odemknout či zamknout vybraný zámek.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'S touto dovedností dokáže zloděj odemknout či zamknout vybraný zámek. Zloděj, který chce uspět, k tomu obvykle potřebuje své zlodějské náčiní.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Otevírání zámků',
'printText': 'Zkoumám zámek a svým zlodějským náčiním se jej pokouším odemknout pomocí své profesní dovednosti Otevírání zámků (OBR).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Otevírání zámků'
},
{
'content': 'Obvykle musí zloděj překonat mnoho pastí a zámků, aby zbohatnul. Existuje však i elegantnější cesta. Tou je padělání, díky kterému dokážeš falšovat všemožné rytiny, pečetě nebo napodobit cizí písmo. Asi není třeba zmiňovat, jak obrovskou sílu to v sobě skrývá. Stačí být jenom dostatečně kreativní. V případě úspěchu získáš dokonalý padělek či falzifikát. V opačném případě je jeho kvalita pochybná a dá se (někdy snáz a někdy hůře) odhalit. K padělání potřebuje zloděj padělatelské vybavení.',
'data': {
'baseAttributes': [
'dexterity'
],
'description': 'V případě úspěchu získáš dokonalý padělek či falzifikát. V opačném případě je jeho kvalita pochybná a dá se (někdy snáz a někdy hůře) odhalit. K padělání potřebuje zloděj padělatelské vybavení.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Padělání',
'printText': 'Za pomocí padělatelského vybavení se snažím vyrobit falzifikát svou profesní dovedností Padělání (OBR).',
'profession': 'Zloděj',
'rulebook': 'PPZ: Příručka hráče: kapitola Zloděj',
'type': 'skill'
},
'name': 'Padělání'
},
{
'content': 'Každý se občas ocitl v nouzi. Ve chvíli nejhlubšího zoufalství, kdy už nezbývá nikdo jiný, kdo by dokázal pomoci. Tehdy se lidé nejčastěji obracejí k bohu a prosí ho o pomoc. Ne každý je však ve své prosbě vyslyšen. Pomocí této dovednosti dokáže klerik bleskově navázat spojení s bohem a vyprosit si na něm okamžitý zásah do naší reality.',
'data': {
'baseAttributes': [
'charisma'
],
'description': 'Pomocí této dovednosti dokáže klerik bleskově navázat spojení s bohem a vyprosit si na něm okamžitý zásah do naší reality.',
'isKnowledgeBased': false,
'isProfessionBased': true,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Prosby',
'printText': 'Navazuji spojení s bohem a žádám o vyslyšení pomocí své profesní dovednosti Prosby (CHAR).',
'profession': 'Klerik',
'rulebook': 'PPZ: Příručka hráče: kapitola Klerik',
'type': 'skill'
},
'name': 'Prosby'
},
{
'content': '',
'data': {
'baseAttributes': [],
'description': '',
'isKnowledgeBased': false,
'isProfessionBased': false,
'macro': '@{whisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{rollMod})+(@{advantage})]]) ]]}} {{modifier=@{rollModText}@{advantageText}attributeMod}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}',
'name': 'Vlastní',
'printText': '',
'profession': 'Any',
'rulebook': '',
'type': 'skill'
},
'name': 'Vlastní'
}
];
const StartingAbilities = {
'Warrior': ['Léčba vlastních zranění', 'Bojové triky'],
'Ranger': ['Hraničářské umění', 'Hraničářská magie'],
'Alchemist': ['Alchymie'],
'Mage': ['Kouzelnické triky', 'Obecná magie'],
'Priest': ['Spojení s bohem', 'Svěcení'],
'Thief': ['Boj beze zbraně', 'Základy zlodějského umění'],
'vlastni': [],
'nevybrano': []
};
const StartingSkills = {
'Warrior': ['Atletika', 'První pomoc', 'Výdrž'],
'Ranger': ['Znalost přírody', 'První pomoc', 'Přežití v přírodě'],
'Alchemist': ['Znalost přírody', 'Mechanika', 'Čtení a psaní'],
'Mage': ['Cizí jazyky', 'Historie', 'Čtení a psaní'],
'Priest': ['Teologie', 'Vůle', 'Čtení a psaní', 'Prosby'],
'Thief': ['Akrobacie', 'Postřeh', 'Reflex'],
'vlastni': [],
'nevybrano': []
};
const workerLog = (...args) => {
console.log(...args);
};
const parseEvent = (eventInfo) => {
const arr = eventInfo.sourceAttribute.split('_');
return {
id: arr[2],
sectionName: `${String(arr[0])}_${String(arr[1])}`,
changedAttribute: arr[3],
newValue: eventInfo.newValue,
previousValue: eventInfo.previousValue,
removedInfo: eventInfo.removedInfo
};
};
const capitalizeFirstLetter = (str) => {
return str.charAt(0).toUpperCase() + str.slice(1);
};
const version = '1.3.0';
const parseVersion = (version) => {
const [major, minor, patch] = version.split('.');
return { major: Number(major), minor: Number(minor), patch: Number(patch) };
};
function IsJsonString(str) {
try {
JSON.parse(str);
}
catch (e) {
return false;
}
return true;
}
const defaultSettings = {
settings: {
sheetType: 'pc',
sheetTypeModal: true,
activeTab: 'character',
melee: false,
throwing: false,
ranged: false,
shields: false,
armors: false,
editHeaderImage: false,
editCharacterName: false,
editXp: false,
editLevel: false,
editRace: false,
editProfession: false,
editSize: false,
editFatigue: false,
editLoad: false,
editDeathLimit: false,
editHp: false,
editMana: false,
editResources: false,
editSpeed: false,
editStrength: false,
editDexterity: false,
editConstitution: false,
editIntelligence: false,
editCharisma: false,
editSkillPoints: false,
npcActiveTab: 'npc',
editNpcCharacterName: false,
editNpcSize: false,
editNpcType: false,
editNpcHp: false,
editNpcMana: false,
editNpcResources: false,
editNpcSpeed: false,
editNpcAttributes: false,
editNpcCombat: false
}
};
const defaultWeapon = {
name: 'pěsti',
itemId: '',
hands: Hands.Both,
isTwoHanded: 1,
attack: 0,
damage: 0,
defense: 0,
damageType: 'drtivé',
reach: '1.5',
reachRange: '',
ammunitionId: '',
ammunitionName: '',
shieldQuality: 0,
armorQuality: 0,
size: ''
};
const v120 = (values) => {
console.log('migration script', values);
};
const migrateVersion = (from, to, values) => {
if (from.major === 1 && to.major === 1) {
if (from.minor <= 1 && to.minor >= 2) {
v120(values);
workerLog('Migrating 1.1.0 => 1.2.0');
const defaultAbilityMacros = {
'Warrior': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=Adrenalin [[@{mana}]]}}',
'Ranger': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=@{selectedProfessionSkill} [[1d10 + @{intelligenceBonus} + @{skillLevel} + ([[@{rollMod} + @{advantage}]])]]}} {{formula=(1k10 + INT + @{selectedProfessionSkill} + Modifikátory)}} {{modifier=@{rollModText}@{advantageText}}}',
'Alchemist': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=@{selectedProfessionSkill} [[1d10 + @{dexterityBonus} + @{skillLevel} + ([[@{rollMod} + @{advantage}]])]]}} {{formula=(1k10 + DEX + @{selectedProfessionSkill} + Modifikátory)}} {{modifier=@{rollModText}@{advantageText}}}',
'Mage': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=@{selectedProfessionSkill} [[1d10 + @{intelligenceBonus} + @{skillLevel} + ([[@{rollMod} + @{advantage}]])]]}} {{formula=(1k10 + INT + @{selectedProfessionSkill} + Modifikátory)}} {{modifier=@{rollModText}@{advantageText}}}',
'Priest': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=@{selectedProfessionSkill} [[1d10 + @{charismaBonus} + @{skillLevel} + ([[@{rollMod} + @{advantage}]])]]}} {{formula=(1k10 + CHAR + @{selectedProfessionSkill} + Modifikátory)}} {{modifier=@{rollModText}@{advantageText}}}',
'vlastni': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=@{selectedProfessionSkill} [[1d10 + @{skillLevel} + ([[@{rollMod} + @{advantage}]])]]}}}{{modifier=@{rollModText}@{advantageText}}}',
'nevybrano': ''
};
const defaultPrintAbilityMacros = {
'Warrior': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}{{Adrenalin=@{mana}}}{{Dodatečný adrenalin=@{additionalMana}}}{{Použití=@{usage}}}{{Vyžaduje=@{prerequisite}}}',
'Ranger': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}{{Duševní síla=@{mana}}}{{Dodatečná duš. síla=@{additionalMana}}}{{Dosah=@{range}}}{{Rozsah=@{target}}}{{Trvání=@{duration}}}{{Vyvolání=@{castingTime}}}{{Obtížnost=@{difficulty}}}{{Vyžaduje=@{prerequisite}}}{{Sesílací dovednost@{selectedProfessionSkill}}}',
'Alchemist': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}{{Mana=@{mana}}}{{Dodatečná mana=@{additionalMana}}}{{Suroviny=@{resources}}}{{Základ=@{base}}}{{Trvání=@{duration}}}{{Vyvolání=@{castingTime}}}{{Četnost=@{frequency}}}{{Použití=@{usage}}}{{Obtížnost=@{difficulty}}}{{Vyžaduje=@{prerequisite}}}{{Sesílací dovednost@{selectedProfessionSkill}}}',
'Mage': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}} {{Mana=@{mana}}}{{Dodatečná mana=@{additionalMana}}}{{Dosah=@{range}}}{{Rozsah=@{target}}}{{Trvání=@{duration}}}{{Vyvolání=@{castingTime}}}{{Obtížnost=@{difficulty}}}{{Vyžaduje=@{prerequisite}}}{{Sesílací dovednost@{selectedProfessionSkill}}}',
'Priest': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}{{Přízeň=@{mana}}}{{Dodatečná přízeň=@{additionalMana}}}{{Dosah=@{range}}}{{Rozsah=@{target}}}{{Trvání=@{duration}}}{{Vzývání=@{castingTime}}}{{Obtížnost=@{difficulty}}}{{Vyžaduje=@{prerequisite}}}{{Sesílací dovednost@{selectedProfessionSkill}}}',
'vlastni': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}{{Mana=@{mana}}}{{Dodatečná mana=@{additionalMana}}}{{Suroviny=@{resources}}}{{Základ=@{base}}}{{Trvání=@{duration}}}{{Vyvolání=@{castingTime}}}{{Četnost=@{frequency}}}{{Použití=@{usage}}}{{Obtížnost=@{difficulty}}}{{Vyžaduje=@{prerequisite}}}{{Sesílací dovednost@{selectedProfessionSkill}}}',
'nevybrano': ''
};
const professionMapping = {
'Válečník': 'Warrior',
'Hraničář': 'Ranger',
'Alchymista': 'Alchemist',
'Kouzelník': 'Mage',
'Klerik': 'Priest',
'vlastni': 'vlastni'
};
const attrsToUpdate = {};
let charAttributes = ['advantageText', 'leftHand', 'rightHand', 'selectedProfession', 'fatigueMaxInput', 'loadMaxInput', 'manaMaxInput', 'hpMaxInput', 'resourcesMaxInput', 'fatigue_max', 'load_max', 'hp_max', 'mana_max', 'resources_max', 'hpMaxMod', 'manaMaxMod', 'fatigueMaxMod', 'resourcesMaxMod'];
const skillNames = [];
getSectionIDs('skills', function (skillarray) {
for (let i = 0; i < skillarray.length; i++) {
skillNames.push('repeating_skills_' + skillarray[i] + '_name');
charAttributes.push('repeating_skills_' + skillarray[i] + '_name');
}
charAttributes = charAttributes.concat(skillNames);
getAttrs(charAttributes, values => {
attrsToUpdate.fatigueMaxInput = Number(values.fatigue_max);
attrsToUpdate.loadMaxInput = Number(values.load_max);
attrsToUpdate.hpMaxInput = Number(values.hp_max);
attrsToUpdate.manaMaxInput = Number(values.mana_max);
attrsToUpdate.resourcesMaxInput = Number(values.resources_max);
attrsToUpdate.fatigue_max = Number(values.fatigue_max) + Number(values.fatigueMaxMod);
attrsToUpdate.hp_max = Number(values.hp_max) + Number(values.hpMaxMod);
attrsToUpdate.mana_max = Number(values.mana_max) + Number(values.manaMaxMod);
attrsToUpdate.resources_max = Number(values.resources_max) + Number(values.resourcesMaxMod);
attrsToUpdate.selectedProfession = professionMapping[values.selectedProfession] === undefined ? 'nevybrano' : professionMapping[values.selectedProfession];
getSectionIDs('activeabilities', function (idarray) {
if (values.selectedProfession != 'nevybrano') {
for (let a = 0; a < idarray.length; a++) {
attrsToUpdate['repeating_activeabilities_' + idarray[a] + '_macro'] = defaultAbilityMacros[professionMapping[values.selectedProfession]];
attrsToUpdate['repeating_activeabilities_' + idarray[a] + '_printMacro'] = defaultPrintAbilityMacros[professionMapping[values.selectedProfession]];
}
}
for (let a = 0; a < skillNames.length; a++) {
const currentSkill = Skills.filter(function (e) {
return e.name == values[skillNames[a]];
});
const skillMacro = currentSkill[0].data.macro;
attrsToUpdate[skillNames[a].replace('_name', '_macro')] = skillMacro;
const AttributeNames = {
Charisma: 'CHA',
Constitution: 'ODO',
Dexterity: 'OBR',
Intelligence: 'INT',
Strength: 'SIL'
};
const attrsToGet = [];
const rowId = skillNames[a].split('_')[2];
const nameAttr = 'repeating_skills_' + rowId + '_name';
const macroAttr = skillMacro;
for (const [key, value] of Object.entries(Attributes)) {
let macroString = macroAttr;
macroString = macroString.replaceAll('skillName', values[nameAttr]);
macroString = macroString.replaceAll('attributeBonusName', AttributeNames[key]);
macroString = macroString.replaceAll('attributeBonus', value + 'Bonus');
macroString = macroString.replaceAll('attributeMod', '@{' + key.toLowerCase() + 'BonusModText}');
const attrComputedName = 'repeating_skills_' + rowId + '_roll' + key;
attrsToUpdate[attrComputedName] = macroString;
}
}
const leftHandExists = typeof values.leftHand !== 'undefined' && Number(values.leftHand) !== 0;
const rightHandExists = typeof values.rightHand !== 'undefined' && Number(values.rightHand) !== 0;
let leftHand = 0;
let rightHand = 0;
let isRangedAttack = false;
if (leftHandExists) {
leftHand = JSON.parse(values.leftHand);
}
if (rightHandExists) {
rightHand = JSON.parse(values.rightHand);
}
if (leftHand.sectionName && leftHand.sectionName.endsWith('ranged')
|| leftHand.sectionName && leftHand.sectionName.endsWith('throwing')
|| rightHand.sectionName && rightHand.sectionName.endsWith('ranged')
|| rightHand.sectionName && rightHand.sectionName.endsWith('throwing')) {
isRangedAttack = true;
}
let attackMacro = '';
if (isRangedAttack) {
attackMacro = '@{whisper}&{template:custom}{{title=Útok na dálku @{attackText}}}{{subtitle=@{character_name}}}{{roll=Útok [[1d6!+(@{dexterityBonus})+(@{weaponAttack})+([[(@{attackRangeMod})+(@{rollMod})+(@{advantage})]])]]}} {{formula=(1k6 + OBR + Zbraň + Modifikátory)}} {{modifier=@{advantageText}@{rollModText}@{attackRangeModText}}}{{damage=Zranění zbraně [[(@{weaponDamage})+(@{damageRangeMod})]] }} {{modifierDamage=@{damageRangeModText}}}';
}
else {
attackMacro = '@{whisper}&{template:custom}{{title=Útok na blízko @{attackText}}}{{subtitle=@{character_name}}}{{roll=Útok [[1d6!+(@{strengthBonus})+(@{weaponAttack})+([[(@{attackMod})+(@{rollMod})+(@{advantage})]])]]}} {{formula=(1k6 + SIL + Zbraň + Modifikátory)}} {{modifier=@{advantageText}@{rollModText}@{attackModText}}} {{damage=Zranění zbraně [[(@{weaponDamage})+(@{damageMod})]] }} {{modifierDamage=@{damageModText}}}';
}
const defenseRangeMacro = '@{whisper}&{template:custom}{{title=Obrana na dálku @{attackText}}}{{subtitle=@{character_name}}}{{roll=Obrana [[1d6!+(@{dexterityBonus})+([[(@{shieldDefense})+(@{armorDefense})]])+([[(@{advantage})+(@{defenseRangeMod})+(@{rollMod})+(@{basicDefenseMod})]])]]}} {{formula=(1k6 + OBR + Štít/Zbroj + Modifikátory)}}{{modifier=@{advantageText}@{rollModText}@{defenseRangeModText}@{basicDefenseModText}}}';
const defenseMacro = '@{whisper}&{template:custom}{{title=Obrana na blízko @{attackText}}}{{subtitle=@{character_name}}}{{roll=Obrana [[1d6!+(@{dexterityBonus})+([[(@{weaponDefense})+(@{shieldDefense})+(@{armorDefense})]])+([[(@{advantage})+(@{defenseMod})+(@{rollMod})+(@{basicDefenseMod})]])]]}} {{formula=(1k6 + OBR + Zbraň/Štít/Zbroj + Modifikátory)}}{{modifier=@{advantageText}@{rollModText}@{defenseModText}@{basicDefenseModText}}}';
attrsToUpdate.attackMacro = attackMacro;
attrsToUpdate.defenseRangeMacro = defenseRangeMacro;
attrsToUpdate.defenseMacro = defenseMacro;
const attributesWithTextMacro = ['rollMod', 'initiativeMod', 'attackMod', 'attackRangeMod', 'damageMod', 'damageRangeMod', 'defenseRangeMod', 'defenseMod', 'basicDefenseMod', 'strengthMod', 'strengthBonusMod', 'dexterityMod', 'dexterityBonusMod', 'constitutionMod', 'constitutionBonusMod', 'intelligenceMod', 'intelligenceBonusMod', 'charismaMod', 'charismaBonusMod'];
const modifierAtrributeNames = ['attribute', 'modifier', 'name', 'isActive'];
getSectionIDs('repeating_modifiers', function (modifierarray) {
const fullModifierAttributeNames = [];
const modifierRowIds = [];
for (let t = 0; t < modifierarray.length; t++) {
modifierRowIds.push(modifierarray[t]);
for (let a = 0; a < modifierAtrributeNames.length; a++) {
const attrName = 'repeating_modifiers_' + modifierarray[t] + '_' + modifierAtrributeNames[a];
fullModifierAttributeNames.push(attrName);
}
}
getAttrs(fullModifierAttributeNames, modifierValues => {
for (let p = 0; p < attributesWithTextMacro.length; p++) {
const triggerAttributeType = attributesWithTextMacro[p];
let attrsToUpdateMod = {};
attrsToUpdateMod = calculateModifierForType(modifierValues, triggerAttributeType);
for (const [key, value] of Object.entries(attrsToUpdateMod)) {
console.log(key, ':', value);
attrsToUpdate[key] = value;
}
}
if (values.advantageText === '{{Výhoda +[[(5)]]}}') {
attrsToUpdate.advantageText = 'Výhoda +5\n';
}
else if (values.advantageText === '{{Nevýhoda -[[(5)]]}}') {
attrsToUpdate.advantageText = 'Nevýhoda -5\n';
}
else {
attrsToUpdate.advantageText = '';
}
console.log(attrsToUpdate);
setAttrs(attrsToUpdate);
});
});
});
});
});
}
if (from.minor <= 2 && to.minor >= 3) {
workerLog('Migrating 1.2.0 => 1.3.0');
const attributeMap = {
'none': '',
'npcStrengthBonus': 'SIL',
'npcDexterityBonus': 'OBR',
'npcConstitutionBonus': 'ODO',
'npcIntelligenceBonus': 'INT',
'npcCharismaBonus': 'CHA'
};
const attrsToUpdatev3 = {};
getSectionIDs('activeabilities', function (idarray) {
for (let a = 0; a < idarray.length; a++) {
attrsToUpdatev3['repeating_activeabilities_' + idarray[a] + '_macroCustom'] = true;
}
getSectionIDs('npcactiveabilities', function (npcidarray) {
const rollAttributeArray = [];
for (let b = 0; b < npcidarray.length; b++) {
rollAttributeArray.push('repeating_npcactiveabilities_' + npcidarray[b] + '_castingAttribute');
}
rollAttributeArray.push('selectedProfession');
getAttrs(rollAttributeArray, function (rollAttrs) {
for (const [key, value] of Object.entries(rollAttrs)) {
if (key != 'selectedProfession') {
attrsToUpdatev3[key] = attributeMap[value];
}
}
if (values.selectedProfession != 'nevybrano' || !values.selectedProfession) {
attrsToUpdatev3.addPassiveAbilityProfession = values.selectedProfession === 'vlastni' ? 'Warrior' : values.selectedProfession;
attrsToUpdatev3.addActiveAbilityProfession = values.selectedProfession === 'vlastni' ? 'Warrior' : values.selectedProfession;
attrsToUpdatev3.addActiveAbilitySelection = '-';
attrsToUpdatev3.addActiveAbility = defaultProfessionAbilityDropdown[String(values.selectedProfession)];
attrsToUpdatev3.addPassiveAbility = defaultPassiveAbilitySkills[String(values.selectedProfession)];
}
workerLog('migration attrs to update', attrsToUpdatev3);
setAttrs(attrsToUpdatev3);
});
});
});
}
}
setAttrs({ version: JSON.stringify(to) });
};
const validateSettings = (settings) => {
let ret = { valid: true, error: undefined };
if (settings === '' && typeof settings === 'string' && !settings.startsWith('{') && !settings.endsWith('}')) {
ret = { valid: false, error: 'broken' };
}
else {
for (const key of Object.keys(defaultSettings.settings)) {
if (!String(settings).includes(`"${key}"`)) {
ret = { valid: false, error: 'missingKey' };
break;
}
}
}
return ret;
};
on('sheet:opened', (eventInfo) => {
workerLog('sheet:opened', { eventInfo });
getAttrs(['version', 'settings', 'addSkillType', 'selectedProfession', 'level', 'allocatedPoints', 'availableSkillPoints', 'isSettingVisible'], values => {
const previousVersion = IsJsonString(values.version) ? JSON.parse(values.version) : parseVersion(values.version);
const currentVersion = IsJsonString(version) ? JSON.parse(version) : parseVersion(version);
if (currentVersion !== previousVersion) {
console.log(`migrating from v${values.version} to v${version}`);
migrateVersion(previousVersion, currentVersion, values);
}
const result = validateSettings(values.settings);
let set = {};
const setSilent = {};
workerLog('sheet:opened values', { values });
if (!result.valid) {
if (result.error === 'broken') {
set = { settings: JSON.stringify(defaultSettings.settings) };
}
else {
set = { settings: JSON.stringify({ ...defaultSettings.settings, ...JSON.parse(values.settings) }) };
}
}
if (values.isSettingVisible) {
set.isSettingVisible = 0;
}
if (!values.addSkillType) {
set.addSkillType = 'general';
}
if (!values.selectedProfession || values.selectedProfession == 'nevybrano') {
set.selectedProfession = 'nevybrano';
}
if (values.level === '1') {
set.level = 1;
}
if (values.allocatedPoints === '0') {
set.allocatedPoints = 0;
}
if (values.availableSkillPoints === '0' && values.allocatedPoints === '0' && values.level === '1') {
set.availableSkillPoints = 3;
}
if (Object.keys(setSilent).length) {
setAttrs(setSilent, { silent: true }, () => {
setAttrs(set);
});
workerLog('sheet:opened set silentBlock', { set });
}
else if (Object.keys(set).length) {
setAttrs(set);
workerLog('sheet:opened set normal', { set });
}
});
});
on('change:settings', (eventInfo) => {
workerLog('change:settings', { eventInfo });
const settings = eventInfo.newValue;
const valid = validateSettings(settings);
if (!valid) {
const set = { settings: JSON.stringify(defaultSettings.settings) };
setAttrs(set);
workerLog('sheet:opened', { set });
}
});
on('clicked:changeToPc', (eventInfo) => {
workerLog('clicked:changeToPc', { eventInfo });
getAttrs(['settings'], (values) => {
let settings = JSON.parse(values.settings);
settings = {
...settings,
sheetTypeModal: false,
sheetType: 'pc'
};
setAttrs({ settings: JSON.stringify(settings) });
});
});
on('clicked:isEditingSkill', (eventInfo) => {
getAttrs(['isEditingSkill'], v => {
v.isEditingSkill = v.isEditingSkill == 1 ? 0 : 1;
setAttrs(v);
});
});
on('clicked:changeToNpc', (eventInfo) => {
workerLog('clicked:changeToNpc', { eventInfo });
getAttrs(['settings'], (values) => {
let settings = JSON.parse(values.settings);
settings = {
...settings,
sheetTypeModal: false,
sheetType: 'npc'
};
setAttrs({ settings: JSON.stringify(settings) });
});
});
on('clicked:changeToCharacterTab', (eventInfo) => {
workerLog('clicked:changeToCharacterTab', { eventInfo });
getAttrs(['settings'], (values) => {
let settings = JSON.parse(values.settings);
settings = {
...settings,
activeTab: 'character'
};
setAttrs({ settings: JSON.stringify(settings) });
});
});
on('clicked:changeToInventoryTab', (eventInfo) => {
workerLog('clicked:changeToInventoryTab', { eventInfo });
getAttrs(['settings'], (values) => {
let settings = JSON.parse(values.settings);
settings = {
...settings,
activeTab: 'inventory'
};
setAttrs({ settings: JSON.stringify(settings) });
});
});
on('clicked:changeToNotesTab', (eventInfo) => {
workerLog('clicked:changeToNotesTab', { eventInfo });
getAttrs(['settings'], (values) => {
let settings = JSON.parse(values.settings);
settings = {
...settings,
activeTab: 'notes'
};
setAttrs({ settings: JSON.stringify(settings) });
});
});
on('clicked:changeToSettingsTab', (eventInfo) => {
workerLog('clicked:changeToSettingsTab', { eventInfo });
getAttrs(['settings'], (values) => {
let settings = JSON.parse(values.settings);
settings = {
...settings,
activeTab: 'settings'
};
setAttrs({ settings: JSON.stringify(settings) });
});
});
on('clicked:changeToNpcTab', (eventInfo) => {
workerLog('clicked:changeToNpcTab', { eventInfo });
getAttrs(['settings'], (values) => {
let settings = JSON.parse(values.settings);
settings = {
...settings,
npcActiveTab: 'npc'
};
setAttrs({ settings: JSON.stringify(settings) });
});
});
on('clicked:changeToNpcSettingTab', (eventInfo) => {
workerLog('clicked:changeToNpcSettingTab', { eventInfo });
getAttrs(['settings'], (values) => {
let settings = JSON.parse(values.settings);
settings = {
...settings,
npcActiveTab: 'settings'
};
setAttrs({ settings: JSON.stringify(settings) });
});
});
const editActions = [
'editHeaderImage',
'editCharacterName',
'editXp',
'editLevel',
'editRace',
'editProfession',
'editSize',
'editLoad',
'editDeathLimit',
'editHp',
'editMana',
'editResources',
'editFatigue',
'editSpeed',
'editStrength',
'editDexterity',
'editConstitution',
'editIntelligence',
'editCharisma',
'editNpcCharacterName',
'editNpcSize',
'editNpcType',
'editNpcHp',
'editNpcMana',
'editNpcResources',
'editNpcSpeed',
'editNpcAttributes',
'editNpcCombat'
];
editActions.forEach(editAction => {
on(`clicked:${editAction}`, (eventInfo) => {
workerLog(`clicked:${editAction}`, { eventInfo });
getAttrs(['settings'], (values) => {
let settings = JSON.parse(values.settings);
settings = {
...settings,
[editAction]: !settings[editAction]
};
setAttrs({ settings: JSON.stringify(settings) });
});
});
});
on('change:selectedRace', (eventInfo) => {
workerLog('change:selectedRace', { eventInfo });
setAttrs({ race: eventInfo.newValue === 'vlastni' || eventInfo.newValue === 'nevybrano' ? '' : eventInfo.newValue });
});
on('change:race', (eventInfo) => {
workerLog('change:race', { eventInfo });
getAttrs(['availableSkillPoints', 'race', 'selectedProfession', 'level', 'allocatedPoints'], function (values) {
if (eventInfo.previousValue !== eventInfo.newValue) {
const selectedRace = eventInfo.newValue;
let strengthRace = 0;
let dexterityRace = 0;
let constitutionRace = 0;
let intelligenceRace = 0;
let charismaRace = 0;
let raceSpeed = 0;
let size = '';
switch (selectedRace) {
case 'Barbar': {
strengthRace = 9;
dexterityRace = 8;
constitutionRace = 8;
intelligenceRace = 5;
charismaRace = 5;
raceSpeed = 30;
size = 'B';
break;
}
case 'Trpaslík': {
strengthRace = 10;
dexterityRace = 5;
constitutionRace = 10;
intelligenceRace = 5;
charismaRace = 5;
raceSpeed = 20;
size = 'A';
break;
}
case 'Elf': {
strengthRace = 6;
dexterityRace = 7;
constitutionRace = 5;
intelligenceRace = 10;
charismaRace = 9;
raceSpeed = 30;
size = 'B';
break;
}
case 'Obr': {
strengthRace = 12;
dexterityRace = 3;
constitutionRace = 12;
intelligenceRace = 3;
charismaRace = 3;
raceSpeed = 40;
size = 'C';
break;
}
case 'Gnóm': {
strengthRace = 4;
dexterityRace = 10;
constitutionRace = 5;
intelligenceRace = 9;
charismaRace = 5;
raceSpeed = 20;
size = 'A';
break;
}
case 'Půlčík': {
strengthRace = 6;
dexterityRace = 9;
constitutionRace = 6;
intelligenceRace = 7;
charismaRace = 8;
raceSpeed = 20;
size = 'A';
break;
}
case 'Člověk': {
strengthRace = 7;
dexterityRace = 7;
constitutionRace = 7;
intelligenceRace = 7;
charismaRace = 7;
raceSpeed = 30;
size = 'B';
break;
}
default: {
break;
}
}
const set = {
strengthRace,
dexterityRace,
constitutionRace,
intelligenceRace,
charismaRace,
raceSpeed,
size
};
const race = [];
if (selectedRace != undefined && selectedRace != 'nevybrano' && RacePassiveAbilities[selectedRace]) {
race.push(RacePassiveAbilities[selectedRace]);
addPassiveAbilities(race);
}
const previousSKillPointTotal = Number(values.availableSkillPoints) + Number(values.allocatedPoints);
let previousRace = eventInfo.sourceAttribute === 'race' ? 'previousValue' in eventInfo ? eventInfo.previousValue : 'nevybrano' : values.race;
previousRace = previousRace === '' ? 'nevybrano' : previousRace;
let previousProfession = values.selectedProfession;
previousProfession = previousProfession === '' ? 'nevybrano' : previousProfession;
const previousLevel = Number(values.level);
const previousSkillPointRulebookTotal = Number(getSkillPointsForLevel(previousLevel, previousRace, previousProfession));
workerLog('previousSKillPointTotal ', previousSKillPointTotal, ' previousRace ', previousRace, ' previousProfession ', previousProfession, ' previousLevel ', previousLevel, ' previousSkillPointRulebookTotal ', previousSkillPointRulebookTotal);
const playerAddedBonusPoints = Number(previousSKillPointTotal) - Number(previousSkillPointRulebookTotal);
const skillPoints = Number(getSkillPointsForLevel(values.level === '' ? '1' : values.level, values.race === '' ? 'nevybrano' : values.race, values.selectedProfession === '' ? 'nevybrano' : values.selectedProfession));
workerLog('playerAddedBonusPoints', playerAddedBonusPoints, 'currentLevelPoints', skillPoints);
const availableSkillPoints = skillPoints - Number(values.allocatedPoints) + playerAddedBonusPoints;
set.availableSkillPoints = availableSkillPoints;
setAttrs(set);
}
});
});
on('change:selectedProfession', (eventInfo) => {
workerLog('change:selectedProfession', { eventInfo });
getAttrs(['availableSkillPoints', 'race', 'selectedProfession', 'level', 'allocatedPoints'], function (values) {
const startingSkillArray = StartingSkills[values.selectedProfession];
addSkills(startingSkillArray);
const startingAbilitiesArray = StartingAbilities[values.selectedProfession];
addPassiveAbilities(startingAbilitiesArray);
const previousSKillPointTotal = Number(values.availableSkillPoints) + Number(values.allocatedPoints);
let previousRace = values.race;
previousRace = previousRace === '' ? 'nevybrano' : previousRace;
let previousProfession = eventInfo.sourceAttribute === 'selectedprofession' ? 'previousValue' in eventInfo ? eventInfo.previousValue : 'nevybrano' : values.selectedProfession;
previousProfession = previousProfession === '' ? 'nevybrano' : previousProfession;
const previousLevel = Number(values.level);
const previousSkillPointRulebookTotal = Number(getSkillPointsForLevel(previousLevel, previousRace, previousProfession));
workerLog('previousSKillPointTotal ', previousSKillPointTotal, ' previousRace ', previousRace, ' previousProfession ', previousProfession, ' previousLevel ', previousLevel, ' previousSkillPointRulebookTotal ', previousSkillPointRulebookTotal);
const playerAddedBonusPoints = Number(previousSKillPointTotal) - Number(previousSkillPointRulebookTotal);
const skillPoints = Number(getSkillPointsForLevel(values.level === '' ? '1' : values.level, values.race === '' ? 'nevybrano' : values.race, values.selectedProfession === '' ? 'nevybrano' : values.selectedProfession));
workerLog('playerAddedBonusPoints', playerAddedBonusPoints, 'currentLevelPoints', skillPoints);
const availableSkillPoints = skillPoints - Number(values.allocatedPoints) + playerAddedBonusPoints;
setAttrs({ profession: eventInfo.newValue === 'vlastni' || eventInfo.newValue === 'nevybrano' ? '' : Professions[eventInfo.newValue === undefined ? '' : eventInfo.newValue],
addPassiveAbilityProfession: eventInfo.newValue === 'vlastni' ? 'Warrior' : eventInfo.newValue,
addActiveAbilityProfession: eventInfo.newValue === 'vlastni' ? 'Warrior' : eventInfo.newValue,
availableSkillPoints: availableSkillPoints });
});
});
on('change:profession', (eventInfo) => {
workerLog('change:profession', { eventInfo });
if (eventInfo.previousValue !== eventInfo.newValue) {
const selectedProfession = eventInfo.newValue;
let strengthDominant = false;
let dexterityDominant = false;
let constitutionDominant = false;
let intelligenceDominant = false;
let charismaDominant = false;
let headerImage = 'default';
switch (selectedProfession) {
case 'Válečník': {
strengthDominant = true;
constitutionDominant = true;
headerImage = 'valecnik';
break;
}
case 'Hraničář': {
dexterityDominant = true;
intelligenceDominant = true;
headerImage = 'hranicar';
break;
}
case 'Alchymista': {
dexterityDominant = true;
constitutionDominant = true;
headerImage = 'alchymista';
break;
}
case 'Kouzelník': {
intelligenceDominant = true;
charismaDominant = true;
headerImage = 'kouzelnik';
break;
}
case 'Klerik': {
intelligenceDominant = true;
charismaDominant = true;
headerImage = 'klerik';
break;
}
case 'Zloděj': {
dexterityDominant = true;
charismaDominant = true;
headerImage = 'zlodej';
break;
}
}
const set = {
strengthDominant,
dexterityDominant,
constitutionDominant,
intelligenceDominant,
charismaDominant,
headerImage
};
setAttrs(set);
}
});
const defaultAbilityMacros = {
'Warrior': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=Adrenalin [[@{mana}]]}} <DAMAGE> <SECONDARYROLL>',
'Ranger': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=@{selectedProfessionSkill} [[1d10+(@{intelligenceBonus})+(@{skillLevel})+([[@{rollMod}+@{advantage}]])]]}} {{formula=(1k10 + INT + @{selectedProfessionSkill} + Modifikátory)}} {{modifier=@{rollModText}@{advantageText}}} <DAMAGE> <SECONDARYROLL>',
'Alchemist': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=@{selectedProfessionSkill} [[1d10+(@{dexterityBonus})+(@{skillLevel})+([[@{rollMod}+@{advantage}]])]]}} {{formula=(1k10 + DEX + @{selectedProfessionSkill} + Modifikátory)}} {{modifier=@{rollModText}@{advantageText}}} <DAMAGE> <SECONDARYROLL>',
'Mage': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=@{selectedProfessionSkill} [[1d10+(@{intelligenceBonus})+(@{skillLevel})+([[@{rollMod}+@{advantage}]])]]}} {{formula=(1k10 + INT + @{selectedProfessionSkill} + Modifikátory)}} {{modifier=@{rollModText}@{advantageText}}} <DAMAGE> <SECONDARYROLL>',
'Priest': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=@{selectedProfessionSkill} [[1d10+(@{charismaBonus})+(@{skillLevel})+([[@{rollMod}+@{advantage}]])]]}} {{formula=(1k10 + CHAR + @{selectedProfessionSkill} + Modifikátory)}} {{modifier=@{rollModText}@{advantageText}}} <DAMAGE> <SECONDARYROLL>',
'vlastni': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=@{selectedProfessionSkill} [[1d10+(@{skillLevel})+([[@{rollMod}+@{advantage}]])]]}}}{{modifier=@{rollModText}@{advantageText}}} <DAMAGE> <SECONDARYROLL>',
'nevybrano': ''
};
const defaultPrintAbilityMacros = {
'Warrior': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}{{Adrenalin=@{mana}}}{{Dodatečný adrenalin=@{additionalMana}}}{{Použití=@{usage}}}{{Vyžaduje=@{prerequisite}}}',
'Ranger': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}{{Duševní síla=@{mana}}}{{Dodatečná duš. síla=@{additionalMana}}}{{Dosah=@{range}}}{{Rozsah=@{target}}}{{Trvání=@{duration}}}{{Vyvolání=@{castingTime}}}{{Obtížnost=@{difficulty}}}{{Vyžaduje=@{prerequisite}}}{{Sesílací dovednost@{selectedProfessionSkill}}}',
'Alchemist': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}{{Mana=@{mana}}}{{Dodatečná mana=@{additionalMana}}}{{Suroviny=@{resources}}}{{Základ=@{base}}}{{Trvání=@{duration}}}{{Vyvolání=@{castingTime}}}{{Četnost=@{frequency}}}{{Použití=@{usage}}}{{Obtížnost=@{difficulty}}}{{Vyžaduje=@{prerequisite}}}{{Sesílací dovednost@{selectedProfessionSkill}}}',
'Mage': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}} {{Mana=@{mana}}}{{Dodatečná mana=@{additionalMana}}}{{Dosah=@{range}}}{{Rozsah=@{target}}}{{Trvání=@{duration}}}{{Vyvolání=@{castingTime}}}{{Obtížnost=@{difficulty}}}{{Vyžaduje=@{prerequisite}}}{{Sesílací dovednost@{selectedProfessionSkill}}}',
'Priest': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}{{Přízeň=@{mana}}}{{Dodatečná přízeň=@{additionalMana}}}{{Dosah=@{range}}}{{Rozsah=@{target}}}{{Trvání=@{duration}}}{{Vzývání=@{castingTime}}}{{Obtížnost=@{difficulty}}}{{Vyžaduje=@{prerequisite}}}{{Sesílací dovednost@{selectedProfessionSkill}}}',
'vlastni': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}{{Mana=@{mana}}}{{Dodatečná mana=@{additionalMana}}}{{Suroviny=@{resources}}}{{Základ=@{base}}}{{Trvání=@{duration}}}{{Vyvolání=@{castingTime}}}{{Četnost=@{frequency}}}{{Použití=@{usage}}}{{Obtížnost=@{difficulty}}}{{Vyžaduje=@{prerequisite}}}{{Sesílací dovednost@{selectedProfessionSkill}}}',
'nevybrano': ''
};
const defaultAbilitySkills = {
'Warrior': 'Žádná',
'Ranger': 'Pouto s přírodou',
'Alchemist': 'Lučba',
'Mage': 'Sesílání kouzel',
'Priest': 'Prosby',
'vlastni': 'Žádná',
'nevybrano': 'Žádná'
};
const defaultProfessionAbilityDropdown = {
'Warrior': 'WarriorGeneral',
'Ranger': 'RangerGeneral',
'Alchemist': 'AlchemistGeneral',
'Thief': '-',
'Mage': 'MageGeneral',
'Priest': 'PriestGeneral',
'vlastni': 'WarriorGeneral',
'nevybrano': '-'
};
const defaultPassiveAbilitySkills = {
'Warrior': 'Léčba vlastních zranění',
'Ranger': 'Hraničářské umění',
'Alchemist': 'Alchymie',
'Mage': 'Kouzelnické triky',
'Thief': 'Boj beze zbraně',
'Priest': 'Spojení s bohem',
'vlastni': 'Léčba vlastních zranění',
'nevybrano': '-'
};
const abilityBonusNames = {
'SIL': 'strengthBonus',
'OBR': 'dexterityBonus',
'ODO': 'constitutionBonus',
'INT': 'intelligenceBonus',
'CHA': 'charismaBonus'
};
const recaluclateActiveAbilityMacro = (activeAbilityValues, skillNames, id) => {
workerLog('recaluclateActiveAbilityMacro');
workerLog('activeAbilityValues', activeAbilityValues);
workerLog('id', id);
const abilityPrefix = id != null ? 'repeating_activeabilities_' + id + '_' : 'repeating_activeabilities_';
let macro = '@{whisper}&{template:custom}{{title=@{' + abilityPrefix + 'name}}}{{subtitle=@{character_name}}}';
workerLog('macro', macro);
const castingAttribute = activeAbilityValues[abilityPrefix + 'castingAttribute'] ? activeAbilityValues[abilityPrefix + 'castingAttribute'] : null;
const secondaryCastingAttribute = activeAbilityValues[abilityPrefix + 'secondaryCastingAttribute'] ? activeAbilityValues[abilityPrefix + 'secondaryCastingAttribute'] : null;
workerLog('castingAttribute', castingAttribute);
const selectedProfessionSkill = activeAbilityValues[abilityPrefix + 'selectedProfessionSkill'] ? activeAbilityValues[abilityPrefix + 'selectedProfessionSkill'] : null;
const selectedSecondaryProfessionSkill = activeAbilityValues[abilityPrefix + 'secondaryRoll'] ? activeAbilityValues[abilityPrefix + 'secondaryRoll'] : null;
const difficulty = activeAbilityValues[abilityPrefix + 'difficulty'] ? activeAbilityValues[abilityPrefix + 'difficulty'] : null;
const damage = activeAbilityValues[abilityPrefix + 'damage'] ? activeAbilityValues[abilityPrefix + 'damage'] : null;
const damageType = activeAbilityValues[abilityPrefix + 'damageType'] ? activeAbilityValues[abilityPrefix + 'damageType'] : null;
const secondaryRollAgainst = activeAbilityValues[abilityPrefix + 'secondaryRollAgainst'] ? activeAbilityValues[abilityPrefix + 'secondaryRollAgainst'] : null;
const isMulticast = activeAbilityValues[abilityPrefix + 'isMulticast'] && (activeAbilityValues[abilityPrefix + 'isMulticast'] === true || activeAbilityValues[abilityPrefix + 'isMulticast'] === 'on') ? true : false;
workerLog('selectedProfessionSkill', selectedProfessionSkill);
workerLog('skillNames', skillNames);
workerLog('selectedProfessionSkill', selectedProfessionSkill);
workerLog('selectedSecondaryProfessionSkill', selectedSecondaryProfessionSkill);
const skillNameArray = [];
const skillNameArraySecondaryRoll = [];
for (const [key, value] of Object.entries(skillNames)) {
if (value === selectedProfessionSkill && selectedProfessionSkill != null) {
skillNameArray.push(key);
}
if (value === selectedSecondaryProfessionSkill && selectedSecondaryProfessionSkill != null) {
skillNameArraySecondaryRoll.push(key);
}
}
workerLog('skillNameArray', skillNameArray);
workerLog('skillNameArraySecondaryRoll', skillNameArraySecondaryRoll);
let signSymbol = '';
const multicastLabel = activeAbilityValues[abilityPrefix + 'multicastLabel'] ? activeAbilityValues[abilityPrefix + 'multicastLabel'] : 'Vícenásobné sesílání';
const multicastValue = '?{' + multicastLabel + '}';
let manaType = 'Mana';
if (activeAbilityValues.selectedProfession == 'Warrior') {
manaType = 'Adrenalin';
}
else if (activeAbilityValues.selectedProfession == 'Ranger') {
manaType = 'Duševní síla';
}
else if (activeAbilityValues.selectedProfession == 'Priest') {
manaType = 'Přízeň';
}
else {
manaType = 'Mana';
}
if (isMulticast) {
macro += '?{' + multicastLabel + '|1|2|3|4|5|6|7|8|9|10|11|12}';
macro += '{{manaRoll=' + manaType + ': @{mana} + @{additionalMana} = [[@{mana} + @{additionalManaNum} * (' + multicastValue + '-1)]]}}';
}
else {
macro += '{{manaRoll=' + manaType + ': @{mana}';
macro += activeAbilityValues[abilityPrefix + 'additionalMana'] ? ' + @{additionalMana}}}' : '}}';
}
macro += '{{shortText=@{printText}}}';
if (activeAbilityValues[abilityPrefix + 'isAttackRoll'] == true) {
macro += '{{attack=Útok @{attackText} [[';
macro += activeAbilityValues.attackMacroPartialAttack;
macro += activeAbilityValues[abilityPrefix + 'attackRollBonus'] != '' ? '+(@{attackRollBonus})' : '';
macro += ']]}}';
signSymbol = activeAbilityValues[abilityPrefix + 'attackRollBonus'] >= 0 ? '+' : '';
macro += '{{attackModifier=@{attackMacroPartialAttackModifier}@{name} ' + signSymbol + '@{attackRollBonus}\n}}';
macro += '{{attackFormula=(';
macro += activeAbilityValues.attackMacroPartialFormula;
macro += activeAbilityValues[abilityPrefix + 'attackRollBonus'] != '' ? ' + @{name})' : '';
macro += '}}';
macro += '{{attackDamage=Zranění zbraně [[';
macro += activeAbilityValues.attackMacroPartialDamage;
macro += activeAbilityValues[abilityPrefix + 'attackDamageBonus'] != '' ? '+(@{attackDamageBonus})' : '';
macro += ']]}}';
signSymbol = activeAbilityValues[abilityPrefix + 'attackDamageBonus'] >= 0 ? '+' : '';
macro += '{{attackDamageModifier=@{attackMacroPartialDamageModifier}@{name} ' + signSymbol + '@{attackDamageBonus}\n}}';
}
if (activeAbilityValues[abilityPrefix + 'isDefenseRoll'] == true) {
let defenseType = '';
let defenseFormula = '';
let defenseLabel = '';
signSymbol = activeAbilityValues[abilityPrefix + 'defenseRollBonus'] >= 0 ? '+' : '';
if (activeAbilityValues[abilityPrefix + 'defenseRollType'] == 'melee' || activeAbilityValues[abilityPrefix + 'defenseRollType'] == 'all') {
defenseType = activeAbilityValues.defenseMacroPartialDefense;
defenseFormula = activeAbilityValues.defenseMacroPartialFormula;
defenseLabel = 'Obrana na blízko ';
macro += '{{defense=' + defenseLabel + '[[';
macro += defenseType;
macro += activeAbilityValues[abilityPrefix + 'defenseRollBonus'] != '' ? '+(@{defenseRollBonus})' : '';
macro += ']]}}';
macro += '{{defenseFormula=(';
macro += defenseFormula;
macro += activeAbilityValues[abilityPrefix + 'defensekRollBonus'] != '' ? ' + @{name}' : '';
macro += ')}}';
macro += '{{defenseModifier=@{advantageText}@{rollModText}@{defenseModText}@{basicDefenseModText}@{name} ' + signSymbol + '@{defenseRollBonus}\n}}';
}
if (activeAbilityValues[abilityPrefix + 'defenseRollType'] == 'ranged' || activeAbilityValues[abilityPrefix + 'defenseRollType'] == 'all') {
defenseType = activeAbilityValues.defenseRangeMacroPartialDefense;
defenseFormula = activeAbilityValues.defenseRangeMacroPartialFormula;
defenseLabel = 'Obrana na dálku ';
macro += '{{rangedDefense=' + defenseLabel + '[[';
macro += defenseType;
macro += activeAbilityValues[abilityPrefix + 'defenseRollBonus'] != '' ? '+(@{defenseRollBonus})' : '';
macro += ']]}}';
macro += '{{rangedDefenseFormula=(';
macro += defenseFormula;
macro += activeAbilityValues[abilityPrefix + 'defensekRollBonus'] != '' ? ' + @{name}' : '';
macro += ')}}';
macro += '{{rangedDefenseModifier=@{advantageText}@{rollModText}@{defenseRangeModText}@{basicDefenseModText}@{name} ' + signSymbol + '@{defenseRollBonus}\n}}';
}
if (activeAbilityValues[abilityPrefix + 'defenseRollType'] == 'basic' || activeAbilityValues[abilityPrefix + 'defenseRollType'] == 'all') {
defenseType = '(@{dexterityBonus})+(@{armorDefense})+([[(@{basicDefenseMod})+(@{rollMod})+(@{advantage})]])';
defenseFormula = 'OBR + Zbroj + Modifikátory';
defenseLabel = 'Základní obrana ';
macro += '{{basicDefense=' + defenseLabel + '[[';
macro += defenseType;
macro += activeAbilityValues[abilityPrefix + 'defenseRollBonus'] != '' ? '+(@{defenseRollBonus})' : '';
macro += ']]}}';
macro += '{{basicDefenseFormula=(';
macro += defenseFormula;
macro += activeAbilityValues[abilityPrefix + 'defensekRollBonus'] != '' ? ' + @{name}' : '';
macro += ')}}';
macro += '{{basicDefenseModifier=@{advantageText}@{rollModText}@{basicDefenseModText}@{name} ' + signSymbol + '@{defenseRollBonus}\n}}';
}
}
const multiDiffString = isMulticast ? ' * (' + multicastValue + '-1)' : '';
macro += difficulty != null && difficulty != 0 ? '{{difficulty=vs. obtížnost [[@{difficulty} + (@{additionalDifficulty}' + multiDiffString + ')]]}}' : '';
if (skillNameArray.length > 0 || castingAttribute) {
macro += '{{roll=@{selectedProfessionSkill} ';
macro += '[[1d10';
macro += castingAttribute ? '+(@{' + abilityBonusNames[castingAttribute] + '})' : '';
macro += skillNameArray.length > 0 ? '+(@{repeating_skills_' + skillNameArray[0].split('_')[2] + '_skillLevel' + '})' : '';
macro += '+([[@{rollMod}+@{advantage}]])]]}}';
macro += selectedSecondaryProfessionSkill === selectedProfessionSkill && secondaryRollAgainst != null ? 'vs. {{secondaryRollAgainstSame=@{secondaryRollAgainst}}}' : '';
workerLog('macro', macro);
macro += '{{formula=(1k10';
macro += castingAttribute ? ' + ' + castingAttribute : '';
macro += skillNameArray.length > 0 ? ' + ' + '@{repeating_skills_' + skillNameArray[0].split('_')[2] + '_name' + '}' : '';
macro += ' + Modifikátory)}}';
macro += '{{modifier=@{rollModText}@{advantageText}}}';
workerLog('macro', macro);
}
if (damage || damageType) {
macro += '{{damage=';
if (damage) {
let editedDamage = damage.replace('k', 'd');
if (isMulticast) {
const regexp = /[0-9]*d/;
const editedDamageRegex = regexp.exec(editedDamage);
editedDamageRegex?.forEach(regMatch => {
editedDamage = editedDamage.replace(regMatch, '(' + regMatch.substring(0, regMatch.length - 1) + '*' + multicastValue + ')d');
});
}
macro += '[[ceil(' + editedDamage + ')]]';
}
macro += damageType != null ? ' @{damageType}' : '';
macro += '}}';
}
if (selectedSecondaryProfessionSkill != selectedProfessionSkill && (selectedSecondaryProfessionSkill != null || secondaryCastingAttribute != null)) {
macro += '{{secondaryRoll=@{secondaryRoll} ';
macro += '[[1d10';
macro += secondaryCastingAttribute ? '+(@{' + abilityBonusNames[secondaryCastingAttribute] + '})' : '';
macro += skillNameArraySecondaryRoll.length > 0 ? '+(@{repeating_skills_' + skillNameArraySecondaryRoll[0].split('_')[2] + '_skillLevel' + '})' : '';
macro += '+([[@{rollMod}+@{advantage}]])]]}}';
macro += secondaryRollAgainst != null ? '{{secondaryRollAgainst=@{secondaryRollAgainst}}}' : '';
workerLog('secondaryCastingAttribute', secondaryCastingAttribute);
macro += '{{secondaryFormula=(1k10';
macro += secondaryCastingAttribute ? ' + ' + secondaryCastingAttribute : '';
macro += skillNameArraySecondaryRoll.length > 0 ? ' + ' + '@{repeating_skills_' + skillNameArraySecondaryRoll[0].split('_')[2] + '_name' + '}' : '';
macro += ' + Modifikátory)}}';
macro += '{{secondaryModifier=@{rollModText}@{advantageText}}}';
}
workerLog('macro final return', macro);
return macro;
};
const addAbilities = (abilityNames) => {
getSectionIDs('activeabilities', function (idarray) {
const attributeArr = [];
for (let i = 0; i < idarray.length; i++) {
const id = idarray[i];
const existingAbilityName = 'repeating_activeabilities_' + idarray[i] + '_name';
attributeArr.push(existingAbilityName);
attributeArr.push('attackMacroPartialAttack');
attributeArr.push('attackMacroPartialFormula');
attributeArr.push('defenseRangeMacroPartialDefense');
attributeArr.push('defenseRangeMacroPartialFormula');
attributeArr.push('defenseMacroPartialDefense');
attributeArr.push('defenseMacroPartialFormula');
attributeArr.push('attackMacroPartialDamage');
attributeArr.push('attackMacroPartialAttackModifier');
attributeArr.push('attackMacroPartialDamageModifier');
}
getSectionIDs('skills', function (ids) {
for (let i = 0; i < ids.length; i++) {
attributeArr.push('repeating_skills_' + ids[i] + '_name');
}
attributeArr.push('selectedProfession');
attributeArr.push('level');
getAttrs(attributeArr, function (values) {
const skillNames = {};
for (const [key, value] of Object.entries(values)) {
if (key.includes('repeating_skills_')) {
skillNames[key] = value;
}
}
const existingAbilities = Object.values(values);
const selectedProfession = values.selectedProfession;
const level = values.level;
const selectedProfessionSkill = defaultAbilitySkills[selectedProfession];
const newAbilityAttrs = {};
abilityNames.forEach(abilityName => {
if (!existingAbilities.includes(abilityName)) {
console.log('adding ', abilityName);
const currentAbility = Abilities.filter(function (e) {
return e.name == abilityName;
});
console.log('CurrentAbility ', currentAbility);
const newRowId = generateRowID();
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_name'] = 'name' in currentAbility[0].data ? currentAbility[0].data.name : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_mana'] = 'cost' in currentAbility[0].data ? currentAbility[0].data.cost : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_additionalMana'] = 'additionalCost' in currentAbility[0].data ? currentAbility[0].data.additionalCost : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_additionalManaNum'] = 'additionalCostNum' in currentAbility[0].data ? currentAbility[0].data.additionalCostNum : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_resources'] = 'materialCost' in currentAbility[0].data ? currentAbility[0].data.materialCost : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_base'] = 'base' in currentAbility[0].data ? currentAbility[0].data.base : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_range'] = 'range' in currentAbility[0].data ? currentAbility[0].data.range : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_target'] = 'target' in currentAbility[0].data ? currentAbility[0].data.target : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_duration'] = 'duration' in currentAbility[0].data ? currentAbility[0].data.duration : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_castingTime'] = 'castingTime' in currentAbility[0].data ? currentAbility[0].data.castingTime : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_frequency'] = 'frequency' in currentAbility[0].data ? currentAbility[0].data.frequency : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_usage'] = 'usage' in currentAbility[0].data ? currentAbility[0].data.usage : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_difficulty'] = 'difficulty' in currentAbility[0].data ? currentAbility[0].data.difficulty : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_additionalDifficulty'] = 'additionalDifficulty' in currentAbility[0].data ? currentAbility[0].data.additionalDifficulty : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_prerequisite'] = 'prerequisite' in currentAbility[0].data ? currentAbility[0].data.prerequisite : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_selectedProfessionSkill'] = 'selectedProfessionSkill' in currentAbility[0].data ? currentAbility[0].data.selectedProfessionSkill : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_castingAttribute'] = 'castingAttribute' in currentAbility[0].data ? currentAbility[0].data.castingAttribute : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_description'] = 'description' in currentAbility[0].data ? currentAbility[0].data.description : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_printText'] = 'printText' in currentAbility[0].data ? currentAbility[0].data.printText : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_isEditing'] = '0';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_secondaryRoll'] = 'secondaryRoll' in currentAbility[0].data ? currentAbility[0].data.secondaryRoll : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_secondaryCastingAttribute'] = 'secondaryCastingAttribute' in currentAbility[0].data ? currentAbility[0].data.secondaryCastingAttribute : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_secondaryRollAgainst'] = 'secondaryRollAgainst' in currentAbility[0].data ? currentAbility[0].data.secondaryRollAgainst : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_damage'] = 'damage' in currentAbility[0].data ? currentAbility[0].data.damage : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_damageType'] = 'damageType' in currentAbility[0].data ? currentAbility[0].data.damageType : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_isAttackRoll'] = 'isAttackRoll' in currentAbility[0].data ? currentAbility[0].data.isAttackRoll : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_attackRollBonus'] = 'attackRollBonus' in currentAbility[0].data ? currentAbility[0].data.attackRollBonus : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_attackDamageBonus'] = 'attackDamageBonus' in currentAbility[0].data ? currentAbility[0].data.attackDamageBonus : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_isDefenseRoll'] = 'isDefenseRoll' in currentAbility[0].data ? currentAbility[0].data.isDefenseRoll : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_defenseRollType'] = 'defenseRollType' in currentAbility[0].data ? currentAbility[0].data.defenseRollType : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_defenseRollBonus'] = 'defenseRollBonus' in currentAbility[0].data ? currentAbility[0].data.defenseRollBonus : '';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_customMacro'] = false;
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_obtainedLevel'] = level;
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_isMulticast'] = 'isMulticast' in currentAbility[0].data ? currentAbility[0].data.isMulticast : false;
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_multicastLabel'] = 'multicastLabel' in currentAbility[0].data ? currentAbility[0].data.multicastLabel : 'Vícenásobné sesílání';
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_macro'] = recaluclateActiveAbilityMacro(newAbilityAttrs, skillNames, newRowId);
workerLog('new ability macro', newAbilityAttrs['repeating_activeabilities_' + newRowId + '_macro']);
newAbilityAttrs['repeating_activeabilities_' + newRowId + '_printMacro'] = defaultPrintAbilityMacros[selectedProfession];
}
});
setAttrs(newAbilityAttrs, { 'silent': true });
});
});
});
};
const addPassiveAbilities = (abilityNames) => {
getSectionIDs('passiveabilities', function (idarray) {
const abilityNameArr = [];
for (let i = 0; i < idarray.length; i++) {
const id = idarray[i];
const existingAbilityName = 'repeating_passiveabilities_' + idarray[i] + '_name';
abilityNameArr.push(existingAbilityName);
}
abilityNameArr.push('selectedProfession');
getAttrs(abilityNameArr, function (values) {
const existingAbilities = Object.values(values);
const selectedProfession = values.selectedProfession;
const newAbilityAttrs = {};
const skillsToAdd = [];
const abilitiesToAdd = [];
abilityNames.forEach(abilityName => {
if (!existingAbilities.includes(abilityName)) {
console.log('adding ', abilityName);
const currentAbility = AbilitiesPassive.filter(function (e) {
return e.name == abilityName;
});
console.log('CurrentAbility ', currentAbility);
const newRowId = generateRowID();
newAbilityAttrs['repeating_passiveabilities_' + newRowId + '_name'] = 'name' in currentAbility[0].data ? currentAbility[0].data.name : '';
newAbilityAttrs['repeating_passiveabilities_' + newRowId + '_description'] = 'description' in currentAbility[0].data ? currentAbility[0].data.description : '';
newAbilityAttrs['repeating_passiveabilities_' + newRowId + '_isEditing'] = '0';
if (currentAbility[0].data.envelopeAbilities) {
currentAbility[0].data.envelopeAbilities.forEach(envelopeAbility => {
abilitiesToAdd.push(envelopeAbility);
});
}
if (currentAbility[0].data.envelopeSkills) {
currentAbility[0].data.envelopeSkills.forEach(envelopeSkill => {
skillsToAdd.push(envelopeSkill);
});
}
}
});
setAttrs(newAbilityAttrs);
addAbilities(abilitiesToAdd);
workerLog('skillsToAdd', skillsToAdd);
addSkills(skillsToAdd);
});
});
};
on('clicked:addPassiveAbility', (eventInfo) => {
workerLog('clicked:addPassiveAbility', { eventInfo });
getAttrs(['addPassiveAbilityProfession', 'addPassiveAbility'], function (values) {
console.log('Profession: ', values.addPassiveAbilityProfession);
console.log('Ability: ', values.addPassiveAbility);
const ability = [];
ability.push(values.addPassiveAbility);
addPassiveAbilities(ability);
});
});
on('clicked:addActiveAbility', (eventInfo) => {
workerLog('clicked:addActiveAbility', { eventInfo });
getAttrs(['addActiveAbilitySelection', 'addActiveAbilityProfession', 'addActiveAbility'], function (values) {
console.log('Profession: ', values.addActiveAbilityProfession);
console.log('Ability: ', values.addActiveAbility);
console.log('AbilitySelection: ', values.addActiveAbilitySelection);
const ability = [];
ability.push(values.addActiveAbilitySelection);
if (values.addActiveAbilitySelection != '-') {
addAbilities(ability);
}
});
});
on('change:repeating_activeabilities', (eventInfo) => {
workerLog('change:repeating_abilities', { eventInfo });
const attributeArr = [];
const id = eventInfo.sourceAttribute.split('_')[2];
getSectionIDs('skills', function (ids) {
for (let i = 0; i < ids.length; i++) {
attributeArr.push('repeating_skills_' + ids[i] + '_name');
}
attributeArr.push('selectedProfession');
attributeArr.push('repeating_activeabilities_' + id + '_selectedProfessionSkill');
attributeArr.push('repeating_activeabilities_' + id + '_castingAttribute');
attributeArr.push('repeating_activeabilities_' + id + '_secondaryRoll');
attributeArr.push('repeating_activeabilities_' + id + '_secondaryCastingAttribute');
attributeArr.push('repeating_activeabilities_' + id + '_secondaryRollAgainst');
attributeArr.push('repeating_activeabilities_' + id + '_damage');
attributeArr.push('repeating_activeabilities_' + id + '_damageType');
attributeArr.push('repeating_activeabilities_' + id + '_customMacro');
attributeArr.push('repeating_activeabilities_' + id + '_isMulticast');
attributeArr.push('attackMacroPartialAttack');
attributeArr.push('attackMacroPartialFormula');
attributeArr.push('defenseRangeMacroPartialDefense');
attributeArr.push('defenseRangeMacroPartialFormula');
attributeArr.push('defenseMacroPartialDefense');
attributeArr.push('defenseMacroPartialFormula');
attributeArr.push('attackMacroPartialDamage');
attributeArr.push('attackMacroPartialAttackModifier');
attributeArr.push('attackMacroPartialDamageModifier');
attributeArr.push('repeating_activeabilities_' + id + '_isAttackRoll');
attributeArr.push('repeating_activeabilities_' + id + '_attackRollBonus');
attributeArr.push('repeating_activeabilities_' + id + '_attackDamageBonus');
attributeArr.push('repeating_activeabilities_' + id + '_isDefenseRoll');
attributeArr.push('repeating_activeabilities_' + id + '_defenseRollType');
attributeArr.push('repeating_activeabilities_' + id + '_defenseRollBonus');
attributeArr.push('repeating_activeabilities_' + id + '_multicastLabel');
getAttrs(attributeArr, function (values) {
const skillNames = {};
for (const [key, value] of Object.entries(values)) {
if (key.includes('repeating_skills_')) {
skillNames[key] = value;
}
}
const newAbilityAttrs = {};
workerLog('customMacro ', values['repeating_activeabilities_' + id + '_customMacro']);
if (values['repeating_activeabilities_' + id + '_customMacro'] != 'on') {
newAbilityAttrs['repeating_activeabilities_' + id + '_macro'] = recaluclateActiveAbilityMacro(values, skillNames, id);
workerLog('change:repeating_abilities macro', { newAbilityAttrs });
setAttrs(newAbilityAttrs, { 'silent': true });
}
});
});
});
on('change:addActiveAbilityProfession', (eventInfo) => {
workerLog('change:addActiveAbilityProfession', { eventInfo });
if (eventInfo.newValue != 'nevybrano') {
setAttrs({ addActiveAbility: defaultProfessionAbilityDropdown[String(eventInfo.newValue)] });
}
});
on('change:addPassiveAbilityProfession', (eventInfo) => {
workerLog('change:addPassiveAbilityProfession', { eventInfo });
if (eventInfo.newValue != 'nevybrano') {
setAttrs({ addPassiveAbility: defaultPassiveAbilitySkills[String(eventInfo.newValue)] });
}
});
on('change:addActiveAbility', (eventInfo) => {
workerLog('change:addActiveAbility', { eventInfo });
setAttrs({ addActiveAbilitySelection: '-' });
});
const attributes = ['strength', 'dexterity', 'constitution', 'intelligence', 'charisma'];
const calculateAttribute = (attributeRace, isDominant, attributeMod, attributeValue) => {
let attribute = Number(attributeRace) + Number(attributeMod) + Number(attributeValue);
attribute += Number(isDominant) ? 3 : 0;
return attribute.toString();
};
const calculateAttributeBonus = (attribute_base, bonus_mod) => {
const attribute = parseInt(attribute_base) || 0;
const mod = parseInt(bonus_mod) || 0;
const modifier = Math.floor(attribute / 2) - 5 + mod;
return isNaN(Number(modifier)) || attribute_base === '' ? '' : modifier > 0 ? `+${modifier}` : `${modifier}`;
};
attributes.forEach((attribute) => {
on(`change:${attribute}Race change:${attribute}Dominant change:${attribute}Value change:${attribute}Mod`, (eventInfo) => {
workerLog(`change:${attribute}Race change:${attribute}Dominant change:${attribute}Value change:${attribute}Mod`, eventInfo);
getAttrs([`${attribute}Race`, `${attribute}Dominant`, `${attribute}Value`, `${attribute}Mod`], (values) => {
const set = {};
set[`${attribute}`] = calculateAttribute(values[`${attribute}Race`], values[`${attribute}Dominant`], values[`${attribute}Mod`], values[`${attribute}Value`]);
setAttrs(set);
});
});
});
attributes.forEach((attribute) => {
on(`change:${attribute}`, (eventInfo) => {
workerLog(`change:${attribute} change:${attribute}BonusMod`, eventInfo);
getAttrs([`${attribute}BonusMod`, 'profession'], (values) => {
const set = {};
set[`${attribute}Bonus`] = calculateAttributeBonus(String(eventInfo.newValue), values[`${attribute}BonusMod`]);
if (attribute === Attributes.Dexterity && values.profession === Professions.Alchemist) {
}
if (attribute === Attributes.Intelligence && (values.profession === Professions.Ranger || values.profession === Professions.Mage)) {
}
if (attribute === Attributes.Charisma && values.profession === Professions.Priest) {
}
setAttrs(set);
});
});
});
attributes.forEach((attribute) => {
on(`change:${attribute}BonusMod`, (eventInfo) => {
workerLog(`change:${attribute} change:${attribute}BonusMod`, eventInfo);
getAttrs([`${attribute}`], (values) => {
const set = {};
set[`${attribute}Bonus`] = calculateAttributeBonus(values[`${attribute}`], String(eventInfo.newValue));
setAttrs(set);
});
});
});
const load_max_table = {
'-5': 7,
'-4': 8,
'-3': 9,
'-2': 11,
'-1': 13,
'+0': 15,
'+1': 17,
'+2': 19,
'+3': 21,
'+4': 23,
'+5': 25,
'+6': 28
};
const calculateMaxLoad = (strengthBonus) => {
let load_max = -1;
const found = Object.keys(load_max_table).filter((str_mod) => Number(strengthBonus) >= Number(str_mod));
if (found.length) {
const key = found[found.length - 1];
load_max = load_max_table[key];
}
return load_max;
};
const calculateDeathLimit = (constitutionBonus) => {
const healthDeath = -(10 + Number(constitutionBonus));
return isNaN(Number(healthDeath)) ? -1 : healthDeath > 0 ? 0 : healthDeath;
};
const calculateFatigueMax = (constitutionBonus) => {
return 10 + Number(constitutionBonus);
};
on('change:strengthBonus change:loadMaxMod', (eventInfo) => {
workerLog('change:strengthBonus change:loadMaxMod', { eventInfo });
const set = {};
getAttrs(['loadMaxMod', 'strengthBonus'], (values) => {
let load_max = calculateMaxLoad(Number(values.strengthBonus));
load_max += Number(values.loadMaxMod);
set.load_max = load_max === -1 ? '' : load_max.toFixed(2);
setAttrs(set);
});
});
on('change:dexterityBonus change:rollMod change:advantage change:initiativeMod', (eventInfo) => {
workerLog('change:dexterityBonus', { eventInfo });
getAttrs(['raceSpeed', 'dexterityBonus', 'speedMod', 'initiativeMod', 'rollMod', 'advantage'], (values) => {
const set = {};
set.initiative = Number(values.dexterityBonus) + Number(values.initiativeMod) + Number(values.rollMod) + Number(values.advantage);
set.speed = calculateSpeed(values.raceSpeed, values.dexterityBonus, values.speedMod);
setAttrs(set);
});
});
on('change:constitutionBonus', (eventInfo) => {
workerLog('change:constitutionBonus', { eventInfo });
const set = {};
const deathLimit = calculateDeathLimit(Number(eventInfo.newValue));
set.deathLimit = deathLimit === -1 ? '' : deathLimit;
set.fatigueMaxInput = calculateFatigueMax(Number(eventInfo.newValue));
setAttrs(set);
});
on('change:fatigueMaxInput change:fatigueMaxMod', (eventInfo) => {
workerLog('change:fatigueMaxInput change:fatigueMaxMod', { eventInfo });
getAttrs(['fatigueMaxInput', 'fatigueMaxMod'], (values) => {
const set = {};
set.fatigue_max = Number(values.fatigueMaxInput) + Number(values.fatigueMaxMod);
setAttrs(set);
});
});
const calculateLoadLevel = (load, load_max) => {
if (load_max > 0) {
const counter = Math.floor(load / load_max);
if (counter === 0) {
return 'nepřetížený';
}
if (counter === 1) {
return '1x lehce naložený';
}
if (counter === 2) {
return '2x středně naložený';
}
if (counter === 3) {
return '3x velmi naložený';
}
if (counter >= 4) {
return `${counter}x přetížený`;
}
}
return 'nepřetížený';
};
on('change:load change:load_max', (eventInfo) => {
workerLog('change:load change:load_max', { eventInfo });
getAttrs(['load', 'load_max'], (values) => {
const set = {};
set.loadLevel = calculateLoadLevel(values.load, values.load_max);
setAttrs(set);
});
});
const calculateFatigueLevel = (fatigue, fatigue_max) => {
if (fatigue_max > 0) {
const counter = fatigue / fatigue_max;
if (counter <= 1) {
return 'svěží';
}
if (counter > 1 && counter <= 2) {
return 'unavený';
}
if (counter > 2) {
return 'vyčerpaný';
}
}
return 'svěží';
};
on('change:fatigue change:fatigue_max', (eventInfo) => {
workerLog('change:fatigue change:fatigue_max', { eventInfo });
getAttrs(['fatigue', 'fatigue_max'], (values) => {
const set = {};
set.fatigueLevel = calculateFatigueLevel(values.fatigue, values.fatigue_max);
setAttrs(set);
});
});
const calculateSpeed = (raceSpeed, dexterityBonus, speedMod) => {
if (Number.isNaN(raceSpeed) || Number.isNaN(dexterityBonus) || Number.isNaN(speedMod)) {
return 0;
}
else {
return Number(raceSpeed) + Number(dexterityBonus) + Number(speedMod);
}
};
on('change:raceSpeed change:speedMod', (eventInfo) => {
workerLog('change:raceSpeed change:speedMod', { eventInfo });
getAttrs(['raceSpeed', 'dexterityBonus', 'speedMod'], (values) => {
const set = {};
set.speed = calculateSpeed(values.raceSpeed, values.dexterityBonus, values.speedMod);
setAttrs(set);
});
});
on('change:hpMaxInput change:hpMaxMod', (eventInfo) => {
workerLog('change:hpMaxInput change:hpMaxMod', { eventInfo });
getAttrs(['hpMaxInput', 'hpMaxMod'], (values) => {
const set = {};
set.hp_max = Number(values.hpMaxInput) + Number(values.hpMaxMod);
setAttrs(set);
});
});
on('change:resourcesMaxInput change:resourcesMaxMod', (eventInfo) => {
workerLog('change:resourcesMaxInput change:resourcesMaxMod', { eventInfo });
getAttrs(['resourcesMaxInput', 'resourcesMaxMod'], (values) => {
const set = {};
set.resources_max = Number(values.resourcesMaxInput) + Number(values.resourcesMaxMod);
setAttrs(set);
});
});
on('change:manaMaxInput change:manaMaxMod', (eventInfo) => {
workerLog('change:manaMaxInput change:manaMaxMod', { eventInfo });
getAttrs(['manaMaxInput', 'manaMaxMod'], (values) => {
const set = {};
set.mana_max = Number(values.manaMaxInput) + Number(values.manaMaxMod);
setAttrs(set);
});
});
on('change:advantage', (eventInfo) => {
workerLog('change:advantage', { eventInfo });
const set = {};
switch (Number(eventInfo.newValue)) {
case 0:
set.advantageText = '';
break;
case 5:
set.advantageText = 'Výhoda +5\n';
break;
case -5:
set.advantageText = 'Nevýhoda -5\n';
break;
}
setAttrs(set);
});
const updateCombat = () => {
const attributes = [
'leftHand',
'rightHand',
'strengthBonus',
'dexterityBonus',
'attackMod',
'attackRangeMod',
'defenseMod',
'defenseRangeMod',
'basicDefenseMod',
'damageMod',
'damageRangeMod',
'armorDefense',
'shieldDefense',
'rollMod',
'advantage'
];
getAttrs(attributes, (values) => {
const set = {
attack: 0,
weaponAttack: 0,
attackText: '',
damage: 0,
weaponDamage: 0,
damageText: '',
defense: 0,
defenseRanged: 0,
weaponDefense: 0,
shieldDefense: 0
};
const leftHandExists = typeof values.leftHand !== 'undefined' && Number(values.leftHand) !== 0;
const rightHandExists = typeof values.rightHand !== 'undefined' && Number(values.rightHand) !== 0;
let leftHand = 0;
let rightHand = 0;
let isRangedAttack = false;
if (leftHandExists) {
leftHand = JSON.parse(values.leftHand);
}
if (rightHandExists) {
rightHand = JSON.parse(values.rightHand);
}
if (leftHand.sectionName && leftHand.sectionName.endsWith('ranged')
|| leftHand.sectionName && leftHand.sectionName.endsWith('throwing')
|| rightHand.sectionName && rightHand.sectionName.endsWith('ranged')
|| rightHand.sectionName && rightHand.sectionName.endsWith('throwing')) {
isRangedAttack = true;
}
if (isRangedAttack) {
set.attack += Number(values.dexterityBonus);
set.attack += Number(values.attackRangeMod);
set.attack += Number(values.rollMod);
set.attack += Number(values.advantage);
set.damage += Number(values.damageRangeMod);
}
else {
set.attack += Number(values.strengthBonus);
set.attack += Number(values.attackMod);
set.attack += Number(values.rollMod);
set.attack += Number(values.advantage);
set.damage += Number(values.damageMod);
}
if (leftHand && Number(leftHand.isTwoHanded) || rightHand && Number(rightHand.isTwoHanded)) {
set.attack += Number(leftHand.attack);
set.damage += Number(leftHand.damage);
set.weaponAttack = Number(leftHand.attack);
set.attackText = leftHand.name;
set.weaponDamage = Number(leftHand.damage);
set.damageText = leftHand.damageType;
if (leftHand.sectionName && leftHand.sectionName.endsWith('shields')) {
set.weaponDefense = 0;
set.shieldDefense = Number(leftHand.shieldQuality);
}
else {
set.weaponDefense = Number(leftHand.defense);
set.shieldDefense = 0;
}
}
else {
if (leftHand && rightHand) {
set.attack += Number(leftHand.attack) + Number(rightHand.attack);
set.damage += Number(leftHand.damage) + Number(rightHand.damage);
set.weaponAttack = Number(leftHand.attack) + Number(rightHand.attack);
set.attackText = `${String(leftHand.name)} + ${String(rightHand.name)}`;
set.weaponDamage = Number(leftHand.damage) + Number(rightHand.damage);
set.damageText = `${String(leftHand.damageType)} + ${String(rightHand.damageType)}`;
if (leftHand.sectionName && leftHand.sectionName.endsWith('shields')) {
set.shieldDefense += Number(leftHand.shieldQuality);
}
else {
set.weaponDefense += Number(leftHand.defense);
}
if (rightHand.sectionName && rightHand.sectionName.endsWith('shields')) {
set.shieldDefense += Number(rightHand.shieldQuality);
}
else {
set.weaponDefense += Number(rightHand.defense);
}
}
else {
if (leftHand) {
set.attack += Number(leftHand.attack);
set.damage += Number(leftHand.damage);
set.weaponAttack = Number(leftHand.attack);
set.attackText = leftHand.name;
set.weaponDamage = Number(leftHand.damage);
set.damageText = leftHand.damageType;
if (leftHand.sectionName && leftHand.sectionName.endsWith('shields')) {
set.shieldDefense += Number(leftHand.shieldQuality);
}
else {
set.weaponDefense += Number(leftHand.defense);
}
}
if (rightHand) {
set.attack += Number(rightHand.attack);
set.damage += Number(rightHand.damage);
set.weaponAttack = Number(rightHand.attack);
set.attackText = rightHand.name;
set.weaponDamage = Number(rightHand.damage);
set.damageText = rightHand.damageType;
if (rightHand.sectionName && rightHand.sectionName.endsWith('shields')) {
set.shieldDefense += Number(rightHand.shieldQuality);
}
else {
set.weaponDefense += Number(rightHand.defense);
}
}
}
}
set.damage = Number(set.damage) >= 0 ? `+${set.damage}` : set.damage;
set.defense = Number(values.dexterityBonus) + Number(set.weaponDefense) + Number(set.shieldDefense) + Number(values.armorDefense) + Number(values.advantage) + Number(values.defenseMod) + Number(values.rollMod) + Number(values.basicDefenseMod);
set.defenseRanged = Number(values.dexterityBonus) + Number(set.shieldDefense) + Number(values.armorDefense) + Number(values.advantage) + Number(values.defenseRangeMod) + Number(values.rollMod) + Number(values.basicDefenseMod);
let attackMacro = '';
let attackMacroPartialAttack = '';
let attackMacroPartialFormula = '';
let attackMacroPartialDamage = '';
let attackMacroPartialAttackModifier = '';
let attackMacroPartialDamageModifier = '';
if (isRangedAttack) {
attackMacro = '@{whisper}&{template:custom}{{title=Útok na dálku @{attackText}}}{{subtitle=@{character_name}}}{{roll=Útok [[1d6!+(@{dexterityBonus})+(@{weaponAttack})+([[(@{attackRangeMod})+(@{rollMod})+(@{advantage})]])]]}} {{formula=(1k6 + OBR + Zbraň + Modifikátory)}} {{modifier=@{advantageText}@{rollModText}@{attackRangeModText}}}{{damage=Zranění zbraně [[(@{weaponDamage})+(@{damageRangeMod})]] }} {{modifierDamage=@{damageRangeModText}}}';
attackMacroPartialAttack = '1d6!+(@{dexterityBonus})+(@{weaponAttack})+([[(@{attackRangeMod})+(@{rollMod})+(@{advantage})]])';
attackMacroPartialFormula = '1k6 + OBR + Zbraň + Modifikátory';
attackMacroPartialDamage = '(@{weaponDamage})+(@{damageRangeMod})';
attackMacroPartialAttackModifier = '@{advantageText}@{rollModText}@{attackRangeModText}';
attackMacroPartialDamageModifier = '@{damageRangeModText}';
}
else {
attackMacro = '@{whisper}&{template:custom}{{title=Útok na blízko @{attackText}}}{{subtitle=@{character_name}}}{{roll=Útok [[1d6!+(@{strengthBonus})+(@{weaponAttack})+([[(@{attackMod})+(@{rollMod})+(@{advantage})]])]]}} {{formula=(1k6 + SIL + Zbraň + Modifikátory)}} {{modifier=@{advantageText}@{rollModText}@{attackModText}}} {{damage=Zranění zbraně [[(@{weaponDamage})+(@{damageMod})]] }} {{modifierDamage=@{damageModText}}}';
attackMacroPartialAttack = '1d6!+(@{strengthBonus})+(@{weaponAttack})+([[(@{attackMod})+(@{rollMod})+(@{advantage})]])';
attackMacroPartialFormula = '1k6 + SIL + Zbraň + Modifikátory';
attackMacroPartialDamage = '(@{weaponDamage})+(@{damageMod})';
attackMacroPartialAttackModifier = '@{advantageText}@{rollModText}@{attackModText}';
attackMacroPartialDamageModifier = '@{damageModText}';
}
const defenseRangeMacro = '@{whisper}&{template:custom}{{title=Obrana na dálku @{attackText}}}{{subtitle=@{character_name}}}{{roll=Obrana [[1d6!+(@{dexterityBonus})+([[(@{shieldDefense})+(@{armorDefense})]])+([[(@{advantage})+(@{defenseRangeMod})+(@{rollMod})+(@{basicDefenseMod})]])]]}} {{formula=(1k6 + OBR + Štít/Zbroj + Modifikátory)}}{{modifier=@{advantageText}@{rollModText}@{defenseRangeModText}@{basicDefenseModText}}}';
const defenseMacro = '@{whisper}&{template:custom}{{title=Obrana na blízko @{attackText}}}{{subtitle=@{character_name}}}{{roll=Obrana [[1d6!+(@{dexterityBonus})+([[(@{weaponDefense})+(@{shieldDefense})+(@{armorDefense})]])+([[(@{advantage})+(@{defenseMod})+(@{rollMod})+(@{basicDefenseMod})]])]]}} {{formula=(1k6 + OBR + Zbraň/Štít/Zbroj + Modifikátory)}}{{modifier=@{advantageText}@{rollModText}@{defenseModText}@{basicDefenseModText}}}';
set.attackMacro = attackMacro;
set.defenseRangeMacro = defenseRangeMacro;
set.defenseMacro = defenseMacro;
set.attackMacroPartialAttack = attackMacroPartialAttack;
set.attackMacroPartialFormula = attackMacroPartialFormula;
set.attackMacroPartialDamage = attackMacroPartialDamage;
set.attackMacroPartialAttackModifier = attackMacroPartialAttackModifier;
set.attackMacroPartialDamageModifier = attackMacroPartialDamageModifier;
set.defenseRangeMacroPartialDefense = '1d6!+(@{dexterityBonus})+([[(@{shieldDefense})+(@{armorDefense})]])+([[(@{advantage})+(@{defenseRangeMod})+(@{rollMod})+(@{basicDefenseMod})]])';
set.defenseRangeMacroPartialFormula = '1k6 + OBR + Štít/Zbroj + Modifikátory';
set.defenseMacroPartialDefense = '1d6!+(@{dexterityBonus})+([[(@{weaponDefense})+(@{shieldDefense})+(@{armorDefense})]])+([[(@{advantage})+(@{defenseMod})+(@{rollMod})+(@{basicDefenseMod})]])';
set.defenseMacroPartialFormula = '1k6 + OBR + Zbraň/Štít/Zbroj + Modifikátory';
setAttrs(set);
});
};
const updateBasicDefense = () => {
getSectionIDs('armors', (idArray) => {
const repAttributes = ['dexterityBonus', 'basicDefenseMod', 'rollMod', 'advantage'];
for (const id of idArray) {
repAttributes.push(`repeating_armors_${id}_itemId`);
repAttributes.push(`repeating_armors_${id}_isEquipped`);
repAttributes.push(`repeating_armors_${id}_name`);
repAttributes.push(`repeating_armors_${id}_size`);
repAttributes.push(`repeating_armors_${id}_armorQuality`);
}
getAttrs(repAttributes, (values) => {
let armorDefense = 0;
idArray.forEach(id => {
if (Number(values[`repeating_armors_${id}_isEquipped`])) {
armorDefense += Number(values[`repeating_armors_${id}_armorQuality`]);
}
});
const basicDefense = Number(armorDefense) + Number(values.dexterityBonus) + Number(values.basicDefenseMod) + Number(values.rollMod) + Number(values.advantage);
setAttrs({ basicDefense }, { silent: true });
setAttrs({ armorDefense });
});
});
};
const updateHands = (eventInfo) => {
const { id, sectionName } = parseEvent(eventInfo);
const attributes = [
`${sectionName}_${id}_itemId`,
`${sectionName}_${id}_hands`,
'leftHand',
'rightHand'
];
getAttrs([...attributes], (values) => {
const setSilent = {};
const set = {};
const itemId = values[`${sectionName}_${id}_itemId`];
let leftHand = 0;
let rightHand = 0;
const leftHandExists = typeof values.leftHand !== 'undefined' && Number(values.leftHand) !== 0;
const rightHandExists = typeof values.rightHand !== 'undefined' && Number(values.rightHand) !== 0;
if (leftHandExists) {
leftHand = JSON.parse(values.leftHand);
}
if (rightHandExists) {
rightHand = JSON.parse(values.rightHand);
}
const itemAttributes = [
`repeating_items_${itemId}_itemId`,
`repeating_items_${itemId}_count`,
`repeating_items_${itemId}_name`,
`repeating_items_${itemId}_isTwoHanded`,
`repeating_items_${itemId}_attack`,
`repeating_items_${itemId}_damage`,
`repeating_items_${itemId}_defense`,
`repeating_items_${itemId}_damageType`,
`repeating_items_${itemId}_reach`,
`repeating_items_${itemId}_reachRange`,
`repeating_items_${itemId}_shieldQuality`,
`repeating_items_${itemId}_armorQuality`
];
getAttrs([...itemAttributes], (itemValues) => {
const item = {
sectionName,
id,
itemId: itemValues[`repeating_items_${itemId}_itemId`],
hands: values[`${sectionName}_${id}_hands`],
count: itemValues[`repeating_items_${itemId}_count`],
name: itemValues[`repeating_items_${itemId}_name`],
isTwoHanded: itemValues[`repeating_items_${itemId}_isTwoHanded`],
attack: itemValues[`repeating_items_${itemId}_attack`],
damage: itemValues[`repeating_items_${itemId}_damage`],
defense: itemValues[`repeating_items_${itemId}_defense`],
damageType: itemValues[`repeating_items_${itemId}_damageType`],
reach: itemValues[`repeating_items_${itemId}_reach`],
reachRange: itemValues[`repeating_items_${itemId}_reachRange`],
shieldQuality: itemValues[`repeating_items_${itemId}_shieldQuality`],
armorQuality: itemValues[`repeating_items_${itemId}_armorQuality`]
};
if (item.hands !== Hands.None) {
if (item.hands === Hands.Left) {
set.leftHand = 0;
}
else if (item.hands === Hands.Right) {
set.rightHand = 0;
}
else if (item.hands === Hands.Both) {
setSilent.leftHand = 0;
set.rightHand = 0;
}
setSilent[`${sectionName}_${id}_hands`] = Hands.None;
}
else {
if (Number(item.isTwoHanded)) {
setSilent[`${String(leftHand.sectionName)}_${String(leftHand.id)}_hands`] = Hands.None;
setSilent[`${String(rightHand.sectionName)}_${String(rightHand.id)}_hands`] = Hands.None;
setSilent[`${sectionName}_${id}_hands`] = Hands.Both;
setSilent.leftHand = JSON.stringify(item);
set.rightHand = JSON.stringify(item);
}
else if (Number(values.leftHand) === 0) {
setSilent[`${sectionName}_${id}_hands`] = Hands.Left;
set.leftHand = JSON.stringify(item);
}
else if (Number(values.rightHand) === 0) {
setSilent[`${sectionName}_${id}_hands`] = Hands.Right;
set.rightHand = JSON.stringify(item);
}
else {
setSilent[`${leftHand.sectionName}_${leftHand.id}_hands`] = Hands.None;
setSilent[`${rightHand.sectionName}_${rightHand.id}_hands`] = Hands.None;
setSilent[`${sectionName}_${id}_hands`] = Hands.Left;
setSilent.rightHand = 0;
set.leftHand = JSON.stringify(item);
}
}
setAttrs(setSilent, { silent: true }, () => {
setAttrs(set);
});
});
});
};
const checkEquippedItem = (eventInfo) => {
const { id, sectionName } = parseEvent(eventInfo);
const attributes = [
`${sectionName}_${id}_itemId`,
`${sectionName}_${id}_hands`,
'leftHand',
'rightHand'
];
getAttrs([...attributes], (values) => {
const setSilent = {};
const set = {};
const itemId = values[`${sectionName}_${id}_itemId`];
let leftHand = 0;
let rightHand = 0;
const leftHandExists = typeof values.leftHand !== 'undefined' && Number(values.leftHand) !== 0;
const rightHandExists = typeof values.rightHand !== 'undefined' && Number(values.rightHand) !== 0;
if (leftHandExists) {
leftHand = JSON.parse(values.leftHand);
}
if (rightHandExists) {
rightHand = JSON.parse(values.rightHand);
}
const itemAttributes = [
`repeating_items_${itemId}_itemId`,
`repeating_items_${itemId}_count`,
`repeating_items_${itemId}_name`,
`repeating_items_${itemId}_isTwoHanded`,
`repeating_items_${itemId}_attack`,
`repeating_items_${itemId}_damage`,
`repeating_items_${itemId}_defense`,
`repeating_items_${itemId}_damageType`,
`repeating_items_${itemId}_reach`,
`repeating_items_${itemId}_reachRange`,
`repeating_items_${itemId}_shieldQuality`,
`repeating_items_${itemId}_armorQuality`
];
getAttrs([...itemAttributes], (itemValues) => {
const item = {
sectionName,
id,
itemId: itemValues[`repeating_items_${itemId}_itemId`],
hands: values[`${sectionName}_${id}_hands`],
count: itemValues[`repeating_items_${itemId}_count`],
name: itemValues[`repeating_items_${itemId}_name`],
isTwoHanded: itemValues[`repeating_items_${itemId}_isTwoHanded`],
attack: itemValues[`repeating_items_${itemId}_attack`],
damage: itemValues[`repeating_items_${itemId}_damage`],
defense: itemValues[`repeating_items_${itemId}_defense`],
damageType: itemValues[`repeating_items_${itemId}_damageType`],
reach: itemValues[`repeating_items_${itemId}_reach`],
reachRange: itemValues[`repeating_items_${itemId}_reachRange`],
shieldQuality: itemValues[`repeating_items_${itemId}_shieldQuality`],
armorQuality: itemValues[`repeating_items_${itemId}_armorQuality`]
};
if (!leftHandExists && !rightHandExists) {
if (Number(item.isTwoHanded)) {
setSilent[`${sectionName}_${id}_hands`] = Hands.Both;
setSilent.leftHand = JSON.stringify(item);
set.rightHand = JSON.stringify(item);
}
else {
setSilent[`${sectionName}_${id}_hands`] = Hands.Left;
set.leftHand = JSON.stringify(item);
}
setAttrs(setSilent, { silent: true }, () => {
setAttrs(set);
});
}
else {
if (leftHandExists && leftHand.itemId === item.itemId) {
set.leftHand = JSON.stringify(item);
setAttrs(set);
}
if (rightHandExists && rightHand.itemId === item.itemId) {
set.rightHand = JSON.stringify(item);
setAttrs(set);
}
}
});
});
};
const calculateModifierForType = (values, type) => {
const attributesWithTextMacro = ['rollMod', 'initiativeMod', 'attackMod', 'attackRangeMod', 'damageMod', 'damageRangeMod', 'defenseRangeMod', 'defenseMod', 'basicDefenseMod', 'strengthMod', 'strengthBonusMod', 'dexterityMod', 'dexterityBonusMod', 'constitutionMod', 'constitutionBonusMod', 'intelligenceMod', 'intelligenceBonusMod', 'charismaMod', 'charismaBonusMod'];
const triggerAttributeType = type;
const attributeTypeSections = [];
for (const [key, value] of Object.entries(values)) {
if (value === triggerAttributeType) {
const id = key.split('_');
if (values['repeating_modifiers_' + id[2] + '_isActive'] === '1') {
attributeTypeSections.push(id[2]);
}
}
}
let newValue = 0;
let newTextValue = '';
const isTextAttribute = attributesWithTextMacro.includes(triggerAttributeType);
for (let c = 0; c < attributeTypeSections.length; c++) {
newValue += Number(values['repeating_modifiers_' + attributeTypeSections[c] + '_modifier']);
if (isTextAttribute) {
const modifierValue = Number(values['repeating_modifiers_' + attributeTypeSections[c] + '_modifier']);
const signSymbol = modifierValue >= 0 ? '+' : '';
newTextValue += ` ${values['repeating_modifiers_' + attributeTypeSections[c] + '_name']} ${signSymbol}${modifierValue}\n`;
}
}
const attrsToUpdate = {};
attrsToUpdate[triggerAttributeType] = newValue;
if (isTextAttribute) {
attrsToUpdate[triggerAttributeType + 'Text'] = newTextValue;
}
return attrsToUpdate;
};
on('change:repeating_melee:name change:repeating_melee:isTwoHanded change:repeating_melee:attack change:repeating_melee:damage change:repeating_melee:defense change:repeating_melee:damageType change:repeating_melee:reach', (eventInfo) => {
workerLog('sync melee', eventInfo);
checkEquippedItem(eventInfo);
});
on('change:repeating_ranged:name change:repeating_ranged:isTwoHanded change:repeating_ranged:attack change:repeating_ranged:damage change:repeating_ranged:defense change:repeating_ranged:damageType change:repeating_ranged:reachRange', (eventInfo) => {
workerLog('sync ranged', eventInfo);
checkEquippedItem(eventInfo);
});
on('change:repeating_ranged:count', (eventInfo) => {
workerLog('sync ammunition count', eventInfo);
});
on('change:repeating_throwing:count', (eventInfo) => {
workerLog('sync throwing count', eventInfo);
});
on('change:repeating_throwing:name change:repeating_throwing:isTwoHanded change:repeating_throwing:attack change:repeating_throwing:damage change:repeating_throwing:defense change:repeating_throwing:damageType change:repeating_throwing:reachRange', (eventInfo) => {
workerLog('sync throwing', eventInfo);
checkEquippedItem(eventInfo);
});
on('change:repeating_shields:name change:repeating_shields:isTwoHanded change:repeating_shields:shieldQuality', (eventInfo) => {
workerLog('sync shields', eventInfo);
checkEquippedItem(eventInfo);
});
on('change:repeating_armors:name change:repeating_armors:size change:repeating_armors:armorQuality', (eventInfo) => {
workerLog('sync armors', eventInfo);
checkEquippedItem(eventInfo);
});
on('clicked:repeating_melee:none clicked:repeating_throwing:none clicked:repeating_ranged:none clicked:repeating_shields:none', (eventInfo) => {
workerLog('clicked:repeating_melee:none', eventInfo);
updateHands(eventInfo);
});
on('clicked:repeating_melee:left clicked:repeating_throwing:left clicked:repeating_ranged:left clicked:repeating_shields:left', (eventInfo) => {
workerLog('clicked:repeating_melee:left', eventInfo);
updateHands(eventInfo);
});
on('clicked:repeating_melee:right clicked:repeating_throwing:right clicked:repeating_ranged:right clicked:repeating_shields:right', (eventInfo) => {
workerLog('clicked:repeating_melee:right', eventInfo);
updateHands(eventInfo);
});
on('clicked:repeating_melee:both clicked:repeating_throwing:both clicked:repeating_ranged:both clicked:repeating_shields:both', (eventInfo) => {
workerLog('clicked:repeating_melee:both', eventInfo);
updateHands(eventInfo);
});
on('remove:repeating_melee remove:repeating_throwing remove:repeating_ranged remove:repeating_shields remove:repeating_armors', (eventInfo) => {
workerLog('remove repeating combat', eventInfo);
const key = Object.keys(eventInfo.removedInfo).find(key => key.endsWith('_itemId'));
if (key) {
const arr = key.split('_');
if (arr.length === 4) {
const itemId = eventInfo.removedInfo[key];
const attributes = [
'leftHand',
'rightHand'
];
getAttrs([...attributes], (values) => {
let leftHand = 0;
let rightHand = 0;
const leftHandExists = typeof values.leftHand !== 'undefined' && Number(values.leftHand) !== 0;
const rightHandExists = typeof values.rightHand !== 'undefined' && Number(values.rightHand) !== 0;
if (leftHandExists) {
leftHand = JSON.parse(values.leftHand);
}
if (rightHandExists) {
rightHand = JSON.parse(values.rightHand);
}
const set = {};
if (leftHand.itemId === itemId) {
set.leftHand = 0;
}
if (rightHand.itemId === itemId) {
set.rightHand = 0;
}
setAttrs(set);
});
}
}
});
on('change:leftHand change:rightHand change:armorDefense change:strengthBonus change:dexterityBonus', (eventInfo) => {
workerLog('change:leftHand change:rightHand change:armorDefense change:strengthBonus change:dexterityBonus', eventInfo);
updateCombat();
});
on('change:attackMod change:attackRangeMod change:defenseMod change:defenseRangeMod change:damageMod change:damageRangeMod change:advantage change:rollMod change:basicDefenseMod', (eventInfo) => {
workerLog('change:attackMod change:attackRangeMod change:defenseMod change:defenseRangeMod change:damageMod change:damageRangeMod change:advantage change:rollMod change:basicDefenseMod', eventInfo);
updateCombat();
});
on('change:repeating_armors', (eventInfo) => {
workerLog('change armors', eventInfo);
updateBasicDefense();
});
on('change:basicDefenseMod change:dexterityBonus change:advantage change:rollMod', (eventInfo) => {
workerLog('change:basicDefenseMod change:dexterityBonus change:advantage change:rollMod', eventInfo);
updateBasicDefense();
});
on('change:repeating_modifiers', (eventInfo) => {
workerLog('change:repeating_modifiers', { eventInfo });
const triggerName = eventInfo.triggerName;
const attributesWithTextMacro = ['rollMod', 'initiativeMod', 'attackMod', 'attackRangeMod', 'damageMod', 'damageRangeMod', 'defenseRangeMod', 'defenseMod', 'basicDefenseMod', 'strengthMod', 'strengthBonusMod', 'dexterityMod', 'dexterityBonusMod', 'constitutionMod', 'constitutionBonusMod', 'intelligenceMod', 'intelligenceBonusMod', 'charismaMod', 'charismaBonusMod'];
const modifierAtrributeNames = ['attribute', 'modifier', 'name', 'isActive'];
getSectionIDs('modifiers', function (idarray) {
const fullModifierAttributeNames = [];
for (let i = 0; i < idarray.length; i++) {
for (let a = 0; a < modifierAtrributeNames.length; a++) {
const attrName = 'repeating_modifiers_' + idarray[i] + '_' + modifierAtrributeNames[a];
fullModifierAttributeNames.push(attrName);
}
}
getAttrs(fullModifierAttributeNames, function (values) {
const triggerAttributeType = values[triggerName + '_attribute'];
let attrsToUpdate = {};
attrsToUpdate = calculateModifierForType(values, triggerAttributeType);
let previousValueToUpdate = {};
if (eventInfo.sourceAttribute.split('_')[3] === 'attribute') {
let prevAttribute = '';
if (eventInfo.previousValue === eventInfo.newValue) {
prevAttribute = 'rollMod';
}
else {
prevAttribute = String(eventInfo.previousValue);
}
previousValueToUpdate = calculateModifierForType(values, prevAttribute);
}
attrsToUpdate = { ...attrsToUpdate, ...previousValueToUpdate };
setAttrs(attrsToUpdate);
});
});
});
on('remove:repeating_modifiers', function (eventInfo) {
workerLog('remove:repeating_modifiers', { eventInfo });
const triggerName = eventInfo.triggerName === 'remove:repeating_modifiers' ? eventInfo.sourceAttribute : eventInfo.triggerName;
const attributesWithTextMacro = ['rollMod', 'initiativeMod', 'attackMod', 'attackRangeMod', 'damageMod', 'damageRangeMod', 'defenseRangeMod', 'defenseMod', 'basicDefenseMod', 'strengthMod', 'strengthBonusMod', 'dexterityMod', 'dexterityBonusMod', 'constitutionMod', 'constitutionBonusMod', 'intelligenceMod', 'intelligenceBonusMod', 'charismaMod', 'charismaBonusMod'];
const modifierAtrributeNames = ['attribute', 'modifier', 'name', 'isActive'];
getSectionIDs('modifiers', function (idarray) {
const fullModifierAttributeNames = [];
for (let i = 0; i < idarray.length; i++) {
for (let a = 0; a < modifierAtrributeNames.length; a++) {
const attrName = 'repeating_modifiers_' + idarray[i] + '_' + modifierAtrributeNames[a];
fullModifierAttributeNames.push(attrName);
}
}
getAttrs(fullModifierAttributeNames, function (values) {
const triggerAttributeType = triggerName + '_attribute' in eventInfo.removedInfo ? eventInfo.removedInfo[triggerName + '_attribute'] : 'rollMod';
let attrsToUpdate = {};
attrsToUpdate = calculateModifierForType(values, triggerAttributeType);
setAttrs(attrsToUpdate);
});
});
});
const getPriceText = (copperTotal, silverTotal, goldTotal) => {
if (goldTotal === 0 && silverTotal === 0 && copperTotal === 0) {
return '0 md';
}
goldTotal = goldTotal * 100;
silverTotal = silverTotal * 10;
const sum = goldTotal + silverTotal + copperTotal;
const texts = [];
if (sum < 0) {
texts.push('-');
}
if (sum > 99 || sum < -99) {
goldTotal = Math.abs(Math.trunc(sum / 100));
if (goldTotal !== 0) {
texts.push(`${goldTotal} zl`);
}
}
let mod = sum % 100;
if (mod > 9 || mod < 9) {
silverTotal = Math.abs(Math.trunc(mod / 10));
if (silverTotal !== 0) {
texts.push(`${silverTotal} st`);
}
mod = mod % 10;
}
if (mod) {
copperTotal = Math.abs(mod);
if (copperTotal !== 0) {
texts.push(`${copperTotal} md`);
}
}
return texts.join(' ');
};
const calculateLoad = (isSelfCarried, isBagCarried, isCoinsCarried, isChestCarried, loadSelf, loadBag, loadChest, loadCoins) => {
let load = 0;
if (Number(isSelfCarried)) {
load += !Number.isNaN(loadSelf) ? Number(loadSelf) : 0;
}
if (Number(isBagCarried)) {
load += !Number.isNaN(loadBag) ? Number(loadBag) : 0;
}
if (Number(isChestCarried)) {
load += !Number.isNaN(loadChest) ? Number(loadChest) : 0;
}
if (Number(isCoinsCarried)) {
load += !Number.isNaN(loadCoins) ? Number(loadCoins) : 0;
}
return load;
};
const updateLoad = () => {
getSectionIDs('items', (idArray) => {
const attributes = ['gold', 'silver', 'copper', 'isSelfCarried', 'isBagCarried', 'isCoinsCarried', 'isChestCarried'];
for (const id of idArray) {
attributes.push(`repeating_items_${id}_weightTotal`);
attributes.push(`repeating_items_${id}_placement`);
}
let loadCoins = 0;
let loadSelf = 0;
let loadBag = 0;
let loadChest = 0;
getAttrs(attributes, (values) => {
const gold = !Number.isNaN(values.gold) && Number(values.gold) >= 0 ? Number(values.gold) : 0;
const silver = !Number.isNaN(values.silver) && Number(values.silver) >= 0 ? Number(values.silver) : 0;
const copper = !Number.isNaN(values.copper) && Number(values.copper) >= 0 ? Number(values.copper) : 0;
loadCoins = (gold + silver + copper) * 0.01;
for (const id of idArray) {
const value = !Number.isNaN(values[`repeating_items_${id}_weightTotal`]) ? Number(values[`repeating_items_${id}_weightTotal`]) : 0;
if (values[`repeating_items_${id}_placement`] === 'self') {
loadSelf += value;
}
if (values[`repeating_items_${id}_placement`] === 'bag') {
loadBag += value;
}
if (values[`repeating_items_${id}_placement`] === 'chest') {
loadChest += value;
}
}
const load = calculateLoad(values.isSelfCarried, values.isBagCarried, values.isCoinsCarried, values.isChestCarried, loadSelf, loadBag, loadChest, loadCoins);
setAttrs({
loadSelf: loadSelf.toFixed(2),
loadBag: loadBag.toFixed(2),
loadChest: loadChest.toFixed(2),
loadCoins: loadCoins.toFixed(2),
load: load.toFixed(2)
});
});
});
};
const updateAmmunitionCount = (ammunitionId, count) => {
};
const updateThrowingCount = (itemId, count) => {
};
const updateWealth = () => {
getSectionIDs('items', (idArray) => {
const attributes = [];
attributes.push('gold');
attributes.push('silver');
attributes.push('copper');
for (const id of idArray) {
attributes.push(`repeating_items_${id}_goldTotal`);
attributes.push(`repeating_items_${id}_silverTotal`);
attributes.push(`repeating_items_${id}_copperTotal`);
}
let copperTotal = 0;
let silverTotal = 0;
let goldTotal = 0;
getAttrs(attributes, (values) => {
for (const key in values) {
const value = !Number.isNaN(values[key]) ? Number(values[key]) : 0;
if (key.includes('gold')) {
goldTotal += value;
}
if (key.includes('silver')) {
silverTotal += value;
}
if (key.includes('copper')) {
copperTotal += value;
}
}
const wealth = getPriceText(copperTotal.valueOf(), silverTotal.valueOf(), goldTotal.valueOf());
setAttrs({
goldTotal,
silverTotal,
copperTotal,
wealth
});
});
});
};
const updateSectionRow = (repeatingSectionName, item, settings) => {
const repAttributes = [];
getSectionIDs(repeatingSectionName.substr(10, repeatingSectionName.length - 1), (idArray) => {
for (const id of idArray) {
repAttributes.push(`${repeatingSectionName}_${id}_itemId`);
repAttributes.push(`${repeatingSectionName}_${id}_hands`);
}
getAttrs(repAttributes, values => {
const set = {};
const foundRowIds = idArray.filter(id => values[`${repeatingSectionName}_${id}_itemId`] === item.itemId);
const foundRowId = foundRowIds[0];
if (foundRowIds.length > 1) {
for (let i = 1; i < foundRowIds.length - 1; i++) {
removeRepeatingRow(`${repeatingSectionName}_${foundRowIds[i]}`);
}
}
let rowId = '';
if (foundRowId) {
rowId = foundRowId;
}
else {
rowId = generateRowID();
}
Object.keys(item).forEach(key => {
set[`${repeatingSectionName}_${rowId}_${key}`] = item[key] ?? '';
});
if (settings) {
set.settings = JSON.stringify({
...settings,
[`${repeatingSectionName.substr(10, repeatingSectionName.length - 1)}`]: true
});
}
if (foundRowId && values[`${repeatingSectionName}_${foundRowId}_hands`] !== Hands.None) {
setAttrs(set);
}
else {
setAttrs(set, { silent: true });
}
});
});
};
const removeSectionRow = (repeatingSectionName, itemId, settings) => {
const repAttributes = [];
getSectionIDs(repeatingSectionName.substr(10, repeatingSectionName.length - 1), (idArray) => {
for (const id of idArray) {
repAttributes.push(`${repeatingSectionName}_${id}_itemId`);
repAttributes.push(`${repeatingSectionName}_${id}_hands`);
}
getAttrs(repAttributes, values => {
const set = {};
const setSilent = {};
const foundAttr = Object.keys(values).find(key => values[key] === itemId);
if (foundAttr) {
const rowId = foundAttr.split('_')[2];
if (values[`${repeatingSectionName}_${rowId}_hands`] === Hands.Left) {
set.leftHand = 0;
}
if (values[`${repeatingSectionName}_${rowId}_hands`] === Hands.Right) {
set.rightHand = 0;
}
if (values[`${repeatingSectionName}_${rowId}_hands`] === Hands.Both) {
set.leftHand = 0;
set.rightHand = 0;
}
if (idArray.length === 1 && settings) {
set.settings = JSON.stringify({
...settings,
[`${repeatingSectionName.substr(10, repeatingSectionName.length - 1)}`]: false
});
}
if (Object.keys(setSilent).length) {
setAttrs(setSilent, { silent: true }, () => {
setAttrs(set);
});
}
else {
setAttrs(set);
}
removeRepeatingRow(`${repeatingSectionName}_${rowId}`);
}
});
});
};
const syncItem = (eventInfo, values, itemId) => {
const { changedAttribute, newValue, previousValue } = parseEvent(eventInfo);
const settings = JSON.parse(values.settings);
const onSelf = values.repeating_items_placement === 'self';
const targetRepeatingSections = [];
const isMelee = !!Number(values.repeating_items_isMelee);
const isThrowing = !!Number(values.repeating_items_isThrowing);
const isRanged = !!Number(values.repeating_items_isRanged);
const isShield = !!Number(values.repeating_items_isShield);
const isArmor = !!Number(values.repeating_items_isArmor);
const isAmmunition = !!Number(values.repeating_items_isAmmunition);
let item = { itemId };
let changedSectionOrPlacement = true;
switch (changedAttribute) {
case 'ismelee': {
targetRepeatingSections.push({ name: 'repeating_melee', update: !!Number(newValue) && onSelf, delete: !!Number(previousValue) && onSelf });
break;
}
case 'isthrowing': {
targetRepeatingSections.push({ name: 'repeating_throwing', update: !!Number(newValue) && onSelf, delete: !!Number(previousValue) && onSelf });
break;
}
case 'isranged': {
targetRepeatingSections.push({ name: 'repeating_ranged', update: !!Number(newValue) && onSelf, delete: !!Number(previousValue) && onSelf });
break;
}
case 'isshield': {
targetRepeatingSections.push({ name: 'repeating_shields', update: !!Number(newValue) && onSelf, delete: !!Number(previousValue) && onSelf });
break;
}
case 'isarmor': {
targetRepeatingSections.push({ name: 'repeating_armors', update: !!Number(newValue) && onSelf, delete: !!Number(previousValue) && onSelf });
break;
}
case 'isammunition': {
targetRepeatingSections.push({ name: 'repeating_ammunition', update: !!Number(newValue) && onSelf, delete: !!Number(previousValue) && onSelf });
break;
}
case 'placement': {
targetRepeatingSections.push({ name: 'repeating_melee', update: onSelf && isMelee, delete: !onSelf && isMelee });
targetRepeatingSections.push({ name: 'repeating_throwing', update: onSelf && isThrowing, delete: !onSelf && isThrowing });
targetRepeatingSections.push({ name: 'repeating_ranged', update: onSelf && isRanged, delete: !onSelf && isRanged });
targetRepeatingSections.push({ name: 'repeating_shields', update: onSelf && isShield, delete: !onSelf && isShield });
targetRepeatingSections.push({ name: 'repeating_armors', update: onSelf && isArmor, delete: !onSelf && isArmor });
targetRepeatingSections.push({ name: 'repeating_ammunition', update: onSelf && isAmmunition, delete: !onSelf && isAmmunition });
break;
}
default: {
if (changedAttribute !== 'placement') {
changedSectionOrPlacement = false;
}
targetRepeatingSections.push({ name: 'repeating_melee', update: onSelf && isMelee, delete: false });
targetRepeatingSections.push({ name: 'repeating_throwing', update: onSelf && isThrowing, delete: false });
targetRepeatingSections.push({ name: 'repeating_ranged', update: onSelf && isRanged, delete: false });
targetRepeatingSections.push({ name: 'repeating_shields', update: onSelf && isShield, delete: false });
targetRepeatingSections.push({ name: 'repeating_armors', update: onSelf && isArmor, delete: false });
targetRepeatingSections.push({ name: 'repeating_ammunition', update: onSelf && isAmmunition, delete: false });
}
}
if (targetRepeatingSections.length) {
const sectionsToUpdate = targetRepeatingSections.filter(section => section.update);
if (sectionsToUpdate.length) {
if (changedSectionOrPlacement) {
item = {
...item,
name: values.repeating_items_name ?? ' ',
isTwoHanded: values.repeating_items_isTwoHanded ?? 1,
attack: values.repeating_items_attack ?? 0,
damage: values.repeating_items_damage ?? 0,
defense: values.repeating_items_defense ?? 0,
damageType: values.repeating_items_damageType ?? ' ',
reach: values.repeating_items_reach ?? ' ',
reachRange: values.repeating_items_reachRange ?? ' ',
ammunitionId: values.repeating_items_ammunitionId ?? ' ',
ammunitionName: values.repeating_items_ammunitionName ?? ' ',
shieldQuality: values.repeating_items_shieldQuality ?? 0,
armorQuality: values.repeating_items_armorQuality ?? 0,
size: values.repeating_items_size ?? 'B'
};
}
else {
item = { ...item, [`${changedAttribute}`]: newValue };
}
sectionsToUpdate.forEach(section => {
updateSectionRow(section.name, item, settings);
});
}
const sectionsToDelete = targetRepeatingSections.filter(section => section.delete);
sectionsToDelete.forEach(section => {
removeSectionRow(section.name, itemId, settings);
});
}
};
on('change:repeating_items:gold change:repeating_items:silver change:repeating_items:copper', (eventInfo) => {
workerLog('calculate priceTotal change:repeating_items:gold change:repeating_items:silver change:repeating_items:copper', { eventInfo });
getAttrs(['repeating_items_count', 'repeating_items_copper', 'repeating_items_silver', 'repeating_items_gold'], (values) => {
const count = !Number.isNaN(values.repeating_items_count)
&& Number(values.repeating_items_count) > 0 ? Number(values.repeating_items_count) : 0;
const copper = !Number.isNaN(values.repeating_items_copper) ? Number(values.repeating_items_copper) : 0;
const silver = !Number.isNaN(values.repeating_items_silver) ? Number(values.repeating_items_silver) : 0;
const gold = !Number.isNaN(values.repeating_items_gold) ? Number(values.repeating_items_gold) : 0;
const repeating_items_copperTotal = count * copper;
const repeating_items_silverTotal = count * silver;
const repeating_items_goldTotal = count * gold;
const repeating_items_priceTotal = getPriceText(repeating_items_copperTotal.valueOf(), repeating_items_silverTotal.valueOf(), repeating_items_goldTotal.valueOf());
setAttrs({
repeating_items_copperTotal,
repeating_items_silverTotal,
repeating_items_goldTotal,
repeating_items_priceTotal
});
});
});
on('change:repeating_items:weight', (eventInfo) => {
workerLog('calculate weightTotal change:repeating_items:weight', eventInfo);
getAttrs(['repeating_items_count'], (values) => {
const count = !Number.isNaN(values.repeating_items_count) ? parseFloat(values.repeating_items_count) : 0;
const weight = !Number.isNaN(eventInfo.newValue) ? Number(eventInfo.newValue) : 0;
const repeating_items_weightTotal = Number((count * weight).toFixed(2));
setAttrs({ repeating_items_weightTotal });
});
});
on('change:isSelfCarried change:isBagCarried change:isCoinsCarried change:isChestCarried', (eventInfo) => {
workerLog('calculate load change:isSelfCarried change:isBagCarried change:isCoinsCarried change:isChestCarried', eventInfo);
updateLoad();
});
on('change:repeating_items:placement change:repeating_items:weightTotal', (eventInfo) => {
workerLog('calculate load change:repeating_items:placement change:repeating_items:weightTotal', eventInfo);
updateLoad();
});
on('change:repeating_items:count', (eventInfo) => {
workerLog('calculate priceTotal and weightTotal change:repeating_items:count', eventInfo);
getAttrs([
'repeating_items_itemId',
'repeating_items_ammunitionId',
'repeating_items_gold',
'repeating_items_silver',
'repeating_items_copper',
'repeating_items_weight',
'repeating_items_isThrowing',
'repeating_items_isAmmunition'
], (values) => {
const setSilent = {};
const count = !Number.isNaN(eventInfo.newValue) && Number(eventInfo.newValue) > 0 ? Number(eventInfo.newValue) : 0;
const itemId = values.repeating_items_itemId;
const ammunitionId = values.repeating_items_ammunitionId;
const isAmmunition = Number(values.repeating_items_isAmmunition);
const isThrowing = Number(values.repeating_items_isThrowing);
if (itemId && isThrowing) {
updateThrowingCount(itemId, count);
}
if (itemId && isAmmunition) {
updateAmmunitionCount(ammunitionId, count);
}
const copper = !Number.isNaN(values.repeating_items_copper) ? Number(values.repeating_items_copper) : 0;
const silver = !Number.isNaN(values.repeating_items_silver) ? Number(values.repeating_items_silver) : 0;
const gold = !Number.isNaN(values.repeating_items_gold) ? Number(values.repeating_items_gold) : 0;
const weight = !Number.isNaN(values.repeating_items_weight) ? Number(values.repeating_items_weight) : 0;
setSilent.repeating_items_copperTotal = count * copper;
setSilent.repeating_items_silverTotal = count * silver;
setSilent.repeating_items_goldTotal = count * gold;
setSilent.repeating_items_weightTotal = Number((count * weight).toFixed(2));
setSilent.repeating_items_priceTotal =
getPriceText(setSilent.repeating_items_copperTotal.valueOf(), setSilent.repeating_items_silverTotal.valueOf(), setSilent.repeating_items_goldTotal.valueOf());
setAttrs(setSilent, { silent: true });
});
});
on('change:gold change:silver change:copper', (eventInfo) => {
workerLog('change:gold change:silver change:copper', eventInfo);
updateWealth();
updateLoad();
});
on('change:repeating_items:priceTotal', (eventInfo) => {
workerLog('change:repeating_items:priceTotal', eventInfo);
updateWealth();
});
on('change:repeating_items:name change:repeating_items:placement change:repeating_items:isTwoHanded change:repeating_items:attack change:repeating_items:damage change:repeating_items:defense change:repeating_items:damageType change:repeating_items:reach change:repeating_items:reachRange change:repeating_items:shieldQuality change:repeating_items:armorQuality change:repeating_items:size change:repeating_items:isMelee change:repeating_items:isRanged change:repeating_items:isThrowing change:repeating_items:isShield change:repeating_items:isArmor change:repeating_items:isAmmunition', (eventInfo) => {
workerLog('sync item', eventInfo);
const { id } = parseEvent(eventInfo);
const attributes = [
'settings',
'repeating_items_itemId',
'repeating_items_name',
'repeating_items_placement',
'repeating_items_isTwoHanded',
'repeating_items_attack',
'repeating_items_damage',
'repeating_items_defense',
'repeating_items_damageType',
'repeating_items_reach',
'repeating_items_reachRange',
'repeating_items_shieldQuality',
'repeating_items_armorQuality',
'repeating_items_size',
'repeating_items_ammunitionId',
'repeating_items_ammunitionName',
'repeating_items_isMelee',
'repeating_items_isThrowing',
'repeating_items_isRanged',
'repeating_items_isShield',
'repeating_items_isArmor',
'repeating_items_isAmmunition'
];
getAttrs(attributes, (values) => {
let itemId = values.repeating_items_itemId;
if (!Number(itemId)) {
itemId = id;
setAttrs({ repeating_items_itemId: id }, { silent: true }, () => {
syncItem(eventInfo, values, itemId);
});
}
else {
syncItem(eventInfo, values, itemId);
}
});
});
on('change:repeating_items:ammunitionId', (eventInfo) => {
workerLog('change ammunitionId', eventInfo);
});
on('remove:repeating_items', (eventInfo) => {
workerLog('remove item', eventInfo);
const isMelee = Number(eventInfo.removedInfo[`${eventInfo.sourceAttribute}_isMelee`]);
const isThrowing = Number(eventInfo.removedInfo[`${eventInfo.sourceAttribute}_isThrowing`]);
const isRanged = Number(eventInfo.removedInfo[`${eventInfo.sourceAttribute}_isRanged`]);
const isShield = Number(eventInfo.removedInfo[`${eventInfo.sourceAttribute}_isShield`]);
const isArmor = Number(eventInfo.removedInfo[`${eventInfo.sourceAttribute}_isArmor`]);
const itemId = eventInfo.removedInfo[`${eventInfo.sourceAttribute}_itemId`];
if (isMelee) {
removeSectionRow('repeating_melee', itemId);
}
if (isThrowing) {
removeSectionRow('repeating_throwing', itemId);
}
if (isRanged) {
removeSectionRow('repeating_ranged', itemId);
}
if (isShield) {
removeSectionRow('repeating_shields', itemId);
}
if (isArmor) {
removeSectionRow('repeating_armors', itemId);
}
});
on('remove:repeating_melee remove:repeating_throwing remove:repeating_ranged remove:repeating_shields remove:repeating_armors', (eventInfo) => {
workerLog('remove section row', eventInfo);
const itemId = eventInfo.removedInfo[`${eventInfo.sourceAttribute}_itemId`];
removeSectionRow('repeating_items', itemId);
});
const experience_table = [
0,
550,
1100,
2200,
4400,
8500,
15000,
24000,
36000,
51000,
69000,
90000,
114000,
141000,
170000,
200000,
230000,
260000,
290000,
320000,
350000,
380000,
410000,
440000
];
const getCurrentLevel = (xp) => {
if (xp === experience_table[experience_table.length - 1]) {
return experience_table.length;
}
if (xp >= 0 && xp < experience_table[experience_table.length - 1]) {
for (let i = 0; i < experience_table.length; i++) {
if (xp >= experience_table[i] && xp < experience_table[i + 1]) {
return i + 1;
}
}
}
return -1;
};
const getXpForLevel = (level) => {
if (level === experience_table.length + 1) {
return experience_table[experience_table.length - 1];
}
if (level >= 1 && level <= experience_table.length) {
return experience_table[level - 1];
}
else {
return 0;
}
};
const getSkillPointsForLevel = (level, race, profession) => {
const raceBonus = {
'Barbar': 0,
'Trpaslík': 0,
'Elf': 0,
'Obr': 0,
'Gnóm': 0,
'Půlčík': 0,
'Člověk': 2,
'vlastni': 0,
'nevybrano': 0
};
const professionBonus = {
'Alchemist': 4,
'Ranger': 5,
'Thief': 8,
'Warrior': 3,
'Mage': 3,
'Priest': 3,
'vlastni': 0,
'nevybrano': 0
};
let skillPoints = 0;
const isfirstLevel = level === 1;
if (isfirstLevel) {
skillPoints = 3 + Number(raceBonus[race]);
}
else {
skillPoints = 3 + Number(raceBonus[race]) + (Number(factorialSum(level)) - 1) * Number(professionBonus[profession]) + (level - 1) * Number(raceBonus[race]);
}
return skillPoints;
};
on('change:xp', (eventInfo) => {
workerLog('change:xp', { eventInfo });
const xp = Number(eventInfo.newValue);
const level = getCurrentLevel(xp);
if (level !== -1) {
const xp_max = getXpForLevel(level + 1);
setAttrs({ xp_max, level }, { silent: true });
}
});
on('change:level', (eventInfo) => {
workerLog('change:level', { eventInfo });
getAttrs(['availableSkillPoints', 'race', 'selectedProfession', 'level', 'allocatedPoints'], function (values) {
const level = Number(eventInfo.newValue);
const set = {};
if (level >= 1 && level <= 24) {
const xp = getXpForLevel(level);
const xp_max = getXpForLevel(level + 1);
set.xp = xp;
set.xp_max = xp_max;
}
const previousSKillPointTotal = Number(values.availableSkillPoints) + Number(values.allocatedPoints);
let previousRace = values.race;
previousRace = previousRace === '' ? 'nevybrano' : previousRace;
let previousProfession = values.selectedProfession;
previousProfession = previousProfession === '' ? 'nevybrano' : previousProfession;
const previousLevel = Number(eventInfo.sourceAttribute === 'level' ? 'previousValue' in eventInfo ? eventInfo.previousValue : '1' : values.level);
const previousSkillPointRulebookTotal = Number(getSkillPointsForLevel(previousLevel, previousRace, previousProfession));
workerLog('previousSKillPointTotal ', previousSKillPointTotal, ' previousRace ', previousRace, ' previousProfession ', previousProfession, ' previousLevel ', previousLevel, ' previousSkillPointRulebookTotal ', previousSkillPointRulebookTotal);
const playerAddedBonusPoints = Number(previousSKillPointTotal) - Number(previousSkillPointRulebookTotal);
const skillPoints = Number(getSkillPointsForLevel(Number(values.level), values.race === '' ? 'nevybrano' : values.race, values.selectedProfession === '' ? 'nevybrano' : values.selectedProfession));
const availableSkillPoints = skillPoints - Number(values.allocatedPoints) + playerAddedBonusPoints;
workerLog('playerAddedBonusPoints', playerAddedBonusPoints, 'currentLevelPoints', skillPoints, 'availableSkillPoints', availableSkillPoints, 'allocatedPoints', values.allocatedPoints);
set.availableSkillPoints = availableSkillPoints;
setAttrs(set);
});
});
function factorialSum(n) {
if (n < 0)
return;
if (n < 2)
return 1;
return n + Number(factorialSum(n - 1));
}
const npcAttributes = ['npcStrength', 'npcDexterity', 'npcConstitution', 'npcIntelligence', 'npcCharisma'];
const npcModifiers = ['npcRollMod', 'npcInitiativeMod', 'npcAttackMod', 'npcDamageMod', 'npcDefenseMod', 'npcBasicDefenseMod', 'npcStrengthMod', 'npcStrengthBonusMod', 'npcDexterityMod', 'npcDexterityBonusMod', 'npcConstitutionMod', 'npcConstitutionBonusMod', 'npcIntelligenceMod', 'npcIntelligenceBonusMod', 'npcCharismaMod', 'npcCharismaBonusMod'];
const npcModifierAtrributeNames = ['attribute', 'modifier', 'name', 'isActive'];
npcAttributes.forEach((attribute) => {
on(`change:${attribute}`, (eventInfo) => {
workerLog(`change:${attribute}`, eventInfo);
const set = {};
set[`${attribute}Bonus`] = calculateAttributeBonus(String(eventInfo.newValue), '0');
setAttrs(set);
});
});
const AttributeNames = {
Charisma: 'CHA',
Constitution: 'ODO',
Dexterity: 'OBR',
Intelligence: 'INT',
Strength: 'SIL'
};
const CastingAttributesTexts = {
npcCharismaBonus: 'CHA',
npcConstitutionBonus: 'ODO',
npcDexterityBonus: 'OBR',
npcIntelligenceBonus: 'INT',
npcStrengthBonus: 'SIL'
};
const ManaTypes = {
adrenalin: 'Adrenalin',
goodwill: 'Přízeň',
mana: 'Mana',
mentalStrength: 'Duševní síla'
};
const npcAbilityBonusNames = {
'SIL': 'npcStrengthBonus',
'OBR': 'npcDexterityBonus',
'ODO': 'npcConstitutionBonus',
'INT': 'npcIntelligenceBonus',
'CHA': 'npcCharismaBonus'
};
const defaultNpcPrintAbilityMacros = {
'Warrior': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}{{Adrenalin=@{mana}}}{{Dodatečný adrenalin=@{additionalMana}}}{{Použití=@{usage}}}{{Vyžaduje=@{prerequisite}}}',
'Ranger': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}{{Duševní síla=@{mana}}}{{Dodatečná duš. síla=@{additionalMana}}}{{Dosah=@{range}}}{{Rozsah=@{target}}}{{Trvání=@{duration}}}{{Vyvolání=@{castingTime}}}{{Obtížnost=@{difficulty}}}{{Vyžaduje=@{prerequisite}}}{{Sesílací dovednost@{selectedProfessionSkill}}}',
'Alchemist': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}{{Mana=@{mana}}}{{Dodatečná mana=@{additionalMana}}}{{Suroviny=@{resources}}}{{Základ=@{base}}}{{Trvání=@{duration}}}{{Vyvolání=@{castingTime}}}{{Četnost=@{frequency}}}{{Použití=@{usage}}}{{Obtížnost=@{difficulty}}}{{Vyžaduje=@{prerequisite}}}{{Sesílací dovednost@{selectedProfessionSkill}}}',
'Mage': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}} {{Mana=@{mana}}}{{Dodatečná mana=@{additionalMana}}}{{Dosah=@{range}}}{{Rozsah=@{target}}}{{Trvání=@{duration}}}{{Vyvolání=@{castingTime}}}{{Obtížnost=@{difficulty}}}{{Vyžaduje=@{prerequisite}}}{{Sesílací dovednost@{selectedProfessionSkill}}}',
'Priest': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}{{Přízeň=@{mana}}}{{Dodatečná přízeň=@{additionalMana}}}{{Dosah=@{range}}}{{Rozsah=@{target}}}{{Trvání=@{duration}}}{{Vzývání=@{castingTime}}}{{Obtížnost=@{difficulty}}}{{Vyžaduje=@{prerequisite}}}{{Sesílací dovednost@{selectedProfessionSkill}}}',
'vlastni': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}}{{Mana=@{mana}}}{{Dodatečná mana=@{additionalMana}}}{{Suroviny=@{resources}}}{{Základ=@{base}}}{{Trvání=@{duration}}}{{Vyvolání=@{castingTime}}}{{Četnost=@{frequency}}}{{Použití=@{usage}}}{{Obtížnost=@{difficulty}}}{{Vyžaduje=@{prerequisite}}}{{Sesílací dovednost@{selectedProfessionSkill}}}',
'nevybrano': '@{whisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{description=@{description}}} {{Mana=@{mana}}}{{Dodatečná mana=@{additionalMana}}}{{Dosah=@{range}}}{{Rozsah=@{target}}}{{Trvání=@{duration}}}{{Vyvolání=@{castingTime}}}{{Obtížnost=@{difficulty}}}{{Vyžaduje=@{prerequisite}}}{{Sesílací dovednost@{selectedProfessionSkill}}}'
};
const recaluclateNpcActiveAbilityMacro = (activeAbilityValues, skillNames, id) => {
workerLog('recaluclateActiveAbilityMacro');
workerLog('activeAbilityValues', activeAbilityValues);
workerLog('id', id);
const abilityPrefix = id != null ? 'repeating_npcactiveabilities_' + id + '_' : 'repeating_npcactiveabilities_';
let macro = '@{whisper}&{template:custom}{{title=@{' + abilityPrefix + 'name}}}{{subtitle=@{character_name}}}';
workerLog('macro', macro);
const castingAttribute = activeAbilityValues[abilityPrefix + 'castingAttribute'] ? activeAbilityValues[abilityPrefix + 'castingAttribute'] : null;
const secondaryCastingAttribute = activeAbilityValues[abilityPrefix + 'secondaryCastingAttribute'] ? activeAbilityValues[abilityPrefix + 'secondaryCastingAttribute'] : null;
workerLog('castingAttribute', castingAttribute);
const selectedProfessionSkill = activeAbilityValues[abilityPrefix + 'selectedProfessionSkill'] ? activeAbilityValues[abilityPrefix + 'selectedProfessionSkill'] : null;
const selectedSecondaryProfessionSkill = activeAbilityValues[abilityPrefix + 'secondaryRoll'] ? activeAbilityValues[abilityPrefix + 'secondaryRoll'] : null;
const difficulty = activeAbilityValues[abilityPrefix + 'damage'] ? activeAbilityValues[abilityPrefix + 'damage'] : null;
const damage = activeAbilityValues[abilityPrefix + 'damage'] ? activeAbilityValues[abilityPrefix + 'damage'] : null;
const damageType = activeAbilityValues[abilityPrefix + 'damageType'] ? activeAbilityValues[abilityPrefix + 'damageType'] : null;
const secondaryRollAgainst = activeAbilityValues[abilityPrefix + 'secondaryRollAgainst'] ? activeAbilityValues[abilityPrefix + 'secondaryRollAgainst'] : null;
const isMulticast = activeAbilityValues[abilityPrefix + 'isMulticast'] && (activeAbilityValues[abilityPrefix + 'isMulticast'] === true || activeAbilityValues[abilityPrefix + 'isMulticast'] === 'on') ? true : false;
workerLog('selectedProfessionSkill', selectedProfessionSkill);
workerLog('skillNames', skillNames);
workerLog('selectedProfessionSkill', selectedProfessionSkill);
workerLog('selectedSecondaryProfessionSkill', selectedSecondaryProfessionSkill);
const skillNameArray = [];
const skillNameArraySecondaryRoll = [];
for (const [key, value] of Object.entries(skillNames)) {
if (value === selectedProfessionSkill && selectedProfessionSkill != null) {
skillNameArray.push(key);
}
if (value === selectedSecondaryProfessionSkill && selectedSecondaryProfessionSkill != null) {
skillNameArraySecondaryRoll.push(key);
}
}
workerLog('skillNameArray', skillNameArray);
workerLog('skillNameArraySecondaryRoll', skillNameArraySecondaryRoll);
const multicastValue = '?{Vícenásobné sesílání}';
if (isMulticast) {
macro += '?{Vícenásobné sesílání|1|2|3|4|5|6|7|8|9|10|11|12}';
macro += '{{manaRoll=Mana: @{mana} + @{additionalMana} = [[@{mana} + @{additionalManaNum} * ' + multicastValue + ']]}}';
}
else {
macro += '{{manaRoll=Mana: @{mana} + @{additionalMana}}}';
}
if (skillNameArray.length > 0 || castingAttribute) {
macro += '{{roll=@{selectedProfessionSkill} ';
macro += '[[1d10';
macro += castingAttribute ? '+(@{' + npcAbilityBonusNames[castingAttribute] + '})' : '';
macro += skillNameArray.length > 0 ? '+(@{repeating_npcskills_' + skillNameArray[0].split('_')[2] + '_skillLevel' + '})' : '';
macro += '+([[@{rollMod}+@{advantage}]])]]}}';
const multiDiffString = isMulticast ? ' * ' + multicastValue : '';
macro += difficulty != null ? '{{difficulty=vs. obtížnost [[@{difficulty} + (@{additionalDifficulty}' + multiDiffString + ')]]}}' : '';
macro += selectedSecondaryProfessionSkill === selectedProfessionSkill && secondaryRollAgainst != null ? 'vs. {{secondaryRollAgainstSame=@{secondaryRollAgainst}}}' : '';
workerLog('macro', macro);
macro += '{{formula=(1k10';
macro += castingAttribute ? ' + ' + castingAttribute : '';
macro += skillNameArray.length > 0 ? ' + ' + '@{repeating_npcskills_' + skillNameArray[0].split('_')[2] + '_name' + '}' : '';
macro += ' + Modifikátory)}}';
macro += '{{modifier=@{rollModText}@{advantageText}}}';
workerLog('macro', macro);
}
if (damage) {
let editedDamage = damage.replace('k', 'd');
if (isMulticast) {
const regexp = /[0-9]*d/;
const editedDamageRegex = regexp.exec(editedDamage);
editedDamageRegex?.forEach(regMatch => {
editedDamage = editedDamage.replace(regMatch, '(' + regMatch.substring(0, regMatch.length - 1) + '*' + multicastValue + ')d');
});
}
macro += '{{damage=[[' + editedDamage + ']]';
macro += damageType != null ? ' @{damageType}' : '';
macro += '}}';
}
if (selectedSecondaryProfessionSkill != selectedProfessionSkill && selectedSecondaryProfessionSkill != null) {
macro += '{{secondaryRoll=@{secondaryRoll} ';
macro += '[[1d10';
macro += secondaryCastingAttribute ? '+(@{' + npcAbilityBonusNames[secondaryCastingAttribute] + '})' : '';
macro += skillNameArraySecondaryRoll.length > 0 ? '+(@{repeating_npcskills_' + skillNameArraySecondaryRoll[0].split('_')[2] + '_skillLevel' + '})' : '';
macro += '+([[@{rollMod}+@{advantage}]])]]}}';
macro += secondaryRollAgainst != null ? '{{secondaryRollAgainst=@{secondaryRollAgainst}}}' : '';
workerLog('secondaryCastingAttribute', secondaryCastingAttribute);
macro += '{{secondaryFormula=(1k10';
macro += secondaryCastingAttribute ? ' + ' + secondaryCastingAttribute : '';
macro += skillNameArraySecondaryRoll.length > 0 ? ' + ' + '@{repeating_npcskills_' + skillNameArraySecondaryRoll[0].split('_')[2] + '_name' + '}' : '';
macro += ' + Modifikátory)}}';
macro += '{{secondaryModifier=@{rollModText}@{advantageText}}}';
}
workerLog('macro final return', macro);
return macro;
};
const addNpcAbilities = (abilityNames) => {
getSectionIDs('npcactiveabilities', function (idarray) {
const attributeArr = [];
for (let i = 0; i < idarray.length; i++) {
const id = idarray[i];
const existingAbilityName = 'repeating_npcactiveabilities_' + idarray[i] + '_name';
attributeArr.push(existingAbilityName);
}
getSectionIDs('npcskills', function (ids) {
for (let i = 0; i < ids.length; i++) {
attributeArr.push('repeating_npcskills_' + ids[i] + '_name');
}
attributeArr.push('selectedProfession');
attributeArr.push('level');
getAttrs(attributeArr, function (values) {
const skillNames = {};
for (const [key, value] of Object.entries(values)) {
if (key.includes('repeating_npcskills_')) {
skillNames[key] = value;
}
}
const existingAbilities = Object.values(values);
const selectedProfession = values.selectedProfession;
const level = values.level;
const newAbilityAttrs = {};
abilityNames.forEach(abilityName => {
if (!existingAbilities.includes(abilityName)) {
console.log('adding ', abilityName);
const currentAbility = Abilities.filter(function (e) {
return e.name == abilityName;
});
console.log('CurrentAbility ', currentAbility);
const newRowId = generateRowID();
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_name'] = 'name' in currentAbility[0].data ? currentAbility[0].data.name : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_mana'] = 'cost' in currentAbility[0].data ? currentAbility[0].data.cost : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_additionalMana'] = 'additionalCost' in currentAbility[0].data ? currentAbility[0].data.additionalCost : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_additionalManaNum'] = 'additionalCostNum' in currentAbility[0].data ? currentAbility[0].data.additionalCostNum : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_resources'] = 'materialCost' in currentAbility[0].data ? currentAbility[0].data.materialCost : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_base'] = 'base' in currentAbility[0].data ? currentAbility[0].data.base : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_range'] = 'range' in currentAbility[0].data ? currentAbility[0].data.range : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_target'] = 'target' in currentAbility[0].data ? currentAbility[0].data.target : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_duration'] = 'duration' in currentAbility[0].data ? currentAbility[0].data.duration : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_castingTime'] = 'castingTime' in currentAbility[0].data ? currentAbility[0].data.castingTime : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_frequency'] = 'frequency' in currentAbility[0].data ? currentAbility[0].data.frequency : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_usage'] = 'usage' in currentAbility[0].data ? currentAbility[0].data.usage : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_difficulty'] = 'difficulty' in currentAbility[0].data ? currentAbility[0].data.difficulty : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_additionalDifficulty'] = 'additionalDifficulty' in currentAbility[0].data ? currentAbility[0].data.additionalDifficulty : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_prerequisite'] = 'prerequisite' in currentAbility[0].data ? currentAbility[0].data.prerequisite : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_selectedProfessionSkill'] = 'selectedProfessionSkill' in currentAbility[0].data ? currentAbility[0].data.selectedProfessionSkill : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_castingAttribute'] = 'castingAttribute' in currentAbility[0].data ? currentAbility[0].data.castingAttribute : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_description'] = 'description' in currentAbility[0].data ? currentAbility[0].data.description : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_printText'] = 'printText' in currentAbility[0].data ? currentAbility[0].data.printText : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_isEditing'] = '0';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_secondaryRoll'] = 'secondaryRoll' in currentAbility[0].data ? currentAbility[0].data.secondaryRoll : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_secondaryCastingAttribute'] = 'secondaryCastingAttribute' in currentAbility[0].data ? currentAbility[0].data.secondaryCastingAttribute : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_secondaryRollAgainst'] = 'secondaryRollAgainst' in currentAbility[0].data ? currentAbility[0].data.secondaryRollAgainst : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_damage'] = 'damage' in currentAbility[0].data ? currentAbility[0].data.damage : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_damageType'] = 'damageType' in currentAbility[0].data ? currentAbility[0].data.damageType : '';
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_customMacro'] = false;
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_obtainedLevel'] = level;
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_isMulticast'] = 'isMulticast' in currentAbility[0].data ? currentAbility[0].data.isMulticast : false;
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_macro'] = recaluclateNpcActiveAbilityMacro(newAbilityAttrs, skillNames, newRowId);
workerLog('new ability macro', newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_macro']);
newAbilityAttrs['repeating_npcactiveabilities_' + newRowId + '_printMacro'] = defaultNpcPrintAbilityMacros[selectedProfession];
}
});
setAttrs(newAbilityAttrs, { 'silent': true });
});
});
});
};
on('clicked:addNpcActiveAbility', (eventInfo) => {
workerLog('clicked:addActiveAbility', { eventInfo });
getAttrs(['addActiveAbilitySelection', 'addActiveAbilityProfession', 'addActiveAbility'], function (values) {
console.log('Profession: ', values.addActiveAbilityProfession);
console.log('Ability: ', values.addActiveAbility);
console.log('AbilitySelection: ', values.addActiveAbilitySelection);
const ability = [];
ability.push(values.addActiveAbilitySelection);
if (values.addActiveAbilitySelection != '-') {
addNpcAbilities(ability);
}
});
});
on('change:repeating_npcactiveabilities', (eventInfo) => {
workerLog('change:repeating_abilities', { eventInfo });
const attributeArr = [];
const id = eventInfo.sourceAttribute.split('_')[2];
getSectionIDs('npcskills', function (ids) {
for (let i = 0; i < ids.length; i++) {
attributeArr.push('repeating_npcskills_' + ids[i] + '_name');
}
attributeArr.push('selectedProfession');
attributeArr.push('repeating_npcactiveabilities_' + id + '_selectedProfessionSkill');
attributeArr.push('repeating_npcactiveabilities_' + id + '_castingAttribute');
attributeArr.push('repeating_npcactiveabilities_' + id + '_secondaryRoll');
attributeArr.push('repeating_npcactiveabilities_' + id + '_secondaryCastingAttribute');
attributeArr.push('repeating_npcactiveabilities_' + id + '_secondaryRollAgainst');
attributeArr.push('repeating_npcactiveabilities_' + id + '_damage');
attributeArr.push('repeating_npcactiveabilities_' + id + '_damageType');
attributeArr.push('repeating_npcactiveabilities_' + id + '_customMacro');
attributeArr.push('repeating_npcactiveabilities_' + id + '_isMulticast');
getAttrs(attributeArr, function (values) {
const skillNames = {};
for (const [key, value] of Object.entries(values)) {
if (key.includes('repeating_npcskills_')) {
skillNames[key] = value;
}
}
const newAbilityAttrs = {};
workerLog('customMacro ', values['repeating_npcactiveabilities_' + id + '_customMacro']);
if (values['repeating_npcactiveabilities_' + id + '_customMacro'] != 'on') {
newAbilityAttrs['repeating_npcactiveabilities_' + id + '_macro'] = recaluclateNpcActiveAbilityMacro(values, skillNames, id);
workerLog('change:repeating_npcabilities macro', { newAbilityAttrs });
setAttrs(newAbilityAttrs, { 'silent': true });
}
});
});
});
on('clicked:addNpcSkill', (eventInfo) => {
workerLog('clicked:addNpcSkill', { eventInfo });
getAttrs([
'npcSelectedSkillType',
'npcSelectedGeneralSkill',
'npcSelectedWarriorSkill',
'npcSelectedRangerSkill',
'npcSelectedAlchemistSkill',
'npcSelectedMageSkill',
'npcSelectedThiefSkill',
'npcSelectedClericSkill'
], (values) => {
const skillType = values.npcSelectedSkillType;
let skillName = 'own';
switch (skillType) {
case 'general': {
skillName = values.npcSelectedGeneralSkill;
break;
}
case 'warrior': {
skillName = values.npcSelectedWarriorSkill;
break;
}
case 'ranger': {
skillName = values.npcSelectedRangerSkill;
break;
}
case 'alchemist': {
skillName = values.npcSelectedAlchemistSkill;
break;
}
case 'mage': {
skillName = values.npcSelectedMageSkill;
break;
}
case 'thief': {
skillName = values.npcSelectedThiefSkill;
break;
}
case 'cleric': {
skillName = values.npcSelectedClericSkill;
break;
}
}
skillName = skillName === 'own' ? '' : skillName;
getSectionIDs('npcskills', (idarray) => {
const skillsAttributes = [];
idarray.forEach(id => {
skillsAttributes.push(`repeating_npcskills_${id}_name`);
});
getAttrs(skillsAttributes, (skillValues) => {
const found = Object.values(skillValues).find(value => value.toLowerCase() === skillName.toLowerCase());
if (!found) {
const foundSkill = Skills.find(skill => skill.data.name.toLowerCase() === skillName.toLowerCase())
|| { data: { name: '', description: '', printText: '', macro: '', isKnowledgeBased: false, isProfessionBased: false, baseAttributes: [] } };
const set = {};
const rowId = generateRowID();
const defaultMacro = '@{npcWhisper}&{template:custom}{{title=skillName}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=skillName [[1d10+(@{attributeBonus})+(@{skillLevel})+([[(@{npcRollMod})+(@{npcAdvantage})]]) ]]}} {{modifier=@{npcRollModText}@{npcAdvantageText}}} {{formula=(1k10 + attributeBonusName + skillName + Modifikátory)}}';
set[`repeating_npcskills_${rowId}_name`] = foundSkill.data.name;
set[`repeating_npcskills_${rowId}_description`] = foundSkill.data.description;
set[`repeating_npcskills_${rowId}_isKnowledgeBased`] = Number(foundSkill.data.isKnowledgeBased);
set[`repeating_npcskills_${rowId}_isProfessionBased`] = Number(foundSkill.data.isProfessionBased);
set[`repeating_npcskills_${rowId}_printText`] = foundSkill.data.printText;
set[`repeating_npcskills_${rowId}_macro`] = defaultMacro;
set[`repeating_npcskills_${rowId}_skillLevel`] = 0;
Object.values(foundSkill?.data.baseAttributes).forEach(attr => {
set[`repeating_npcskills_${rowId}_is${capitalizeFirstLetter(attr)}`] = 1;
});
Object.entries(Attributes).forEach(entry => {
const [key, value] = entry;
let macroString = defaultMacro;
macroString = macroString.replaceAll('skillName', foundSkill.data.name);
macroString = macroString.replaceAll('attributeBonusName', AttributeNames[key]);
macroString = macroString.replaceAll('attributeBonus', `npc${key}Bonus`);
set[`repeating_npcskills_${rowId}_roll${key}`] = macroString;
});
setAttrs(set);
}
});
});
});
});
const calculateNpcModifierForType = (values, type) => {
const triggerAttributeType = type;
const attributeTypeSections = [];
for (const [key, value] of Object.entries(values)) {
if (value === triggerAttributeType) {
const id = key.split('_');
if (values[`repeating_npcmodifiers_${id[2]}_isActive`] === '1') {
attributeTypeSections.push(id[2]);
}
}
}
let newValue = 0;
let newTextValue = '';
const isTextAttribute = npcModifiers.includes(triggerAttributeType);
for (const attributeType of attributeTypeSections) {
newValue += Number(values[`repeating_npcmodifiers_${attributeType}_modifier`]);
if (isTextAttribute) {
const modifierValue = Number(values[`repeating_npcmodifiers_${attributeType}_modifier`]);
const signSymbol = modifierValue >= 0 ? '+' : '';
newTextValue += ` ${values[`repeating_npcmodifiers_${attributeType}_name`]} ${signSymbol}${modifierValue}\n`;
}
}
const set = {};
set[triggerAttributeType] = newValue;
if (isTextAttribute) {
set[triggerAttributeType + 'Text'] = newTextValue;
}
return set;
};
on('change:repeating_npcmodifiers', (eventInfo) => {
workerLog('change:repeating_npcmodifiers', { eventInfo });
const { id } = parseEvent(eventInfo);
getSectionIDs('npcmodifiers', (idarray) => {
const fullModifierAttributeNames = [];
for (const modifierId of idarray) {
for (const attributeName of npcModifierAtrributeNames) {
fullModifierAttributeNames.push(`repeating_npcmodifiers_${modifierId}_${attributeName}`);
}
}
getAttrs(fullModifierAttributeNames, (values) => {
const triggerAttributeType = values[`repeating_npcmodifiers_${id}_attribute`];
let set = calculateNpcModifierForType(values, triggerAttributeType);
let previousValueToUpdate = {};
if (eventInfo.sourceAttribute.split('_')[3] === 'attribute') {
let prevAttribute = '';
if (eventInfo.previousValue === eventInfo.newValue) {
prevAttribute = 'npcRollMod';
}
else {
prevAttribute = String(eventInfo.previousValue);
}
previousValueToUpdate = calculateNpcModifierForType(values, prevAttribute);
}
set = { ...set, ...previousValueToUpdate };
setAttrs(set);
});
});
});
on('remove:repeating_npcmodifiers', function (eventInfo) {
workerLog('remove:repeating_npcmodifiers', { eventInfo });
const removedAttribute = eventInfo.removedInfo[`${eventInfo.sourceAttribute}_attribute`] || 'npcRollMod';
getSectionIDs('npcModifiers', (idarray) => {
const fullModifierAttributeNames = [];
for (const id of idarray) {
for (const attributeName of npcModifierAtrributeNames) {
fullModifierAttributeNames.push(`repeating_npcmodifiers_${id}_${attributeName}`);
}
}
getAttrs(fullModifierAttributeNames, (values) => {
const set = calculateNpcModifierForType(values, removedAttribute);
setAttrs(set);
});
});
});
on('change:npcAdvantage', (eventInfo) => {
workerLog('change:npcAdvantage', { eventInfo });
const set = {};
switch (Number(eventInfo.newValue)) {
case 0:
set.npcAdvantageText = '';
break;
case 5:
set.npcAdvantageText = 'Výhoda +5\n';
break;
case -5:
set.npcAdvantageText = 'Nevýhoda -5\n';
break;
}
setAttrs(set);
});
const addSkills = (skillNames) => {
getSectionIDs('skills', function (idarray) {
const skillNameArr = [];
for (let i = 0; i < idarray.length; i++) {
const existingSkillName = 'repeating_skills_' + idarray[i] + '_name';
skillNameArr.push(existingSkillName);
}
skillNameArr.push('selectedProfession');
getAttrs(skillNameArr, function (values) {
const existingSkills = Object.values(values);
const selectedProfession = values.selectedProfession;
const newSkillAttrs = {};
skillNames.forEach(skillName => {
if (!existingSkills.includes(skillName)) {
console.log('adding ', skillName);
const currentSkill = Skills.filter(function (e) {
return e.name == skillName;
});
console.log('CurrentSkill ', currentSkill);
const newRowId = generateRowID();
newSkillAttrs['repeating_skills_' + newRowId + '_name'] = currentSkill[0].data.name;
newSkillAttrs['repeating_skills_' + newRowId + '_isKnowledgeBased'] = currentSkill[0].data.isKnowledgeBased ? 1 : 0;
newSkillAttrs['repeating_skills_' + newRowId + '_isProfessionBased'] = currentSkill[0].data.isProfessionBased ? 1 : 0;
newSkillAttrs['repeating_skills_' + newRowId + '_printText'] = currentSkill[0].data.printText;
newSkillAttrs['repeating_skills_' + newRowId + '_description'] = currentSkill[0].data.description;
newSkillAttrs['repeating_skills_' + newRowId + '_macro'] = currentSkill[0].data.macro;
newSkillAttrs['repeating_skills_' + newRowId + '_skillPoints'] = 0;
newSkillAttrs['repeating_skills_' + newRowId + '_isEditing'] = 0;
const professionStartSkills = StartingSkills[selectedProfession];
workerLog('professionStartSkills', professionStartSkills);
if (currentSkill[0].data.isProfessionBased || professionStartSkills.includes(currentSkill[0].data.name)) {
newSkillAttrs['repeating_skills_' + newRowId + '_skillBonus'] = 3;
newSkillAttrs['repeating_skills_' + newRowId + '_skillLevel'] = 3;
}
else {
newSkillAttrs['repeating_skills_' + newRowId + '_skillBonus'] = 0;
newSkillAttrs['repeating_skills_' + newRowId + '_skillLevel'] = 0;
}
for (const [key, value] of Object.entries(Attributes)) {
const attrName = 'is' + capitalizeFirstLetter(key);
const attrComputedName = 'repeating_skills_' + newRowId + '_' + attrName;
newSkillAttrs[attrComputedName] = 0;
}
for (let a = 0; a < currentSkill[0].data.baseAttributes.length; a++) {
const attrName = 'is' + capitalizeFirstLetter(currentSkill[0].data.baseAttributes[a]);
const attrComputedName = 'repeating_skills_' + newRowId + '_' + attrName;
newSkillAttrs[attrComputedName] = 1;
}
const AttributeNames = {
Charisma: 'CHA',
Constitution: 'ODO',
Dexterity: 'OBR',
Intelligence: 'INT',
Strength: 'SIL'
};
const nameAttr = currentSkill[0].data.name;
const macroAttr = currentSkill[0].data.macro;
for (const [key, value] of Object.entries(Attributes)) {
let macroString = macroAttr;
macroString = macroString.replaceAll('skillName', nameAttr);
macroString = macroString.replaceAll('attributeBonusName', AttributeNames[key]);
macroString = macroString.replaceAll('attributeBonus', value + 'Bonus');
macroString = macroString.replaceAll('attributeMod', '@{' + key.toLowerCase() + 'BonusModText}');
const attrComputedName = 'repeating_skills_' + newRowId + '_roll' + key;
newSkillAttrs[attrComputedName] = macroString;
}
}
});
setAttrs(newSkillAttrs);
});
});
};
function replaceSkillRollTemplate(rowId) {
const AttributeNames = {
Charisma: 'CHA',
Constitution: 'ODO',
Dexterity: 'OBR',
Intelligence: 'INT',
Strength: 'SIL'
};
const nameAttr = 'repeating_skills_' + rowId + '_name';
const macroAttr = 'repeating_skills_' + rowId + '_macro';
const attrsToUpdate = {};
getAttrs(['repeating_skills_' + rowId + '_name', 'repeating_skills_' + rowId + '_macro'], function (values) {
for (const [key, value] of Object.entries(Attributes)) {
let macroString = values[macroAttr];
macroString = macroString.replaceAll('skillName', values[nameAttr]);
macroString = macroString.replaceAll('attributeBonusName', AttributeNames[key]);
macroString = macroString.replaceAll('attributeBonus', value + 'Bonus');
macroString = macroString.replaceAll('attributeMod', '@{' + key.toLowerCase() + 'BonusModText}');
const attrComputedName = 'repeating_skills_' + rowId + '_roll' + key;
attrsToUpdate[attrComputedName] = macroString;
}
setAttrs(attrsToUpdate);
});
}
on('clicked:addSkill', (eventInfo) => {
workerLog('clicked:addSkill', { eventInfo });
getAttrs(['addSkillGeneral', 'addSkillWarrior', 'addSkillRanger', 'addSkillAlchemist', 'addSkillMage', 'addSkillPriest', 'addSkillThief', 'selectedProfession', 'addSkillType'], function (values) {
const skillType = values.addSkillType;
const skillName = skillType == 'general' ? values.addSkillGeneral : values['addSkill' + values.selectedProfession];
const skillNameArr = [];
skillNameArr.push(skillName);
addSkills(skillNameArr);
});
});
on('remove:repeating_skills', function (eventInfo) {
getAttrs(['availableSkillPoints', 'allocatedPoints'], function (values) {
const skillPointsName = eventInfo.sourceAttribute + '_skillPoints';
const assignedSkillPoints = Number(eventInfo.removedInfo[skillPointsName]);
const availableSkillPoints = Number(values.availableSkillPoints) + assignedSkillPoints;
const allocatedPoints = Number(values.allocatedPoints) - assignedSkillPoints;
setAttrs({ 'availableSkillPoints': availableSkillPoints, 'allocatedPoints': allocatedPoints });
});
});
on('change:repeating_skills:skillLevel change:repeating_skills:skillBonus', (eventInfo) => {
workerLog('change:repeating_skills:skillLevel change:repeating_skills:skillBonus', { eventInfo });
getAttrs(['repeating_skills_skillBonus', 'repeating_skills_skillLevel'], function (values) {
const newValue = values.repeating_skills_skillLevel < 0 ? 0 : values.repeating_skills_skillLevel;
const skillBonus = values.repeating_skills_skillBonus < 0 ? 0 : Number(values.repeating_skills_skillBonus);
let currentLevel = Number(newValue) <= skillBonus ? skillBonus : Number(newValue);
let skillPoints = 0;
if (currentLevel === skillBonus) {
skillPoints = 0;
}
else {
while (currentLevel > skillBonus) {
skillPoints += currentLevel;
currentLevel--;
}
}
const attrsToInsert = { 'repeating_skills_skillPoints': skillPoints, 'repeating_skills_skillBonus': skillBonus };
workerLog('change:repeating_skills:skillLevel update', attrsToInsert);
setAttrs(attrsToInsert);
});
});
on('change:repeating_skills:macro', (eventInfo) => {
workerLog('change:repeating_skills:macro', { eventInfo });
const newRowId = eventInfo.sourceAttribute.split('_')[2];
replaceSkillRollTemplate(newRowId);
});
on('change:repeating_skills:skillPoints', (eventInfo) => {
workerLog('change:repeating_skills:skillPoints', { eventInfo });
getAttrs(['availableSkillPoints', 'allocatedPoints'], function (values) {
const previousValue = 'previousValue' in eventInfo ? eventInfo.previousValue : 0;
const newValue = 'newValue' in eventInfo ? eventInfo.newValue : 0;
const change = Number(newValue) - Number(previousValue);
const availableSkillPoints = values.availableSkillPoints - change;
let allocatedPoints = values.allocatedPoints;
getAttrs(['repeating_skills_skillBonus'], function (values) {
allocatedPoints = Number(allocatedPoints) + change;
let nextLevelPoints = Number(values.repeating_skills_skillBonus) + 1;
let freeSkillPoints = Number(newValue);
let skillLevel = Number(values.repeating_skills_skillBonus);
while (freeSkillPoints >= 0) {
freeSkillPoints = freeSkillPoints - nextLevelPoints;
if (freeSkillPoints >= 0) {
nextLevelPoints++;
skillLevel++;
}
}
const attrsToInsert = { 'availableSkillPoints': availableSkillPoints, 'allocatedPoints': allocatedPoints };
setAttrs(attrsToInsert);
});
});
});
</script>
<rolltemplate class="sheet-rolltemplate-custom">
<div class="sheet-container sheet-dh_section">
<div class="sheet-header">
{{#subtitle}}<div class="sheet-subtitle">{{subtitle}}</div>{{/subtitle}}
{{#title}}<div class="sheet-title sheet-textCenter">{{title}}</div>{{/title}}
</div>
<div class="sheet-content">
{{#shortText}}<div class="sheet-textCenter sheet-smallSize sheet-textLeft sheet-spanCollumns">{{shortText}}</div>{{/shortText}}
{{#attributeRoll}}<div class="sheet-textCenter sheet-bold sheet-rolls sheet-spanCollumns">{{attributeRoll}}</div>{{/attributeRoll}}
{{#manaRoll}}<div class="sheet-textCenter sheet-defaultSize sheet-spanCollumns sheet-allprops sheet-noStyleInlineroll">{{manaRoll}}</div>{{/manaRoll}}
{{#attack}}<div class="sheet-textCenter sheet-bold sheet-rolls sheet-spanCollumns">{{attack}}</div>{{/attack}}
{{#attackModifier}}<div class="sheet-spanCollumns sheet-modVisibility sheet-modifiers"><div class="sheet-defaultSize sheet-bold sheet-textleft spanCollumns sheet-font sheet-modifierMargin">Modifikátory:</div><div class="sheet-textRight sheet-smallSize sheet-spanCollumns sheet-font">{{attackModifier}}</div></div>{{/attackModifier}}
{{#attackFormula}}<div class="sheet-smallSize sheet-textCenter sheet-spanCollumns">{{attackFormula}}</div>{{/attackFormula}}
{{#attackDamage}}<div class="sheet-spanCollumns"><div class="sheet-bigSize sheet-bold sheet-textleft spanCollumns sheet-font sheet-titleAbsolutePos"></div></div><div class="sheet-textCenter sheet-bold sheet-rolls sheet-spanCollumns">{{attackDamage}}</div>{{/attackDamage}}
{{#attackDamageModifier}}<div class="sheet-spanCollumns sheet-modVisibility sheet-modifiers"><div class="sheet-defaultSize sheet-bold sheet-textleft spanCollumns sheet-font sheet-modifierMargin">Modifikátory:</div><div class="sheet-textRight sheet-smallSize sheet-spanCollumns sheet-font">{{attackDamageModifier}}</div></div>{{/attackDamageModifier}}
{{#defense}}<div class="sheet-textCenter sheet-bold sheet-rolls sheet-spanCollumns">{{defense}}</div>{{/defense}}
{{#defenseModifier}}<div class="sheet-spanCollumns sheet-modVisibility sheet-modifiers"><div class="sheet-defaultSize sheet-bold sheet-textleft spanCollumns sheet-font sheet-modifierMargin">Modifikátory:</div><div class="sheet-textRight sheet-smallSize sheet-spanCollumns sheet-font">{{defenseModifier}}</div></div>{{/defenseModifier}}
{{#defenseFormula}}<div class="sheet-smallSize sheet-textCenter sheet-spanCollumns">{{defenseFormula}}</div>{{/defenseFormula}}
{{#rangedDefense}}<div class="sheet-textCenter sheet-bold sheet-rolls sheet-spanCollumns">{{rangedDefense}}</div>{{/rangedDefense}}
{{#rangedDefenseModifier}}<div class="sheet-spanCollumns sheet-modVisibility sheet-modifiers"><div class="sheet-defaultSize sheet-bold sheet-textleft spanCollumns sheet-font sheet-modifierMargin">Modifikátory:</div><div class="sheet-textRight sheet-smallSize sheet-spanCollumns sheet-font">{{rangedDefenseModifier}}</div></div>{{/rangedDefenseModifier}}
{{#rangedDefenseFormula}}<div class="sheet-smallSize sheet-textCenter sheet-spanCollumns">{{rangedDefenseFormula}}</div>{{/rangedDefenseFormula}}
{{#basicDefense}}<div class="sheet-textCenter sheet-bold sheet-rolls sheet-spanCollumns">{{basicDefense}}</div>{{/basicDefense}}
{{#basicDefenseModifier}}<div class="sheet-spanCollumns sheet-modVisibility sheet-modifiers"><div class="sheet-defaultSize sheet-bold sheet-textleft spanCollumns sheet-font sheet-modifierMargin">Modifikátory:</div><div class="sheet-textRight sheet-smallSize sheet-spanCollumns sheet-font">{{basicDefenseModifier}}</div></div>{{/basicDefenseModifier}}
{{#basicDefenseFormula}}<div class="sheet-smallSize sheet-textCenter sheet-spanCollumns">{{basicDefenseFormula}}</div>{{/basicDefenseFormula}}
{{#roll}}<div class="sheet-textCenter sheet-bold sheet-rolls sheet-spanCollumns">{{roll}}</div>{{/roll}}
{{#difficulty}}<div class="sheet-noPadding sheet-textCenter sheet-smallSize sheet-textLeft sheet-spanCollumns sheet-noStyleInlineroll">{{difficulty}}</div>{{/difficulty}}
{{#secondaryRollAgainstSame}}<div class="sheet-noPadding sheet-textCenter sheet-smallSize sheet-textLeft sheet-spanCollumns">{{secondaryRollAgainstSame}}</div>{{/secondaryRollAgainstSame}}
{{#modifier}}<div class="sheet-spanCollumns sheet-modVisibility sheet-modifiers"><div class="sheet-defaultSize sheet-bold sheet-textleft spanCollumns sheet-font sheet-modifierMargin">Modifikátory:</div><div class="sheet-textRight sheet-smallSize sheet-spanCollumns sheet-font">{{modifier}}</div></div>{{/modifier}}
{{#formula}}<div class="sheet-smallSize sheet-textCenter sheet-spanCollumns">{{formula}}</div>{{/formula}}
{{#damage}}<div class="sheet-textCenter sheet-bold sheet-rolls sheet-spanCollumns">{{damage}}</div>{{/damage}}
{{#modifierDamage}}<div class="sheet-spanCollumns sheet-modVisibility sheet-modifiers"><div class="sheet-defaultSize sheet-bold sheet-textleft spanCollumns sheet-font sheet-modifierMargin">Modifikátory:</div><div class="sheet-textRight sheet-modifiers sheet-spanCollumns sheet-modVisibility">{{modifierDamage}}</div></div>{{/modifierDamage}}
{{#secondaryRoll}}<div class="sheet-textCenter sheet-bold sheet-rolls sheet-spanCollumns">{{secondaryRoll}}</div>{{/secondaryRoll}}
{{#secondaryRollAgainst}}<div class="sheet-noPadding sheet-textCenter sheet-smallSize sheet-textLeft sheet-spanCollumns">{{secondaryRollAgainst}}</div>{{/secondaryRollAgainst}}
{{#secondaryModifier}}<div class="sheet-spanCollumns sheet-modVisibility sheet-modifiers"><div class="sheet-defaultSize sheet-bold sheet-textleft spanCollumns sheet-font sheet-modifierMargin">Modifikátory:</div><div class="sheet-textRight sheet-smallSize sheet-modifiers sheet-spanCollumns sheet-font">{{secondaryModifier}}</div></div>{{/secondaryModifier}}
{{#secondaryFormula}}<div class="sheet-smallSize sheet-textCenter sheet-spanCollumns">{{secondaryFormula}}</div>{{/secondaryFormula}}
{{#description}}<div class="sheet-desc sheet-textCenter sheet-spanCollumns">{{description}}</div>{{/description}}
{{#allprops() title subtitle shortText attributeRoll roll modifier damage modifierDamage description formula secondaryRoll difficulty secondaryRollAgainstSame secondaryRollAgainst secondaryModifier secondaryFormula manaRoll attack attackFormula attackModifier attackDamage attackDamageModifier attackDamage defense defenseFormula defenseModifier rangedDefense rangedDefenseFormula rangedDefenseModifier basicDefense basicDefenseFormula basicDefenseModifier}}
<div class="sheet-textCenter sheet-defaultSize sheet-spanCollumns sheet-allprops"><span class="sheet-bold">{{key}} </span><span class="inlinerollresult">{{value}}</span></div>
{{/allprops() title subtitle shortText attributeRoll roll modifier damage modifierDamage description formula secondaryRoll difficulty secondaryRollAgainstSame secondaryRollAgainst secondaryModifier secondaryFormula manaRoll attack attackFormula attackModifier attackDamage attackDamageModifier attackDamage defense defenseFormula defenseModifier rangedDefense rangedDefenseFormula rangedDefenseModifier basicDefense basicDefenseFormula basicDefenseModifier}}
</div>
</div>
</rolltemplate>