print("[BenUtils] Loaded and waiting!") --- Swapping to use register/unregister -- Disable looplicator by default -- LOOPLICATOR_ENABLED = false -- -- Globals LOOPLICATOR_PRE_ID = 0 LOOPLICATOR_POST_ID = 0 LOOPLICATOR_MULITPLIER = 2 LOOPLICATOR_ROUNDS = 10 LOOPLICATOR_XL_COST = 1 COMMANDS_REGISTERED = {} -- End Globals ---@param command string ---@param callback function function RegisterCommand(command, callback) COMMANDS_REGISTERED[command] = callback print(string.format("[BenUtils] Registered command %s", command)) end function FindKeyTodem() print("test") ---@type table local todems = FindAllOf("CrabTotem") print("Found " .. #todems .. " todems") for i, item in ipairs(todems) do if item.TotemType == 3 then return item end end end ---@param PlayerName string function GetPlayerStateByName(PlayerName) local crabs = FindAllOf("CrabPS") for _, v in ipairs(crabs) do -- local crab = v:get() if v.PlayerNamePrivate:ToString() == PlayerName then return v end end return nil end function LookupCCWeaponByName(itemname) end function LookupCCPerkByName(itemname) ---@type table local perks = FindAllOf("CrabPerkDA") print("Found " .. #perks .. " perks") for i, item in ipairs(perks) do if item.Name:ToString() == itemname then return item end end return nil end function LookupCCAbilityByName(itemname) end function LookupCCMeleeByName(itemname) end function LookupCCArtifactByName(itemname) end -- Force UI Refresh? ACrabPC:ClientRefreshPSUI ---@param CRAB ACrabInteractPickup ---@param nim any function CheckReturnedSelf(CRAB, nim) -- print(string.format("You have: %d crystals\n", CRAB.Keys)) print(nim.PickupInfo.PickupDA.Name:ToString()) end function SetScaleMultiplier() ---@param crab ACrabPS local crab = FindFirstOf("CrabPS") print(type(crab)) if crab then print(string.format("[BenUtils] The current ScaleMultiplier is: %.3f", crab.ScaleMultiplier)) end end function GiveInitialStreamerLoot() -- Get a copy of the game state and a list of players and the StreamerLoot item local streamerloot = LookupCCPerkByName("Streamer Loot") local gamestate = FindFirstOf("CrabGS") local crabs = FindAllOf("CrabPS") local crabss = FindAllOf("CrabPC") local key_totem = FindKeyTodem() crabs[1].Crystals = 10000000000 crabss[1]:ClientRefreshPSUI() ---@param v ACrabPS -- for i, v in ipairs(crabs) do -- v.ServerSpawnKeyTotemPickup(key_totem,) -- print(string.format("%d", x.TotemType)) -- end end ---@param PlayerName string function GiveCrystalsToPlayer(PlayerName, ...) local args = table.pack(...) ---@type ACrabPS local player = GetPlayerStateByName(PlayerName) if player and #args == 1 then player.Crystals = tonumber(args[1]) or player.Crystals end end function GibCrystals() local crabs = FindAllOf("CrabPS") if crabs then ---@param v ACrabPS for i, v in ipairs(crabs) do v.Crystals = 10000000 end end end function SetAllPerks100() local crabs = FindAllOf("CrabPS") if crabs then ---@param v ACrabPS for i, v in ipairs(crabs) do print(string.format("Crab with ID: %s", v.PlayerNamePrivate:ToString())) if v.PlayerNamePrivate:ToString() == "Aztec" then ---@param wmod FCrabWeaponMod v.WeaponMods:ForEach(function(index, wmod) ---@class mod FCrabWeaponMod local mod = wmod:get() if mod.InventoryInfo.Level <= 100 then mod.InventoryInfo.Level = 100 end end) ---@param wmod FCrabAbilityMod v.AbilityMods:ForEach(function(index, wmod) ---@class mod FCrabAbilityMod local mod = wmod:get() if mod.InventoryInfo.Level <= 100 then mod.InventoryInfo.Level = 100 end end) ---@param wmod FCrabMeleeMod v.MeleeMods:ForEach(function(index, wmod) ---@class mod FCrabMeleeMod local mod = wmod:get() if mod.InventoryInfo.Level <= 100 then mod.InventoryInfo.Level = 100 end end) ---@param wmod FCrabPerk v.Perks:ForEach(function(index, wmod) ---@class mod FCrabPerk local mod = wmod:get() if mod.InventoryInfo.Level <= 100 then mod.InventoryInfo.Level = 100 end end) end end end end function looplicator() local gamestate = FindFirstOf("CrabGS") local island_num = gamestate.CurrentIsland if island_num % (LOOPLICATOR_ROUNDS) == 0.00 then gamestate.XLLevel = 1 end -- This checks to see if the last round was divisble by 10 if island_num ~= 1 and (island_num - 1) % LOOPLICATOR_ROUNDS == 0.00 then print("[BenUtils] Triggered Looplicator, doubling levels of all perks") local crabs = FindAllOf("CrabPS") if crabs then ---@param v ACrabPS for i, v in ipairs(crabs) do ---@param wmod FCrabWeaponMod v.WeaponMods:ForEach(function(index, wmod) ---@class mod FCrabWeaponMod local mod = wmod:get() if mod.InventoryInfo.Level ~= 255 then if mod.InventoryInfo.Level * LOOPLICATOR_MULITPLIER < 255 then mod.InventoryInfo.Level = mod.InventoryInfo.Level * LOOPLICATOR_MULITPLIER else mod.InventoryInfo.Level = 255 end end end) ---@param wmod FCrabAbilityMod v.AbilityMods:ForEach(function(index, wmod) ---@class mod FCrabAbilityMod local mod = wmod:get() if mod.InventoryInfo.Level ~= 255 then if mod.InventoryInfo.Level * LOOPLICATOR_MULITPLIER < 255 then mod.InventoryInfo.Level = mod.InventoryInfo.Level * LOOPLICATOR_MULITPLIER else mod.InventoryInfo.Level = 255 end end end) ---@param wmod FCrabMeleeMod v.MeleeMods:ForEach(function(index, wmod) ---@class mod FCrabMeleeMod local mod = wmod:get() if mod.InventoryInfo.Level ~= 255 then if mod.InventoryInfo.Level * LOOPLICATOR_MULITPLIER < 255 then mod.InventoryInfo.Level = mod.InventoryInfo.Level * LOOPLICATOR_MULITPLIER else mod.InventoryInfo.Level = 255 end end end) ---@param wmod FCrabPerk v.Perks:ForEach(function(index, wmod) ---@class mod FCrabPerk local mod = wmod:get() if mod.InventoryInfo.Level ~= 255 then if mod.InventoryInfo.Level * LOOPLICATOR_MULITPLIER < 255 then mod.InventoryInfo.Level = mod.InventoryInfo.Level * LOOPLICATOR_MULITPLIER else mod.InventoryInfo.Level = 255 end end end) end end end end function enable_looplicator() if LOOPLICATOR_POST_ID == 0 and LOOPLICATOR_POST_ID == 0 then LOOPLICATOR_PRE_ID, LOOPLICATOR_POST_ID = RegisterHook("/Script/CrabChampions.CrabPC:ClientOnEnteredPortal", looplicator) else UnregisterHook("/Script/CrabChampions.CrabPC:ClientOnEnteredPortal", LOOPLICATOR_PRE_ID, LOOPLICATOR_POST_ID) LOOPLICATOR_PRE_ID = 0 LOOPLICATOR_POST_ID = 0 end end ---@param PlayerName string function RollTheDice(PlayerName, ...) print("[BenUtil] Got chat command rtd from " .. PlayerName) local args = table.pack(...) for k, v in ipairs(args) do print(string.format("[BenUtil] Arg: %s", v)) end -- print(string.format("[BenUtil] %d arguments sent", args.n)) end ---@param PlayerName FString ---@param ChatMessage FString function ParseChatCommand(self, PlayerName, ChatMessage) local playername = PlayerName:get() local chatmessage = ChatMessage:get() local firstchar = string.sub(chatmessage:ToString(), 1, 1) ---@type table local command = {} if firstchar == "/" then for i in string.gmatch(chatmessage:ToString(), "%S+") do table.insert(command, i) end local cmd = string.sub(command[1], 2, #command[1]) -- local args = table.remove(command, 1) if COMMANDS_REGISTERED[cmd] then COMMANDS_REGISTERED[cmd](playername:ToString(), table.unpack(command, 2, #command)) end end end ---@param KeyTotem ACrabTotem function TestThing(self, KeyTotem) local test = KeyTotem:get() print(string.format("%d", test.NumBuffs)) print(string.format("%d", test.NumDeBuffs)) print(string.format("%d", test.Cost)) end ---@param NextIslandInfo FCrabNextIslandInfo function TestThing2(self, NextIslandInfo) local test = NextIslandInfo:get() print(string.format("%d", test.CurrentIsland)) -- print(string.format("%d", test.NumDeBuffs)) -- print(string.format("%d", test.Cost)) end -- RegisterKeyBind(Key.F1, function() -- print("[BenUtils] Set Perks to 100\n") -- ExecuteInGameThread(function() -- SetAllPerks100() -- end) -- end) -- RegisterKeyBind(Key.F2, function() -- print("[BenUtils] Money Money Money\n") -- ExecuteInGameThread(function() -- GibCrystals() -- end) -- end) RegisterKeyBind(Key.F3, function() print("[BenUtils] Enabled Looplicator\n") ExecuteInGameThread(function() enable_looplicator() end) end) -- RegisterHook("/Script/CrabChampions.CrabPC:ClientOnInteractedWithKeyTotem", TestThing) -- RegisterHook("/Script/CrabChampions.CrabPC:ClientOnEnteredPortal", TestThing2) RegisterHook("/Script/CrabChampions.CrabPC:ClientOnReceivedChatMessage", ParseChatCommand) RegisterCommand("rtd", RollTheDice) RegisterCommand("dosh", GiveCrystalsToPlayer) -- RegisterHook("/Script/CrabChampions.CrabPC:ClientOnInteractedWithKeyTotem", TestThing); -- NotifyOnNewObject("/Script/Engine.Actor", function(ConstructedObject) -- print(string.format("Constructed: %s\n", ConstructedObject:GetFullName())) -- end) --- CrabInteractPickup /Game/Island/Persistent.Persistent:PersistentLevel.CrabInteractPickup_2147481644