feat: localize roll flavor text for each user individually
This commit is contained in:
parent
ab120a4d33
commit
b679eedfc1
8 changed files with 389 additions and 339 deletions
|
@ -166,7 +166,7 @@ publish-to-foundry-admin:
|
||||||
stage: publish
|
stage: publish
|
||||||
image: johannesloher/foundry-publish
|
image: johannesloher/foundry-publish
|
||||||
variables:
|
variables:
|
||||||
FVTT_MANIFEST_PATH: ./src/system.json
|
FVTT_MANIFEST_PATH: ds4/system.json
|
||||||
FVTT_MANIFEST_URL: ${CI_PROJECT_URL}/-/releases/${CI_COMMIT_TAG}/downloads/system.json
|
FVTT_MANIFEST_URL: ${CI_PROJECT_URL}/-/releases/${CI_COMMIT_TAG}/downloads/system.json
|
||||||
script: foundry-publish
|
script: foundry-publish
|
||||||
rules:
|
rules:
|
||||||
|
|
|
@ -300,7 +300,8 @@ export class DS4Actor extends Actor {
|
||||||
rollMode: getGame().settings.get("core", "rollMode"),
|
rollMode: getGame().settings.get("core", "rollMode"),
|
||||||
maximumCoupResult: this.data.data.rolling.maximumCoupResult,
|
maximumCoupResult: this.data.data.rolling.maximumCoupResult,
|
||||||
minimumFumbleResult: this.data.data.rolling.minimumFumbleResult,
|
minimumFumbleResult: this.data.data.rolling.minimumFumbleResult,
|
||||||
flavor: getGame().i18n.format("DS4.ActorCheckFlavor", { actor: this.name, check: DS4.i18n.checks[check] }),
|
flavor: "DS4.ActorCheckFlavor",
|
||||||
|
flavorData: { actor: this.name, check: DS4.i18nKeys.checks[check] },
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
32
src/module/chat-message.ts
Normal file
32
src/module/chat-message.ts
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
// SPDX-FileCopyrightText: 2021 Johannes Loher
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
import { getGame } from "./helpers";
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
interface FlagConfig {
|
||||||
|
ChatMessage: {
|
||||||
|
ds4?: {
|
||||||
|
flavorData?: Record<string, string | number | null>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class DS4ChatMessage extends ChatMessage {
|
||||||
|
/** @override */
|
||||||
|
prepareData(): void {
|
||||||
|
super.prepareData();
|
||||||
|
if (this.data.flavor) {
|
||||||
|
const game = getGame();
|
||||||
|
const flavorData = Object.fromEntries(
|
||||||
|
Object.entries(this.data.flags.ds4?.flavorData ?? {}).map(([key, value]) => [
|
||||||
|
key,
|
||||||
|
typeof value === "string" ? game.i18n.localize(value) : value,
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
this.data.flavor = game.i18n.format(this.data.flavor, flavorData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,6 +5,341 @@
|
||||||
//
|
//
|
||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
const i18nKeys = {
|
||||||
|
/**
|
||||||
|
* Define the set of acttack types that can be performed with weapon items
|
||||||
|
*/
|
||||||
|
attackTypes: {
|
||||||
|
melee: "DS4.AttackTypeMelee",
|
||||||
|
ranged: "DS4.AttackTypeRanged",
|
||||||
|
meleeRanged: "DS4.AttackTypeMeleeRanged",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the set of item availabilties
|
||||||
|
*/
|
||||||
|
itemAvailabilities: {
|
||||||
|
unset: "DS4.ItemAvailabilityUnset",
|
||||||
|
hamlet: "DS4.ItemAvailabilityHamlet",
|
||||||
|
village: "DS4.ItemAvailabilityVilage",
|
||||||
|
city: "DS4.ItemAvailabilityCity",
|
||||||
|
elves: "DS4.ItemAvailabilityElves",
|
||||||
|
dwarves: "DS4.ItemAvailabilityDwarves",
|
||||||
|
nowhere: "DS4.ItemAvailabilityNowhere",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the set of item types
|
||||||
|
*/
|
||||||
|
itemTypes: {
|
||||||
|
weapon: "DS4.ItemTypeWeapon",
|
||||||
|
armor: "DS4.ItemTypeArmor",
|
||||||
|
shield: "DS4.ItemTypeShield",
|
||||||
|
spell: "DS4.ItemTypeSpell",
|
||||||
|
equipment: "DS4.ItemTypeEquipment",
|
||||||
|
loot: "DS4.ItemTypeLoot",
|
||||||
|
talent: "DS4.ItemTypeTalent",
|
||||||
|
racialAbility: "DS4.ItemTypeRacialAbility",
|
||||||
|
language: "DS4.ItemTypeLanguage",
|
||||||
|
alphabet: "DS4.ItemTypeAlphabet",
|
||||||
|
specialCreatureAbility: "DS4.ItemTypeSpecialCreatureAbility",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the set of armor types, a character may only wear one item of each at any given time
|
||||||
|
*/
|
||||||
|
armorTypes: {
|
||||||
|
body: "DS4.ArmorTypeBody",
|
||||||
|
helmet: "DS4.ArmorTypeHelmet",
|
||||||
|
vambrace: "DS4.ArmorTypeVambrace",
|
||||||
|
greaves: "DS4.ArmorTypeGreaves",
|
||||||
|
vambraceGreaves: "DS4.ArmorTypeVambraceGreaves",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define abbreviations for the armor types
|
||||||
|
*/
|
||||||
|
armorTypesAbbr: {
|
||||||
|
body: "DS4.ArmorTypeBodyAbbr",
|
||||||
|
helmet: "DS4.ArmorTypeHelmetAbbr",
|
||||||
|
vambrace: "DS4.ArmorTypeVambraceAbbr",
|
||||||
|
greaves: "DS4.ArmorTypeGreavesAbbr",
|
||||||
|
vambraceGreaves: "DS4.ArmorTypeVambraceGreavesAbbr",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the set of armor materials, used to determine if a character may wear the armor without additional penalties
|
||||||
|
*/
|
||||||
|
armorMaterialTypes: {
|
||||||
|
cloth: "DS4.ArmorMaterialTypeCloth",
|
||||||
|
leather: "DS4.ArmorMaterialTypeLeather",
|
||||||
|
chain: "DS4.ArmorMaterialTypeChain",
|
||||||
|
plate: "DS4.ArmorMaterialTypePlate",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the abbreviations of armor materials
|
||||||
|
*/
|
||||||
|
armorMaterialTypesAbbr: {
|
||||||
|
cloth: "DS4.ArmorMaterialTypeClothAbbr",
|
||||||
|
leather: "DS4.ArmorMaterialTypeLeatherAbbr",
|
||||||
|
chain: "DS4.ArmorMaterialTypeChainAbbr",
|
||||||
|
plate: "DS4.ArmorMaterialTypePlateAbbr",
|
||||||
|
},
|
||||||
|
|
||||||
|
spellTypes: {
|
||||||
|
spellcasting: "DS4.SpellTypeSpellcasting",
|
||||||
|
targetedSpellcasting: "DS4.SpellTypeTargetedSpellcasting",
|
||||||
|
},
|
||||||
|
|
||||||
|
spellCategories: {
|
||||||
|
healing: "DS4.SpellCategoryHealing",
|
||||||
|
fire: "DS4.SpellCategoryFire",
|
||||||
|
ice: "DS4.SpellCategoryIce",
|
||||||
|
light: "DS4.SpellCategoryLight",
|
||||||
|
darkness: "DS4.SpellCategoryDarkness",
|
||||||
|
mindAffecting: "DS4.SpellCategoryMindAffecting",
|
||||||
|
electricity: "DS4.SpellCategoryElectricity",
|
||||||
|
none: "DS4.SpellCategoryNone",
|
||||||
|
unset: "DS4.SpellCategoryUnset",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the set of actor types
|
||||||
|
*/
|
||||||
|
actorTypes: {
|
||||||
|
character: "DS4.ActorTypeCharacter",
|
||||||
|
creature: "DS4.ActorTypeCreature",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the set of attributes an actor has
|
||||||
|
*/
|
||||||
|
attributes: {
|
||||||
|
body: "DS4.AttributeBody",
|
||||||
|
mobility: "DS4.AttributeMobility",
|
||||||
|
mind: "DS4.AttributeMind",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the set of traits an actor has
|
||||||
|
*/
|
||||||
|
traits: {
|
||||||
|
strength: "DS4.TraitStrength",
|
||||||
|
agility: "DS4.TraitAgility",
|
||||||
|
intellect: "DS4.TraitIntellect",
|
||||||
|
constitution: "DS4.TraitConstitution",
|
||||||
|
dexterity: "DS4.TraitDexterity",
|
||||||
|
aura: "DS4.TraitAura",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the set of combat values an actor has
|
||||||
|
*/
|
||||||
|
combatValues: {
|
||||||
|
hitPoints: "DS4.CombatValuesHitPoints",
|
||||||
|
defense: "DS4.CombatValuesDefense",
|
||||||
|
initiative: "DS4.CombatValuesInitiative",
|
||||||
|
movement: "DS4.CombatValuesMovement",
|
||||||
|
meleeAttack: "DS4.CombatValuesMeleeAttack",
|
||||||
|
rangedAttack: "DS4.CombatValuesRangedAttack",
|
||||||
|
spellcasting: "DS4.CombatValuesSpellcasting",
|
||||||
|
targetedSpellcasting: "DS4.CombatValuesTargetedSpellcasting",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The what do display in the actor sheets for the combat value text (in some languages, abbreviations are necessary)
|
||||||
|
*/
|
||||||
|
combatValuesSheet: {
|
||||||
|
hitPoints: "DS4.CombatValuesHitPointsSheet",
|
||||||
|
defense: "DS4.CombatValuesDefenseSheet",
|
||||||
|
initiative: "DS4.CombatValuesInitiativeSheet",
|
||||||
|
movement: "DS4.CombatValuesMovementSheet",
|
||||||
|
meleeAttack: "DS4.CombatValuesMeleeAttackSheet",
|
||||||
|
rangedAttack: "DS4.CombatValuesRangedAttackSheet",
|
||||||
|
spellcasting: "DS4.CombatValuesSpellcastingSheet",
|
||||||
|
targetedSpellcasting: "DS4.CombatValuesTargetedSpellcastingSheet",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the base info of a character
|
||||||
|
*/
|
||||||
|
characterBaseInfo: {
|
||||||
|
race: "DS4.CharacterBaseInfoRace",
|
||||||
|
class: "DS4.CharacterBaseInfoClass",
|
||||||
|
heroClass: "DS4.CharacterBaseInfoHeroClass",
|
||||||
|
culture: "DS4.CharacterBaseInfoCulture",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the progression info of a character
|
||||||
|
*/
|
||||||
|
characterProgression: {
|
||||||
|
level: "DS4.CharacterProgressionLevel",
|
||||||
|
experiencePoints: "DS4.CharacterProgressionExperiencePoints",
|
||||||
|
talentPoints: "DS4.CharacterProgressionTalentPoints",
|
||||||
|
progressPoints: "DS4.CharacterProgressionProgressPoints",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the language info of a character
|
||||||
|
*/
|
||||||
|
characterLanguage: {
|
||||||
|
languages: "DS4.CharacterLanguageLanguages",
|
||||||
|
alphabets: "DS4.CharacterLanguageAlphabets",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the profile info of a character
|
||||||
|
*/
|
||||||
|
characterProfile: {
|
||||||
|
biography: "DS4.CharacterProfileBiography",
|
||||||
|
gender: "DS4.CharacterProfileGender",
|
||||||
|
birthday: "DS4.CharacterProfileBirthday",
|
||||||
|
birthplace: "DS4.CharacterProfileBirthplace",
|
||||||
|
age: "DS4.CharacterProfileAge",
|
||||||
|
height: "DS4.CharacterProfileHeight",
|
||||||
|
hairColor: "DS4.CharacterProfileHairColor",
|
||||||
|
weight: "DS4.CharacterProfileWeight",
|
||||||
|
eyeColor: "DS4.CharacterProfileEyeColor",
|
||||||
|
specialCharacteristics: "DS4.CharacterProfileSpecialCharacteristics",
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* Define currency elements of a character
|
||||||
|
*/
|
||||||
|
characterCurrency: {
|
||||||
|
gold: "DS4.CharacterCurrencyGold",
|
||||||
|
silver: "DS4.CharacterCurrencySilver",
|
||||||
|
copper: "DS4.CharacterCurrencyCopper",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the different creature types a creature can be
|
||||||
|
*/
|
||||||
|
creatureTypes: {
|
||||||
|
animal: "DS4.CreatureTypeAnimal",
|
||||||
|
construct: "DS4.CreatureTypeConstruct",
|
||||||
|
humanoid: "DS4.CreatureTypeHumanoid",
|
||||||
|
magicalEntity: "DS4.CreatureTypeMagicalEntity",
|
||||||
|
plantBeing: "DS4.CreatureTypePlantBeing",
|
||||||
|
undead: "DS4.CreatureTypeUndead",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the different size categories creatures fall into
|
||||||
|
*/
|
||||||
|
creatureSizeCategories: {
|
||||||
|
tiny: "DS4.CreatureSizeCategoryTiny",
|
||||||
|
small: "DS4.CreatureSizeCategorySmall",
|
||||||
|
normal: "DS4.CreatureSizeCategoryNormal",
|
||||||
|
large: "DS4.CreatureSizeCategoryLarge",
|
||||||
|
huge: "DS4.CreatureSizeCategoryHuge",
|
||||||
|
colossal: "DS4.CreatureSizeCategoryColossal",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the base info of a creature
|
||||||
|
*/
|
||||||
|
creatureBaseInfo: {
|
||||||
|
loot: "DS4.CreatureBaseInfoLoot",
|
||||||
|
foeFactor: "DS4.CreatureBaseInfoFoeFactor",
|
||||||
|
creatureType: "DS4.CreatureBaseInfoCreatureType",
|
||||||
|
sizeCategory: "DS4.CreatureBaseInfoSizeCategory",
|
||||||
|
experiencePoints: "DS4.CreatureBaseInfoExperiencePoints",
|
||||||
|
description: "DS4.CreatureBaseInfoDescription",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define translations for available distance units
|
||||||
|
*/
|
||||||
|
distanceUnits: {
|
||||||
|
meter: "DS4.UnitMeters",
|
||||||
|
kilometer: "DS4.UnitKilometers",
|
||||||
|
custom: "DS4.UnitCustom",
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* Define abbreviations for available distance units
|
||||||
|
*/
|
||||||
|
distanceUnitsAbbr: {
|
||||||
|
meter: "DS4.UnitMetersAbbr",
|
||||||
|
kilometer: "DS4.UnitKilometersAbbr",
|
||||||
|
custom: "DS4.UnitCustomAbbr",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define translations for available duration units
|
||||||
|
*/
|
||||||
|
temporalUnits: {
|
||||||
|
rounds: "DS4.UnitRounds",
|
||||||
|
minutes: "DS4.UnitMinutes",
|
||||||
|
hours: "DS4.UnitHours",
|
||||||
|
days: "DS4.UnitDays",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define translations for available duration units including "custom"
|
||||||
|
*/
|
||||||
|
customTemporalUnits: {
|
||||||
|
rounds: "DS4.UnitRounds",
|
||||||
|
minutes: "DS4.UnitMinutes",
|
||||||
|
hours: "DS4.UnitHours",
|
||||||
|
days: "DS4.UnitDays",
|
||||||
|
custom: "DS4.UnitCustom",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define abbreviations for available duration units
|
||||||
|
*/
|
||||||
|
temporalUnitsAbbr: {
|
||||||
|
rounds: "DS4.UnitRoundsAbbr",
|
||||||
|
minutes: "DS4.UnitMinutesAbbr",
|
||||||
|
hours: "DS4.UnitHoursAbbr",
|
||||||
|
days: "DS4.UnitDaysAbbr",
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define abbreviations for available duration units including "custom"
|
||||||
|
*/
|
||||||
|
customTemporalUnitsAbbr: {
|
||||||
|
rounds: "DS4.UnitRoundsAbbr",
|
||||||
|
minutes: "DS4.UnitMinutesAbbr",
|
||||||
|
hours: "DS4.UnitHoursAbbr",
|
||||||
|
days: "DS4.UnitDaysAbbr",
|
||||||
|
custom: "DS4.UnitCustomAbbr",
|
||||||
|
},
|
||||||
|
|
||||||
|
checks: {
|
||||||
|
appraise: "DS4.ChecksAppraise",
|
||||||
|
changeSpell: "DS4.ChecksChangeSpell",
|
||||||
|
climb: "DS4.ChecksClimb",
|
||||||
|
communicate: "DS4.ChecksCommunicate",
|
||||||
|
decipherScript: "DS4.ChecksDecipherScript",
|
||||||
|
defend: "DS4.ChecksDefend",
|
||||||
|
defyPoison: "DS4.ChecksDefyPoison",
|
||||||
|
disableTraps: "DS4.ChecksDisableTraps",
|
||||||
|
featOfStrength: "DS4.ChecksFeatOfStrength",
|
||||||
|
flirt: "DS4.ChecksFlirt",
|
||||||
|
haggle: "DS4.ChecksHaggle",
|
||||||
|
hide: "DS4.ChecksHide",
|
||||||
|
identifyMagic: "DS4.ChecksIdentifyMagic",
|
||||||
|
jump: "DS4.ChecksJump",
|
||||||
|
knowledge: "DS4.ChecksKnowledge",
|
||||||
|
openLock: "DS4.ChecksOpenLock",
|
||||||
|
perception: "DS4.ChecksPerception",
|
||||||
|
pickPocket: "DS4.ChecksPickPocket",
|
||||||
|
readTracks: "DS4.ChecksReadTracks",
|
||||||
|
resistDisease: "DS4.ChecksResistDisease",
|
||||||
|
ride: "DS4.ChecksRide",
|
||||||
|
search: "DS4.ChecksSearch",
|
||||||
|
senseMagic: "DS4.ChecksSenseMagic",
|
||||||
|
sneak: "DS4.ChecksSneak",
|
||||||
|
startFire: "DS4.ChecksStartFire",
|
||||||
|
swim: "DS4.ChecksSwim",
|
||||||
|
wakeUp: "DS4.ChecksWakeUp",
|
||||||
|
workMechanism: "DS4.ChecksWorkMechanism",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
export const DS4 = {
|
export const DS4 = {
|
||||||
// ASCII Artwork
|
// ASCII Artwork
|
||||||
ASCII: String.raw`_____________________________________________________________________________________________
|
ASCII: String.raw`_____________________________________________________________________________________________
|
||||||
|
@ -20,340 +355,12 @@ export const DS4 = {
|
||||||
* resp. their localization keys.
|
* resp. their localization keys.
|
||||||
* The localization is assumed to take place on each reload.
|
* The localization is assumed to take place on each reload.
|
||||||
*/
|
*/
|
||||||
i18n: {
|
i18n: i18nKeys,
|
||||||
/**
|
|
||||||
* Define the set of acttack types that can be performed with weapon items
|
|
||||||
*/
|
|
||||||
attackTypes: {
|
|
||||||
melee: "DS4.AttackTypeMelee",
|
|
||||||
ranged: "DS4.AttackTypeRanged",
|
|
||||||
meleeRanged: "DS4.AttackTypeMeleeRanged",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define the set of item availabilties
|
* A dictionary of dictionaries each mapping keys to localizion keys.
|
||||||
*/
|
*/
|
||||||
itemAvailabilities: {
|
i18nKeys,
|
||||||
unset: "DS4.ItemAvailabilityUnset",
|
|
||||||
hamlet: "DS4.ItemAvailabilityHamlet",
|
|
||||||
village: "DS4.ItemAvailabilityVilage",
|
|
||||||
city: "DS4.ItemAvailabilityCity",
|
|
||||||
elves: "DS4.ItemAvailabilityElves",
|
|
||||||
dwarves: "DS4.ItemAvailabilityDwarves",
|
|
||||||
nowhere: "DS4.ItemAvailabilityNowhere",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the set of item types
|
|
||||||
*/
|
|
||||||
itemTypes: {
|
|
||||||
weapon: "DS4.ItemTypeWeapon",
|
|
||||||
armor: "DS4.ItemTypeArmor",
|
|
||||||
shield: "DS4.ItemTypeShield",
|
|
||||||
spell: "DS4.ItemTypeSpell",
|
|
||||||
equipment: "DS4.ItemTypeEquipment",
|
|
||||||
loot: "DS4.ItemTypeLoot",
|
|
||||||
talent: "DS4.ItemTypeTalent",
|
|
||||||
racialAbility: "DS4.ItemTypeRacialAbility",
|
|
||||||
language: "DS4.ItemTypeLanguage",
|
|
||||||
alphabet: "DS4.ItemTypeAlphabet",
|
|
||||||
specialCreatureAbility: "DS4.ItemTypeSpecialCreatureAbility",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the set of armor types, a character may only wear one item of each at any given time
|
|
||||||
*/
|
|
||||||
armorTypes: {
|
|
||||||
body: "DS4.ArmorTypeBody",
|
|
||||||
helmet: "DS4.ArmorTypeHelmet",
|
|
||||||
vambrace: "DS4.ArmorTypeVambrace",
|
|
||||||
greaves: "DS4.ArmorTypeGreaves",
|
|
||||||
vambraceGreaves: "DS4.ArmorTypeVambraceGreaves",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define abbreviations for the armor types
|
|
||||||
*/
|
|
||||||
armorTypesAbbr: {
|
|
||||||
body: "DS4.ArmorTypeBodyAbbr",
|
|
||||||
helmet: "DS4.ArmorTypeHelmetAbbr",
|
|
||||||
vambrace: "DS4.ArmorTypeVambraceAbbr",
|
|
||||||
greaves: "DS4.ArmorTypeGreavesAbbr",
|
|
||||||
vambraceGreaves: "DS4.ArmorTypeVambraceGreavesAbbr",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the set of armor materials, used to determine if a character may wear the armor without additional penalties
|
|
||||||
*/
|
|
||||||
armorMaterialTypes: {
|
|
||||||
cloth: "DS4.ArmorMaterialTypeCloth",
|
|
||||||
leather: "DS4.ArmorMaterialTypeLeather",
|
|
||||||
chain: "DS4.ArmorMaterialTypeChain",
|
|
||||||
plate: "DS4.ArmorMaterialTypePlate",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the abbreviations of armor materials
|
|
||||||
*/
|
|
||||||
armorMaterialTypesAbbr: {
|
|
||||||
cloth: "DS4.ArmorMaterialTypeClothAbbr",
|
|
||||||
leather: "DS4.ArmorMaterialTypeLeatherAbbr",
|
|
||||||
chain: "DS4.ArmorMaterialTypeChainAbbr",
|
|
||||||
plate: "DS4.ArmorMaterialTypePlateAbbr",
|
|
||||||
},
|
|
||||||
|
|
||||||
spellTypes: {
|
|
||||||
spellcasting: "DS4.SpellTypeSpellcasting",
|
|
||||||
targetedSpellcasting: "DS4.SpellTypeTargetedSpellcasting",
|
|
||||||
},
|
|
||||||
|
|
||||||
spellCategories: {
|
|
||||||
healing: "DS4.SpellCategoryHealing",
|
|
||||||
fire: "DS4.SpellCategoryFire",
|
|
||||||
ice: "DS4.SpellCategoryIce",
|
|
||||||
light: "DS4.SpellCategoryLight",
|
|
||||||
darkness: "DS4.SpellCategoryDarkness",
|
|
||||||
mindAffecting: "DS4.SpellCategoryMindAffecting",
|
|
||||||
electricity: "DS4.SpellCategoryElectricity",
|
|
||||||
none: "DS4.SpellCategoryNone",
|
|
||||||
unset: "DS4.SpellCategoryUnset",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the set of actor types
|
|
||||||
*/
|
|
||||||
actorTypes: {
|
|
||||||
character: "DS4.ActorTypeCharacter",
|
|
||||||
creature: "DS4.ActorTypeCreature",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the set of attributes an actor has
|
|
||||||
*/
|
|
||||||
attributes: {
|
|
||||||
body: "DS4.AttributeBody",
|
|
||||||
mobility: "DS4.AttributeMobility",
|
|
||||||
mind: "DS4.AttributeMind",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the set of traits an actor has
|
|
||||||
*/
|
|
||||||
traits: {
|
|
||||||
strength: "DS4.TraitStrength",
|
|
||||||
agility: "DS4.TraitAgility",
|
|
||||||
intellect: "DS4.TraitIntellect",
|
|
||||||
constitution: "DS4.TraitConstitution",
|
|
||||||
dexterity: "DS4.TraitDexterity",
|
|
||||||
aura: "DS4.TraitAura",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the set of combat values an actor has
|
|
||||||
*/
|
|
||||||
combatValues: {
|
|
||||||
hitPoints: "DS4.CombatValuesHitPoints",
|
|
||||||
defense: "DS4.CombatValuesDefense",
|
|
||||||
initiative: "DS4.CombatValuesInitiative",
|
|
||||||
movement: "DS4.CombatValuesMovement",
|
|
||||||
meleeAttack: "DS4.CombatValuesMeleeAttack",
|
|
||||||
rangedAttack: "DS4.CombatValuesRangedAttack",
|
|
||||||
spellcasting: "DS4.CombatValuesSpellcasting",
|
|
||||||
targetedSpellcasting: "DS4.CombatValuesTargetedSpellcasting",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The what do display in the actor sheets for the combat value text (in some languages, abbreviations are necessary)
|
|
||||||
*/
|
|
||||||
combatValuesSheet: {
|
|
||||||
hitPoints: "DS4.CombatValuesHitPointsSheet",
|
|
||||||
defense: "DS4.CombatValuesDefenseSheet",
|
|
||||||
initiative: "DS4.CombatValuesInitiativeSheet",
|
|
||||||
movement: "DS4.CombatValuesMovementSheet",
|
|
||||||
meleeAttack: "DS4.CombatValuesMeleeAttackSheet",
|
|
||||||
rangedAttack: "DS4.CombatValuesRangedAttackSheet",
|
|
||||||
spellcasting: "DS4.CombatValuesSpellcastingSheet",
|
|
||||||
targetedSpellcasting: "DS4.CombatValuesTargetedSpellcastingSheet",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the base info of a character
|
|
||||||
*/
|
|
||||||
characterBaseInfo: {
|
|
||||||
race: "DS4.CharacterBaseInfoRace",
|
|
||||||
class: "DS4.CharacterBaseInfoClass",
|
|
||||||
heroClass: "DS4.CharacterBaseInfoHeroClass",
|
|
||||||
culture: "DS4.CharacterBaseInfoCulture",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the progression info of a character
|
|
||||||
*/
|
|
||||||
characterProgression: {
|
|
||||||
level: "DS4.CharacterProgressionLevel",
|
|
||||||
experiencePoints: "DS4.CharacterProgressionExperiencePoints",
|
|
||||||
talentPoints: "DS4.CharacterProgressionTalentPoints",
|
|
||||||
progressPoints: "DS4.CharacterProgressionProgressPoints",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the language info of a character
|
|
||||||
*/
|
|
||||||
characterLanguage: {
|
|
||||||
languages: "DS4.CharacterLanguageLanguages",
|
|
||||||
alphabets: "DS4.CharacterLanguageAlphabets",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the profile info of a character
|
|
||||||
*/
|
|
||||||
characterProfile: {
|
|
||||||
biography: "DS4.CharacterProfileBiography",
|
|
||||||
gender: "DS4.CharacterProfileGender",
|
|
||||||
birthday: "DS4.CharacterProfileBirthday",
|
|
||||||
birthplace: "DS4.CharacterProfileBirthplace",
|
|
||||||
age: "DS4.CharacterProfileAge",
|
|
||||||
height: "DS4.CharacterProfileHeight",
|
|
||||||
hairColor: "DS4.CharacterProfileHairColor",
|
|
||||||
weight: "DS4.CharacterProfileWeight",
|
|
||||||
eyeColor: "DS4.CharacterProfileEyeColor",
|
|
||||||
specialCharacteristics: "DS4.CharacterProfileSpecialCharacteristics",
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* Define currency elements of a character
|
|
||||||
*/
|
|
||||||
characterCurrency: {
|
|
||||||
gold: "DS4.CharacterCurrencyGold",
|
|
||||||
silver: "DS4.CharacterCurrencySilver",
|
|
||||||
copper: "DS4.CharacterCurrencyCopper",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the different creature types a creature can be
|
|
||||||
*/
|
|
||||||
creatureTypes: {
|
|
||||||
animal: "DS4.CreatureTypeAnimal",
|
|
||||||
construct: "DS4.CreatureTypeConstruct",
|
|
||||||
humanoid: "DS4.CreatureTypeHumanoid",
|
|
||||||
magicalEntity: "DS4.CreatureTypeMagicalEntity",
|
|
||||||
plantBeing: "DS4.CreatureTypePlantBeing",
|
|
||||||
undead: "DS4.CreatureTypeUndead",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the different size categories creatures fall into
|
|
||||||
*/
|
|
||||||
creatureSizeCategories: {
|
|
||||||
tiny: "DS4.CreatureSizeCategoryTiny",
|
|
||||||
small: "DS4.CreatureSizeCategorySmall",
|
|
||||||
normal: "DS4.CreatureSizeCategoryNormal",
|
|
||||||
large: "DS4.CreatureSizeCategoryLarge",
|
|
||||||
huge: "DS4.CreatureSizeCategoryHuge",
|
|
||||||
colossal: "DS4.CreatureSizeCategoryColossal",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the base info of a creature
|
|
||||||
*/
|
|
||||||
creatureBaseInfo: {
|
|
||||||
loot: "DS4.CreatureBaseInfoLoot",
|
|
||||||
foeFactor: "DS4.CreatureBaseInfoFoeFactor",
|
|
||||||
creatureType: "DS4.CreatureBaseInfoCreatureType",
|
|
||||||
sizeCategory: "DS4.CreatureBaseInfoSizeCategory",
|
|
||||||
experiencePoints: "DS4.CreatureBaseInfoExperiencePoints",
|
|
||||||
description: "DS4.CreatureBaseInfoDescription",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define translations for available distance units
|
|
||||||
*/
|
|
||||||
distanceUnits: {
|
|
||||||
meter: "DS4.UnitMeters",
|
|
||||||
kilometer: "DS4.UnitKilometers",
|
|
||||||
custom: "DS4.UnitCustom",
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* Define abbreviations for available distance units
|
|
||||||
*/
|
|
||||||
distanceUnitsAbbr: {
|
|
||||||
meter: "DS4.UnitMetersAbbr",
|
|
||||||
kilometer: "DS4.UnitKilometersAbbr",
|
|
||||||
custom: "DS4.UnitCustomAbbr",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define translations for available duration units
|
|
||||||
*/
|
|
||||||
temporalUnits: {
|
|
||||||
rounds: "DS4.UnitRounds",
|
|
||||||
minutes: "DS4.UnitMinutes",
|
|
||||||
hours: "DS4.UnitHours",
|
|
||||||
days: "DS4.UnitDays",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define translations for available duration units including "custom"
|
|
||||||
*/
|
|
||||||
customTemporalUnits: {
|
|
||||||
rounds: "DS4.UnitRounds",
|
|
||||||
minutes: "DS4.UnitMinutes",
|
|
||||||
hours: "DS4.UnitHours",
|
|
||||||
days: "DS4.UnitDays",
|
|
||||||
custom: "DS4.UnitCustom",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define abbreviations for available duration units
|
|
||||||
*/
|
|
||||||
temporalUnitsAbbr: {
|
|
||||||
rounds: "DS4.UnitRoundsAbbr",
|
|
||||||
minutes: "DS4.UnitMinutesAbbr",
|
|
||||||
hours: "DS4.UnitHoursAbbr",
|
|
||||||
days: "DS4.UnitDaysAbbr",
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define abbreviations for available duration units including "custom"
|
|
||||||
*/
|
|
||||||
customTemporalUnitsAbbr: {
|
|
||||||
rounds: "DS4.UnitRoundsAbbr",
|
|
||||||
minutes: "DS4.UnitMinutesAbbr",
|
|
||||||
hours: "DS4.UnitHoursAbbr",
|
|
||||||
days: "DS4.UnitDaysAbbr",
|
|
||||||
custom: "DS4.UnitCustomAbbr",
|
|
||||||
},
|
|
||||||
|
|
||||||
checks: {
|
|
||||||
appraise: "DS4.ChecksAppraise",
|
|
||||||
changeSpell: "DS4.ChecksChangeSpell",
|
|
||||||
climb: "DS4.ChecksClimb",
|
|
||||||
communicate: "DS4.ChecksCommunicate",
|
|
||||||
decipherScript: "DS4.ChecksDecipherScript",
|
|
||||||
defend: "DS4.ChecksDefend",
|
|
||||||
defyPoison: "DS4.ChecksDefyPoison",
|
|
||||||
disableTraps: "DS4.ChecksDisableTraps",
|
|
||||||
featOfStrength: "DS4.ChecksFeatOfStrength",
|
|
||||||
flirt: "DS4.ChecksFlirt",
|
|
||||||
haggle: "DS4.ChecksHaggle",
|
|
||||||
hide: "DS4.ChecksHide",
|
|
||||||
identifyMagic: "DS4.ChecksIdentifyMagic",
|
|
||||||
jump: "DS4.ChecksJump",
|
|
||||||
knowledge: "DS4.ChecksKnowledge",
|
|
||||||
openLock: "DS4.ChecksOpenLock",
|
|
||||||
perception: "DS4.ChecksPerception",
|
|
||||||
pickPocket: "DS4.ChecksPickPocket",
|
|
||||||
readTracks: "DS4.ChecksReadTracks",
|
|
||||||
resistDisease: "DS4.ChecksResistDisease",
|
|
||||||
ride: "DS4.ChecksRide",
|
|
||||||
search: "DS4.ChecksSearch",
|
|
||||||
senseMagic: "DS4.ChecksSenseMagic",
|
|
||||||
sneak: "DS4.ChecksSneak",
|
|
||||||
startFire: "DS4.ChecksStartFire",
|
|
||||||
swim: "DS4.ChecksSwim",
|
|
||||||
wakeUp: "DS4.ChecksWakeUp",
|
|
||||||
workMechanism: "DS4.ChecksWorkMechanism",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A dictionary of dictionaries mapping keys to icon file paths.
|
* A dictionary of dictionaries mapping keys to icon file paths.
|
||||||
|
|
|
@ -8,6 +8,7 @@ import { DS4ActiveEffect } from "../active-effect";
|
||||||
import { DS4Actor } from "../actor/actor";
|
import { DS4Actor } from "../actor/actor";
|
||||||
import { DS4CharacterActorSheet } from "../actor/sheets/character-sheet";
|
import { DS4CharacterActorSheet } from "../actor/sheets/character-sheet";
|
||||||
import { DS4CreatureActorSheet } from "../actor/sheets/creature-sheet";
|
import { DS4CreatureActorSheet } from "../actor/sheets/creature-sheet";
|
||||||
|
import { DS4ChatMessage } from "../chat-message";
|
||||||
import { DS4 } from "../config";
|
import { DS4 } from "../config";
|
||||||
import { preloadFonts as preloadFonts } from "../fonts";
|
import { preloadFonts as preloadFonts } from "../fonts";
|
||||||
import registerHandlebarsHelpers from "../handlebars/handlebars-helpers";
|
import registerHandlebarsHelpers from "../handlebars/handlebars-helpers";
|
||||||
|
@ -45,6 +46,7 @@ async function init() {
|
||||||
CONFIG.Actor.documentClass = DS4Actor;
|
CONFIG.Actor.documentClass = DS4Actor;
|
||||||
CONFIG.Item.documentClass = DS4Item;
|
CONFIG.Item.documentClass = DS4Item;
|
||||||
CONFIG.ActiveEffect.documentClass = DS4ActiveEffect;
|
CONFIG.ActiveEffect.documentClass = DS4ActiveEffect;
|
||||||
|
CONFIG.ChatMessage.documentClass = DS4ChatMessage;
|
||||||
|
|
||||||
CONFIG.Actor.typeLabels = DS4.i18n.actorTypes;
|
CONFIG.Actor.typeLabels = DS4.i18n.actorTypes;
|
||||||
CONFIG.Item.typeLabels = DS4.i18n.itemTypes;
|
CONFIG.Item.typeLabels = DS4.i18n.itemTypes;
|
||||||
|
|
|
@ -113,7 +113,8 @@ export class DS4Item extends Item {
|
||||||
rollMode: getGame().settings.get("core", "rollMode"),
|
rollMode: getGame().settings.get("core", "rollMode"),
|
||||||
maximumCoupResult: ownerDataData.rolling.maximumCoupResult,
|
maximumCoupResult: ownerDataData.rolling.maximumCoupResult,
|
||||||
minimumFumbleResult: ownerDataData.rolling.minimumFumbleResult,
|
minimumFumbleResult: ownerDataData.rolling.minimumFumbleResult,
|
||||||
flavor: getGame().i18n.format("DS4.ItemWeaponCheckFlavor", { actor: this.actor.name, weapon: this.name }),
|
flavor: "DS4.ItemWeaponCheckFlavor",
|
||||||
|
flavorData: { actor: this.actor.name, weapon: this.name },
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,7 +161,8 @@ export class DS4Item extends Item {
|
||||||
rollMode: getGame().settings.get("core", "rollMode"),
|
rollMode: getGame().settings.get("core", "rollMode"),
|
||||||
maximumCoupResult: ownerDataData.rolling.maximumCoupResult,
|
maximumCoupResult: ownerDataData.rolling.maximumCoupResult,
|
||||||
minimumFumbleResult: ownerDataData.rolling.minimumFumbleResult,
|
minimumFumbleResult: ownerDataData.rolling.minimumFumbleResult,
|
||||||
flavor: getGame().i18n.format("DS4.ItemSpellCheckFlavor", { actor: this.actor.name, spell: this.name }),
|
flavor: "DS4.ItemSpellCheckFlavor",
|
||||||
|
flavorData: { actor: this.actor.name, spell: this.name },
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ export async function rollItem(itemId: string): Promise<void> {
|
||||||
return notifications.warn(getGame().i18n.localize("DS4.WarningMustControlActorToUseRollItemMacro"));
|
return notifications.warn(getGame().i18n.localize("DS4.WarningMustControlActorToUseRollItemMacro"));
|
||||||
}
|
}
|
||||||
|
|
||||||
const item = actor.items?.get(itemId);
|
const item = actor.items.get(itemId);
|
||||||
if (!item) {
|
if (!item) {
|
||||||
return notifications.warn(
|
return notifications.warn(
|
||||||
getGame().i18n.format("DS4.WarningControlledActorDoesNotHaveItem", {
|
getGame().i18n.format("DS4.WarningControlledActorDoesNotHaveItem", {
|
||||||
|
|
|
@ -48,7 +48,11 @@ class CheckFactory {
|
||||||
const speaker = ChatMessage.getSpeaker();
|
const speaker = ChatMessage.getSpeaker();
|
||||||
|
|
||||||
return roll.toMessage(
|
return roll.toMessage(
|
||||||
{ speaker, flavor: this.options.flavor },
|
{
|
||||||
|
speaker,
|
||||||
|
flavor: this.options.flavor,
|
||||||
|
flags: this.options.flavorData ? { ds4: { flavorData: this.options.flavorData } } : undefined,
|
||||||
|
},
|
||||||
{ rollMode: this.options.rollMode, create: true },
|
{ rollMode: this.options.rollMode, create: true },
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -91,6 +95,7 @@ export async function createCheckRoll(
|
||||||
useSlayingDice: getGame().settings.get("ds4", "useSlayingDiceForAutomatedChecks"),
|
useSlayingDice: getGame().settings.get("ds4", "useSlayingDiceForAutomatedChecks"),
|
||||||
rollMode: gmModifierData.rollMode ?? options.rollMode,
|
rollMode: gmModifierData.rollMode ?? options.rollMode,
|
||||||
flavor: options.flavor,
|
flavor: options.flavor,
|
||||||
|
flavorData: options.flavorData,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Create Factory
|
// Create Factory
|
||||||
|
@ -224,4 +229,5 @@ export interface DS4CheckFactoryOptions {
|
||||||
useSlayingDice: boolean;
|
useSlayingDice: boolean;
|
||||||
rollMode: foundry.CONST.DiceRollMode;
|
rollMode: foundry.CONST.DiceRollMode;
|
||||||
flavor?: string;
|
flavor?: string;
|
||||||
|
flavorData?: Record<string, string | number | null>;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue