Index: binaries/data/mods/public/simulation/components/StatusEffectsReceiver.js
===================================================================
--- binaries/data/mods/public/simulation/components/StatusEffectsReceiver.js
+++ binaries/data/mods/public/simulation/components/StatusEffectsReceiver.js
@@ -24,21 +24,52 @@
this.activeStatusEffects[statusName] = {};
let status = this.activeStatusEffects[statusName];
status.duration = +data.Duration;
- status.interval = +data.Interval;
- status.damage = +data.Damage;
status.timeElapsed = 0;
status.firstTime = true;
+ if (data.Damage)
+ {
+ status.interval = +data.Interval;
+ status.damage = +data.Damage;
+ }
+ if (data.Modifiers)
+ {
+ status.Modifiers = {};
+ let cmpModifiersManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_ModifiersManager);
+ for (let modifier in data.Modifiers)
+ {
+ status.Modifiers[modifier] = data.Modifiers[modifier].Path
+ cmpModifiersManager.AddModifier(data.Modifiers[modifier].Path, statusName, {
+ "affects": data.Modifiers[modifier].Affects._string.split(/\s+/),
+ [data.Modifiers[modifier].Operation]: +data.Modifiers[modifier].Value
+ }, this.entity);
+ }
+ }
+
let cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer);
- status.timer = cmpTimer.SetInterval(this.entity, IID_StatusEffectsReceiver, "ExecuteEffect", 0, +status.interval, statusName);
+ if (status.interval)
+ status.timer = cmpTimer.SetInterval(this.entity, IID_StatusEffectsReceiver, "ExecuteEffect", 0, +status.interval, statusName);
+ else if (status.duration)
+ cmpTimer.SetTimeout(this.entity, IID_StatusEffectsReceiver, "RemoveStatus", status.duration, statusName);
};
-StatusEffectsReceiver.prototype.RemoveStatus = function(statusName) {
+StatusEffectsReceiver.prototype.RemoveStatus = function(statusName)
+{
if (!this.activeStatusEffects[statusName])
return;
- let cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer);
- cmpTimer.CancelTimer(this.activeStatusEffects[statusName].timer);
+ if (this.activeStatusEffects[statusName].Modifiers)
+ {
+ let cmpModifiersManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_ModifiersManager);
+ for (let modifier in this.activeStatusEffects[statusName].Modifiers)
+ cmpModifiersManager.RemoveModifier(this.activeStatusEffects[statusName].Modifiers[modifier], statusName, this.entity);
+ }
+
+ if (this.activeStatusEffects[statusName].timer)
+ {
+ let cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer);
+ cmpTimer.CancelTimer(this.activeStatusEffects[statusName].timer);
+ }
this.activeStatusEffects[statusName] = undefined;
};
Index: binaries/data/mods/public/simulation/helpers/Attacking.js
===================================================================
--- binaries/data/mods/public/simulation/helpers/Attacking.js
+++ binaries/data/mods/public/simulation/helpers/Attacking.js
@@ -29,14 +29,38 @@
"" +
"" +
"" +
- "" +
+ "" +
"" +
"" +
"" +
"" +
+ "" +
"" +
+ "" +
+ "" +
"" +
"" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "tokens" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
"" +
"" +
"" +
@@ -79,8 +103,8 @@
if (template.Capture)
ret.Capture = ApplyValueModificationsToEntity(valueModifRoot + "/Capture", +(template.Capture || 0), entity);
- if (template.StatusEffects)
- ret.StatusEffects = template.StatusEffects;
+ if (template.GiveStatus)
+ ret.GiveStatus = template.GiveStatus;
if (template.Bonuses)
ret.Bonuses = template.Bonuses;
Index: binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_archer.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_archer.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_archer.xml
@@ -11,6 +11,25 @@
6.0
0
+
+
+ 10000
+
+
+ UnitMotion/WalkSpeed
+ Unit
+ add
+ 20
+
+
+ Health/Max
+ Unit
+ add
+ -20
+
+
+
+
72.0
0.0
600