Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/simulation/helpers/Commands.js
Show First 20 Lines • Show All 728 Lines • ▼ Show 20 Lines | for (let ent of data.entities) | ||||
if (cmpEntityLimits && !cmpEntityLimits.AllowedToReplace(ent, cmd.template)) | if (cmpEntityLimits && !cmpEntityLimits.AllowedToReplace(ent, cmd.template)) | ||||
{ | { | ||||
if (g_DebugCommands) | if (g_DebugCommands) | ||||
warn("Invalid command: build limits check failed for player " + player + ": " + uneval(cmd)); | warn("Invalid command: build limits check failed for player " + player + ": " + uneval(cmd)); | ||||
continue; | continue; | ||||
} | } | ||||
var cmpTechnologyManager = QueryOwnerInterface(ent, IID_TechnologyManager); | var cmpTechnologyManager = QueryOwnerInterface(ent, IID_TechnologyManager); | ||||
//Check if the player has cmpTecnologyManager | |||||
if(cmpTechnologyManager == null){ | |||||
Silier: thats not correct,
you are checking if technology manager does not exists and required… | |||||
if (g_DebugCommands) | |||||
warn("Invalid command: the selected player's technology cannot be upgraded: " + uneval(cmd)); | |||||
continue; | |||||
} | |||||
if (cmpUpgrade.GetRequiredTechnology(cmd.template) && !cmpTechnologyManager.IsTechnologyResearched(cmpUpgrade.GetRequiredTechnology(cmd.template))) | if (cmpUpgrade.GetRequiredTechnology(cmd.template) && !cmpTechnologyManager.IsTechnologyResearched(cmpUpgrade.GetRequiredTechnology(cmd.template))) | ||||
{ | { | ||||
if (g_DebugCommands) | if (g_DebugCommands) | ||||
warn("Invalid command: upgrading requires unresearched technology: " + uneval(cmd)); | warn("Invalid command: upgrading requires unresearched technology: " + uneval(cmd)); | ||||
continue; | continue; | ||||
} | } | ||||
cmpUpgrade.Upgrade(cmd.template, data.cmpPlayer); | cmpUpgrade.Upgrade(cmd.template, data.cmpPlayer); | ||||
▲ Show 20 Lines • Show All 972 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator
thats not correct,
you are checking if technology manager does not exists and required technology is not researched, more you do not know here if Getrequiredtechnology returns valid value
next problem is logic introduced here (if would be correct, whats not), if cmpTechManager does not exist next part of condition is evaluated and fails on calling function upon undefined cmpTechnologyManager
As I pointed out, L737 checks if upgradable entity does require some technology to be researched cmpUpgrade.GetRequiredTechnology(cmd.template) only if this returns true, next part is evaluated !cmpTechnologyManager.IsTechnologyResearched(cmpUpgrade.GetRequiredTechnology(cmd.template)) problem which needs to be solved is that cmpTechnologyManager does not have to exits, but performed check cannot influence behaviour when no technology is required for upgrade