Index: binaries/data/mods/public/maps/random/survivalofthefittest.js =================================================================== --- binaries/data/mods/public/maps/random/survivalofthefittest.js +++ binaries/data/mods/public/maps/random/survivalofthefittest.js @@ -188,7 +188,7 @@ var femaleLocation = getTIPIADBON([ix, iz], [mapSize / 2, mapSize / 2], [-3 , 3.5], 1, 3); if (femaleLocation !== undefined) { - placeObject(femaleLocation[0], femaleLocation[1], "skirmish/units/default_support_female_citizen", id, playerAngle[i] + PI); + placeObject(femaleLocation[0], femaleLocation[1], "indestructable|skirmish/units/default_support_female_citizen", id, playerAngle[i] + PI); addToClass(floor(femaleLocation[0]), floor(femaleLocation[1]), clWomen); } } Index: binaries/data/mods/public/maps/random/survivalofthefittest_triggers.js =================================================================== --- binaries/data/mods/public/maps/random/survivalofthefittest_triggers.js +++ binaries/data/mods/public/maps/random/survivalofthefittest_triggers.js @@ -168,18 +168,8 @@ let playerEntities = cmpRangeManager.GetEntitiesByPlayer(i); // Get all of each player's entities for (let entity of playerEntities) - { if (TriggerHelper.EntityHasClass(entity, "CivilCentre")) this.playerCivicCenter[i] = entity; - else if (TriggerHelper.EntityHasClass(entity, "Female")) - { - let cmpDamageReceiver = Engine.QueryInterface(entity, IID_DamageReceiver); - cmpDamageReceiver.SetInvulnerability(true); - - let cmpHealth = Engine.QueryInterface(entity, IID_Health); - cmpHealth.SetUndeletable(true); - } - } } this.PlaceTreasures(); Index: binaries/data/mods/public/simulation/components/Armour.js =================================================================== --- binaries/data/mods/public/simulation/components/Armour.js +++ binaries/data/mods/public/simulation/components/Armour.js @@ -17,6 +17,11 @@ "" + "" + "" + + "" + + "" + + "" + + "" + + "" + "" + "" + "" + @@ -34,7 +39,7 @@ Armour.prototype.Init = function() { - this.invulnerable = false; + this.invulnerable = this.template.Invincibility && this.template.Invincibility == "true"; }; Armour.prototype.SetInvulnerability = function(invulnerability) Index: binaries/data/mods/public/simulation/components/SkirmishReplacer.js =================================================================== --- binaries/data/mods/public/simulation/components/SkirmishReplacer.js +++ binaries/data/mods/public/simulation/components/SkirmishReplacer.js @@ -40,6 +40,15 @@ var cmpTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager); var templateName = cmpTemplateManager.GetCurrentTemplateName(this.entity); + let specialFilter = ""; + let specialFilterPos = templateName.lastIndexOf("|"); + + if (specialFilterPos != -1) + { + specialFilter = templateName.substr(0, specialFilterPos + 1); + templateName = templateName.substr(specialFilterPos); + } + if (templateName in replacementEntities) templateName = replacementEntities[templateName]; else if (this.template && "general" in this.template) @@ -53,7 +62,7 @@ return; } - templateName = templateName.replace(/\{civ\}/g, civ); + templateName = specialFilter + templateName.replace(/\{civ\}/g, civ); var cmpCurPosition = Engine.QueryInterface(this.entity, IID_Position); var replacement = Engine.AddEntity(templateName); Index: binaries/data/mods/public/simulation/components/UnitAI.js =================================================================== --- binaries/data/mods/public/simulation/components/UnitAI.js +++ binaries/data/mods/public/simulation/components/UnitAI.js @@ -3096,7 +3096,9 @@ "leave": function() { this.StopTimer(); var cmpDamageReceiver = Engine.QueryInterface(this.entity, IID_DamageReceiver); - cmpDamageReceiver.SetInvulnerability(false); + var cmpTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager); + var template = cmpTemplateManager.GetTemplate(cmpTemplateManager.GetCurrentTemplateName(this.entity)); + cmpDamageReceiver.SetInvulnerability(template.Armour.Invincibility && template.Armour.Invincibility == "true"); }, "Timer": function(msg) { Index: binaries/data/mods/public/simulation/templates/special_filter/indestructable.xml =================================================================== --- /dev/null +++ binaries/data/mods/public/simulation/templates/special_filter/indestructable.xml @@ -0,0 +1,10 @@ + + + + true + + + true + + +