12 Commits
1.2.0 ... 3.1.1

Author SHA1 Message Date
Gitlab CI
0d564b9562 chore: Release 3.1.1 2024-05-28 05:24:14 +00:00
Matthieu CAILLEAUX
ac78e6c74d use normal access to itemTypes 2024-05-28 07:18:58 +02:00
Gitlab CI
bed5243fd5 chore: Release 3.1.0 2024-05-27 19:26:23 +00:00
Matthieu CAILLEAUX
3a1734c477 7.1.6 system compatibility 2024-05-27 20:58:54 +02:00
Gitlab CI
7279b93e4c chore: Release 3.0.1 2024-02-16 14:33:49 +00:00
Matthieu CAILLEAUX
1d940892d7 update manifest 2024-02-16 15:32:22 +01:00
Gitlab CI
612ed7b631 chore: Release 3.0.0 2023-06-26 11:20:06 +00:00
Matthieu CAILLEAUX
fcd74152bb update release version dep 2023-06-26 13:15:39 +02:00
Matthieu CAILLEAUX
3451c86b36 chore: V11 compat 2023-06-26 12:43:35 +02:00
Gitlab CI
fc49c91024 chore: Release 2.0.0 2022-10-07 12:55:26 +00:00
Matthieu CAILLEAUX
c3c4027511 chore: V10 compat 2022-10-07 14:53:03 +02:00
Matthieu CAILLEAUX
a0fffb6cf7 chore: V10 compat 2022-10-07 14:47:17 +02:00
6 changed files with 3308 additions and 55 deletions

View File

@@ -4,11 +4,11 @@ variables:
include: include:
- project: '$CI_PROJECT_ROOT_NAMESPACE/ci-tools/pipeline/ci-tools-pipeline-release' - project: '$CI_PROJECT_ROOT_NAMESPACE/ci-tools/pipeline/ci-tools-pipeline-release'
ref: 1.0.0 ref: 2.0.0
file: '/release-common.yml' file: '/release-common.yml'
- project: '$CI_PROJECT_ROOT_NAMESPACE/ci-tools/pipeline/ci-tools-pipeline-release-node' - project: '$CI_PROJECT_ROOT_NAMESPACE/ci-tools/pipeline/ci-tools-pipeline-release-node'
ref: 1.0.2 ref: 1.0.2
file: '/release-node.yml' file: '/release-node.yml'
- project: '$CI_PROJECT_ROOT_NAMESPACE/ci-tools/pipeline/ci-tools-pipeline-project-foundry-module' - project: '$CI_PROJECT_ROOT_NAMESPACE/ci-tools/pipeline/ci-tools-pipeline-project-foundry-module'
ref: 1.0.1 ref: 1.1.0
file: '/pipeline-foundry-module.yml' file: '/pipeline-foundry-module.yml'

View File

@@ -1,24 +1,45 @@
{ {
"name": "wfrp4e-actor-sheet-print", "id": "wfrp4e-actor-sheet-print",
"title": "[WFRP4] Actor Sheet Print", "title": "[WFRP4] Actor Sheet Print",
"description": "Functions to print actor sheet", "description": "Functions to print actor sheet",
"version": "${MODULE_VERSION}", "version": "${MODULE_VERSION}",
"minimumCoreVersion": "0.8.0", "compatibility": {
"compatibleCoreVersion": "9", "minimum": "11",
"author": "Skeroujvapluvit", "verified": "11.315",
"systems": ["wfrp4e"], "maximum": "11"
"dependencies": [], },
"authors": [
{
"name": "Skeroujvapluvit",
"flags": {}
}
],
"relationships": {
"systems": [
{
"id": "wfrp4e",
"type": "system",
"compatibility": {
"minimum": "7.1.6",
"verified": "7.1.6"
}
}
],
"requires": []
},
"esmodules": ["main.js"], "esmodules": ["main.js"],
"languages": [ "languages": [
{ {
"lang": "en", "lang": "en",
"name": "English", "name": "English",
"path": "lang/en.json" "path": "lang/en.json",
"flags": {}
}, },
{ {
"lang": "fr", "lang": "fr",
"name": "Français", "name": "Français",
"path": "lang/fr.json" "path": "lang/fr.json",
"flags": {}
} }
], ],
"styles": ["./styles/main.css"], "styles": ["./styles/main.css"],

3244
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@
"build": "webpack", "build": "webpack",
"local-deploy": "npm run package && sh ./local-deploy.sh" "local-deploy": "npm run package && sh ./local-deploy.sh"
}, },
"version": "1.2.0", "version": "3.1.1",
"devDependencies": { "devDependencies": {
"@league-of-foundry-developers/foundry-vtt-types": "0.8.9-9", "@league-of-foundry-developers/foundry-vtt-types": "0.8.9-9",
"husky": "4.3.7", "husky": "4.3.7",

View File

@@ -79,30 +79,36 @@ function addActorSheetActionButton(
} }
async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
const actorData = actor.data; const actorData = actor;
// @ts-ignore // @ts-ignore
const actorDetails = actorData.data.details; const actorDetails = actorData.system.details;
const actorStatus = actorData.data.status; const actorStatus = actorData.system.status;
const actorCharacs = actor.characteristics; const actorCharacs = actor.characteristics;
const actorImage = actor.img; const actorImage = actor.img;
let actorImageData: string | null = null; let actorImageData: string | null = null;
if (actorImage != null) { if (actorImage != null) {
const texture = await loadTexture(actorImage); const texture = await loadTexture(actorImage);
actorImageData = ImageHelper.textureToImage(texture); actorImageData = await ImageHelper.textureToImage(texture);
} }
const currentCareer: Item & any = actor.currentCareer; const currentCareer: Item & any = actor.currentCareer;
const careerData: ItemData = currentCareer?.data; const careerData: ItemData & any = currentCareer;
const careerDetail: any = careerData?.data; const careerDetail: any = careerData?.system;
const skills = new LabelledValues( const skills = new LabelledValues(
docBuilder.getGenerateType(), docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.skill actor.itemTypes.skill
.map((item) => { .map((item) => {
const key = item.characteristic.key
const i18nKey = key.length > 1 ? key.charAt(0).toUpperCase() + key.substring(1) : key.toUpperCase()
let i18nResult = i18nLocalize('CHARAbbrev.' + i18nKey)
if (i18nResult.includes('CHARAbbrev')) {
i18nResult = i18nLocalize('CHARAbbrev.' + i18nKey.toUpperCase())
}
return { return {
label: `${item.name} (${i18nLocalize(item.characteristic.abrev)})`, label: `${item.name} (${i18nResult})`,
value: item.data.data.total.value, value: item.system.total.value,
}; };
}) })
.sort((a, b) => a.label.localeCompare(b.label)), .sort((a, b) => a.label.localeCompare(b.label)),
@@ -113,10 +119,10 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
const talentsByName: { [name: string]: { count: number; test: string } } = {}; const talentsByName: { [name: string]: { count: number; test: string } } = {};
actor.itemCategories.talent.forEach((item) => { actor.itemTypes.talent.forEach((item) => {
const name = item.name; const name = item.name;
if (talentsByName[name] == null) { if (talentsByName[name] == null) {
talentsByName[name] = { count: 1, test: item.data.data.tests.value }; talentsByName[name] = { count: 1, test: item.system.tests.value };
} else { } else {
talentsByName[name].count++; talentsByName[name].count++;
} }
@@ -142,7 +148,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
docBuilder.getGenerateType(), docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.trait actor.itemTypes.trait
.map((item) => { .map((item) => {
return item.name; return item.name;
}) })
@@ -158,7 +164,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
.filter((w) => w.isMelee) .filter((w) => w.isMelee)
.map((item) => { .map((item) => {
return `${item.name} : ${item.WeaponGroup}, ${item.Reach}, ${ return `${item.name} : ${item.WeaponGroup}, ${item.Reach}, ${
item.data.data.damage.meleeValue item.system.damage.value
} (${item.mountDamage}), ${item.OriginalQualities.concat( } (${item.mountDamage}), ${item.OriginalQualities.concat(
item.OriginalFlaws item.OriginalFlaws
).join(', ')}`; ).join(', ')}`;
@@ -176,8 +182,8 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
.filter((w) => w.isRanged) .filter((w) => w.isRanged)
.map((item) => { .map((item) => {
return `${item.name} : ${item.WeaponGroup}, ${ return `${item.name} : ${item.WeaponGroup}, ${
item.data.data.range.value item.system.range.value
} (${item.Range}), ${item.data.data.damage.rangedValue} (${ } (${item.Range}), ${item.system.damage.value} (${
item.Damage item.Damage
}), ${item.OriginalQualities.concat(item.OriginalFlaws).join(', ')}`; }), ${item.OriginalQualities.concat(item.OriginalFlaws).join(', ')}`;
}) })
@@ -192,14 +198,12 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
0, 0,
Util.getActorItems(actor, 'ammunition') Util.getActorItems(actor, 'ammunition')
.map((item) => { .map((item) => {
return `${item.data.data.quantity.value} ${item.name} : ${ return `${item.system.quantity.value} ${item.name} : ${
item.data.data.range.value.length > 0 item.system.range.value.length > 0
? item.data.data.range.value ? item.system.range.value
: 'As Weapon' : 'As Weapon'
}, ${ }, ${
item.data.data.damage.value.length > 0 item.system.damage.value.length > 0 ? item.system.damage.value : '+0'
? item.data.data.damage.value
: '+0'
}, ${item.OriginalQualities.concat(item.OriginalFlaws).join(', ')}`; }, ${item.OriginalQualities.concat(item.OriginalFlaws).join(', ')}`;
}) })
.sort((a, b) => a.localeCompare(b)), .sort((a, b) => a.localeCompare(b)),
@@ -210,7 +214,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
const armourLocation: string[] = []; const armourLocation: string[] = [];
const armourLabels: { [key: string]: string[] } = {}; const armourLabels: { [key: string]: string[] } = {};
for (const armour of Util.getActorItems(actor, 'armour')) { for (const armour of Util.getActorItems(actor, 'armour')) {
const maxAp = armour.data.data.maxAP; const maxAp = armour.system.AP;
for (const key of Object.keys(maxAp)) { for (const key of Object.keys(maxAp)) {
if (maxAp[key] > 0) { if (maxAp[key] > 0) {
if (!armourLocation.includes(key)) { if (!armourLocation.includes(key)) {
@@ -245,7 +249,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
docBuilder.getGenerateType(), docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.spell actor.itemTypes.spell
.filter((s) => s.lore.value === 'petty') .filter((s) => s.lore.value === 'petty')
.map((s) => { .map((s) => {
return `${s.name} : ${s.cn.value}, ${s.Range}, ${s.Target}, ${s.Duration}`; return `${s.name} : ${s.cn.value}, ${s.Range}, ${s.Target}, ${s.Duration}`;
@@ -258,7 +262,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
docBuilder.getGenerateType(), docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.spell actor.itemTypes.spell
.filter((s) => s.lore.value !== 'petty') .filter((s) => s.lore.value !== 'petty')
.map((s) => { .map((s) => {
return `${s.name} : ${s.cn.value}, ${s.Range}, ${s.Target}, ${s.Duration}, ${s.ingredientList.length}`; return `${s.name} : ${s.cn.value}, ${s.Range}, ${s.Target}, ${s.Duration}, ${s.ingredientList.length}`;
@@ -271,7 +275,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
docBuilder.getGenerateType(), docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.prayer actor.itemTypes.prayer
.filter((s) => s.prayerType.value === 'blessing') .filter((s) => s.prayerType.value === 'blessing')
.map((s) => { .map((s) => {
return `${s.name} : ${s.Range}, ${s.Target}, ${s.Duration}`; return `${s.name} : ${s.Range}, ${s.Target}, ${s.Duration}`;
@@ -284,7 +288,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
docBuilder.getGenerateType(), docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.prayer actor.itemTypes.prayer
.filter((s) => s.prayerType.value !== 'blessing') .filter((s) => s.prayerType.value !== 'blessing')
.map((s) => { .map((s) => {
return `${s.name} : ${s.Range}, ${s.Target}, ${s.Duration}`; return `${s.name} : ${s.Range}, ${s.Target}, ${s.Duration}`;
@@ -329,7 +333,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
.map((t) => { .map((t) => {
const location = t.location.value; const location = t.location.value;
let prefix = ''; let prefix = '';
if (location != null && location !== 0) { if (location != null && location !== 0 && location !== '') {
prefix = `${actor.getEmbeddedDocument('Item', location).name} : `; prefix = `${actor.getEmbeddedDocument('Item', location).name} : `;
} }
const qteLabel = t.quantity.value > 1 ? `${t.quantity.value} ` : ''; const qteLabel = t.quantity.value > 1 ? `${t.quantity.value} ` : '';
@@ -344,7 +348,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
docBuilder.getGenerateType(), docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.critical.map((i) => { actor.itemTypes.critical.map((i) => {
return i.name; return i.name;
}), }),
3 3
@@ -354,7 +358,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
docBuilder.getGenerateType(), docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.disease.map((i) => { actor.itemTypes.disease.map((i) => {
return i.name; return i.name;
}), }),
3 3
@@ -364,7 +368,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
docBuilder.getGenerateType(), docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.injury.map((i) => { actor.itemTypes.injury.map((i) => {
return i.name; return i.name;
}), }),
3 3
@@ -374,7 +378,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
docBuilder.getGenerateType(), docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.mutation actor.itemTypes.mutation
.filter((i) => i.mutationType.value === 'physical') .filter((i) => i.mutationType.value === 'physical')
.map((i) => { .map((i) => {
return i.name; return i.name;
@@ -386,7 +390,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
docBuilder.getGenerateType(), docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.mutation actor.itemTypes.mutation
.filter((i) => i.mutationType.value === 'mental') .filter((i) => i.mutationType.value === 'mental')
.map((i) => { .map((i) => {
return i.name; return i.name;
@@ -398,7 +402,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
docBuilder.getGenerateType(), docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.psychology.map((i) => { actor.itemTypes.psychology.map((i) => {
return i.name; return i.name;
}), }),
3 3

View File

@@ -17,12 +17,12 @@ export class Util {
} }
public static getActorItems(actor: Actor & any, key: string): (Item & any)[] { public static getActorItems(actor: Actor & any, key: string): (Item & any)[] {
if (actor.itemCategories[key] == null) { if (actor.itemTypes[key] == null) {
return []; return [];
} }
return actor.itemCategories[key].filter((it) => { return actor.itemTypes[key].filter((it) => {
const location = it.location.value; const location = it.location.value;
if (location != null && location !== 0) { if (location != null && location !== 0 && location !== '') {
return actor.getEmbeddedDocument('Item', location) != null; return actor.getEmbeddedDocument('Item', location) != null;
} }
return true; return true;