ggejs
Version:
A powerful Node.js module for interacting with the server of Goodgame Empire & Goodgame Empire: Four Kingdoms
85 lines (80 loc) • 3 kB
JavaScript
const Effect = require("./Effect");
const {units} = require('e4k-data').data;
class Unit {
/**
* @param {BaseClient} client
* @param {number} wodId
*/
constructor(client, wodId) {
this.wodId = wodId;
this.rawData = getData(client, wodId);
if (!this.rawData) return;
for (let i in this.rawData) {
if (i === 'wodID') continue;
/** @type {number | string} */
let item = this.rawData[i];
if (i === "kIDs" || i === "slotTypes" || i === "lowLevelRecruitmentTime") {
this[i] = [];
if (typeof item == "number") {
this[i].push(item);
continue;
}
item.split(",").forEach((j) => {
this[i].push(parseInt(j))
})
continue;
}
if (i === "allowedToAttack" || i === "allowedToTravel") {
this[i] = [];
item.split("#").forEach((_) => {
let __split_val = _.split("+");
let _kId = parseInt(__split_val[0]);
let _areaId = parseInt(__split_val[1]);
this[i].push({kingdomId: _kId, areaId: _areaId});
})
continue;
}
if (i === "effects") {
this[i] = [];
item.split(",").forEach((_) => {
let __split_val = _.split("&");
let _effectId = parseInt(__split_val[0]);
let _power = parseInt(__split_val[1]);
this[i].push(new Effect(client, [_effectId, _power]));
})
continue;
}
if (i === "researchLocked" || i === "canBeUsedByNPC" || i === "hybrid" || i === "canBeUsedToAttackNPC" || i === "isAuxiliary" || i === "isKamikaze" || i === "allowedToTravel" || i === "attackscreenBuyable" || i === "allowedToAttack" || i === "deleteToolAfterBattle" || i === "isYardTool") {
this[i] = item === 1;
continue;
}
if (typeof item == "number") {
this[i] = item;
continue;
}
let _intItem = parseInt(item);
if (!isNaN(_intItem)) {
this[i] = _intItem;
continue;
}
this[i] = item;
}
if (this.canBeUsedToAttackNPC !== false) this.canBeUsedToAttackNPC = true;
this.isSoldier = isSoldier(this.rawData);
}
}
/**
* @param {Unit} rawData
* @returns {boolean}
*/
function isSoldier(rawData) {
return rawData.rangeDefence != null && rawData.meleeDefence != null;
}
/**
* @param {BaseClient} client
* @param {number} wodId
*/
function getData(client, wodId) {
return units.find(u => u.wodID === wodId);
}
module.exports = Unit;