mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 19:52:29 +00:00
74 lines
3.4 KiB
TypeScript
74 lines
3.4 KiB
TypeScript
/* global getAttrs, setAttrs, getSectionIDs, generateRowID, on, removeRepeatingRow, _, getTranslationByKey */
|
|
|
|
/* Drones */
|
|
const fillDroneStats = () => {
|
|
// This must be run from a repeating event, otherwise it will not know where to draw the data from.
|
|
getAttrs(["repeating_drones_drone_model"], v => {
|
|
const model = (v.repeating_drones_drone_model || "").toLowerCase().trim().replace(/ /g, "_");
|
|
if (autofillData.drones.hasOwnProperty(model)) {
|
|
const setting = Object.entries(autofillData.drones[model as keyof typeof autofillData.drones]).reduce((m: {[key: string]: string}, [key, value]) => {
|
|
if (typeof value === "string") {
|
|
m[`repeating_drones_${key}`] = value;
|
|
}
|
|
return m;
|
|
}, {});
|
|
setting.repeating_drones_drone_HP_max = setting.repeating_drones_drone_HP;
|
|
setAttrs(setting);
|
|
}
|
|
});
|
|
};
|
|
const fillDroneFitting = (num: number) => {
|
|
const prefix = `repeating_drones_drone_fitting_${num}`;
|
|
getAttrs([`${prefix}_desc`, `${prefix}_name`], v => {
|
|
const fittingName = (v[`${prefix}_name`] || "").toLowerCase().trim().replace(/ /g, "_");
|
|
if (v[`${prefix}_desc`] === "" && autofillData.droneFittings.includes(fittingName)) {
|
|
setAttrs({
|
|
[`${prefix}_desc`]: translate(`${fittingName.toUpperCase()}_DESC`)
|
|
});
|
|
}
|
|
});
|
|
};
|
|
const calculateDroneAttack = (prefixes: string[], callback?: (values: {[key: string]: string}) => void) => {
|
|
const sourceAttrs = prefixes.reduce((m, prefix) => {
|
|
return m.concat([
|
|
`${prefix}_drone_weapon1_ab`,
|
|
`${prefix}_drone_weapon1_active`,
|
|
`${prefix}_drone_weapon1_attack`,
|
|
`${prefix}_drone_weapon1_skill`,
|
|
`${prefix}_drone_weapon2_ab`,
|
|
`${prefix}_drone_weapon2_active`,
|
|
`${prefix}_drone_weapon2_attack`,
|
|
`${prefix}_drone_weapon2_skill`,
|
|
`${prefix}_drone_weapon3_ab`,
|
|
`${prefix}_drone_weapon3_active`,
|
|
`${prefix}_drone_weapon3_attack`,
|
|
`${prefix}_drone_weapon3_skill`,
|
|
]);
|
|
}, ["attack_bonus", "intelligence_mod", "skill_pilot", "skill_program", "npc", "npc_attack_bonus"]);
|
|
getAttrs(sourceAttrs, v => {
|
|
let skillMod: number,
|
|
intMod: number,
|
|
attackBonus: number;
|
|
if (v.npc !== "1") {
|
|
skillMod = Math.max(parseInt(v.skill_pilot), parseInt(v.skill_program)) || 0;
|
|
intMod = parseInt(v.intelligence_mod) || 0;
|
|
attackBonus = parseInt(v.attack_bonus) || 0;
|
|
} else {
|
|
skillMod = 0;
|
|
intMod = 0;
|
|
attackBonus = parseInt(v.npc_attack_bonus) || 0;
|
|
}
|
|
const setting = prefixes.reduce((m: {[key:string]: string}, prefix) => {
|
|
[1, 2, 3].filter(num => v[`${prefix}_drone_weapon${num}_active`] === "1")
|
|
.forEach(num => {
|
|
m[`${prefix}_drone_weapon${num}_attack`] = (intMod + attackBonus +
|
|
((skillMod === -1) ? -2 : skillMod) +
|
|
parseInt(v[`${prefix}_drone_weapon${num}_ab`]) || 0).toString();
|
|
m[`${prefix}_drone_weapon${num}_skill`] =
|
|
((skillMod === -1) ? -2 : skillMod).toString();
|
|
});
|
|
return m;
|
|
}, {});
|
|
mySetAttrs(setting, v, null, callback);
|
|
});
|
|
}; |