diff --git a/Aetheria.State.Verify/Program.cs b/Aetheria.State.Verify/Program.cs index 367391b71..23f8668bf 100644 --- a/Aetheria.State.Verify/Program.cs +++ b/Aetheria.State.Verify/Program.cs @@ -8637,6 +8637,7 @@ static void RequireWeaponGroupRequestAuthority(string root) { "item?.Entity?.WeaponGroups == null", "groupIndex >= item.Entity.WeaponGroups.Length", + "groupIndex < 0", "item.GetBehavior()" }; var localAcceptanceHits = forbiddenLocalAcceptanceSymbols @@ -8708,7 +8709,8 @@ static void RequireActionBarBindingRequestAuthority(string root) "ApplyDefaultActionBarBindings", "ProjectActionBarBindings", "ProjectActionBarBinding(slot, slot?.Binding)", - "Enumerable.Range(0, CurrentEntity.WeaponGroups.Length)" + "Enumerable.Range(0, CurrentEntity.WeaponGroups.Length)", + "slot == null || groupIndex < 0" }; var legacyHits = forbiddenSymbols diff --git a/Assets/Scripts/Gameplay/ActionGameManager.cs b/Assets/Scripts/Gameplay/ActionGameManager.cs index f21caeb68..b3d005343 100644 --- a/Assets/Scripts/Gameplay/ActionGameManager.cs +++ b/Assets/Scripts/Gameplay/ActionGameManager.cs @@ -655,7 +655,7 @@ public class ActionGameManager : MonoBehaviour public bool RequestWeaponGroupActionBarBinding(int slotIndex, int groupIndex) { var slot = ResolveActionBarSlot(slotIndex); - if (slot == null || groupIndex < 0) + if (slot == null) { return false; } @@ -1042,8 +1042,7 @@ public class ActionGameManager : MonoBehaviour public bool RequestWeaponGroupMembership(EquippedItem item, int groupIndex, bool assigned) { - if (item == null || - groupIndex < 0) + if (item == null) { return false; } diff --git a/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs b/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs index 4e54b79f0..abc3f871c 100644 --- a/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs +++ b/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs @@ -1328,20 +1328,29 @@ public class DaemonRuntimeDocumentTests public void DaemonOperationsRejectsWeaponGroupActionBarBindingForMissingGroup() { var run = RunWithTwoEntities(); - var set = AetheriaRuntimeDaemonCommandDocument.Create( + var negative = AetheriaRuntimeDaemonCommandDocument.Create( AetheriaRuntimeDaemonCommandKinds.SetActionBarBinding, "codex", "session-bindings", 17, "zone.0.entity.0"); - set.TextValue = "/1"; - set.ActionBarBinding.Kind = "weapon_group"; - set.WeaponGroup = 99; + negative.TextValue = "/1"; + negative.ActionBarBinding.Kind = "weapon_group"; + negative.WeaponGroup = -1; + var tooHigh = AetheriaRuntimeDaemonCommandDocument.Create( + AetheriaRuntimeDaemonCommandKinds.SetActionBarBinding, + "codex", + "session-bindings", + 18, + "zone.0.entity.0"); + tooHigh.TextValue = "/2"; + tooHigh.ActionBarBinding.Kind = "weapon_group"; + tooHigh.WeaponGroup = 99; - var result = AetheriaRuntimeDaemonOperations.Execute(run, new[] { set }); + var result = AetheriaRuntimeDaemonOperations.Execute(run, new[] { negative, tooHigh }); Assert.AreEqual(0, result.AppliedCommandIds.Count); - Assert.AreEqual(1, result.RejectedCommandIds.Count); + Assert.AreEqual(2, result.RejectedCommandIds.Count); Assert.AreEqual(0, run.ActionBarBindings.Count); } @@ -1443,24 +1452,34 @@ public class DaemonRuntimeDocumentTests } [Test] - public void DaemonOperationsRejectsWeaponGroupMembershipForMissingEquipment() + public void DaemonOperationsRejectsInvalidWeaponGroupMembership() { var run = RunWithTwoEntities(); - var command = AetheriaRuntimeDaemonCommandDocument.Create( + var missingEquipment = AetheriaRuntimeDaemonCommandDocument.Create( AetheriaRuntimeDaemonCommandKinds.SetWeaponGroupMembership, "codex", "session-weapon-groups", 21, "zone.0.entity.0"); - command.TargetEntityKey = "zone.0.entity.0"; - command.EquipmentIndex = 99; - command.WeaponGroup = 0; - command.ScalarValue = 1.0; + missingEquipment.TargetEntityKey = "zone.0.entity.0"; + missingEquipment.EquipmentIndex = 99; + missingEquipment.WeaponGroup = 0; + missingEquipment.ScalarValue = 1.0; + var negativeGroup = AetheriaRuntimeDaemonCommandDocument.Create( + AetheriaRuntimeDaemonCommandKinds.SetWeaponGroupMembership, + "codex", + "session-weapon-groups", + 22, + "zone.0.entity.0"); + negativeGroup.TargetEntityKey = "zone.0.entity.0"; + negativeGroup.EquipmentIndex = 1; + negativeGroup.WeaponGroup = -1; + negativeGroup.ScalarValue = 1.0; - var result = AetheriaRuntimeDaemonOperations.Execute(run, new[] { command }); + var result = AetheriaRuntimeDaemonOperations.Execute(run, new[] { missingEquipment, negativeGroup }); Assert.AreEqual(0, result.AppliedCommandIds.Count); - Assert.AreEqual(1, result.RejectedCommandIds.Count); + Assert.AreEqual(2, result.RejectedCommandIds.Count); CollectionAssert.AreEqual(new[] { 0 }, run.Zones[0].Entities[0].WeaponGroups[0]); }