Ticket #995: ticket995_trampling_5.diff
File ticket995_trampling_5.diff, 11.7 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='StateMultiplier' a:help='Multipliers for states'>" + 42 "<oneOrMore>" + 43 "<element a:help='UnitAI state'>" + 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/>" + … … 70 79 this.templateName = cmpTemplateManager.GetCurrentTemplateName(this.entity); 71 80 this.auras = {}; 72 81 this.affectedPlayers = {}; 73 for ( varname in this.template)82 for (let name in this.template) 74 83 { 75 84 this.affectedPlayers[name] = []; // will be calculated on ownership change 76 85 var aura = {}; … … 77 86 aura.affects = this.template[name].Affects; 78 87 if (this.template[name].AffectedPlayers) 79 88 aura.affectedPlayers = this.template[name].AffectedPlayers.split(/\s+/); 89 if (this.template[name].StateMultiplier) 90 aura.stateMultiplier = this.template[name].StateMultiplier 80 91 this.auras[name] = aura; 81 92 } 82 93 }; … … 160 171 } 161 172 }; 162 173 174 Auras.prototype.GetStateMultiplier = function(name) 175 { 176 let cmpUnitAI = Engine.QueryInterface(this.entity, IID_UnitAI); 177 if (!cmpUnitAI || !this.auras[name].stateMultiplier) 178 return 1.0; 179 180 let action = cmpUnitAI.GetCurrentState().split(".").pop(); 181 if (this.auras[name].stateMultiplier[action]) 182 return this.auras[name].stateMultiplier[action]; 183 return 1.0; 184 }; 185 163 186 Auras.prototype.HasFormationAura = function() 164 187 { 165 188 return this.GetAuraNames().some(n => this.IsFormationAura(n)); … … 206 229 return this.GetType(name) == "global"; 207 230 }; 208 231 232 Auras.prototype.HasStateMultiplier = function() 233 { 234 return this.GetAuraNames().some(n => !this.IsStateMultiplier(n)); 235 }; 236 237 Auras.prototype.IsStateMultiplier = function(name) 238 { 239 return !this.auras[name].stateMultiplier; 240 }; 241 209 242 /** 210 243 * clean all bonuses. Remove the old ones and re-apply the new ones 211 244 */ … … 374 407 375 408 Auras.prototype.ApplyBonus = function(name, ents) 376 409 { 377 varvalidEnts = this.GiveMembersWithValidClass(name, ents);410 let validEnts = this.GiveMembersWithValidClass(name, ents); 378 411 if (!validEnts.length) 379 412 return; 380 413 381 414 this[name].targetUnits = this[name].targetUnits.concat(validEnts); 382 var modifications = this.GetModifications(name); 383 var cmpAuraManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_AuraManager); 415 let modifications = this.GetModifications(name); 416 let cmpAuraManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_AuraManager); 417 let modNumber = 0; 418 for (let mod in modifications) 419 { 420 let data = {}; 421 if (modifications[mod].add) 422 data.add = modifications[mod].add * this.GetStateMultiplier(name); 423 if (modifications[mod].multiply) 424 data.multiply = modifications[mod].multiply * this.GetStateMultiplier(name); 425 if ((!modifications[mod].add || data.add == 0) && (!modifications[mod].multiply || data.multiply == 1)) 426 continue; 427 cmpAuraManager.ApplyBonus(modifications[mod].value, validEnts, data, this.GetModifierIdentifier(name, modifications[mod])); 428 ++modNumber; 429 } 384 430 385 for (let mod of modifications) 386 cmpAuraManager.ApplyBonus(mod.value, validEnts, mod, this.GetModifierIdentifier(name, mod)); 387 388 // update status bars if this has an icon 389 if (!this.GetOverlayIcon(name)) 431 // update status bars if this has an icon and a bonus is applied 432 if (!this.GetOverlayIcon(name) || modNumber == 0) 390 433 return; 391 434 392 435 for (let ent of validEnts) 393 436 { 394 varcmpStatusBars = Engine.QueryInterface(ent, IID_StatusBars);437 let cmpStatusBars = Engine.QueryInterface(ent, IID_StatusBars); 395 438 if (cmpStatusBars) 396 439 cmpStatusBars.AddAuraSource(this.entity, name); 397 440 } -
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.HasStateMultiplier()) 389 cmpAuras.Clean(); 386 390 }; 387 391 388 392 Engine.RegisterGlobal("FSM", FSM); -
binaries/data/mods/public/simulation/templates/gaia/fauna_elephant_african_bush.xml
33 33 </Bonuses> 34 34 </Charge> 35 35 </Attack> 36 <Auras> 37 <Aura1> 38 <Type>range</Type> 39 <Radius>7</Radius> 40 <Affects>Human</Affects> 41 <AffectedPlayers>Enemy</AffectedPlayers> 42 <Modifications> 43 <Health.RegenRate> <Add>-1</Add> </Health.RegenRate> 44 </Modifications> 45 <StateMultiplier> 46 <IDLE>0</IDLE> 47 <WALKING>2.0</WALKING> 48 <APPROACHING>2.0</APPROACHING> 49 </StateMultiplier> 50 <AuraName>Trample</AuraName> 51 <AuraDescription>Tramples all nearby enemy's</AuraDescription> 52 <OverlayIcon>art/textures/ui/session/auras/attack_bonus.png</OverlayIcon> 53 </Aura1> 54 </Auras> 36 55 <Footprint> 37 56 <Circle radius="3.65"/> 38 57 <Height>3.0</Height> -
binaries/data/mods/public/simulation/templates/gaia/fauna_elephant_asian.xml
33 33 </Bonuses> 34 34 </Charge> 35 35 </Attack> 36 <Auras> 37 <Aura1> 38 <Type>range</Type> 39 <Radius>7</Radius> 40 <Affects>Human</Affects> 41 <AffectedPlayers>Enemy</AffectedPlayers> 42 <Modifications> 43 <Health.RegenRate> <Add>-1.5</Add> </Health.RegenRate> 44 </Modifications> 45 <StateMultiplier> 46 <IDLE>0</IDLE> 47 <WALKING>2.0</WALKING> 48 <APPROACHING>2.0</APPROACHING> 49 </StateMultiplier> 50 <AuraName>Trample</AuraName> 51 <AuraDescription>Tramples all nearby enemy's</AuraDescription> 52 <OverlayIcon>art/textures/ui/session/auras/attack_bonus.png</OverlayIcon> 53 </Aura1> 54 </Auras> 36 55 <Footprint> 37 56 <Circle radius="2.8"/> 38 57 <Height>3.0</Height> -
binaries/data/mods/public/simulation/templates/gaia/fauna_elephant_north_african.xml
20 20 </Bonuses> 21 21 </Melee> 22 22 </Attack> 23 <Auras> 24 <Aura1> 25 <Type>range</Type> 26 <Radius>7</Radius> 27 <Affects>Human</Affects> 28 <AffectedPlayers>Enemy</AffectedPlayers> 29 <Modifications> 30 <Health.RegenRate> <Add>-1.5</Add> </Health.RegenRate> 31 </Modifications> 32 <StateMultiplier> 33 <IDLE>0</IDLE> 34 <WALKING>2.0</WALKING> 35 <APPROACHING>2.0</APPROACHING> 36 </StateMultiplier> 37 <AuraName>Trample</AuraName> 38 <AuraDescription>Tramples all nearby enemy's</AuraDescription> 39 <OverlayIcon>art/textures/ui/session/auras/attack_bonus.png</OverlayIcon> 40 </Aura1> 41 </Auras> 23 42 <Footprint> 24 43 <Circle radius="2.6"/> 25 44 <Height>2.7</Height> -
binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_archer.xml
14 14 <PreferredClasses datatype="tokens">Human</PreferredClasses> 15 15 </Ranged> 16 16 </Attack> 17 <Auras> 18 <Aura1> 19 <Type>range</Type> 20 <Radius>8</Radius> 21 <Affects>Human</Affects> 22 <AffectedPlayers>Enemy</AffectedPlayers> 23 <Modifications> 24 <Health.RegenRate> <Add>-4.5</Add> </Health.RegenRate> 25 </Modifications> 26 <StateMultiplier> 27 <IDLE>0</IDLE> 28 <WALKING>2.0</WALKING> 29 <APPROACHING>2.0</APPROACHING> 30 </StateMultiplier> 31 <AuraName>Trample</AuraName> 32 <AuraDescription>Tramples all nearby enemy's</AuraDescription> 33 <OverlayIcon>art/textures/ui/session/auras/attack_bonus.png</OverlayIcon> 34 </Aura1> 35 </Auras> 17 36 <Cost> 18 37 <Resources> 19 38 <wood>100</wood> -
binaries/data/mods/public/simulation/templates/template_unit_champion_elephant.xml
5 5 <Pierce>8</Pierce> 6 6 <Crush>25</Crush> 7 7 </Armour> 8 <Auras> 9 <Aura1> 10 <Type>range</Type> 11 <Radius>7</Radius> 12 <Affects>Human</Affects> 13 <AffectedPlayers>Enemy</AffectedPlayers> 14 <Modifications> 15 <Health.RegenRate> <Add>-2</Add> </Health.RegenRate> 16 </Modifications> 17 <StateMultiplier> 18 <IDLE>0</IDLE> 19 <WALKING>2.0</WALKING> 20 <APPROACHING>2.0</APPROACHING> 21 </StateMultiplier> 22 <AuraName>Trample</AuraName> 23 <AuraDescription>Tramples all nearby enemy's</AuraDescription> 24 <OverlayIcon>art/textures/ui/session/auras/attack_bonus.png</OverlayIcon> 25 </Aura1> 26 </Auras> 8 27 <Cost> 9 28 <Population>3</Population> 10 29 <BuildTime>20</BuildTime> -
binaries/data/mods/public/simulation/templates/units/maur_elephant_archer_b.xml
1 1 <?xml version="1.0" encoding="utf-8"?> 2 2 <Entity parent="template_unit_cavalry_ranged_archer"> 3 <Auras> 4 <Aura1> 5 <Type>range</Type> 6 <Radius>7</Radius> 7 <Affects>Human</Affects> 8 <AffectedPlayers>Enemy</AffectedPlayers> 9 <Modifications> 10 <Health.RegenRate> <Add>-1.5</Add> </Health.RegenRate> 11 </Modifications> 12 <StateMultiplier> 13 <IDLE>0</IDLE> 14 <WALKING>2.0</WALKING> 15 <APPROACHING>2.0</APPROACHING> 16 </StateMultiplier> 17 <AuraName>Trample</AuraName> 18 <AuraDescription>Tramples all nearby enemy's</AuraDescription> 19 <OverlayIcon>art/textures/ui/session/auras/attack_bonus.png</OverlayIcon> 20 </Aura1> 21 </Auras> 3 22 <Footprint replace=""> 4 23 <Circle radius="3.5"/> 5 24 <Height>8.0</Height>