diff --git a/binaries/data/mods/public/gui/session/unit_actions.js b/binaries/data/mods/public/gui/session/unit_actions.js index af2b5cd5e0..bbcd478281 100644 --- a/binaries/data/mods/public/gui/session/unit_actions.js +++ b/binaries/data/mods/public/gui/session/unit_actions.js @@ -232,11 +232,14 @@ var unitActions = }, "getActionInfo": function(entState, targetState) { + if (!entState.unitAI || !entState.unitAI.canPatrol) + return false; + return { "possible": true }; }, "hotkeyActionCheck": function(target, selection) { - if (!someUnitAI(selection) || + if (!someCanPatrol(selection) || !Engine.HotkeyIsPressed("session.patrol") || !getActionInfo("patrol", target).possible) return false; @@ -1273,8 +1276,9 @@ var g_EntityCommands = "patrol": { "getInfo": function(entState) { - if (g_Selection.toList().every(ent => !GetEntityState(ent).unitAI)) + if (!someCanPatrol(g_Selection.toList())) return false; + return { "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.patrol") + translate("Patrol") + "\n" + @@ -1431,6 +1435,14 @@ function someGuarding(entities) }); } +function someCanPatrol(entities) +{ + return entities.some(ent => { + let entState = GetEntityState(ent); + return entState && entState.unitAI && entState.unitAI.canPatrol; + }); +} + /** * Keep in sync with Commands.js. */ diff --git a/binaries/data/mods/public/simulation/components/GuiInterface.js b/binaries/data/mods/public/simulation/components/GuiInterface.js index 92c27b45f7..ba8c3d1e2f 100644 --- a/binaries/data/mods/public/simulation/components/GuiInterface.js +++ b/binaries/data/mods/public/simulation/components/GuiInterface.js @@ -382,6 +382,7 @@ GuiInterface.prototype.GetEntityState = function(player, ent) "hasWorkOrders": cmpUnitAI.HasWorkOrders(), "canGuard": cmpUnitAI.CanGuard(), "isGuarding": cmpUnitAI.IsGuardOf(), + "canPatrol": cmpUnitAI.CanPatrol(), "possibleStances": cmpUnitAI.GetPossibleStances(), "isIdle":cmpUnitAI.IsIdle(), }; diff --git a/binaries/data/mods/public/simulation/components/UnitAI.js b/binaries/data/mods/public/simulation/components/UnitAI.js index 18ddbaced1..33c1ea387a 100644 --- a/binaries/data/mods/public/simulation/components/UnitAI.js +++ b/binaries/data/mods/public/simulation/components/UnitAI.js @@ -24,6 +24,9 @@ UnitAI.prototype.Schema = "" + "" + "" + + "" + + "" + + "" + "" + "" + "" + @@ -5042,7 +5045,14 @@ UnitAI.prototype.CanGuard = function() if (cmpGuard && cmpGuard.GetEntities().length) return false; - return (this.template.CanGuard == "true"); + return this.template.CanGuard == "true"; +}; + +UnitAI.prototype.CanPatrol = function() +{ + // Formation controllers should always respond to commands + // (then the individual units can make up their own minds) + return this.IsFormationController() || this.template.CanPatrol == "true"; }; /** @@ -5093,6 +5103,12 @@ UnitAI.prototype.WalkAndFight = function(x, z, targetClasses, queued) UnitAI.prototype.Patrol = function(x, z, targetClasses, queued) { + if (!this.CanPatrol()) + { + this.Walk(x, z, queued); + return; + } + this.AddOrder("Patrol", { "x": x, "z": z, "targetClasses": targetClasses, "force": true }, queued); }; diff --git a/binaries/data/mods/public/simulation/templates/template_formation.xml b/binaries/data/mods/public/simulation/templates/template_formation.xml index 7e673c8890..0d16fe0a13 100644 --- a/binaries/data/mods/public/simulation/templates/template_formation.xml +++ b/binaries/data/mods/public/simulation/templates/template_formation.xml @@ -37,6 +37,7 @@ 12.0 true true + true true diff --git a/binaries/data/mods/public/simulation/templates/template_unit.xml b/binaries/data/mods/public/simulation/templates/template_unit.xml index b9b685a09c..281af58b18 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit.xml @@ -102,6 +102,7 @@ 12.0 false true + true false diff --git a/binaries/data/mods/public/simulation/templates/template_unit_fauna.xml b/binaries/data/mods/public/simulation/templates/template_unit_fauna.xml index e55d7d3a8a..cf5af2b8c2 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_fauna.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_fauna.xml @@ -23,6 +23,7 @@ 99 false + false 8.0 24.0 2000 diff --git a/binaries/data/mods/public/simulation/templates/template_unit_fauna_decorative.xml b/binaries/data/mods/public/simulation/templates/template_unit_fauna_decorative.xml index 9ede54309d..06d7086098 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_fauna_decorative.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_fauna_decorative.xml @@ -25,6 +25,7 @@ passive false false + false 20 10.0 10000 diff --git a/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_fishing.xml b/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_fishing.xml index 7abc6a7942..e2a93bb011 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_fishing.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_fishing.xml @@ -57,6 +57,7 @@ passive false + false ship-small diff --git a/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_merchant.xml b/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_merchant.xml index 894da1dc31..4e556631f1 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_merchant.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_merchant.xml @@ -55,6 +55,7 @@ passive false + false ship-small diff --git a/binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml b/binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml index c6d41b65d2..4ec274579f 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml @@ -86,6 +86,7 @@ 1 + false 9.5 diff --git a/binaries/data/mods/public/simulation/templates/template_unit_support_trader.xml b/binaries/data/mods/public/simulation/templates/template_unit_support_trader.xml index b71bebb8ac..d97914e56d 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_support_trader.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_support_trader.xml @@ -43,6 +43,7 @@ false + false 9.5 diff --git a/binaries/data/mods/public/simulation/templates/units/maur_support_elephant.xml b/binaries/data/mods/public/simulation/templates/units/maur_support_elephant.xml index aa3f5b81da..f14d8034ca 100644 --- a/binaries/data/mods/public/simulation/templates/units/maur_support_elephant.xml +++ b/binaries/data/mods/public/simulation/templates/units/maur_support_elephant.xml @@ -63,6 +63,9 @@ actor/fauna/animal/elephant_trained.xml + + false + large 5.5 diff --git a/binaries/data/mods/public/simulation/templates/units/spart_support_female_citizen.xml b/binaries/data/mods/public/simulation/templates/units/spart_support_female_citizen.xml index 6cd19ee113..fc8daf1021 100644 --- a/binaries/data/mods/public/simulation/templates/units/spart_support_female_citizen.xml +++ b/binaries/data/mods/public/simulation/templates/units/spart_support_female_citizen.xml @@ -32,6 +32,7 @@ standground + true units/spartans/female_citizen.xml