mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-31 04:02:29 +00:00
133 lines
5.8 KiB
TypeScript
133 lines
5.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:homebrew_skill_list", 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 */
|
|
on("change:class", fillClassStats);
|
|
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:homebrew_skill_list", () => 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:homebrew_luck_save", buildSaveMenu);
|
|
|
|
on([
|
|
...skills.revised.map(x => `change:skill_${x}`),
|
|
...skills.first.map(x => `change:skill_${x}`),
|
|
"change:homebrew_skill_list",
|
|
"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);
|
|
|
|
on("change:setting_super_type change:repeating_spells remove:repeating_spells " +
|
|
"change:repeating_magic-skills remove:repeating_magic-skills " +
|
|
"change:skill_know_magic change:skill_use_magic change:skill_fight change:skill_sunblade change:skill_magic2_name change:skill_magic2", buildMagicMenu);
|
|
|
|
/* Repeating autofill */
|
|
autofillSections.forEach((sName: AutofillSectionsKey) => {
|
|
on(`change:generate_${sName}_source`, () => generateAutofillInfo(sName));
|
|
on(`change:generate_${sName}_button`, () => generateAutofillRow(sName));
|
|
});
|
|
|
|
|
|
/* Ship sheet */
|
|
on("change:ship_hulltype", fillShipStats);
|
|
on("change:ship_calculate_price", calculateShipStats)
|
|
on("change:ship_class", () => {
|
|
setShipClass();
|
|
["ship-fittings", "ship-defenses"].forEach((sName: 'ship-fittings' | 'ship-defenses') => generateAutofillInfo(sName));
|
|
});
|
|
on(shipStatEvent, calculateShipStats);
|
|
on("change:repeating_ship-weapons:weapon_name change:repeating_ship-weapons:weapon_attack_bonus " +
|
|
"remove:repeating_ship-weapons", buildShipWeaponsMenu);
|
|
|
|
/* Drones */
|
|
[1,2,3,4,5].forEach(num => {
|
|
on(`change:repeating_drones:drone_fitting_${num}_name`, () => fillDroneFitting(num));
|
|
});
|
|
on("change:repeating_drones:drone_model", fillDroneStats);
|
|
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_stat_block", fillNPC);
|
|
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); |