Files
roll20-character-sheets/Without Numbers/Source/ts/eventHandlers.ts
T

171 lines
4.8 KiB
TypeScript

///<reference path="migrations.ts"/>
///<reference path="validations.ts"/>
///<reference path="translations.ts"/>
///<reference path="menuBuilders.ts"/>
///<reference path="ship.ts"/>
///<reference path="npc.ts"/>
/* global getAttrs, setAttrs, getSectionIDs, generateRowID, on, removeRepeatingRow, _, getTranslationByKey */
/**
* Register Event handlers
*/
on("sheet:opened", handleUpgrade);
on("sheet:opened change:npc", validateTab);
on("sheet:opened", setTranslatedQueries);
on("sheet:opened change:setting_skill_query", handleAttributeQueries);
on("sheet:opened change:setting_modifier_query", handleModifierQuery);
on("change:system", setTranslatedDefaults);
/* API use ammo boilerplate */
["weapons", "ship-weapons"].forEach((sName) => {
on(`change:repeating_${sName}:weapon_use_ammo`, () => handleAmmoAPI(sName));
});
on("change:setting_use_ammo", () => {
handleAmmoAPI("weapons");
handleAmmoAPI("ship-weapons");
});
/* Character sheet */
attributes.forEach((attr) =>
on(`change:${attr}_base change:${attr}_boosts`, () => calculateAttr(attr))
);
attributes.forEach((attr) =>
on(`change:${attr} change:${attr}_bonus`, () => calculateMod(attr))
);
on("change:repeating_shells remove:repeating_shells", function (eventInfo) {
if (eventInfo.sourceType === "player") {
validateShells(eventInfo);
}
});
on(
"change:setting_transhuman_enable change:setting_ai_enable",
calculateShellAttrs
);
on(weaponDisplayEvent, generateWeaponDisplay);
on("change:repeating_weapons:weapon_name", () => validateWeaponSkills());
on("change:system", () =>
getSectionIDs("repeating_weapons", validateWeaponSkills)
);
on("change:strain_extra change:strain_permanent", calculateStrain);
on("change:constitution", calculateMaxStrain);
on(
"change:repeating_cyberware remove:repeating_cyberware",
calculateCyberwareStrain
);
on(
"change:strain_permanent_extra change:cyberware_strain_total",
calculatePermanentStrain
);
on("change:level", calculateSaves);
on(
[...effortAttributes, "repeating_psychic-skills:skill"]
.map((x) => `change:${x}`)
.join(" "),
calculateEffort
);
on(
"change:magic_committed_effort_current change:magic_committed_effort_scene change:magic_committed_effort_day change:magic_total_effort",
calculateMagicEffort
);
on(
"change:ai_committed_processing_current change:ai_committed_processing_scene change:ai_committed_processing_day change:ai_extra_processing change:repeating_processing-nodes remove:repeating:processing_nodes",
calculateProcessing
);
on(
"change:repeating_armor change:innate_ac remove:repeating_armor",
calculateAC
);
on(
"change:strength change:repeating_gear remove:repeating_gear change:repeating_weapons " +
"remove:repeating_weapons change:repeating_armor remove:repeating_armor",
calculateGearReadiedStowed
);
on("change:level change:setting_xp_scheme", calculateNextLevelXP);
on("change:setting_super_type", validateSuperTab);
/* Character chat macros */
on("change:luck_save", buildSaveMenu);
on(
[
...skills.revised.map((x) => `change:skill_${x}`),
"change:system",
"change:repeating_skills",
"change:setting_show_untrained_skills",
"remove:repeating_skills",
].join(" "),
buildSkillMenu
);
on(
[
...skills.psionic.map((x) => `change:skill_${x}`),
"change:setting_super_type change:repeating_techniques remove:repeating_techniques",
"change:repeating_psychic-skills remove:repeating_psychic-skills",
].join(" "),
buildPsionicsMenu
);
/* Ship sheet */
on("change:ship_class", () => setShipClass());
on(shipStatEvent, calculateShipStats);
on(
"change:repeating_ship-weapons:weapon_name change:repeating_ship-weapons:weapon_attack_bonus " +
"remove:repeating_ship-weapons",
buildShipWeaponsMenu
);
/* Drones */
on(
"change:attack_bonus change:intelligence_mod change:skill_pilot change:skill_program change:npc",
() =>
getSectionIDs("repeating_drones", (idArray) => {
calculateDroneAttack(idArray.map((id) => `repeating_drones_${id}`));
})
);
on(
[
...[1, 2, 3].map((n) => `change:repeating_drones:drone_weapon${n}_ab`),
...[1, 2, 3].map((n) => `change:repeating_drones:drone_weapon${n}_active`),
].join(" "),
() => calculateDroneAttack(["repeating_drones"])
);
/* NPC sheet */
on("change:npc_rolls_hidden", handleNPCRollHide);
on("change:repeating_npc-attacks:attack_name", addNPCAttackBonus);
on(
"change:npc_roll_full_attack change:repeating_npc-attacks:attack_number",
setNPCMultiAttacks
);
on(
"change:repeating_npc-abilities:ability_name remove:repeating_npc-abilities",
buildAbilitiesMenu
);
on(
"change:repeating_npc-attacks:attack_name change:repeating_npc-attacks:attack_ab " +
"change:repeating_npc-attacks:attack_number remove:repeating_npc-attacks",
buildAttacksMenu
);
on(
"change:npc change:npc_armor_type change:macro_npc_attacks change:macro_npc_abilities",
buildStatblock
);
on("change:npc_hd", handleNPCSave);