Ticket #3899: patch.3.diff
File patch.3.diff, 7.1 KB (added by , 8 years ago) |
---|
-
binaries/data/mods/public/simulation/components/ProductionQueue.js
ProductionQueue.prototype.CalculateEntit 139 139 */ 140 140 ProductionQueue.prototype.GetTechnologiesList = function() 141 141 { 142 142 if (!this.template.Technologies) 143 143 return []; 144 144 145 145 var string = this.template.Technologies._string; 146 146 if (!string) 147 147 return []; 148 148 149 149 var cmpTechnologyManager = QueryOwnerInterface(this.entity, IID_TechnologyManager); 150 150 if (!cmpTechnologyManager) 151 151 return []; 152 152 153 153 var cmpPlayer = QueryOwnerInterface(this.entity); 154 154 var cmpIdentity = Engine.QueryInterface(this.entity, IID_Identity); 155 155 if (!cmpPlayer || !cmpIdentity) 156 156 return []; 157 157 158 158 var techs = string.split(/\s+/); 159 160 // Remove any technologies that can't be searched by this civ (after capture for example) 161 let techsCivChecked = []; 162 for (let tech of techs) 163 { 164 let reqs = cmpTechnologyManager.GetTechnologyTemplate(tech).requirements || null; 165 if (cmpTechnologyManager.CheckTechnologyRequirements(reqs, true)) 166 techsCivChecked.push(tech); 167 } 168 techs = techsCivChecked; 169 159 170 var techList = []; 160 171 var superseded = {}; // Stores the tech which supersedes the key 161 172 162 173 var disabledTechnologies = cmpPlayer.GetDisabledTechnologies(); 163 174 164 175 // Add any top level technologies to an array which corresponds to the displayed icons 165 176 // Also store what a technology is superceded by in the superceded object {"tech1":"techWhichSupercedesTech1", ...} 166 177 for (var i in techs) 167 178 { 168 179 var tech = techs[i]; … … ProductionQueue.prototype.GetTechnologie 172 183 if (!template.supersedes || techs.indexOf(template.supersedes) === -1) 173 184 techList.push(tech); 174 185 else 175 186 superseded[template.supersedes] = tech; 176 187 } 177 188 178 189 // Now make researched/in progress techs invisible 179 190 for (var i in techList) 180 191 { 181 192 var tech = techList[i]; 182 193 while (this.IsTechnologyResearchedOrInProgress(tech)) … … ProductionQueue.prototype.GetTechnologie 184 195 tech = superseded[tech]; 185 196 } 186 197 187 198 techList[i] = tech; 188 199 } 189 200 190 201 var ret = []; 191 202 192 203 // This inserts the techs into the correct positions to line up the technology pairs 193 204 for (var i = 0; i < techList.length; i++) 194 205 { 195 206 var tech = techList[i]; 196 207 if (!tech) 197 208 { 198 209 ret[i] = undefined; 199 210 continue; 200 211 } 201 212 202 213 var template = cmpTechnologyManager.GetTechnologyTemplate(tech); 203 214 if (template.top) 204 215 ret[i] = {"pair": true, "top": template.top, "bottom": template.bottom}; 205 216 else 206 217 ret[i] = tech; 207 218 } 208 219 209 220 return ret; 210 221 }; 211 222 212 223 ProductionQueue.prototype.IsTechnologyResearchedOrInProgress = function(tech) 213 224 { -
binaries/data/mods/public/simulation/components/TechnologyManager.js
TechnologyManager.prototype.CanProduce = 83 83 var cmpTempManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager); 84 84 var template = cmpTempManager.GetTemplate(templateName); 85 85 86 86 if (template.Identity && template.Identity.RequiredTechnology) 87 87 return this.IsTechnologyResearched(template.Identity.RequiredTechnology); 88 else89 return true; // If there is no required technology then this entity can be produced88 // If there is no required technology then this entity can be produced 89 return true; 90 90 }; 91 91 92 92 TechnologyManager.prototype.IsTechnologyResearched = function(tech) 93 93 { 94 94 return (this.researchedTechs[tech] !== undefined); … … TechnologyManager.prototype.CanResearch 122 122 return false; 123 123 124 124 return this.CheckTechnologyRequirements(template.requirements || null); 125 125 }; 126 126 127 // Private function for checking a set of requirements is met 128 TechnologyManager.prototype.CheckTechnologyRequirements = function(reqs) 127 /** 128 * Private function for checking a set of requirements is met 129 * @param reqs Object of technology requirements as given by the technology template 130 * @param civonly A boolean set to true if only the civ requirement is checked 131 * 132 * @return true if the requirements are checked 133 * false otherwise 134 */ 135 TechnologyManager.prototype.CheckTechnologyRequirements = function(reqs, civonly) 129 136 { 130 137 // If there are no requirements then all requirements are met 131 138 if (!reqs) 132 139 return true; 133 140 134 if (reqs.tech) 135 { 136 return this.IsTechnologyResearched(reqs.tech); 137 } 138 else if (reqs.all) 141 if (reqs.all) 139 142 { 140 143 for (var i = 0; i < reqs.all.length; i++) 141 144 { 142 if (!this.CheckTechnologyRequirements(reqs.all[i] ))145 if (!this.CheckTechnologyRequirements(reqs.all[i], civonly)) 143 146 return false; 144 147 } 145 148 return true; 146 149 } 147 elseif (reqs.any)150 if (reqs.any) 148 151 { 149 152 for (var i = 0; i < reqs.any.length; i++) 150 153 { 151 if (this.CheckTechnologyRequirements(reqs.any[i] ))154 if (this.CheckTechnologyRequirements(reqs.any[i], civonly)) 152 155 return true; 153 156 } 154 157 return false; 155 158 } 156 else if (reqs.class) 159 if (reqs.civ) 160 { 161 let cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); 162 return cmpPlayer && cmpPlayer.GetCiv() == reqs.civ; 163 } 164 if (reqs.notciv) 165 { 166 let cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); 167 return cmpPlayer && cmpPlayer.GetCiv() == reqs.notciv; 168 } 169 if (civonly) 170 return true; 171 if (reqs.tech) 172 return this.IsTechnologyResearched(reqs.tech); 173 if (reqs.class) 157 174 { 158 175 if (reqs.numberOfTypes) 159 176 { 160 177 if (this.typeCountsByClass[reqs.class]) 161 178 return (reqs.numberOfTypes <= Object.keys(this.typeCountsByClass[reqs.class]).length); 162 else 163 return false; 179 return false; 164 180 } 165 elseif (reqs.number)181 if (reqs.number) 166 182 { 167 183 if (this.classCounts[reqs.class]) 168 184 return (reqs.number <= this.classCounts[reqs.class]); 169 else170 return false;171 }172 }173 else if (reqs.civ)174 {175 var cmpPlayer = Engine.QueryInterface(this.entity, IID_Player);176 if (cmpPlayer && cmpPlayer.GetCiv() == reqs.civ)177 return true;178 else179 185 return false; 186 } 180 187 } 181 else if (reqs.notciv)182 {183 var cmpPlayer = Engine.QueryInterface(this.entity, IID_Player);184 if (cmpPlayer && cmpPlayer.GetCiv() == reqs.notciv)185 return false;186 else187 return true;188 }189 190 188 // The technologies requirements are not a recognised format 191 189 error("Bad requirements " + uneval(reqs)); 192 190 return false; 193 191 }; 194 192 -
binaries/data/mods/public/simulation/data/technologies/persians/training_conscription_cavalry.json
9 9 "researchTime": 40, 10 10 "tooltip": "Faster batch training speed for the Stables.", 11 11 "modifications": [{"value": "ProductionQueue/BatchTimeModifier", "add": -0.1}], 12 12 "affects": ["Stables"], 13 13 "soundComplete": "interface/alarm/alarm_upgradearmory.xml" 14 } 15 Pas de fin de ligne à la fin du fichier 14 }