Ticket #995: ticket995_trampling_3.diff
File ticket995_trampling_3.diff, 6.5 KB (added by , 8 years ago) |
---|
-
binaries/data/mods/public/simulation/components/Auras.js
37 37 "</choice>" + 38 38 "</element>" + 39 39 modificationSchema + 40 "<optional>" + 41 "<element name='ActionMultiplier' a:help='Multipliers for actions'>" + 42 "<oneOrMore>" + 43 "<element a:help='Name of the action in CAPS'>" + 44 "<anyName/><data type='decimal'/>" + 45 "</element>" + 46 "</oneOrMore>" + 47 "</element>" + 48 "</optional>" + 40 49 "<optional>" + 41 50 "<element name='AuraName' a:help='name to display in the GUI'>" + 42 51 "<text/>" + … … 78 87 aura.affects = this.template[name].Affects; 79 88 if (this.template[name].AffectedPlayers) 80 89 aura.affectedPlayers = this.template[name].AffectedPlayers.split(/\s+/); 90 if (this.template[name].ActionMultiplier) 91 aura.actionMultiplier = this.template[name].ActionMultiplier 81 92 aura.modifications = []; 82 for ( varvalue in this.template[name].Modifications)93 for (let value in this.template[name].Modifications) 83 94 { 84 95 var mod = {}; 85 96 mod.value = value.replace(/\./g, "/").replace(/\/\//g, "."); 86 97 if (this.template[name].Modifications[value].Add) 87 98 mod.add = +this.template[name].Modifications[value].Add; 88 elseif (this.template[name].Modifications[value].Multiply)99 if (this.template[name].Modifications[value].Multiply) 89 100 mod.multiply = +this.template[name].Modifications[value].Multiply; 90 101 aura.modifications.push(mod); 91 102 } … … 170 181 } 171 182 }; 172 183 184 Auras.prototype.GetActionMultiplier = function(name) 185 { 186 let cmpUnitAI = Engine.QueryInterface(this.entity, IID_UnitAI); 187 if (!cmpUnitAI || !this.auras[name].actionMultiplier) 188 return 1.0; 189 190 let action = cmpUnitAI.GetCurrentState().split(".").pop(); 191 if (this.auras[name].actionMultiplier[action]) 192 return this.auras[name].actionMultiplier[action]; 193 return 1.0; 194 }; 195 173 196 Auras.prototype.HasFormationAura = function() 174 197 { 175 198 return this.GetAuraNames().some(n => this.IsFormationAura(n)); … … 216 239 return this.GetType(name) == "global"; 217 240 }; 218 241 242 Auras.prototype.HasActionMultiplier = function() 243 { 244 return this.GetAuraNames().some(n => !this.IsActionMultiplier(n)); 245 }; 246 247 Auras.prototype.IsActionMultiplier = function(name) 248 { 249 return !this.auras[name].actionMultiplier; 250 }; 251 219 252 /** 220 253 * clean all bonuses. Remove the old ones and re-apply the new ones 221 254 */ … … 365 398 366 399 Auras.prototype.ApplyBonus = function(name, ents) 367 400 { 368 varvalidEnts = this.GiveMembersWithValidClass(name, ents);401 let validEnts = this.GiveMembersWithValidClass(name, ents); 369 402 if (!validEnts.length) 370 403 return; 404 371 405 this[name].targetUnits = this[name].targetUnits.concat(validEnts); 372 var modifications = this.GetModifications(name); 373 var cmpAuraManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_AuraManager); 374 for each (let mod in modifications) 375 cmpAuraManager.ApplyBonus(mod.value, validEnts, mod, this.templateName + "/" + name + "/" + mod.value); 376 // update status bars if this has an icon 377 if (!this.GetOverlayIcon(name)) 406 let modifications = this.GetModifications(name); 407 let cmpAuraManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_AuraManager); 408 let modNumber = 0; 409 for (let mod in modifications) 410 { 411 let data = {}; 412 if (modifications[mod].add) 413 data.add = modifications[mod].add * this.GetActionMultiplier(name); 414 if (modifications[mod].multiply) 415 data.multiply = modifications[mod].multiply * this.GetActionMultiplier(name); 416 if ((!modifications[mod].add || data.add == 0) && (!modifications[mod].multiply || data.multiply == 1)) 417 continue; 418 cmpAuraManager.ApplyBonus(modifications[mod].value, validEnts, data, this.templateName + "/" + name + "/" + modifications[mod].value); 419 modNumber++; 420 }; 421 422 // update status bars if this has an icon and a bonus is applied 423 if (!this.GetOverlayIcon(name) || modNumber == 0) 378 424 return; 379 425 for (let ent of validEnts) 380 426 { 381 varcmpStatusBars = Engine.QueryInterface(ent, IID_StatusBars);427 let cmpStatusBars = Engine.QueryInterface(ent, IID_StatusBars); 382 428 if (cmpStatusBars) 383 429 cmpStatusBars.AddAuraSource(this.entity, name); 384 430 } -
binaries/data/mods/public/simulation/components/StatusBars.js
72 72 73 73 StatusBars.prototype.RemoveAuraSource = function(source, auraName) 74 74 { 75 if (!this.auraSources[source]) 76 return; 75 77 let names = this.auraSources[source]; 76 78 names.splice(names.indexOf(auraName), 1); 77 79 this.RegenerateSprites(); -
binaries/data/mods/public/simulation/helpers/FSM.js
383 383 384 384 obj.fsmStateName = nextStateName; 385 385 obj.FsmStateNameChanged(obj.fsmStateName); 386 387 let cmpAuras = Engine.QueryInterface(obj.entity, IID_Auras); 388 if (cmpAuras && cmpAuras.HasActionMultiplier()) 389 cmpAuras.Clean(); 386 390 }; 387 391 388 392 Engine.RegisterGlobal("FSM", FSM); -
binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_archer.xml
19 19 <wood>100</wood> 20 20 </Resources> 21 21 </Cost> 22 <Auras> 23 <Aura1> 24 <Type>range</Type> 25 <Radius>100</Radius> 26 <Affects>Human</Affects> 27 <AffectedPlayers>Enemy</AffectedPlayers> 28 <Modifications> 29 <Health.RegenRate> <Add>-1</Add> </Health.RegenRate> 30 </Modifications> 31 <ActionMultiplier> 32 <IDLE>0</IDLE> 33 <WALKING>2.0</WALKING> 34 <APPROACHING>2.0</APPROACHING> 35 </ActionMultiplier> 36 <AuraName>Trample</AuraName> 37 <AuraDescription>Tramples all nearby enemy's</AuraDescription> 38 <OverlayIcon>art/textures/ui/session/auras/attack_bonus.png</OverlayIcon> 39 </Aura1> 40 </Auras> 22 41 <Identity> 23 42 <VisibleClasses datatype="tokens">Ranged Archer</VisibleClasses> 24 43 <GenericName>Champion Cavalry Archer.</GenericName>