From 21caaa45739fd1635fa1c1ef86fa97ffc60d9779 Mon Sep 17 00:00:00 2001 From: historic_bruno Date: Fri, 27 Apr 2012 23:06:40 +0000 Subject: [PATCH] Fixes some bugs in tech modifications relating to data types. Explicitly convert template data to numbers before calling ApplyModifications (using + operator). This was SVN commit r11685. --- .../data/mods/public/simulation/components/Attack.js | 6 +++--- .../data/mods/public/simulation/components/Builder.js | 2 +- .../data/mods/public/simulation/components/BuildingAI.js | 4 ++-- .../mods/public/simulation/components/GarrisonHolder.js | 4 ++-- binaries/data/mods/public/simulation/components/Heal.js | 6 +++--- .../public/simulation/components/ResourceGatherer.js | 6 +++--- .../public/simulation/components/TechnologyManager.js | 9 ++++++--- 7 files changed, 20 insertions(+), 17 deletions(-) diff --git a/binaries/data/mods/public/simulation/components/Attack.js b/binaries/data/mods/public/simulation/components/Attack.js index eb9650fdc3..ae60d5bd27 100644 --- a/binaries/data/mods/public/simulation/components/Attack.js +++ b/binaries/data/mods/public/simulation/components/Attack.js @@ -138,8 +138,8 @@ Attack.prototype.GetTimers = function(type) { var cmpTechMan = QueryOwnerInterface(this.entity, IID_TechnologyManager); - var prepare = cmpTechMan.ApplyModifications("Attack/" + type + "/PrepareTime", +(this.template[type].PrepareTime||0), this.entity); - var repeat = cmpTechMan.ApplyModifications("Attack/" + type + "/RepeatTime", +(this.template[type].RepeatTime||1000), this.entity); + var prepare = cmpTechMan.ApplyModifications("Attack/" + type + "/PrepareTime", +(this.template[type].PrepareTime || 0), this.entity); + var repeat = cmpTechMan.ApplyModifications("Attack/" + type + "/RepeatTime", +(this.template[type].RepeatTime || 1000), this.entity); return { "prepare": prepare, "repeat": repeat, "recharge": repeat - prepare }; }; @@ -154,7 +154,7 @@ Attack.prototype.GetAttackStrengths = function(type) { // All causes caching problems so disable it for now. //var allComponent = cmpTechMan.ApplyModifications("Attack/" + type + "/All", (+self.template[type][damageType] || 0), self.entity) - self.template[type][damageType]; - return cmpTechMan.ApplyModifications("Attack/" + type + "/" + damageType, (+self.template[type][damageType] || 0), self.entity); + return cmpTechMan.ApplyModifications("Attack/" + type + "/" + damageType, +(self.template[type][damageType] || 0), self.entity); }; return { diff --git a/binaries/data/mods/public/simulation/components/Builder.js b/binaries/data/mods/public/simulation/components/Builder.js index 36f0bc9fd9..601de1d705 100644 --- a/binaries/data/mods/public/simulation/components/Builder.js +++ b/binaries/data/mods/public/simulation/components/Builder.js @@ -50,7 +50,7 @@ Builder.prototype.GetRange = function() Builder.prototype.PerformBuilding = function(target) { var cmpTechMan = QueryOwnerInterface(this.entity, IID_TechnologyManager); - var rate = cmpTechMan.ApplyModifications("Builder/Rate", this.template.Rate, this.entity); + var rate = cmpTechMan.ApplyModifications("Builder/Rate", +this.template.Rate, this.entity); // If it's a foundation, then build it var cmpFoundation = Engine.QueryInterface(target, IID_Foundation); diff --git a/binaries/data/mods/public/simulation/components/BuildingAI.js b/binaries/data/mods/public/simulation/components/BuildingAI.js index d154628fd7..e285641ddb 100644 --- a/binaries/data/mods/public/simulation/components/BuildingAI.js +++ b/binaries/data/mods/public/simulation/components/BuildingAI.js @@ -109,7 +109,7 @@ BuildingAI.prototype.GetDefaultArrowCount = function() { var cmpTechMan = QueryOwnerInterface(this.entity, IID_TechnologyManager); if (cmpTechMan) - return cmpTechMan.ApplyModifications("BuildingAI/DefaultArrowCount", this.template.DefaultArrowCount, this.entity); + return cmpTechMan.ApplyModifications("BuildingAI/DefaultArrowCount", +this.template.DefaultArrowCount, this.entity); else return +this.template.DefaultArrowCount; }; @@ -118,7 +118,7 @@ BuildingAI.prototype.GetGarrisonArrowMultiplier = function() { var cmpTechMan = QueryOwnerInterface(this.entity, IID_TechnologyManager); if (cmpTechMan) - return cmpTechMan.ApplyModifications("BuildingAI/GarrisonArrowMultiplier", this.template.GarrisonArrowMultiplier, this.entity); + return cmpTechMan.ApplyModifications("BuildingAI/GarrisonArrowMultiplier", +this.template.GarrisonArrowMultiplier, this.entity); else return +this.template.GarrisonArrowMultiplier; }; diff --git a/binaries/data/mods/public/simulation/components/GarrisonHolder.js b/binaries/data/mods/public/simulation/components/GarrisonHolder.js index fd121233ae..414660f7dd 100644 --- a/binaries/data/mods/public/simulation/components/GarrisonHolder.js +++ b/binaries/data/mods/public/simulation/components/GarrisonHolder.js @@ -64,7 +64,7 @@ GarrisonHolder.prototype.GetAllowedClassesList = function() GarrisonHolder.prototype.GetCapacity = function() { var cmpTechMan = QueryOwnerInterface(this.entity, IID_TechnologyManager); - return cmpTechMan.ApplyModifications("GarrisonHolder/Max", this.template.Max, this.entity); + return cmpTechMan.ApplyModifications("GarrisonHolder/Max", +this.template.Max, this.entity); }; /** @@ -73,7 +73,7 @@ GarrisonHolder.prototype.GetCapacity = function() GarrisonHolder.prototype.GetHealRate = function() { var cmpTechMan = QueryOwnerInterface(this.entity, IID_TechnologyManager); - return cmpTechMan.ApplyModifications("GarrisonHolder/BuffHeal", this.template.BuffHeal, this.entity); + return cmpTechMan.ApplyModifications("GarrisonHolder/BuffHeal", +this.template.BuffHeal, this.entity); }; /** diff --git a/binaries/data/mods/public/simulation/components/Heal.js b/binaries/data/mods/public/simulation/components/Heal.js index aefdceb454..8d0c3eb91b 100644 --- a/binaries/data/mods/public/simulation/components/Heal.js +++ b/binaries/data/mods/public/simulation/components/Heal.js @@ -41,14 +41,14 @@ Heal.prototype.GetTimers = function() { var cmpTechMan = QueryOwnerInterface(this.entity, IID_TechnologyManager); var prepare = 1000; - var repeat = cmpTechMan.ApplyModifications("Heal/Rate", this.template.Rate, this.entity); + var repeat = cmpTechMan.ApplyModifications("Heal/Rate", +this.template.Rate, this.entity); return { "prepare": prepare, "repeat": repeat }; }; Heal.prototype.GetRange = function() { var cmpTechMan = QueryOwnerInterface(this.entity, IID_TechnologyManager); - var max = cmpTechMan.ApplyModifications("Heal/Range", this.template.Range, this.entity); + var max = cmpTechMan.ApplyModifications("Heal/Range", +this.template.Range, this.entity); var min = 0; return { "max": max, "min": min }; }; @@ -78,7 +78,7 @@ Heal.prototype.PerformHeal = function(target) return; var cmpTechMan = QueryOwnerInterface(this.entity, IID_TechnologyManager); - var targetState = cmpHealth.Increase(cmpTechMan.ApplyModifications("Heal/HP", this.template.HP, this.entity)); + var targetState = cmpHealth.Increase(cmpTechMan.ApplyModifications("Heal/HP", +this.template.HP, this.entity)); // Add XP var cmpLoot = Engine.QueryInterface(target, IID_Loot); diff --git a/binaries/data/mods/public/simulation/components/ResourceGatherer.js b/binaries/data/mods/public/simulation/components/ResourceGatherer.js index 7ed39a7df8..3a16d369c6 100644 --- a/binaries/data/mods/public/simulation/components/ResourceGatherer.js +++ b/binaries/data/mods/public/simulation/components/ResourceGatherer.js @@ -130,11 +130,11 @@ ResourceGatherer.prototype.GetGatherRates = function() var ret = {}; var cmpTechMan = QueryOwnerInterface(this.entity, IID_TechnologyManager); - var baseSpeed = cmpTechMan.ApplyModifications("ResourceGatherer/BaseSpeed", this.template.BaseSpeed, this.entity); + var baseSpeed = cmpTechMan.ApplyModifications("ResourceGatherer/BaseSpeed", +this.template.BaseSpeed, this.entity); for (var r in this.template.Rates) { - var rate = cmpTechMan.ApplyModifications("ResourceGatherer/Rates/" + r, this.template.Rates[r], this.entity); + var rate = cmpTechMan.ApplyModifications("ResourceGatherer/Rates/" + r, +this.template.Rates[r], this.entity); ret[r] = rate * baseSpeed; } @@ -149,7 +149,7 @@ ResourceGatherer.prototype.GetCapacities = function() for (var r in this.template.Capacities) { - ret[r] = cmpTechMan.ApplyModifications("ResourceGatherer/Capacities/" + r, this.template.Capacities[r], this.entity); + ret[r] = cmpTechMan.ApplyModifications("ResourceGatherer/Capacities/" + r, +this.template.Capacities[r], this.entity); } return ret; diff --git a/binaries/data/mods/public/simulation/components/TechnologyManager.js b/binaries/data/mods/public/simulation/components/TechnologyManager.js index 886da42a09..9a79559589 100644 --- a/binaries/data/mods/public/simulation/components/TechnologyManager.js +++ b/binaries/data/mods/public/simulation/components/TechnologyManager.js @@ -279,6 +279,10 @@ TechnologyManager.prototype.clearModificationCache = function(ent) }; // Caching layer in front of ApplyModificationsWorker +// Note: be careful with the type of curValue, if it should be a numerical +// value and is derived from template data, you must convert the string +// from the template to a number using the + operator, before calling +// this function! TechnologyManager.prototype.ApplyModifications = function(valueName, curValue, ent) { if (!this.modificationCache[valueName]) @@ -293,7 +297,6 @@ TechnologyManager.prototype.ApplyModifications = function(valueName, curValue, e // The code to actually apply the modification TechnologyManager.prototype.ApplyModificationsWorker = function(valueName, curValue, ent) { - // Get all modifications to this value var modifications = this.modifications[valueName]; if (!modifications) // no modifications so return the original value @@ -303,7 +306,7 @@ TechnologyManager.prototype.ApplyModificationsWorker = function(valueName, curVa var cmpIdentity = Engine.QueryInterface(ent, IID_Identity); var classes = cmpIdentity.GetClassesList(); - var retValue = +curValue; + var retValue = curValue; for (var i in modifications) { @@ -329,7 +332,7 @@ TechnologyManager.prototype.ApplyModificationsWorker = function(valueName, curVa { // Nothing is cumulative so that ordering doesn't matter as much as possible if (modification.multiplier) - retValue += (modification.multiplier - 1) * +curValue; + retValue += (modification.multiplier - 1) * curValue; else if (modification.add) retValue += modification.add; else if (modification.replace) // This will depend on ordering because there is no choice