Skip to content

Commit 5c6f39b

Browse files
committed
FIX - import from excel
1 parent 4d0bbe2 commit 5c6f39b

2 files changed

Lines changed: 59 additions & 41 deletions

File tree

src/module/actor/utils/parseExcelToActor.js

Lines changed: 48 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export const parseExcelToActor = async (excelData, actor) => {
2222
let excelVersion = excelVersionSplitted.pop();
2323
if (!requiredExcelVersions.some(item => item === excelVersion)) {
2424
const versionWarning =
25-
game.i18n.localize("anima.ui.importDataFromExcelWarning") +
25+
game.i18n.localize('anima.ui.importDataFromExcelWarning') +
2626
requiredExcelVersions.join(', ');
2727
ui.notifications.warn(versionWarning);
2828
return;
@@ -42,9 +42,9 @@ export const parseExcelToActor = async (excelData, actor) => {
4242
const volResistance =
4343
excelData.Presencia_final + calculateAttributeModifier(excelData.VOL);
4444

45-
const presenciaBase = excelData.Nivel_Total <= 0 ? 20 : 25 + (excelData.Nivel_Total*5);
45+
const presenciaBase = excelData.Nivel_Total <= 0 ? 20 : 25 + excelData.Nivel_Total * 5;
4646

47-
const bonoPresencia = excelData.Presencia_final - presenciaBase;
47+
const bonoPresencia = excelData.Presencia_final - presenciaBase;
4848

4949
//Esto es para cuando esté la automatización de las resistencias
5050
const bonoRF = excelData.RF_final - conResistance;
@@ -356,6 +356,9 @@ export const parseExcelToActor = async (excelData, actor) => {
356356
others: []
357357
},
358358
levels: [],
359+
level: {
360+
value: excelData.Nivel_Total
361+
},
359362
destinyPoints: {
360363
base: {
361364
value: excelData.PuntosDeDestino_Max - excelData.PuntosDeDestino_Gastados
@@ -891,7 +894,7 @@ export const parseExcelToActor = async (excelData, actor) => {
891894
abilityName.indexOf('Detección del Ki') !== -1 ||
892895
abilityName.indexOf('Ocultación del Ki') !== -1
893896
) {
894-
abilityName = splitAndRemoveLast(habilidadesKi[i]);
897+
abilityName = splitAndRemoveLast(habilidadesKi[i]); //quita el valor de la detección y ocultación, deja solo el nombre
895898
}
896899

897900
await actor.createInnerItem({
@@ -1006,16 +1009,13 @@ export const parseExcelToActor = async (excelData, actor) => {
10061009
});
10071010
}
10081011

1009-
1010-
10111012
for (var i = 0; i < artesMarciales.length; i++) {
1012-
if (artesMarciales[i].includes("Tabla de Armas:")) {
1013+
if (artesMarciales[i].includes('Tabla de Armas:')) {
10131014
await actor.createInnerItem({
10141015
name: artesMarciales[i],
10151016
type: ABFItems.COMBAT_TABLE
10161017
});
1017-
}
1018-
else {
1018+
} else {
10191019
const arteMarcialSeparada = artesMarciales[i]
10201020
.split('(')
10211021
.map(value => value.trim())
@@ -1131,49 +1131,65 @@ export const parseExcelToActor = async (excelData, actor) => {
11311131
system: INITIAL_MENTAL_PATTERN_DATA
11321132
});
11331133
}
1134+
1135+
actor.prepareData();
1136+
actor.sheet.render(false);
11341137
};
11351138

11361139
function separarHabilidadesKi(habilidades) {
1140+
/** Ensure valid string */
1141+
if (typeof habilidades !== 'string') {
1142+
return {
1143+
habilidadesKi: '',
1144+
habilidadesNemesis: ''
1145+
};
1146+
}
1147+
11371148
let result = {
11381149
habilidadesKi: '',
11391150
habilidadesNemesis: ''
11401151
};
11411152

1142-
const indexSellos = habilidades.indexOf('Sellos: ');
1143-
let habilidadesSinSellos = '';
1144-
if (indexSellos !== -1) {
1145-
habilidadesSinSellos = habilidades.slice(0, indexSellos).trim();
1146-
}
1147-
else{
1148-
habilidadesSinSellos=habilidades;
1149-
}
1153+
// Remove seals section
1154+
const indexSellos = habilidades.indexOf('Sellos:');
1155+
const habilidadesSinSellos =
1156+
indexSellos !== -1 ? habilidades.slice(0, indexSellos).trim() : habilidades.trim();
11501157

1158+
// Split Ki / Némesis by marker
11511159
const indexNemesis = habilidadesSinSellos.indexOf('Uso del Némesis');
11521160

11531161
if (indexNemesis === -1) {
1154-
result.habilidadesKi = habilidadesSinSellos;
1162+
// Only Ki abilities
1163+
result.habilidadesKi = expandAtaqueElemental(habilidadesSinSellos);
11551164
return result;
11561165
}
11571166

1158-
result.habilidadesKi = habilidadesSinSellos.slice(0, indexNemesis).trim();
1159-
result.habilidadesNemesis = habilidadesSinSellos.slice(indexNemesis).trim();
1167+
const kiPart = habilidadesSinSellos.slice(0, indexNemesis).trim();
1168+
const nemesisPart = habilidadesSinSellos.slice(indexNemesis).trim();
11601169

1161-
const indexAtaqueElemental = result.habilidadesKi.indexOf('Ataque elemental (');
1162-
if (indexAtaqueElemental !== -1) {
1163-
let habilidadesKiSeparadas = result.habilidadesKi.split('Ataque elemental (');
1164-
let indexCierreAtaqueElemental = habilidadesKiSeparadas[1].indexOf(')');
1165-
let habilidadesKiPostAtaqueElemental = habilidadesKiSeparadas[1].slice(
1166-
indexCierreAtaqueElemental + 1
1167-
);
1168-
result.habilidadesKi = [
1169-
habilidadesKiSeparadas[0],
1170-
habilidadesKiPostAtaqueElemental
1171-
].join('Ataque elemental, ');
1172-
}
1170+
result.habilidadesKi = expandAtaqueElemental(kiPart);
1171+
result.habilidadesNemesis = nemesisPart;
11731172

11741173
return result;
11751174
}
11761175

1176+
function expandAtaqueElemental(text) {
1177+
if (!text) return '';
1178+
1179+
return text
1180+
.replace(/Ataque elemental\s*\(([^)]+)\)/gi, (_match, group) => {
1181+
const elements = group
1182+
.split(',')
1183+
.map(e => e.trim())
1184+
.filter(e => e !== '');
1185+
if (!elements.length) return '';
1186+
return elements.map(e => `Ataque elemental: ${e}`).join(', ');
1187+
})
1188+
.replace(/,\s*,/g, ', ') // clean double commas if any
1189+
.replace(/,\s*$/g, '') // remove trailing comma
1190+
.trim();
1191+
}
1192+
11771193
function splitAndRemoveLast(cadena) {
11781194
const partes = cadena.split(' ');
11791195
partes.pop();
@@ -1262,4 +1278,3 @@ function SetEmptyIfUndefined(data) {
12621278
}
12631279
return data;
12641280
}
1265-
Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
1-
/**
1+
/**
22
* Adds to primary characteristics object without modifiers its modifiers,
33
* calculated based on its value
44
* @param {import('../../../../../types/Actor').ABFActorDataSourceData} data
55
*/
6-
export const mutateTotalLevel= data => {
6+
export const mutateTotalLevel = data => {
77
const { level, levels } = data.general;
8-
let totalLevel = 0;
9-
if (levels) {
10-
totalLevel = levels.reduce((accum, current) => accum + current.system.level, 0);
11-
}
12-
level.value = totalLevel;
13-
};
8+
let totalLevel = 0;
9+
if (levels) {
10+
totalLevel = levels.reduce(
11+
(accum, current) => accum + Number(current.system.level),
12+
0
13+
);
14+
}
15+
level.value = totalLevel;
16+
};

0 commit comments

Comments
 (0)