From 28486c00ff2e60cd6f616f49112f0e7a8ef2fb4c Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Mon, 31 Mar 2025 18:56:02 +0200 Subject: [PATCH] Fix server and client scripts on cyka --- CykaQuick/Lua/Autorun/init.lua | 346 +++++++++++++++++---------------- 1 file changed, 174 insertions(+), 172 deletions(-) diff --git a/CykaQuick/Lua/Autorun/init.lua b/CykaQuick/Lua/Autorun/init.lua index 374e011..ea9b9cd 100644 --- a/CykaQuick/Lua/Autorun/init.lua +++ b/CykaQuick/Lua/Autorun/init.lua @@ -1,181 +1,183 @@ -- luacheck: globals MyModGlobal -- luacheck: read_globals Character SERVER Keys LuaUserData Hook Descriptors PlayerInput Timer -- luacheck: max line length 420 -if SERVER then return end -- Docs: https://evilfactory.github.io/LuaCsForBarotrauma/lua-docs/manual/common-questions/ ----@class MyModGlobal ----@field CONFIG {QUICKSTACK_KEYS: Keys, FABRICATOR_KEY: Keys, MAX_BUY: Keys, NESTED_CONTAINERS: boolean, DEBUG_MODE: boolean} ----@field MOD_NAME string ----@field MOD_VERSION string ----@field DumpTable fun(table: table, depth?: number) ----@field debugPrint fun(message: string) -MyModGlobal = { - CONFIG = { - QUICKSTACK_KEYS = Keys.F, - FABRICATOR_KEY = Keys.V, - MAX_BUY = Keys.B, - FIX = Keys.R, - UNLOAD = Keys.E, - RELOAD = Keys.R, - STACK_TO_CURSOR = Keys.G, - LOOT = Keys.L, - SONAR = Keys.X, - AOEPICKUP = Keys.Y, - QICK_FABRICATOR = Keys.K, - QICK_DECONSTRUCTOR = Keys.J, - QICK_MEDICAL_FABRICATOR = Keys.M, - NESTED_CONTAINERS = true, - DEBUG_MODE = true, - }, - MOD_NAME = "Cyka Quick", - MOD_VERSION = "1.1.0", - BAG_SLOT = 8, -} +if SERVER then + require("Cyka.xpticker") +else + ---@class MyModGlobal + ---@field CONFIG {QUICKSTACK_KEYS: Keys, FABRICATOR_KEY: Keys, MAX_BUY: Keys, NESTED_CONTAINERS: boolean, DEBUG_MODE: boolean} + ---@field MOD_NAME string + ---@field MOD_VERSION string + ---@field DumpTable fun(table: table, depth?: number) + ---@field debugPrint fun(message: string) + MyModGlobal = { + CONFIG = { + QUICKSTACK_KEYS = Keys.F, + FABRICATOR_KEY = Keys.V, + MAX_BUY = Keys.B, + FIX = Keys.R, + UNLOAD = Keys.E, + RELOAD = Keys.R, + STACK_TO_CURSOR = Keys.G, + LOOT = Keys.L, + SONAR = Keys.X, + AOEPICKUP = Keys.Y, + QICK_FABRICATOR = Keys.K, + QICK_DECONSTRUCTOR = Keys.J, + QICK_MEDICAL_FABRICATOR = Keys.M, + NESTED_CONTAINERS = true, + DEBUG_MODE = true, + }, + MOD_NAME = "Cyka Quick", + MOD_VERSION = "1.1.0", + BAG_SLOT = 8, + } ----@param table table ----@param depth number? -MyModGlobal.DumpTable = function(table, depth) - if depth == nil then - depth = 0 - end - if (depth > 200) then - print("Error: Depth > 200 in dumpTable()") - return - end - for k, v in pairs(table) do - if (type(v) == "table") then - print(string.rep(" ", depth) .. k .. ":") - MyModGlobal.DumpTable(v, depth + 1) - else - print(string.rep(" ", depth) .. k .. ": ", v) + ---@param table table + ---@param depth number? + MyModGlobal.DumpTable = function(table, depth) + if depth == nil then + depth = 0 + end + if (depth > 200) then + print("Error: Depth > 200 in dumpTable()") + return + end + for k, v in pairs(table) do + if (type(v) == "table") then + print(string.rep(" ", depth) .. k .. ":") + MyModGlobal.DumpTable(v, depth + 1) + else + print(string.rep(" ", depth) .. k .. ": ", v) + end end end + + -- Debugging helper function + MyModGlobal.debugPrint = function(message) + if MyModGlobal.CONFIG.DEBUG_MODE then + print("[" .. MyModGlobal.MOD_NAME .. "] " .. message) + end + end + + local quickstack = require("Cyka.quickstack") + local fabricatorstack = require("Cyka.fabricatorstack") + local quickbuy = require("Cyka.quickbuy") + local hotkeyrepair = require("Cyka.hotkeyrepair") + local cursormacroer = require("Cyka.cursormacroer") + local quickunload = require("Cyka.quickunload") + local quickreload = require("Cyka.quickreload") + local quickloot = require("Cyka.quickloot") + local sonarpinger = require("Cyka.sonarpinger") + local aoepickup = require("Cyka.aoepickup") + local quickaccess = require("Cyka.quickaccess") + require("Cyka.zoom") + + -- TODO: Keybind fabricator / medical fabricator / deconstructor on the sub + + print(MyModGlobal.MOD_NAME .. " v" .. MyModGlobal.MOD_VERSION .. " loaded!") + + -- Register necessary types and make fields accessible + LuaUserData.RegisterType("Barotrauma.Items.Components.ItemContainer+SlotRestrictions") + LuaUserData.RegisterType( + 'System.Collections.Immutable.ImmutableArray`1[[Barotrauma.Items.Components.ItemContainer+SlotRestrictions, Barotrauma]]') + LuaUserData.MakeFieldAccessible(Descriptors['Barotrauma.Items.Components.ItemContainer'], 'slotRestrictions') + LuaUserData.MakeFieldAccessible(Descriptors['Barotrauma.ItemInventory'], 'slots') + LuaUserData.MakeFieldAccessible(Descriptors['Barotrauma.ItemInventory'], 'slotsPerRow') + LuaUserData.MakeFieldAccessible(Descriptors["Barotrauma.CharacterInventory"], "slots") + LuaUserData.RegisterType("Barotrauma.Store") + LuaUserData.RegisterType("Barotrauma.GUIComponent") + LuaUserData.RegisterType("Barotrauma.PurchasedItem") + LuaUserData.RegisterType("Barotrauma.ItemPrefab") + LuaUserData.RegisterType("Barotrauma.Location+StoreInfo") + LuaUserData.MakeMethodAccessible(Descriptors["Barotrauma.CargoManager"], "GetConfirmedSoldEntities") + LuaUserData.RegisterType("Barotrauma.Items.Components.Repairable") + LuaUserData.RegisterType("Barotrauma.VisualSlot") + + Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) + if not PlayerInput.KeyHit(MyModGlobal.CONFIG.QUICKSTACK_KEYS) then return end + quickstack.quickStackItems(instance) + end, Hook.HookMethodType.After) + + Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) + if not PlayerInput.KeyHit(MyModGlobal.CONFIG.STACK_TO_CURSOR) then return end + if not PlayerInput.IsShiftDown() then + quickstack.stackToCursor() + else + quickstack.stackAllToCursor() + end + end, Hook.HookMethodType.After) + + Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) + if not PlayerInput.KeyHit(MyModGlobal.CONFIG.FABRICATOR_KEY) then return end + fabricatorstack.tryStackFabricator(instance) + end, Hook.HookMethodType.After) + + Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) + if not PlayerInput.KeyHit(MyModGlobal.CONFIG.FIX) then return end + hotkeyrepair.tryRepair() + end, Hook.HookMethodType.After) + + Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) + if not PlayerInput.KeyHit(MyModGlobal.CONFIG.MAX_BUY) then return end + quickbuy.tryBuy() + end, Hook.HookMethodType.After) + + local throttle = 0.1 + local throttleTimer = 0 + Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) + if PlayerInput.Mouse4ButtonClicked() then + cursormacroer.setTargetInventory() + end + if not PlayerInput.IsAltDown() then return end + if Timer.GetTime() < throttleTimer then return end + throttleTimer = Timer.GetTime() + throttle + -- We can not use shift because holding shift means we're moving half a stack + -- Fuck me sideways + -- if not PlayerInput.IsShiftDown() then return end + -- if not PlayerInput.PrimaryMouseButtonClicked() then return end + cursormacroer.tryStackCursorItem() + end, Hook.HookMethodType.After) + + Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) + if not PlayerInput.KeyHit(MyModGlobal.CONFIG.UNLOAD) then return end + quickunload.tryUnloadCursorItem() + end, Hook.HookMethodType.After) + + Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) + if not PlayerInput.KeyHit(MyModGlobal.CONFIG.RELOAD) then return end + quickreload.tryReloadCursorItem(PlayerInput.IsShiftDown()) + end, Hook.HookMethodType.After) + + -- Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) + -- if not PlayerInput.KeyHit(MyModGlobal.CONFIG.LOOT) then return end + -- quickloot.tryLoot() + -- end, Hook.HookMethodType.After) + + Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) + if not PlayerInput.KeyHit(MyModGlobal.CONFIG.SONAR) then return end + sonarpinger.tryPing() + end, Hook.HookMethodType.After) + + Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) + if not PlayerInput.KeyHit(MyModGlobal.CONFIG.AOEPICKUP) then return end + aoepickup.tryAoePickup() + end, Hook.HookMethodType.After) + + Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) + if not PlayerInput.KeyHit(MyModGlobal.CONFIG.QICK_FABRICATOR) then return end + quickaccess.tryAccessFabricator(PlayerInput.IsShiftDown()) + end, Hook.HookMethodType.After) + + Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) + if not PlayerInput.KeyHit(MyModGlobal.CONFIG.QICK_DECONSTRUCTOR) then return end + quickaccess.tryAccessDeconstructor(PlayerInput.IsShiftDown()) + end, Hook.HookMethodType.After) + + Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) + if not PlayerInput.KeyHit(MyModGlobal.CONFIG.QICK_MEDICAL_FABRICATOR) then return end + quickaccess.tryAccessMedicalFabricator(PlayerInput.IsShiftDown()) + end, Hook.HookMethodType.After) end - --- Debugging helper function -MyModGlobal.debugPrint = function(message) - if MyModGlobal.CONFIG.DEBUG_MODE then - print("[" .. MyModGlobal.MOD_NAME .. "] " .. message) - end -end - -local quickstack = require("Cyka.quickstack") -local fabricatorstack = require("Cyka.fabricatorstack") -local quickbuy = require("Cyka.quickbuy") -local hotkeyrepair = require("Cyka.hotkeyrepair") -local cursormacroer = require("Cyka.cursormacroer") -local quickunload = require("Cyka.quickunload") -local quickreload = require("Cyka.quickreload") -local quickloot = require("Cyka.quickloot") -local sonarpinger = require("Cyka.sonarpinger") -local aoepickup = require("Cyka.aoepickup") -local quickaccess = require("Cyka.quickaccess") -require("Cyka.xpticker") -require("Cyka.zoom") - --- TODO: Keybind fabricator / medical fabricator / deconstructor on the sub - -print(MyModGlobal.MOD_NAME .. " v" .. MyModGlobal.MOD_VERSION .. " loaded!") - --- Register necessary types and make fields accessible -LuaUserData.RegisterType("Barotrauma.Items.Components.ItemContainer+SlotRestrictions") -LuaUserData.RegisterType( - 'System.Collections.Immutable.ImmutableArray`1[[Barotrauma.Items.Components.ItemContainer+SlotRestrictions, Barotrauma]]') -LuaUserData.MakeFieldAccessible(Descriptors['Barotrauma.Items.Components.ItemContainer'], 'slotRestrictions') -LuaUserData.MakeFieldAccessible(Descriptors['Barotrauma.ItemInventory'], 'slots') -LuaUserData.MakeFieldAccessible(Descriptors['Barotrauma.ItemInventory'], 'slotsPerRow') -LuaUserData.MakeFieldAccessible(Descriptors["Barotrauma.CharacterInventory"], "slots") -LuaUserData.RegisterType("Barotrauma.Store") -LuaUserData.RegisterType("Barotrauma.GUIComponent") -LuaUserData.RegisterType("Barotrauma.PurchasedItem") -LuaUserData.RegisterType("Barotrauma.ItemPrefab") -LuaUserData.RegisterType("Barotrauma.Location+StoreInfo") -LuaUserData.MakeMethodAccessible(Descriptors["Barotrauma.CargoManager"], "GetConfirmedSoldEntities") -LuaUserData.RegisterType("Barotrauma.Items.Components.Repairable") -LuaUserData.RegisterType("Barotrauma.VisualSlot") - -Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) - if not PlayerInput.KeyHit(MyModGlobal.CONFIG.QUICKSTACK_KEYS) then return end - quickstack.quickStackItems(instance) -end, Hook.HookMethodType.After) - -Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) - if not PlayerInput.KeyHit(MyModGlobal.CONFIG.STACK_TO_CURSOR) then return end - if not PlayerInput.IsShiftDown() then - quickstack.stackToCursor() - else - quickstack.stackAllToCursor() - end -end, Hook.HookMethodType.After) - -Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) - if not PlayerInput.KeyHit(MyModGlobal.CONFIG.FABRICATOR_KEY) then return end - fabricatorstack.tryStackFabricator(instance) -end, Hook.HookMethodType.After) - -Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) - if not PlayerInput.KeyHit(MyModGlobal.CONFIG.FIX) then return end - hotkeyrepair.tryRepair() -end, Hook.HookMethodType.After) - -Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) - if not PlayerInput.KeyHit(MyModGlobal.CONFIG.MAX_BUY) then return end - quickbuy.tryBuy() -end, Hook.HookMethodType.After) - -local throttle = 0.1 -local throttleTimer = 0 -Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) - if PlayerInput.Mouse4ButtonClicked() then - cursormacroer.setTargetInventory() - end - if not PlayerInput.IsAltDown() then return end - if Timer.GetTime() < throttleTimer then return end - throttleTimer = Timer.GetTime() + throttle - -- We can not use shift because holding shift means we're moving half a stack - -- Fuck me sideways - -- if not PlayerInput.IsShiftDown() then return end - -- if not PlayerInput.PrimaryMouseButtonClicked() then return end - cursormacroer.tryStackCursorItem() -end, Hook.HookMethodType.After) - -Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) - if not PlayerInput.KeyHit(MyModGlobal.CONFIG.UNLOAD) then return end - quickunload.tryUnloadCursorItem() -end, Hook.HookMethodType.After) - -Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) - if not PlayerInput.KeyHit(MyModGlobal.CONFIG.RELOAD) then return end - quickreload.tryReloadCursorItem(PlayerInput.IsShiftDown()) -end, Hook.HookMethodType.After) - --- Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) --- if not PlayerInput.KeyHit(MyModGlobal.CONFIG.LOOT) then return end --- quickloot.tryLoot() --- end, Hook.HookMethodType.After) - -Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) - if not PlayerInput.KeyHit(MyModGlobal.CONFIG.SONAR) then return end - sonarpinger.tryPing() -end, Hook.HookMethodType.After) - -Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) - if not PlayerInput.KeyHit(MyModGlobal.CONFIG.AOEPICKUP) then return end - aoepickup.tryAoePickup() -end, Hook.HookMethodType.After) - -Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) - if not PlayerInput.KeyHit(MyModGlobal.CONFIG.QICK_FABRICATOR) then return end - quickaccess.tryAccessFabricator(PlayerInput.IsShiftDown()) -end, Hook.HookMethodType.After) - -Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) - if not PlayerInput.KeyHit(MyModGlobal.CONFIG.QICK_DECONSTRUCTOR) then return end - quickaccess.tryAccessDeconstructor(PlayerInput.IsShiftDown()) -end, Hook.HookMethodType.After) - -Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable) - if not PlayerInput.KeyHit(MyModGlobal.CONFIG.QICK_MEDICAL_FABRICATOR) then return end - quickaccess.tryAccessMedicalFabricator(PlayerInput.IsShiftDown()) -end, Hook.HookMethodType.After)