From 9bbc9af285faef67dfe80444deaa5c5bbf972a61 Mon Sep 17 00:00:00 2001 From: TJ Date: Wed, 24 Mar 2021 19:55:33 -0500 Subject: [PATCH 01/10] Add species --- module/characterImporter.js | 109 ++++++++++++++++++++---------------- 1 file changed, 60 insertions(+), 49 deletions(-) diff --git a/module/characterImporter.js b/module/characterImporter.js index e5af2c18..35b1ec35 100644 --- a/module/characterImporter.js +++ b/module/characterImporter.js @@ -1,52 +1,51 @@ export default class CharacterImporter { - // transform JSON from sw5e.com to Foundry friendly format // and insert new actor - static async transform(rawCharacter){ + static async transform(rawCharacter) { const sourceCharacter = JSON.parse(rawCharacter); //source character - + const details = { - species: sourceCharacter.attribs.find(e => e.name == "race").current, - background: sourceCharacter.attribs.find(e => e.name == "background").current, - alignment: sourceCharacter.attribs.find(e => e.name == "alignment").current - } - + species: sourceCharacter.attribs.find((e) => e.name == "race").current, + background: sourceCharacter.attribs.find((e) => e.name == "background").current, + alignment: sourceCharacter.attribs.find((e) => e.name == "alignment").current + }; + const hp = { - value: sourceCharacter.attribs.find(e => e.name == "hp").current, + value: sourceCharacter.attribs.find((e) => e.name == "hp").current, min: 0, - max: sourceCharacter.attribs.find(e => e.name == "hp").current, - temp: sourceCharacter.attribs.find(e => e.name == "hp_temp").current + max: sourceCharacter.attribs.find((e) => e.name == "hp").current, + temp: sourceCharacter.attribs.find((e) => e.name == "hp_temp").current }; const ac = { - value: sourceCharacter.attribs.find(e => e.name == "ac").current + value: sourceCharacter.attribs.find((e) => e.name == "ac").current }; const abilities = { str: { - value: sourceCharacter.attribs.find(e => e.name == "strength").current, - proficient: sourceCharacter.attribs.find(e => e.name == 'strength_save_prof').current ? 1 : 0 + value: sourceCharacter.attribs.find((e) => e.name == "strength").current, + proficient: sourceCharacter.attribs.find((e) => e.name == "strength_save_prof").current ? 1 : 0 }, dex: { - value: sourceCharacter.attribs.find(e => e.name == "dexterity").current, - proficient: sourceCharacter.attribs.find(e => e.name == 'dexterity_save_prof').current ? 1 : 0 + value: sourceCharacter.attribs.find((e) => e.name == "dexterity").current, + proficient: sourceCharacter.attribs.find((e) => e.name == "dexterity_save_prof").current ? 1 : 0 }, con: { - value: sourceCharacter.attribs.find(e => e.name == "constitution").current, - proficient: sourceCharacter.attribs.find(e => e.name == 'constitution_save_prof').current ? 1 : 0 + value: sourceCharacter.attribs.find((e) => e.name == "constitution").current, + proficient: sourceCharacter.attribs.find((e) => e.name == "constitution_save_prof").current ? 1 : 0 }, int: { - value: sourceCharacter.attribs.find(e => e.name == "intelligence").current, - proficient: sourceCharacter.attribs.find(e => e.name == 'intelligence_save_prof').current ? 1 : 0 + value: sourceCharacter.attribs.find((e) => e.name == "intelligence").current, + proficient: sourceCharacter.attribs.find((e) => e.name == "intelligence_save_prof").current ? 1 : 0 }, wis: { - value: sourceCharacter.attribs.find(e => e.name == "wisdom").current, - proficient: sourceCharacter.attribs.find(e => e.name == 'wisdom_save_prof').current ? 1 : 0 + value: sourceCharacter.attribs.find((e) => e.name == "wisdom").current, + proficient: sourceCharacter.attribs.find((e) => e.name == "wisdom_save_prof").current ? 1 : 0 }, cha: { - value: sourceCharacter.attribs.find(e => e.name == "charisma").current, - proficient: sourceCharacter.attribs.find(e => e.name == 'charisma_save_prof').current ? 1 : 0 - }, + value: sourceCharacter.attribs.find((e) => e.name == "charisma").current, + proficient: sourceCharacter.attribs.find((e) => e.name == "charisma_save_prof").current ? 1 : 0 + } }; const targetCharacter = { @@ -64,58 +63,70 @@ export default class CharacterImporter { let actor = await Actor.create(targetCharacter); - const profession = sourceCharacter.attribs.find(e => e.name == "class").current; - let professionLevel = sourceCharacter.attribs.find(e => e.name == "class_display").current; - professionLevel = parseInt( professionLevel.replace(/[^0-9]/g,'') ); //remove a-z, leaving only integers - CharacterImporter.addClasses(profession, professionLevel, actor); + const profession = sourceCharacter.attribs.find((e) => e.name == "class").current; + let professionLevel = sourceCharacter.attribs.find((e) => e.name == "class_display").current; + professionLevel = parseInt(professionLevel.replace(/[^0-9]/g, "")); //remove a-z, leaving only integers + this.addClasses(profession, professionLevel, actor); + + this.addSpecies(sourceCharacter.attribs.find((e) => e.name == "race").current, actor); } - static async addClasses(profession, level, actor){ - let classes = await game.packs.get('sw5e.classes').getContent(); - let assignedClass = classes.find( c => c.name === profession ); + static async addClasses(profession, level, actor) { + let classes = await game.packs.get("sw5e.classes").getContent(); + let assignedClass = classes.find((c) => c.name === profession); assignedClass.data.data.levels = level; await actor.createEmbeddedEntity("OwnedItem", assignedClass.data, { displaySheet: false }); } - static addImportButton(html){ + static async addSpecies(race, actor) { + let species = await game.packs.get("sw5e.species").getContent(); + let assignedSpecies = species.find((c) => c.name === race); + + await actor.createEmbeddedEntity("OwnedItem", assignedSpecies.data, { displaySheet: false }); + } + + static addImportButton(html) { const header = $("#actors").find("header.directory-header"); const search = $("#actors").children().find("div.header-search"); const newImportButtonDiv = $("#actors").children().find("div.header-actions").clone(); const newSearch = search.clone(); search.remove(); - newImportButtonDiv.attr('id', 'character-sheet-import'); + newImportButtonDiv.attr("id", "character-sheet-import"); header.append(newImportButtonDiv); newImportButtonDiv.children("button").remove(); - newImportButtonDiv.append(""); + newImportButtonDiv.append( + "" + ); newSearch.appendTo(header); let characterImportButton = $("#cs-import-button"); - characterImportButton.click(ev => { - let content = '

Saved Character JSON Import

' - + ' ' - + '
' - + ''; + characterImportButton.click((ev) => { + let content = + "

Saved Character JSON Import

" + + ' ' + + "
" + + ''; let importDialog = new Dialog({ title: "Import Character from SW5e.com", content: content, buttons: { - "Import": { + Import: { icon: '', label: "Import Character", callback: (e) => { - let characterData = $('#character-json').val(); - console.log('Parsing Character JSON'); + let characterData = $("#character-json").val(); + console.log("Parsing Character JSON"); CharacterImporter.transform(characterData); - } + } }, - "Cancel": { + Cancel: { icon: '', label: "Cancel", - callback: () => {}, + callback: () => {} } } - }) + }); importDialog.render(true); }); - } -} \ No newline at end of file + } +} From b0570263288b4434d220e13abdcdbb1f63d977ee Mon Sep 17 00:00:00 2001 From: TJ Date: Sat, 27 Mar 2021 14:45:05 -0500 Subject: [PATCH 02/10] Remove built in species bonuses --- module/characterImporter.js | 45 ++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/module/characterImporter.js b/module/characterImporter.js index 35b1ec35..5dc58b2d 100644 --- a/module/characterImporter.js +++ b/module/characterImporter.js @@ -79,13 +79,48 @@ export default class CharacterImporter { } static async addSpecies(race, actor) { - let species = await game.packs.get("sw5e.species").getContent(); - let assignedSpecies = species.find((c) => c.name === race); + const species = await game.packs.get("sw5e.species").getContent(); + const assignedSpecies = species.find((c) => c.name === race); + const activeEffects = assignedSpecies.data.effects[0].changes; + const actorData = { data: { ...actor.data.abilities } }; + + activeEffects.map((effect) => { + switch (effect.key) { + case "data.abilities.str.value": + actorData.data.abilities.str.value -= effect.value; + break; + + case "data.abilities.dex.value": + actorData.data.abilities.dex.value -= effect.value; + break; + + case "data.abilities.con.value": + actorData.data.abilities.con.value -= effect.value; + break; + + case "data.abilities.int.value": + actorData.data.abilities.int.value -= effect.value; + break; + + case "data.abilities.wis.value": + actorData.data.abilities.wis.value -= effect.value; + break; + + case "data.abilities.cha.value": + actorData.data.abilities.cha.value -= effect.value; + break; + + default: + break; + } + }); + + actor.update(actorData); await actor.createEmbeddedEntity("OwnedItem", assignedSpecies.data, { displaySheet: false }); } - static addImportButton(html) { + static addImportButton() { const header = $("#actors").find("header.directory-header"); const search = $("#actors").children().find("div.header-search"); const newImportButtonDiv = $("#actors").children().find("div.header-actions").clone(); @@ -100,7 +135,7 @@ export default class CharacterImporter { newSearch.appendTo(header); let characterImportButton = $("#cs-import-button"); - characterImportButton.click((ev) => { + characterImportButton.click(() => { let content = "

Saved Character JSON Import

" + ' ' + @@ -113,7 +148,7 @@ export default class CharacterImporter { Import: { icon: '', label: "Import Character", - callback: (e) => { + callback: () => { let characterData = $("#character-json").val(); console.log("Parsing Character JSON"); CharacterImporter.transform(characterData); From 5477f9371d2546eb185a6004fcc0f807fc5f234d Mon Sep 17 00:00:00 2001 From: TJ Date: Sat, 27 Mar 2021 15:23:27 -0500 Subject: [PATCH 03/10] Add force powers --- module/characterImporter.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/module/characterImporter.js b/module/characterImporter.js index 5dc58b2d..0f5dadfa 100644 --- a/module/characterImporter.js +++ b/module/characterImporter.js @@ -69,6 +69,11 @@ export default class CharacterImporter { this.addClasses(profession, professionLevel, actor); this.addSpecies(sourceCharacter.attribs.find((e) => e.name == "race").current, actor); + + this.addForcePowers( + sourceCharacter.attribs.filter((e) => e.name.search(/repeating_power.+_powername/g) != -1).map((e) => e.current), + actor + ); } static async addClasses(profession, level, actor) { @@ -120,6 +125,18 @@ export default class CharacterImporter { await actor.createEmbeddedEntity("OwnedItem", assignedSpecies.data, { displaySheet: false }); } + static async addForcePowers(powers, actor) { + const forcePowers = await game.packs.get("sw5e.forcepowers").getContent(); + + for (const power of powers) { + const selectedPower = forcePowers.find((c) => c.name === power); + + if (selectedPower) { + await actor.createEmbeddedEntity("OwnedItem", selectedPower.data, { displaySheet: false }); + } + } + } + static addImportButton() { const header = $("#actors").find("header.directory-header"); const search = $("#actors").children().find("div.header-search"); From 16d01207a7393c6c5cba3c325eab9824fd67f926 Mon Sep 17 00:00:00 2001 From: TJ Date: Sat, 27 Mar 2021 15:38:37 -0500 Subject: [PATCH 04/10] Added tech powers --- module/characterImporter.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/module/characterImporter.js b/module/characterImporter.js index 0f5dadfa..7bfb4bb9 100644 --- a/module/characterImporter.js +++ b/module/characterImporter.js @@ -70,7 +70,7 @@ export default class CharacterImporter { this.addSpecies(sourceCharacter.attribs.find((e) => e.name == "race").current, actor); - this.addForcePowers( + this.addPowers( sourceCharacter.attribs.filter((e) => e.name.search(/repeating_power.+_powername/g) != -1).map((e) => e.current), actor ); @@ -125,14 +125,18 @@ export default class CharacterImporter { await actor.createEmbeddedEntity("OwnedItem", assignedSpecies.data, { displaySheet: false }); } - static async addForcePowers(powers, actor) { + static async addPowers(powers, actor) { const forcePowers = await game.packs.get("sw5e.forcepowers").getContent(); + const techPowers = await game.packs.get("sw5e.techpowers").getContent(); for (const power of powers) { - const selectedPower = forcePowers.find((c) => c.name === power); + const forcePower = forcePowers.find((c) => c.name === power); + const techPower = techPowers.find((c) => c.name === power); - if (selectedPower) { - await actor.createEmbeddedEntity("OwnedItem", selectedPower.data, { displaySheet: false }); + if (forcePower) { + await actor.createEmbeddedEntity("OwnedItem", forcePower.data, { displaySheet: false }); + } else if (techPower) { + await actor.createEmbeddedEntity("OwnedItem", techPower.data, { displaySheet: false }); } } } From bd94d75086d591c0648de87adde5133d9f63de71 Mon Sep 17 00:00:00 2001 From: TJ Date: Sat, 27 Mar 2021 16:14:50 -0500 Subject: [PATCH 05/10] Add weapons and armors --- module/characterImporter.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/module/characterImporter.js b/module/characterImporter.js index 7bfb4bb9..e89f3b62 100644 --- a/module/characterImporter.js +++ b/module/characterImporter.js @@ -74,6 +74,13 @@ export default class CharacterImporter { sourceCharacter.attribs.filter((e) => e.name.search(/repeating_power.+_powername/g) != -1).map((e) => e.current), actor ); + + this.addItems( + sourceCharacter.attribs + .filter((e) => e.name.search(/repeating_inventory.+_itemname/g) != -1) + .map((e) => e.current), + actor + ); } static async addClasses(profession, level, actor) { @@ -141,6 +148,22 @@ export default class CharacterImporter { } } + static async addItems(items, actor) { + const weapons = await game.packs.get("sw5e.weapons").getContent(); + const armors = await game.packs.get("sw5e.armor").getContent(); + + for (const item of items) { + const weapon = weapons.find((c) => c.name === item); + const armor = armors.find((c) => c.name === item); + + if (weapon) { + await actor.createEmbeddedEntity("OwnedItem", weapon.data, { displaySheet: false }); + } else if (armor) { + await actor.createEmbeddedEntity("OwnedItem", armor.data, { displaySheet: false }); + } + } + } + static addImportButton() { const header = $("#actors").find("header.directory-header"); const search = $("#actors").children().find("div.header-search"); From 9d6fabe8c2dd042af9ce38e9279a1a83520bdf43 Mon Sep 17 00:00:00 2001 From: TJ Date: Sat, 27 Mar 2021 21:48:58 -0500 Subject: [PATCH 06/10] Add adventuring gear --- module/characterImporter.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/module/characterImporter.js b/module/characterImporter.js index e89f3b62..b3d4ce85 100644 --- a/module/characterImporter.js +++ b/module/characterImporter.js @@ -17,10 +17,6 @@ export default class CharacterImporter { temp: sourceCharacter.attribs.find((e) => e.name == "hp_temp").current }; - const ac = { - value: sourceCharacter.attribs.find((e) => e.name == "ac").current - }; - const abilities = { str: { value: sourceCharacter.attribs.find((e) => e.name == "strength").current, @@ -55,7 +51,6 @@ export default class CharacterImporter { abilities: abilities, details: details, attributes: { - ac: ac, hp: hp } } @@ -151,15 +146,19 @@ export default class CharacterImporter { static async addItems(items, actor) { const weapons = await game.packs.get("sw5e.weapons").getContent(); const armors = await game.packs.get("sw5e.armor").getContent(); + const adventuringGears = await game.packs.get("sw5e.adventuringgear").getContent(); for (const item of items) { - const weapon = weapons.find((c) => c.name === item); - const armor = armors.find((c) => c.name === item); + const weapon = weapons.find((c) => c.name.toLowerCase() === item.toLowerCase()); + const armor = armors.find((c) => c.name.toLowerCase() === item.toLowerCase()); + const gear = adventuringGears.find((c) => c.name.toLowerCase() === item.toLowerCase()); if (weapon) { await actor.createEmbeddedEntity("OwnedItem", weapon.data, { displaySheet: false }); } else if (armor) { await actor.createEmbeddedEntity("OwnedItem", armor.data, { displaySheet: false }); + } else if (gear) { + await actor.createEmbeddedEntity("OwnedItem", gear.data, { displaySheet: false }); } } } From 4b1b3bbeed2be5c4760fdc0cac31766f6eeb791f Mon Sep 17 00:00:00 2001 From: TJ Date: Sat, 27 Mar 2021 22:14:57 -0500 Subject: [PATCH 07/10] Fix for species data --- module/characterImporter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/characterImporter.js b/module/characterImporter.js index b3d4ce85..e0383bd8 100644 --- a/module/characterImporter.js +++ b/module/characterImporter.js @@ -89,7 +89,7 @@ export default class CharacterImporter { const species = await game.packs.get("sw5e.species").getContent(); const assignedSpecies = species.find((c) => c.name === race); const activeEffects = assignedSpecies.data.effects[0].changes; - const actorData = { data: { ...actor.data.abilities } }; + const actorData = { data: { abilities: { ...actor.data.data.abilities } } }; activeEffects.map((effect) => { switch (effect.key) { From e942a9b80346cee24a26b28054b0a56aea807dca Mon Sep 17 00:00:00 2001 From: TJ Date: Sat, 27 Mar 2021 23:00:57 -0500 Subject: [PATCH 08/10] Added item quantity handling --- module/characterImporter.js | 47 ++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/module/characterImporter.js b/module/characterImporter.js index e0383bd8..9ef7f85d 100644 --- a/module/characterImporter.js +++ b/module/characterImporter.js @@ -70,12 +70,19 @@ export default class CharacterImporter { actor ); - this.addItems( - sourceCharacter.attribs - .filter((e) => e.name.search(/repeating_inventory.+_itemname/g) != -1) - .map((e) => e.current), - actor + const discoveredItems = sourceCharacter.attribs.filter( + (e) => e.name.search(/repeating_inventory.+_itemname/g) != -1 ); + const items = discoveredItems.map((item) => { + const id = item.name.match(/-\w{19}/g); + + return { + name: item.current, + quantity: sourceCharacter.attribs.find((e) => e.name === `repeating_inventory_${id}_itemcount`).current + }; + }); + + this.addItems(items, actor); } static async addClasses(profession, level, actor) { @@ -132,13 +139,10 @@ export default class CharacterImporter { const techPowers = await game.packs.get("sw5e.techpowers").getContent(); for (const power of powers) { - const forcePower = forcePowers.find((c) => c.name === power); - const techPower = techPowers.find((c) => c.name === power); + const createdPower = forcePowers.find((c) => c.name === power) || techPowers.find((c) => c.name === power); - if (forcePower) { - await actor.createEmbeddedEntity("OwnedItem", forcePower.data, { displaySheet: false }); - } else if (techPower) { - await actor.createEmbeddedEntity("OwnedItem", techPower.data, { displaySheet: false }); + if (createdPower) { + await actor.createEmbeddedEntity("OwnedItem", createdPower.data, { displaySheet: false }); } } } @@ -146,19 +150,20 @@ export default class CharacterImporter { static async addItems(items, actor) { const weapons = await game.packs.get("sw5e.weapons").getContent(); const armors = await game.packs.get("sw5e.armor").getContent(); - const adventuringGears = await game.packs.get("sw5e.adventuringgear").getContent(); + const adventuringGear = await game.packs.get("sw5e.adventuringgear").getContent(); for (const item of items) { - const weapon = weapons.find((c) => c.name.toLowerCase() === item.toLowerCase()); - const armor = armors.find((c) => c.name.toLowerCase() === item.toLowerCase()); - const gear = adventuringGears.find((c) => c.name.toLowerCase() === item.toLowerCase()); + const createdItem = + weapons.find((c) => c.name.toLowerCase() === item.name.toLowerCase()) || + armors.find((c) => c.name.toLowerCase() === item.name.toLowerCase()) || + adventuringGear.find((c) => c.name.toLowerCase() === item.name.toLowerCase()); - if (weapon) { - await actor.createEmbeddedEntity("OwnedItem", weapon.data, { displaySheet: false }); - } else if (armor) { - await actor.createEmbeddedEntity("OwnedItem", armor.data, { displaySheet: false }); - } else if (gear) { - await actor.createEmbeddedEntity("OwnedItem", gear.data, { displaySheet: false }); + if (createdItem) { + if (item.quantity != 1) { + createdItem.data.data.quantity = item.quantity; + } + + await actor.createEmbeddedEntity("OwnedItem", createdItem.data, { displaySheet: false }); } } } From e25140b529bfe9ade0bb472e888991b2b6fddb0b Mon Sep 17 00:00:00 2001 From: TJ Date: Sat, 27 Mar 2021 23:17:31 -0500 Subject: [PATCH 09/10] Add skill proficiencies --- module/characterImporter.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/module/characterImporter.js b/module/characterImporter.js index 9ef7f85d..c02b302b 100644 --- a/module/characterImporter.js +++ b/module/characterImporter.js @@ -44,12 +44,34 @@ export default class CharacterImporter { } }; + const skills = { + acr: { value: sourceCharacter.attribs.find((e) => e.name == "acrobatics_type").current }, + ani: { value: sourceCharacter.attribs.find((e) => e.name == "animal_handling_type").current }, + ath: { value: sourceCharacter.attribs.find((e) => e.name == "athletics_type").current }, + dec: { value: sourceCharacter.attribs.find((e) => e.name == "deception_type").current }, + ins: { value: sourceCharacter.attribs.find((e) => e.name == "insight_type").current }, + inv: { value: sourceCharacter.attribs.find((e) => e.name == "investigation_type").current }, + itm: { value: sourceCharacter.attribs.find((e) => e.name == "intimidation_type").current }, + lor: { value: sourceCharacter.attribs.find((e) => e.name == "lore_type").current }, + med: { value: sourceCharacter.attribs.find((e) => e.name == "medicine_type").current }, + nat: { value: sourceCharacter.attribs.find((e) => e.name == "nature_type").current }, + per: { value: sourceCharacter.attribs.find((e) => e.name == "persuasion_type").current }, + pil: { value: sourceCharacter.attribs.find((e) => e.name == "piloting_type").current }, + prc: { value: sourceCharacter.attribs.find((e) => e.name == "perception_type").current }, + prf: { value: sourceCharacter.attribs.find((e) => e.name == "performance_type").current }, + slt: { value: sourceCharacter.attribs.find((e) => e.name == "sleight_of_hand_type").current }, + ste: { value: sourceCharacter.attribs.find((e) => e.name == "stealth_type").current }, + sur: { value: sourceCharacter.attribs.find((e) => e.name == "survival_type").current }, + tec: { value: sourceCharacter.attribs.find((e) => e.name == "technology_type").current } + }; + const targetCharacter = { name: sourceCharacter.name, type: "character", data: { abilities: abilities, details: details, + skills: skills, attributes: { hp: hp } From eaac412cb39d25b23448b3b86a84b04075a4d0a7 Mon Sep 17 00:00:00 2001 From: TJ Date: Tue, 13 Apr 2021 21:39:53 -0500 Subject: [PATCH 10/10] Merge clean up --- module/characterImporter.js | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/module/characterImporter.js b/module/characterImporter.js index 3b5633a8..65fa7f6a 100644 --- a/module/characterImporter.js +++ b/module/characterImporter.js @@ -44,27 +44,6 @@ export default class CharacterImporter { } }; - const skills = { - acr: { value: sourceCharacter.attribs.find((e) => e.name == "acrobatics_type").current }, - ani: { value: sourceCharacter.attribs.find((e) => e.name == "animal_handling_type").current }, - ath: { value: sourceCharacter.attribs.find((e) => e.name == "athletics_type").current }, - dec: { value: sourceCharacter.attribs.find((e) => e.name == "deception_type").current }, - ins: { value: sourceCharacter.attribs.find((e) => e.name == "insight_type").current }, - inv: { value: sourceCharacter.attribs.find((e) => e.name == "investigation_type").current }, - itm: { value: sourceCharacter.attribs.find((e) => e.name == "intimidation_type").current }, - lor: { value: sourceCharacter.attribs.find((e) => e.name == "lore_type").current }, - med: { value: sourceCharacter.attribs.find((e) => e.name == "medicine_type").current }, - nat: { value: sourceCharacter.attribs.find((e) => e.name == "nature_type").current }, - per: { value: sourceCharacter.attribs.find((e) => e.name == "persuasion_type").current }, - pil: { value: sourceCharacter.attribs.find((e) => e.name == "piloting_type").current }, - prc: { value: sourceCharacter.attribs.find((e) => e.name == "perception_type").current }, - prf: { value: sourceCharacter.attribs.find((e) => e.name == "performance_type").current }, - slt: { value: sourceCharacter.attribs.find((e) => e.name == "sleight_of_hand_type").current }, - ste: { value: sourceCharacter.attribs.find((e) => e.name == "stealth_type").current }, - sur: { value: sourceCharacter.attribs.find((e) => e.name == "survival_type").current }, - tec: { value: sourceCharacter.attribs.find((e) => e.name == "technology_type").current } - }; - /* ----------------------------------------------------------------- */ /* character.data.skills..value is all that matters /* values can be 0, 0.5, 1 or 2 @@ -140,8 +119,7 @@ export default class CharacterImporter { skills: skills, attributes: { hp: hp - }, - skills: skills + } } };