7243 lines
505 KiB
HTML
7243 lines
505 KiB
HTML
<div id="dh_sheet" class="dh_main">
|
||
<input type="hidden" name="attr_settings" class="dh_settings">
|
||
<input type="hidden" name="attr_version" value="1.2.0">
|
||
<input type="hidden" name="attr_isBackground" value="1" class="dh_isBackground">
|
||
<input type="hidden" name="attr_xp" value="0">
|
||
<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" value="nevybrano"
|
||
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_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_radio dh_button dh_transparent">
|
||
<input type="radio" name="attr_whisper" 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_whisper" 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="advantage">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_advantage" 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_advantage" 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_advantage" 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_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}&{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}&{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}&{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}&{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}&{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}&{template:custom}{{title=Iniciativa v souboji}}{{subtitle=@{character_name}}}{{roll=Iniciativa [[1d6+(@{dexterityBonus})+([[(@{initiativeMod})+(@{rollMod})+(@{advantage})]]) &{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}&{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">
|
||
<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}&{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_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">Start. ú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>
|
||
</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>
|
||
<fieldset class="repeating_activeabilities">
|
||
<div>
|
||
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"
|
||
class="dh_isEditing">
|
||
<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_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_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_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_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_additionalMana" 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_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_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_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_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_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_pb">
|
||
<div title="castingTime" class="dh_col dh_mage dh_ranger 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_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_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_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_warrior dh_mage dh_priest dh_alchemist dh_ranger dh_custom 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_row dh_align_center dh_mage dh_priest dh_alchemist dh_ranger dh_custom dh_pb">
|
||
<div title="selectedProfessionSkill" class="dh_col dh_label dh_text_left"><span>Sesílací 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_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>
|
||
</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>
|
||
<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}&{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">zobrazit pozadí</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}&{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}&{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}&{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}&{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}&{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}&{template:custom}{{title=Iniciativa v souboji}}{{subtitle=@{character_name}}}{{roll=Iniciativa [[1d6+(@{npcInitiative})+([[(@{npcInitiativeMod})+(@{npcRollMod})+(@{npcAdvantage})]]) &{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}&{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}&{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}&{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}&{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>
|
||
<fieldset class="repeating_npcactiveabilities">
|
||
<div>
|
||
<input type="checkbox" name="attr_isEditing" value="1" checked="checked"
|
||
class="dh_isEditing">
|
||
<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_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</span>
|
||
</div>
|
||
<div class="dh_col dh_npc_goodwill dh_label dh_text_left"><span title="additionalMana">Dodatečná přízeň</span>
|
||
</div>
|
||
<div class="dh_col dh_npc_mana dh_label dh_text_left"><span title="additionalMana">Dodatečná mana</span>
|
||
</div>
|
||
<div class="dh_col dh_npc_mentalStrength 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_additionalMana" 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="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_row dh_align_center dh_pb">
|
||
<div class="dh_col dh_label dh_text_left"><span title="selectedProfessionSkill">Sesílací 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">Sesílací vlastnost</span>
|
||
</div>
|
||
<div class="dh_col">
|
||
<select name="attr_castingAttribute" value="none" class="dh_input">
|
||
<option value="none" selected="selected">žádný</option>
|
||
<option value="npcStrengthBonus">SIL</option>
|
||
<option value="npcDexterityBonus">OBR</option>
|
||
<option value="npcConstitutionBonus">ODO</option>
|
||
<option value="npcIntelligenceBonus">INT</option>
|
||
<option value="npcCharismaBonus">CHA</option>
|
||
</select>
|
||
</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_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>
|
||
</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}&{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>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script type="text/worker">
|
||
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 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 StartingSkills = {
|
||
'Warrior': ['Atletika', 'První pomoc', 'Výdrž'],
|
||
'Ranger': ['Znalost přírody', 'První pomoc', 'Přežití v přírodě', 'Pouto s přírodou', 'Lov', 'Orientace', 'Předpovídání počasí', 'Stopování'],
|
||
'Alchemist': ['Znalost přírody', 'Mechanika', 'Čtení a psaní', 'Vidění many', 'Destilace many', 'Lučba'],
|
||
'Mage': ['Cizí jazyky', 'Historie', 'Čtení a psaní', 'Sesílání kouzel'],
|
||
'Priest': ['Teologie', 'Vůle', 'Čtení a psaní', 'Prosby'],
|
||
'Thief': ['Akrobacie', 'Postřeh', 'Reflex', 'Hazardní hry', 'Odhad ceny', 'Přesvědčování', 'Vybírání kapes'],
|
||
'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.2.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);
|
||
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);
|
||
});
|
||
});
|
||
});
|
||
});
|
||
});
|
||
}
|
||
}
|
||
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'], 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${previousVersion} to v${currentVersion}`);
|
||
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.addSkillType === '') {
|
||
set.addSkillType = 'general';
|
||
}
|
||
if (values.selectedProfession === '') {
|
||
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;
|
||
}
|
||
workerLog('sheet:opened set', { set }, { setSilent });
|
||
if (Object.keys(setSilent).length) {
|
||
setAttrs(setSilent, { silent: true }, () => {
|
||
setAttrs(set);
|
||
});
|
||
}
|
||
else if (Object.keys(set).length) {
|
||
setAttrs(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 });
|
||
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
|
||
};
|
||
setAttrs(set);
|
||
}
|
||
});
|
||
on('change:selectedProfession', (eventInfo) => {
|
||
workerLog('change:selectedProfession', { eventInfo });
|
||
setAttrs({ profession: eventInfo.newValue === 'vlastni' || eventInfo.newValue === 'nevybrano' ? '' : Professions[eventInfo.newValue === undefined ? '' : eventInfo.newValue] });
|
||
});
|
||
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}]]}}',
|
||
'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 defaultAbilitySkills = {
|
||
'Warrior': 'Žádná',
|
||
'Ranger': 'Pouto s přírodou',
|
||
'Alchemist': 'Lučba',
|
||
'Mage': 'Sesílání kouzel',
|
||
'Priest': 'Prosby',
|
||
'vlastni': 'Žádná',
|
||
'nevybrano': 'Žádná'
|
||
};
|
||
on('change:repeating_activeabilities', (eventInfo) => {
|
||
workerLog('change:repeating_activeabilities', { eventInfo });
|
||
const sourceAttribute = eventInfo.sourceAttribute.split('_')[3];
|
||
getAttrs(['repeating_activeabilities_macro', 'repeating_activeabilities_selectedProfessionSkill', 'selectedProfession', 'repeating_activeabilities_printMacro'], (values) => {
|
||
const selectedProfession = values.selectedProfession;
|
||
let selectedProfessionSkill = '';
|
||
let skillPoint = 0;
|
||
let macro = values.repeating_activeabilities_macro;
|
||
let printMacro = values.repeating_activeabilities_printMacro;
|
||
let macroChange = false;
|
||
if (macro === '' && selectedProfession != 'nevybrano') {
|
||
macro = defaultAbilityMacros[selectedProfession];
|
||
printMacro = defaultPrintAbilityMacros[selectedProfession];
|
||
macroChange = true;
|
||
}
|
||
if (macro === '' || values.repeating_activeabilities_selectedProfessionSkill === '' || values.repeating_activeabilities_selectedProfessionSkill === 'Název dovednosti' || sourceAttribute === 'selectedProfessionSkill'.toLowerCase()) {
|
||
if (values.repeating_activeabilities_selectedProfessionSkill === '' || values.repeating_activeabilities_selectedProfessionSkill === 'Název dovednosti') {
|
||
selectedProfessionSkill = defaultAbilitySkills[selectedProfession];
|
||
}
|
||
else {
|
||
selectedProfessionSkill = values.repeating_activeabilities_selectedProfessionSkill;
|
||
}
|
||
getSectionIDs('skills', function (ids) {
|
||
const skillNames = [];
|
||
for (let i = 0; i < ids.length; i++) {
|
||
skillNames.push('repeating_skills_' + ids[i] + '_name');
|
||
}
|
||
getAttrs(skillNames, function (names) {
|
||
const skillNameArray = [];
|
||
for (const [key, value] of Object.entries(names)) {
|
||
if (value === selectedProfessionSkill) {
|
||
skillNameArray.push(key);
|
||
}
|
||
}
|
||
if (skillNameArray.length < 1) {
|
||
selectedProfessionSkill = defaultAbilitySkills[selectedProfession];
|
||
for (const [key, value] of Object.entries(names)) {
|
||
if (value === selectedProfessionSkill) {
|
||
skillNameArray.push(key);
|
||
}
|
||
}
|
||
}
|
||
const attrsToUpdate = {};
|
||
if (skillNameArray.length > 0) {
|
||
const skillName = skillNameArray[0].split('_')[2];
|
||
skillPoint = '@{repeating_skills_' + skillName + '_skillLevel}';
|
||
attrsToUpdate.repeating_activeabilities_selectedProfessionSkill = selectedProfessionSkill;
|
||
attrsToUpdate.repeating_activeabilities_skillLevel = skillPoint;
|
||
}
|
||
if (macroChange) {
|
||
attrsToUpdate.repeating_activeabilities_macro = macro;
|
||
attrsToUpdate.repeating_activeabilities_printMacro = printMacro;
|
||
}
|
||
workerLog('attrsToUpdate-repeating_activeabilities', attrsToUpdate);
|
||
setAttrs(attrsToUpdate, { silent: true });
|
||
});
|
||
});
|
||
}
|
||
});
|
||
});
|
||
|
||
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 = '';
|
||
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}}}';
|
||
set.attackMacro = attackMacro;
|
||
set.defenseRangeMacro = defenseRangeMacro;
|
||
set.defenseMacro = defenseMacro;
|
||
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', 'allocatedPoints'], function (values) {
|
||
const allocatedPoints = values.allocatedPoints;
|
||
const level = Number(eventInfo.newValue);
|
||
const levelOld = Number(eventInfo.previousValue);
|
||
if (level >= 1 && level <= 24) {
|
||
const xp = getXpForLevel(level);
|
||
const xp_max = getXpForLevel(level + 1);
|
||
const previousSKillPointTotal = Number(values.availableSkillPoints) + Number(values.allocatedPoints);
|
||
const previousSkillPointRulebookTotal = Number(getSkillPointsForLevel(levelOld, values.race, values.selectedProfession));
|
||
const playerAddedBonusPoints = Number(previousSKillPointTotal) - Number(previousSkillPointRulebookTotal);
|
||
const availableSkillPoints = Number(getSkillPointsForLevel(level, values.race, values.selectedProfession)) - Number(allocatedPoints) + Number(playerAddedBonusPoints);
|
||
setAttrs({ xp, xp_max, availableSkillPoints });
|
||
}
|
||
});
|
||
});
|
||
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'
|
||
};
|
||
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:repeating_npcactiveabilities', (eventInfo) => {
|
||
workerLog('change:repeating_npcactiveabilities', { eventInfo });
|
||
let macro = '@{npcWhisper}&{template:custom}{{title=@{name}}}{{subtitle=@{character_name}}}{{shortText=@{printText}}}{{roll=selectedProfessionSkill [[1d10castingAttributeskillLevel+([[@{npcRollMod}+@{npcAdvantage}]])]]}} {{formula=(1k10castingAttributeTextselectedProfessionSkillText + Modifikátory)}} {{modifier=@{npcRollModText}@{npcAdvantageText}}}';
|
||
const printMacro = '@{npcWhisper}&{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}}}';
|
||
const setSilent = {};
|
||
setSilent.repeating_npcactiveabilities_printMacro = printMacro;
|
||
getAttrs(['repeating_npcactiveabilities_macro',
|
||
'repeating_npcactiveabilities_selectedProfessionSkill',
|
||
'repeating_npcactiveabilities_castingAttribute',
|
||
'npcSelectedManaType'], (values) => {
|
||
const selectedManaType = values.npcSelectedManaType ? ManaTypes[values.npcSelectedManaType] : '';
|
||
macro = macro.replaceAll('selectedManaType', selectedManaType);
|
||
if (values.repeating_npcactiveabilities_castingAttribute !== 'none') {
|
||
const castingAttribute = values.repeating_npcactiveabilities_castingAttribute;
|
||
macro = macro.replace('castingAttributeText', ` + ${CastingAttributesTexts[castingAttribute]}`);
|
||
macro = macro.replace('castingAttribute', `+(@{${castingAttribute}})`);
|
||
}
|
||
else {
|
||
macro = macro.replace('castingAttributeText', '');
|
||
macro = macro.replace('castingAttribute', '');
|
||
}
|
||
const skillName = values.repeating_npcactiveabilities_selectedProfessionSkill;
|
||
if (skillName) {
|
||
const skillAttributes = [];
|
||
getSectionIDs('npcskills', (idarray) => {
|
||
for (const skillId of idarray) {
|
||
skillAttributes.push(`repeating_npcskills_${skillId}_name`);
|
||
skillAttributes.push(`repeating_npcskills_${skillId}_skillLevel`);
|
||
}
|
||
getAttrs(skillAttributes, (skillValues) => {
|
||
const foundId = idarray.find(id => skillValues[`repeating_npcskills_${id}_name`] === skillName);
|
||
if (foundId) {
|
||
setSilent.repeating_npcactiveabilities_skillLevel = `@{repeating_npcskills_${foundId}_skillLevel}`;
|
||
macro = macro.replace('selectedProfessionSkillText', ' + @{selectedProfessionSkill}');
|
||
macro = macro.replace('selectedProfessionSkill', '@{selectedProfessionSkill}');
|
||
macro = macro.replace('skillLevel', '+(@{skillLevel})');
|
||
}
|
||
setSilent.repeating_npcactiveabilities_macro = macro;
|
||
setAttrs(setSilent, { silent: true });
|
||
});
|
||
});
|
||
}
|
||
else {
|
||
macro = macro.replace('selectedProfessionSkillText', '');
|
||
macro = macro.replace('selectedProfessionSkill', '');
|
||
macro = macro.replace('skillLevel', '');
|
||
setSilent.repeating_npcactiveabilities_macro = macro;
|
||
setAttrs(setSilent, { silent: true });
|
||
}
|
||
});
|
||
});
|
||
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);
|
||
});
|
||
|
||
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];
|
||
getSectionIDs('skills', function (idarray) {
|
||
const skillNameArr = [];
|
||
for (let i = 0; i < idarray.length; i++) {
|
||
const id = idarray[i];
|
||
const existingSkillName = 'repeating_skills_' + idarray[i] + '_name';
|
||
skillNameArr.push(existingSkillName);
|
||
}
|
||
getAttrs(skillNameArr, function (values) {
|
||
const found = Object.values(values).includes(skillName);
|
||
if (!found) {
|
||
const currentSkill = Skills.filter(function (e) {
|
||
return e.name == skillName;
|
||
});
|
||
const newRowId = generateRowID();
|
||
const newSkillAttrs = {};
|
||
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;
|
||
if (skillType === 'Profesní') {
|
||
newSkillAttrs['repeating_skills_' + newRowId + '_skillBonus'] = 3;
|
||
newSkillAttrs['repeating_skills_' + newRowId + '_skillLevel'] = 3;
|
||
}
|
||
else {
|
||
newSkillAttrs['repeating_skills_' + newRowId + '_skillBonus'] = 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;
|
||
}
|
||
setAttrs(newSkillAttrs);
|
||
getAttrs(['repeating_skills_' + newRowId + '_isKnowledgeBased', 'repeating_skills_' + newRowId + '_isProfessionBased', 'repeating_skills_' + newRowId + '_isStrength', 'repeating_skills_' + newRowId + '_isDexterity', 'repeating_skills_' + newRowId + '_isConstitution', 'repeating_skills_' + newRowId + '_isIntelligence', 'repeating_skills_' + newRowId + '_isCharisma'], function (values) {
|
||
});
|
||
replaceSkillRollTemplate(newRowId);
|
||
}
|
||
});
|
||
});
|
||
});
|
||
});
|
||
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('change:selectedProfession', (eventInfo) => {
|
||
workerLog('change:selectedProfession', { eventInfo });
|
||
getAttrs(['selectedProfession'], function (values) {
|
||
getSectionIDs('skills', function (idarray) {
|
||
const skillNameArr = [];
|
||
for (let i = 0; i < idarray.length; i++) {
|
||
const id = idarray[i];
|
||
const existingSkillName = 'repeating_skills_' + idarray[i] + '_name';
|
||
skillNameArr.push(existingSkillName);
|
||
}
|
||
const startingSkillArray = StartingSkills[values.selectedProfession];
|
||
for (let c = 0; c < startingSkillArray.length; c++) {
|
||
const skillIndex = c;
|
||
getAttrs(skillNameArr, function (values) {
|
||
const skillName = startingSkillArray[skillIndex];
|
||
const found = Object.values(values).includes(skillName);
|
||
if (!found) {
|
||
const currentSkill = Skills.filter(function (e) {
|
||
return e.name == skillName;
|
||
});
|
||
const newRowId = generateRowID();
|
||
const newSkillAttrs = {};
|
||
newSkillAttrs['repeating_skills_' + newRowId + '_isEditing'] = 0;
|
||
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 + '_skillBonus'] = 3;
|
||
newSkillAttrs['repeating_skills_' + newRowId + '_skillLevel'] = 3;
|
||
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;
|
||
}
|
||
setAttrs(newSkillAttrs);
|
||
getAttrs(['repeating_skills_' + newRowId + '_isKnowledgeBased', 'repeating_skills_' + newRowId + '_isProfessionBased', 'repeating_skills_' + newRowId + '_isStrength', 'repeating_skills_' + newRowId + '_isDexterity', 'repeating_skills_' + newRowId + '_isConstitution', 'repeating_skills_' + newRowId + '_isIntelligence', 'repeating_skills_' + newRowId + '_isCharisma'], function (values) {
|
||
});
|
||
replaceSkillRollTemplate(newRowId);
|
||
}
|
||
});
|
||
}
|
||
});
|
||
});
|
||
});
|
||
on('change:race change:selectedProfession', (eventInfo) => {
|
||
workerLog('change:race change:selectedProfession', { eventInfo });
|
||
getAttrs(['availableSkillPoints', 'race', 'selectedProfession', 'level', 'allocatedPoints'], function (values) {
|
||
const change = Number(values.level);
|
||
const previousSKillPointTotal = Number(values.availableSkillPoints) + Number(values.allocatedPoints);
|
||
const previousRace = eventInfo.sourceAttribute === 'race' ? 'previousValue' in eventInfo ? eventInfo.previousValue : 'nevybrano' : values.race;
|
||
const previousProfession = eventInfo.sourceAttribute === 'selectedprofession' ? 'previousValue' in eventInfo ? eventInfo.previousValue : 'nevybrano' : values.selectedProfession;
|
||
const previousSkillPointRulebookTotal = Number(getSkillPointsForLevel(values.level, previousRace, previousProfession));
|
||
const playerAddedBonusPoints = Number(previousSKillPointTotal) - Number(previousSkillPointRulebookTotal);
|
||
const skillPoints = Number(getSkillPointsForLevel(values.level, values.race, values.selectedProfession)) - Number(values.allocatedPoints) + Number(playerAddedBonusPoints);
|
||
const availableSkillPoints = { 'availableSkillPoints': skillPoints };
|
||
setAttrs(availableSkillPoints);
|
||
});
|
||
});
|
||
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}}
|
||
{{#roll}}<div class="sheet-textCenter sheet-bold sheet-rolls sheet-spanCollumns">{{roll}}</div>{{/roll}}
|
||
{{#modifier}}<div class="sheet-spanCollumns sheet-modVisibility"><div class="sheet-defaultSize sheet-bold sheet-textleft spanCollumns sheet-font">Modifikátory:</div><div class="sheet-textRight sheet-smallSize sheet-modifiers 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-textRight sheet-modifiers sheet-spanCollumns sheet-modVisibility">{{modifierDamage}}</div>{{/modifierDamage}}
|
||
{{#description}}<div class="sheet-desc sheet-textCenter sheet-spanCollumns">{{description}}</div>{{/description}}
|
||
{{#allprops() title subtitle shortText attributeRoll roll modifier damage modifierDamage description formula }}
|
||
<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 }}
|
||
</div>
|
||
</div>
|
||
</rolltemplate>
|