From 4ea4e4e0bddea99a0c7b6ec749a02fa110326a80 Mon Sep 17 00:00:00 2001 From: Evil Factory <36804725+evilfactory@users.noreply.github.com> Date: Sat, 4 Dec 2021 13:15:04 -0300 Subject: [PATCH] allow some degree of control over human bots --- .../BarotraumaShared/Lua/DefaultLib.lua | 29 +++++++++++++++++ .../BarotraumaShared/Lua/DefaultRegister.lua | 31 +++++++++++++++++++ .../AI/Objectives/AIObjectiveManager.cs | 9 ++++++ 3 files changed, 69 insertions(+) diff --git a/Barotrauma/BarotraumaShared/Lua/DefaultLib.lua b/Barotrauma/BarotraumaShared/Lua/DefaultLib.lua index d01e48eaa..40e67a4cd 100644 --- a/Barotrauma/BarotraumaShared/Lua/DefaultLib.lua +++ b/Barotrauma/BarotraumaShared/Lua/DefaultLib.lua @@ -61,6 +61,35 @@ defaultLib["Entity"] = CreateStatic("Entity") defaultLib["Physics"] = CreateStatic("Physics") defaultLib["FireSource"] = CreateStatic("FireSource") +defaultLib["AIObjective"] = CreateStatic("AIObjective") +defaultLib["AIObjectiveChargeBatteries"] = CreateStatic("AIObjectiveChargeBatteries") +defaultLib["AIObjectiveCleanupItem"] = CreateStatic("AIObjectiveCleanupItem") +defaultLib["AIObjectiveCleanupItems"] = CreateStatic("AIObjectiveCleanupItems") +defaultLib["AIObjectiveCombat"] = CreateStatic("AIObjectiveCombat") +defaultLib["AIObjectiveContainItem"] = CreateStatic("AIObjectiveContainItem") +defaultLib["AIObjectiveDecontainItem"] = CreateStatic("AIObjectiveDecontainItem") +defaultLib["AIObjectiveEscapeHandcuffs"] = CreateStatic("AIObjectiveEscapeHandcuffs") +defaultLib["AIObjectiveExtinguishFire"] = CreateStatic("AIObjectiveExtinguishFire") +defaultLib["AIObjectiveExtinguishFires"] = CreateStatic("AIObjectiveExtinguishFires") +defaultLib["AIObjectiveFightIntruders"] = CreateStatic("AIObjectiveFightIntruders") +defaultLib["AIObjectiveFindDivingGear"] = CreateStatic("AIObjectiveFindDivingGear") +defaultLib["AIObjectiveFindSafety"] = CreateStatic("AIObjectiveFindSafety") +defaultLib["AIObjectiveFixLeak"] = CreateStatic("AIObjectiveFixLeak") +defaultLib["AIObjectiveFixLeaks"] = CreateStatic("AIObjectiveFixLeaks") +defaultLib["AIObjectiveGetItem"] = CreateStatic("AIObjectiveGetItem") +defaultLib["AIObjectiveGoTo"] = CreateStatic("AIObjectiveGoTo") +defaultLib["AIObjectiveIdle"] = CreateStatic("AIObjectiveIdle") +defaultLib["AIObjectiveOperateItem"] = CreateStatic("AIObjectiveOperateItem") +defaultLib["AIObjectiveOperateItem"] = CreateStatic("AIObjectiveOperateItem") +defaultLib["AIObjectivePumpWater"] = CreateStatic("AIObjectivePumpWater") +defaultLib["AIObjectiveRepairItem"] = CreateStatic("AIObjectiveRepairItem") +defaultLib["AIObjectiveRepairItems"] = CreateStatic("AIObjectiveRepairItems") +defaultLib["AIObjectiveRescue"] = CreateStatic("AIObjectiveRescue") +defaultLib["AIObjectiveRescueAll"] = CreateStatic("AIObjectiveRescueAll") +defaultLib["AIObjectiveReturn"] = CreateStatic("AIObjectiveReturn") +defaultLib["CombatMode"] = CreateStatic("AIObjectiveCombat+CombatMode") + + if SERVER then elseif CLIENT then diff --git a/Barotrauma/BarotraumaShared/Lua/DefaultRegister.lua b/Barotrauma/BarotraumaShared/Lua/DefaultRegister.lua index 6976be8a0..d0db11730 100644 --- a/Barotrauma/BarotraumaShared/Lua/DefaultRegister.lua +++ b/Barotrauma/BarotraumaShared/Lua/DefaultRegister.lua @@ -115,6 +115,37 @@ RegisterBarotrauma("HumanAIController") RegisterBarotrauma("AICharacter") RegisterBarotrauma("AITarget") RegisterBarotrauma("AITargetMemory") +RegisterBarotrauma("AIChatMessage") +RegisterBarotrauma("AIObjectiveManager") +RegisterBarotrauma("AITrigger") + +AddCallMetaMember(RegisterBarotrauma("AIObjective")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveChargeBatteries")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveCleanupItem")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveCleanupItems")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveCombat")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveContainItem")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveDecontainItem")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveEscapeHandcuffs")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveExtinguishFire")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveExtinguishFires")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveFightIntruders")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveFindDivingGear")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveFindSafety")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveFixLeak")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveFixLeaks")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveGetItem")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveGoTo")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveIdle")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveOperateItem")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveOperateItem")) +AddCallMetaMember(RegisterBarotrauma("AIObjectivePumpWater")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveRepairItem")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveRepairItems")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveRescue")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveRescueAll")) +AddCallMetaMember(RegisterBarotrauma("AIObjectiveReturn")) +RegisterBarotrauma("AIObjectiveCombat+CombatMode") RegisterBarotrauma("TalentPrefab") RegisterBarotrauma("TalentOption") diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveManager.cs index 383264b6f..72f1b30c1 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveManager.cs @@ -63,8 +63,17 @@ namespace Barotrauma CreateAutonomousObjectives(); } + public void AddObjective(AIObjective objective) + { + AddObjective(objective); + } + public void AddObjective(T objective) where T : AIObjective { + var result = new LuaResult(GameMain.Lua.hook.Call("AI.AddObjective", this, objective)); + + if (result.Bool()) return; + if (objective == null) { #if DEBUG