Index: binaries/data/mods/public/art/actors/units/britons/chariot_javelinist_c_m.xml =================================================================== --- binaries/data/mods/public/art/actors/units/britons/chariot_javelinist_c_m.xml +++ binaries/data/mods/public/art/actors/units/britons/chariot_javelinist_c_m.xml @@ -18,7 +18,6 @@ - Index: binaries/data/mods/public/art/actors/units/britons/hero_chariot_javelinist_boudicca_m.xml =================================================================== --- binaries/data/mods/public/art/actors/units/britons/hero_chariot_javelinist_boudicca_m.xml +++ binaries/data/mods/public/art/actors/units/britons/hero_chariot_javelinist_boudicca_m.xml @@ -17,7 +17,6 @@ - Index: binaries/data/mods/public/simulation/components/Attack.js =================================================================== --- binaries/data/mods/public/simulation/components/Attack.js +++ binaries/data/mods/public/simulation/components/Attack.js @@ -207,6 +207,9 @@ Attack.prototype.bonusesSchema + Attack.prototype.preferredClassesSchema + Attack.prototype.restrictedClassesSchema + + ""+ + "" + + "" + "" + "" + "" + @@ -238,6 +241,7 @@ Attack.prototype.Init = function() { + this.latestTarget = INVALID_ENTITY; }; Attack.prototype.Serialize = null; // we have no dynamic state to save @@ -499,8 +503,11 @@ * and should only be called after GetTimers().repeat msec has passed since the last * call to PerformAttack. */ -Attack.prototype.PerformAttack = function(type, target) +Attack.prototype.PerformAttack = function(type, target, turretId) { + if (this.template[type].TurretsOnly && !turretId && this.template[type].TurretsOnly == "true") + return; + let attackerOwner = Engine.QueryInterface(this.entity, IID_Ownership).GetOwner(); let cmpDamage = Engine.QueryInterface(SYSTEM_ENTITY, IID_Damage); @@ -562,8 +569,8 @@ // TODO: Use unit rotation to implement x/z offsets. let deltaLaunchPoint = new Vector3D(0, this.template[type].Projectile.LaunchPoint["@y"], 0.0); let launchPoint = Vector3D.add(selfPosition, deltaLaunchPoint); - - let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual); + + let cmpVisual = Engine.QueryInterface(turretId ||this.entity, IID_Visual); if (cmpVisual) { // if the projectile definition is missing from the template Index: binaries/data/mods/public/simulation/templates/units/brit_champion_cavalry.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/brit_champion_cavalry.xml +++ binaries/data/mods/public/simulation/templates/units/brit_champion_cavalry.xml @@ -12,6 +12,16 @@ units/brit_champion_chariot units/brit_champion_chariot.png + + + + + 0 + 1.4 + -2.5 + + + units/britons/chariot_javelinist_c_m.xml Index: binaries/data/mods/public/simulation/templates/units/brit_hero_boudicca.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/brit_hero_boudicca.xml +++ binaries/data/mods/public/simulation/templates/units/brit_hero_boudicca.xml @@ -3,6 +3,11 @@ units/heroes/brit_hero_boudicca + + + true + + 5.0 @@ -15,6 +20,16 @@ female units/brit_hero_boudicca.png + + + + + 0 + 1.4 + -2.5 + + + units/britons/hero_chariot_javelinist_boudicca_m.xml