Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bed5243fd5 | ||
|
|
3a1734c477 | ||
|
|
7279b93e4c | ||
|
|
1d940892d7 | ||
|
|
612ed7b631 | ||
|
|
fcd74152bb | ||
|
|
3451c86b36 | ||
|
|
fc49c91024 | ||
|
|
c3c4027511 | ||
|
|
a0fffb6cf7 |
@@ -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'
|
||||||
|
|||||||
37
module.json
37
module.json
@@ -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
3244
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -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.0",
|
||||||
"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",
|
||||||
|
|||||||
70
src/main.ts
70
src/main.ts
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user