Checkpoint - handle non-numeric modifiers

This commit is contained in:
Cmdr McDonald
2016-11-24 12:50:33 +00:00
parent 1067dceaa3
commit faab41117c
3 changed files with 24 additions and 11 deletions

View File

@@ -28,7 +28,7 @@ export default class Module {
/** /**
* Get a value for a given modification * Get a value for a given modification
* @param {Number} name The name of the modification * @param {Number} name The name of the modification
* @return {Number} The value of the modification, as an integer value scaled so that 1.23% == 123 * @return {object} The value of the modification. If it is a numeric value then it is returned as an integer value scaled so that 1.23% == 123
*/ */
getModValue(name) { getModValue(name) {
return this.mods && this.mods[name] ? this.mods[name] : null; return this.mods && this.mods[name] ? this.mods[name] : null;
@@ -37,7 +37,7 @@ export default class Module {
/** /**
* Set a value for a given modification ID * Set a value for a given modification ID
* @param {Number} name The name of the modification * @param {Number} name The name of the modification
* @param {Number} value The value of the modification, as an integer scaled so that -2.34% == -234 * @param {object} value The value of the modification. If it is a numeric value then it should be an integer scaled so that -2.34% == -234
*/ */
setModValue(name, value) { setModValue(name, value) {
if (!this.mods) { if (!this.mods) {
@@ -47,8 +47,12 @@ export default class Module {
if (value == null || value == 0) { if (value == null || value == 0) {
delete this.mods[name]; delete this.mods[name];
} else { } else {
// Round just to be sure if (isNaN(value)) {
this.mods[name] = Math.round(value); this.mods[name] = value;
} else {
// Round just to be sure
this.mods[name] = Math.round(value);
}
} }
} }
@@ -546,6 +550,6 @@ export default class Module {
* @return {string} the damage types for this module; any combination of E T and K * @return {string} the damage types for this module; any combination of E T and K
*/ */
getDamageType() { getDamageType() {
return this.type; return this.getModValue('type') || this.type;
} }
} }

View File

@@ -1413,7 +1413,12 @@ export default class Ship {
} }
for (let slotMod of slot) { for (let slotMod of slot) {
buffer.writeInt8(slotMod.id, curpos++); buffer.writeInt8(slotMod.id, curpos++);
buffer.writeInt32LE(slotMod.value, curpos); if (isNaN(slotMod.value)) {
// We need to write the value out as a four-byte string
buffer.writeInt32LE(slotMod.value, curpos);
} else {
buffer.writeInt32LE(slotMod.value, curpos);
}
// console.log('ENCODE Slot ' + i + ': ' + Modifications.modifications[slotMod.id] + ' = ' + slotMod.value); // console.log('ENCODE Slot ' + i + ': ' + Modifications.modifications[slotMod.id] + ' = ' + slotMod.value);
curpos += 4; curpos += 4;
} }

View File

@@ -284,12 +284,16 @@ function _addModifications(module, modifiers, blueprint, grade) {
// Carry out the required changes // Carry out the required changes
for (const action in modifierActions) { for (const action in modifierActions) {
const actionValue = modifierActions[action] * value; if (isNaN(modifierActions[action])) {
let mod = module.getModValue(action) / 10000; module.setModValue(action, modifierActions[action]);
if (!mod) { } else {
mod = 0; const actionValue = modifierActions[action] * value;
let mod = module.getModValue(action) / 10000;
if (!mod) {
mod = 0;
}
module.setModValue(action, ((1 + mod) * (1 + actionValue) - 1) * 10000);
} }
module.setModValue(action, ((1 + mod) * (1 + actionValue) - 1) * 10000);
} }
} }