mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-09-05 14:42:31 +00:00
Fix Roll20 types, getTranslationByKey return false not undefined.
This commit is contained in:
+4
-2
@@ -10,9 +10,11 @@ declare type EventInfo = {
|
||||
removedInfo: string
|
||||
}
|
||||
|
||||
declare type AttributeContent = string | number | boolean
|
||||
|
||||
declare function getAttrs(attributes: string[], callback?: (values: {[key: string]: string}) => void): void
|
||||
|
||||
declare function setAttrs(values: {[key: string]: string | number | boolean}, options?: {silent?: boolean}, callback?: (values: {[key: string]: string}) => void): void
|
||||
declare function setAttrs(values: {[key: string]: AttributeContent}, options?: {silent?: boolean}, callback?: (values: {[key: string]: string}) => void): void
|
||||
|
||||
declare function getSectionIDs(section_name: string, callback: (values: string[]) => void): void
|
||||
|
||||
@@ -20,7 +22,7 @@ declare function generateRowID(): string
|
||||
|
||||
declare function removeRepeatingRow(RowID: string): void
|
||||
|
||||
declare function getTranslationByKey(key: string): string | undefined
|
||||
declare function getTranslationByKey(key: string): string | false
|
||||
|
||||
declare function getTranslationLanguage(): string
|
||||
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
/* Autofill stuff */
|
||||
const fillClassStats = () => {
|
||||
getAttrs(["class", "class_ability", "attack_bonus"], v => {
|
||||
const label = v.class && reverseClasses[v.class.toLowerCase()];
|
||||
const label = v.class && reverseClasses[v.class ? v.class.toLowerCase() : ""];
|
||||
if (label && autofillData.classes.hasOwnProperty(label)) {
|
||||
const data: {[key: string]: string} = Object.assign({}, autofillData.classes[label]);
|
||||
const data: {[key: string]: string | false} = Object.assign({}, autofillData.classes[label]);
|
||||
Object.keys(data).forEach(key => {
|
||||
if (!(["", "0"].includes(`${v[key]}`))) delete data[key];
|
||||
});
|
||||
@@ -39,7 +39,7 @@ const getAutofillData = ({sName, v, data, label}: AutofillData) => {
|
||||
// inclusion into the sheet.
|
||||
const output = Object.assign({}, data);
|
||||
if (sName === "ship-defenses") {
|
||||
if (label) output.defense_name = translate(label.toUpperCase());
|
||||
if (label) output.defense_name = translate(label.toUpperCase()) ? translate(label.toUpperCase()) : "false";
|
||||
if (output.defense_mass.includes("#")) {
|
||||
output.defense_mass = `${parseInt(output.defense_mass) * v.ship_multiplier}`;
|
||||
}
|
||||
@@ -210,7 +210,7 @@ const generateAutofillInfo = (sName: string) => {
|
||||
});
|
||||
};
|
||||
|
||||
const fillRepeatingSectionFromData = (sName: string, data: {[key: string]: string}[] | {[key: string]: string}, callback?: () => void) => {
|
||||
const fillRepeatingSectionFromData = (sName: string, data: {[key: string]: AttributeContent}[] | {[key: string]: AttributeContent}, callback?: () => void) => {
|
||||
// Populates the repeating section repeating_${SName} with new
|
||||
// rows from the data array. Every entry of the array is expected
|
||||
// to be an object, and its key/value pairs will be written into
|
||||
|
||||
@@ -344,7 +344,7 @@ const generateWeaponDisplay = () => {
|
||||
const weaponDamage = (v[`${prefix}_weapon_damage`] === "0") ? "" : v[`${prefix}_weapon_damage`];
|
||||
const shockString = (v[`${prefix}_weapon_shock`] !== "0") ? `, ${
|
||||
(parseInt(v[`${prefix}_weapon_shock_damage`])||0) + damageBonus
|
||||
}\xa0${translate("SHOCK").toLowerCase()}${
|
||||
}\xa0${translate("SHOCK").toString().toLowerCase()}${
|
||||
v[`${prefix}_weapon_shock_ac`] ? ` ${translate("VS_AC_LEQ")} ${v[`${prefix}_weapon_shock_ac`]}` : ""
|
||||
}` : "";
|
||||
|
||||
@@ -355,7 +355,7 @@ const generateWeaponDisplay = () => {
|
||||
damageBonus);
|
||||
|
||||
setting[`${prefix}_weapon_attack_display`] = (attack >= 0) ? `+${attack}` : attack.toString();
|
||||
setting[`${prefix}_weapon_damage_display`] = `${damage || 0}\xa0${translate("DAMAGE").toLowerCase()}${shockString}`;
|
||||
setting[`${prefix}_weapon_damage_display`] = `${damage || 0}\xa0${translate("DAMAGE").toString().toLowerCase()}${shockString}`;
|
||||
});
|
||||
setting.macro_weapons = prefixes.map((prefix, index) => {
|
||||
const label = `${v[`${prefix}_weapon_name`]} (${setting[`${prefix}_weapon_attack_display`]})`;
|
||||
|
||||
@@ -50,27 +50,27 @@ const shipStats = ["ship_ac", "ship_armor", "ship_class", "ship_crew_max", "ship
|
||||
"ship_hardpoints_max", "ship_hp", "ship_hp_max", "ship_mass_max", "ship_power_max", "ship_speed", "ship_hull_price",
|
||||
];
|
||||
const reverseHullTypes = {
|
||||
[translate("BATTLESHIP").toLowerCase()]: "battleship",
|
||||
[translate("BULK_FREIGHTER").toLowerCase()]: "bulk_freighter",
|
||||
[translate("CARRIER").toLowerCase()]: "carrier",
|
||||
[translate("CORVETTE").toLowerCase()]: "corvette",
|
||||
[translate("FLEET_CRUISER").toLowerCase()]: "fleet_cruiser",
|
||||
[translate("FREE_MERCHANT").toLowerCase()]: "free_merchant",
|
||||
[translate("HEAVY_FRIGATE").toLowerCase()]: "heavy_frigate",
|
||||
[translate("LARGE_STATION").toLowerCase()]: "large_station",
|
||||
[translate("PATROL_BOAT").toLowerCase()]: "patrol_boat",
|
||||
[translate("SMALL_STATION").toLowerCase()]: "small station",
|
||||
[translate("STRIKE_FIGHTER").toLowerCase()]: "strike_fighter",
|
||||
[translate("SHUTTLE").toLowerCase()]: "shuttle",
|
||||
[translate("BATTLESHIP").toString().toLowerCase()]: "battleship",
|
||||
[translate("BULK_FREIGHTER").toString().toLowerCase()]: "bulk_freighter",
|
||||
[translate("CARRIER").toString().toLowerCase()]: "carrier",
|
||||
[translate("CORVETTE").toString().toLowerCase()]: "corvette",
|
||||
[translate("FLEET_CRUISER").toString().toLowerCase()]: "fleet_cruiser",
|
||||
[translate("FREE_MERCHANT").toString().toLowerCase()]: "free_merchant",
|
||||
[translate("HEAVY_FRIGATE").toString().toLowerCase()]: "heavy_frigate",
|
||||
[translate("LARGE_STATION").toString().toLowerCase()]: "large_station",
|
||||
[translate("PATROL_BOAT").toString().toLowerCase()]: "patrol_boat",
|
||||
[translate("SMALL_STATION").toString().toLowerCase()]: "small station",
|
||||
[translate("STRIKE_FIGHTER").toString().toLowerCase()]: "strike_fighter",
|
||||
[translate("SHUTTLE").toString().toLowerCase()]: "shuttle",
|
||||
};
|
||||
const reverseClasses = {
|
||||
[translate("ADVENTURER").toLowerCase()]: "adventurer",
|
||||
[translate("EXPERT").toLowerCase()]: "expert",
|
||||
[translate("PSYCHIC").toLowerCase()]: "psychic",
|
||||
[translate("WARRIOR").toLowerCase()]: "warrior",
|
||||
[translate("ADVENTURER").toString().toLowerCase()]: "adventurer",
|
||||
[translate("EXPERT").toString().toLowerCase()]: "expert",
|
||||
[translate("PSYCHIC").toString().toLowerCase()]: "psychic",
|
||||
[translate("WARRIOR").toString().toLowerCase()]: "warrior",
|
||||
};
|
||||
const autofillSections = ["armor", "cyberware", "foci", "gear", "ship-defenses", "ship-fittings", "ship-weapons", "techniques", "weapons"];
|
||||
const autofillData: {[key: string]: {[key: string]: {[key: string]: string}}} = {
|
||||
const autofillData: {[key: string]: {[key: string]: {[key: string]: string | false}}} = {
|
||||
"classes": {
|
||||
adventurer: {
|
||||
class_ability: translate("ADVENTURER_CLASS_ABILITY"),
|
||||
@@ -1274,7 +1274,7 @@ const autofillData: {[key: string]: {[key: string]: {[key: string]: string}}} =
|
||||
"ship-defenses": {
|
||||
ablative_hull_compartments: {
|
||||
class: "CAPITAL",
|
||||
defense_effect: `+1 ${translate("AC")}, +20 ${translate("MAXIMUM_HIT_POINTS").toLowerCase()}.`,
|
||||
defense_effect: `+1 ${translate("AC")}, +20 ${translate("MAXIMUM_HIT_POINTS").toString().toLowerCase()}.`,
|
||||
defense_mass: "2#",
|
||||
defense_power: "5",
|
||||
defense_price: "100000*",
|
||||
|
||||
@@ -7,9 +7,9 @@ const fillNPC = () => {
|
||||
const {
|
||||
HD, AC, npc_attack_bonus, damage, attacks, npc_move,
|
||||
npc_morale, npc_skills, npc_saves, armor_type
|
||||
}: {[key: string]: string} = autofillData.statblocks[v.npc_stat_block];
|
||||
}: {[key: string]: string | false} = autofillData.statblocks[v.npc_stat_block];
|
||||
|
||||
const setting: {[key: string]: string} = {
|
||||
const setting: {[key: string]: string | false} = {
|
||||
AC,
|
||||
npc_attack_bonus,
|
||||
npc_move,
|
||||
@@ -19,7 +19,7 @@ const fillNPC = () => {
|
||||
};
|
||||
|
||||
if (armor_type) setting.npc_armor_type = armor_type;
|
||||
if (HD.includes("hp")) setting.HP = HD.replace("hp", "");
|
||||
if (typeof HD === "string" && HD.includes("hp")) setting.HP = HD.replace("hp", "");
|
||||
else setting.npc_hd = HD;
|
||||
|
||||
setAttrs(setting);
|
||||
|
||||
@@ -20,15 +20,15 @@ const setShipClass = () => {
|
||||
// Sets the internal ship_class_normalised attribute responsible
|
||||
// for filtering ship modules according to class.
|
||||
getAttrs(["ship_class", "ship_class_normalised"], v => {
|
||||
if (["fighter", translate("FIGHTER").toLowerCase()].includes(v.ship_class.toLowerCase()))
|
||||
if (["fighter", translate("FIGHTER").toString().toLowerCase()].includes(v.ship_class.toLowerCase()))
|
||||
setAttrs({
|
||||
ship_class_normalised: "fighter"
|
||||
});
|
||||
else if (["frigate", translate("FRIGATE").toLowerCase()].includes(v.ship_class.toLowerCase()))
|
||||
else if (["frigate", translate("FRIGATE").toString().toLowerCase()].includes(v.ship_class.toLowerCase()))
|
||||
setAttrs({
|
||||
ship_class_normalised: "frigate"
|
||||
});
|
||||
else if (["cruiser", translate("CRUISER").toLowerCase()].includes(v.ship_class.toLowerCase()))
|
||||
else if (["cruiser", translate("CRUISER").toString().toLowerCase()].includes(v.ship_class.toLowerCase()))
|
||||
setAttrs({
|
||||
ship_class_normalised: "cruiser"
|
||||
});
|
||||
|
||||
@@ -31,7 +31,7 @@ const setTranslatedDefaults = () => {
|
||||
if (v[name] === data.default && v[name] !== data.trans) setting[name] = data.trans;
|
||||
});
|
||||
}
|
||||
setting.innate_ac_name = translate("INNATE_AC");
|
||||
setting.innate_ac_name = translate("INNATE_AC").toString();
|
||||
mySetAttrs(setting, v);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -8,7 +8,7 @@ const sign = (value: number | string):string => {
|
||||
};
|
||||
const sum = (list: string[]) => list.reduce((m, c) => m + (parseInt(c) || 0), 0);
|
||||
const buildLink = (caption: string, ability: string, last?: boolean) => `[${caption}${!last ? "," : ""}](~${ability})`;
|
||||
const mySetAttrs = (setting: {[key: string]: string | number | boolean}, values: {[key: string]: string}, ...rest: any[]) => {
|
||||
const mySetAttrs = (setting: {[key: string]: AttributeContent}, values: {[key: string]: string}, ...rest: any[]) => {
|
||||
// This is a version of setAttrs that expects an extra values parameter
|
||||
// (as received from getAttrs). It will only set values in setting that differ
|
||||
// from their current value on the sheet. The intention is to not
|
||||
|
||||
Reference in New Issue
Block a user