mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 19:52:29 +00:00
171 lines
4.8 KiB
TypeScript
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);
|