Index: binaries/data/mods/public/gui/session/selection_panels.js =================================================================== --- binaries/data/mods/public/gui/session/selection_panels.js +++ binaries/data/mods/public/gui/session/selection_panels.js @@ -288,7 +288,10 @@ "conflictsWith": ["Garrison"], "getItems": function(unitEntStates) { - if (unitEntStates.some(state => !hasClass(state, "Unit"))) + // hide panel if formations are forbidden for some class in selection + if (unitEntStates.some(state => !hasClass(state, "Unit")) || + unitEntStates.some(state => hasClass(state, "Domestic") || hasClass(state, "FemaleCitizen") || hasClass(state, "Trader")) + ) return []; if (!g_AvailableFormations.has(unitEntStates[0].player)) @@ -296,11 +299,8 @@ let availableFormations = g_AvailableFormations.get(unitEntStates[0].player); - // Hide the panel if all formations are disabled - if (availableFormations.some(formation => canMoveSelectionIntoFormation(formation))) - return availableFormations; + return availableFormations; - return []; }, "setupButton": function(data) { Index: binaries/data/mods/public/simulation/components/Formation.js =================================================================== --- binaries/data/mods/public/simulation/components/Formation.js +++ binaries/data/mods/public/simulation/components/Formation.js @@ -7,8 +7,12 @@ "" + "" + "" + - "" + - "" + + ""+ + ""+ + ""+ + "2"+ + ""+ + ""+ "" + "" + "" + @@ -75,6 +79,7 @@ Formation.prototype.Init = function() { + this.requiredMemberCount = this.template.RequiredMemberCount; this.formationShape = this.template.FormationShape; this.sortingClasses = this.template.SortingClasses.split(/\s+/g); this.sortingOrder = this.template.SortingOrder; @@ -325,16 +330,16 @@ this.members = this.members.filter(function(e) { return ents.indexOf(e) == -1; }); this.inPosition = this.inPosition.filter(function(e) { return ents.indexOf(e) == -1; }); - for (var ent of ents) + for (let ent of ents) { - var cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI); + let cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI); cmpUnitAI.UpdateWorkOrders(); cmpUnitAI.SetFormationController(INVALID_ENTITY); } - for (var ent of this.formationMembersWithAura) + for (let ent of this.formationMembersWithAura) { - var cmpAuras = Engine.QueryInterface(ent, IID_Auras); + let cmpAuras = Engine.QueryInterface(ent, IID_Auras); cmpAuras.RemoveFormationBonus(ents); // the unit with the aura is also removed from the formation @@ -344,10 +349,10 @@ this.formationMembersWithAura = this.formationMembersWithAura.filter(function(e) { return ents.indexOf(e) == -1; }); - // If there's nobody left, destroy the formation - if (this.members.length == 0) + // if there is not required count of members, disband formation + if (this.members.length < this.requiredMemberCount) { - Engine.DestroyEntity(this.entity); + this.Disband(); return; } Index: binaries/data/mods/public/simulation/templates/special/formations/null.xml =================================================================== --- binaries/data/mods/public/simulation/templates/special/formations/null.xml +++ binaries/data/mods/public/simulation/templates/special/formations/null.xml @@ -3,5 +3,6 @@ formations/null.png None + Index: binaries/data/mods/public/simulation/templates/template_formation.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_formation.xml +++ binaries/data/mods/public/simulation/templates/template_formation.xml @@ -22,8 +22,8 @@ --> - 1 - + 2 + 2 units required 1 square Hero Champion Cavalry Melee Ranged Index: binaries/data/mods/public/simulation/templates/template_unit_support_trader.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_support_trader.xml +++ binaries/data/mods/public/simulation/templates/template_unit_support_trader.xml @@ -11,7 +11,10 @@ 100 - -ConquestCritical + + -ConquestCritical + Trader + Trader Bribable Trader Trade resources between your own markets and those of your allies.