TixxyOfficial

Untitled

Nov 22nd, 2025
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 88.14 KB | None | 0 0
  1.  
  2. local extraEggNames = {"Lantern", "Bat", "Hell", "Cobweb", "Balloon", "Popcorn"}
  3.  
  4. local function getEggNames()
  5. local eggNamesSet = {}
  6. local zones = workspace:FindFirstChild("Zones")
  7.  
  8. if zones then
  9. for _, world in pairs(zones:GetChildren()) do
  10. -- Only look at worlds with no numbers in their name
  11. if world:IsA("Folder") and not world.Name:match("%d") then
  12. local interactables = world:FindFirstChild("Interactables")
  13. if interactables then
  14. local eggs = interactables:FindFirstChild("Eggs")
  15. if eggs then
  16. for _, egg in pairs(eggs:GetChildren()) do
  17. if not egg.Name:lower():find("rewind") then
  18. local name = egg.Name
  19. name = name:gsub("%s*[Ee][Gg][Gg]%s*$", "") -- remove "Egg" at end
  20. name = name:match("^%s*(.-)%s*$") -- trim spaces
  21. eggNamesSet[name] = true
  22. end
  23. end
  24. end
  25. end
  26. end
  27. end
  28. end
  29.  
  30. -- ✅ Add all extra names from the table
  31. for _, extraName in ipairs(extraEggNames) do
  32. eggNamesSet[extraName] = true
  33. end
  34.  
  35. -- Convert set to sorted list
  36. local eggNames = {}
  37. for name in pairs(eggNamesSet) do
  38. table.insert(eggNames, name)
  39. end
  40. table.sort(eggNames)
  41.  
  42. return eggNames
  43. end
  44.  
  45.  
  46.  
  47. loadstring(game:HttpGet("https://raw.githubusercontent.com/SenhorLDS/ProjectLDSHUB/refs/heads/main/Anti%20AFK"))()
  48. local Library = loadstring(game:HttpGet("https://github.com/ActualMasterOogway/Fluent-Renewed/releases/latest/download/Fluent.luau"))()
  49. local SaveManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/bigbeanscripts/Pet-Warriors/refs/heads/main/test"))()
  50. local InterfaceManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/ActualMasterOogway/Fluent-Renewed/master/Addons/InterfaceManager.luau"))()
  51.  
  52. local Window = Library:Window{
  53. Title = "Halloween Event",
  54. SubTitle = "By Duckie",
  55. TabWidth = 160,
  56. Size = UDim2.fromOffset(580, 460),
  57. Resize = false,
  58. Theme = "Darker",
  59. MinimizeKey = Enum.KeyCode.LeftShift
  60. }
  61.  
  62.  
  63. local Tabs = {
  64. Settings = Window:AddTab({ Title = "Settings", Icon = "settings" }),
  65. AutoFight = Window:AddTab({ Title = "Main", Icon = "crown" }),
  66. Eggs = Window:AddTab({ Title = "Eggs", Icon = "egg" }),
  67. Merchant = Window:AddTab({ Title = "Merchant", Icon = "phosphor-shopping-cart-fill" }),
  68. Trick = Window:AddTab({ Title = "Halloween", Icon = "ghost" }),
  69. Wheel = Window:AddTab({ Title = "Wheel", Icon = "ferris-wheel" }),
  70. Tower = Window:AddTab({ Title = "Tower", Icon = "castle" }),
  71. Minigame = Window:AddTab({ Title = "Minigame", Icon = "phosphor-balloon-bold" })
  72. }
  73.  
  74.  
  75.  
  76. local PlaytimeSection = Tabs.AutoFight:AddSection("Playtime Pass")
  77.  
  78. local AutoPlaytimeToggle = PlaytimeSection:AddToggle("AutoPlaytime", {
  79. Title = "Auto Claim Playtime Pass",
  80. Default = false
  81. })
  82.  
  83. AutoPlaytimeToggle:OnChanged(function()
  84. if AutoPlaytimeToggle.Value then
  85. -- Claim rewards immediately when enabled
  86. for i = 1, 12 do
  87. local args = {
  88. [1] = "Free",
  89. [2] = i
  90. }
  91. game:GetService("ReplicatedStorage").Packages.Knit.Services.EventPassService.RF.ClaimReward:InvokeServer(unpack(args))
  92. end
  93.  
  94. -- Start reset/claim loop
  95. spawn(function()
  96. while AutoPlaytimeToggle.Value do
  97. wait(60) -- Wait before reset
  98.  
  99. -- Reset pass
  100. game:GetService("ReplicatedStorage").Packages.Knit.Services.EventPassService.RF.Reset:InvokeServer()
  101.  
  102. -- Claim all rewards after reset
  103. for i = 1, 12 do
  104. local args = {
  105. [1] = "Free",
  106. [2] = i
  107. }
  108. game:GetService("ReplicatedStorage").Packages.Knit.Services.EventPassService.RF.ClaimReward:InvokeServer(unpack(args))
  109. end
  110. end
  111. end)
  112. end
  113. end)
  114.  
  115. local function GetCurrentZone()
  116. local player = game.Players.LocalPlayer
  117.  
  118. if player:GetAttribute("ZoneAbandonedThemePark") then
  119. return "AbandonedThemePark"
  120. elseif player:GetAttribute("ZoneMansionUnderworld") then
  121. return "MansionUnderworld"
  122. elseif player:GetAttribute("ZoneMansionBasement") then
  123. return "MansionBasement"
  124. elseif player:GetAttribute("ZoneHauntedMansion") then
  125. return "HauntedMansion"
  126. elseif player:GetAttribute("ZoneSpookyNeighborhood") then
  127. return "SpookyNeighborhood"
  128. end
  129.  
  130. -- Fallback: look through workspace zones
  131. local glassBridgeZone = workspace.Zones:FindFirstChild("DesertMines")
  132. if glassBridgeZone then return glassBridgeZone.Name end
  133.  
  134. local frontmanZone = workspace.Zones:FindFirstChild("MinersDreamland")
  135. if frontmanZone then return frontmanZone.Name end
  136.  
  137. return nil
  138. end
  139.  
  140.  
  141. local function GetValidZone(trainingType)
  142. local zone = GetCurrentZone()
  143. local fallback = "SpookyNeighborhood"
  144. local replicatedStorage = game:GetService("ReplicatedStorage")
  145.  
  146. local function hasData(moduleName)
  147. local success, module = pcall(function()
  148. return require(replicatedStorage.Data[moduleName])
  149. end)
  150. return success and module and (module[zone] or module[fallback])
  151. end
  152.  
  153. if trainingType == "PunchBags" then
  154. if workspace.Zones:FindFirstChild(zone)
  155. and workspace.Zones[zone]:FindFirstChild("Interactables")
  156. and workspace.Zones[zone].Interactables:FindFirstChild("Training")
  157. and workspace.Zones[zone].Interactables.Training:FindFirstChild("PunchBags") then
  158. return zone
  159. elseif workspace.Zones:FindFirstChild(fallback)
  160. and workspace.Zones[fallback]:FindFirstChild("Interactables")
  161. and workspace.Zones[fallback].Interactables:FindFirstChild("Training")
  162. and workspace.Zones[fallback].Interactables.Training:FindFirstChild("PunchBags") then
  163. return fallback
  164. else
  165. return fallback
  166. end
  167. elseif trainingType == "Dumbells" then
  168. return hasData("Dumbells") and (hasData("Dumbells")[zone] and zone or fallback) or fallback
  169. elseif trainingType == "Grips" then
  170. return hasData("Grips") and (hasData("Grips")[zone] and zone or fallback) or fallback
  171. elseif trainingType == "Barbells" then
  172. return hasData("Barbells") and (hasData("Barbells")[zone] and zone or fallback) or fallback
  173. end
  174.  
  175. return fallback
  176. end
  177.  
  178.  
  179. local function GetBestDuckBag()
  180. local player = game.Players.LocalPlayer
  181. local currentZone = GetValidZone(currentTrainingType)
  182. local fallbackZone = "SpookyNeighborhood"
  183.  
  184. if not currentZone then
  185. return "Tier1"
  186. end
  187.  
  188. local knuckleStrength = player:GetAttribute("TotalHalloween25Knuckles") or 0
  189. local punchBagData = require(game:GetService("ReplicatedStorage").Data.PunchBags)
  190.  
  191. if player:GetAttribute("VIP") == true then
  192. return "VIP"
  193. end
  194.  
  195. local zoneList = { currentZone, fallbackZone }
  196.  
  197. for _, zone in ipairs(zoneList) do
  198. local bestTier = "Tier1"
  199. local highestRequired = 0
  200.  
  201. if punchBagData and punchBagData[zone] then
  202. for tier, data in pairs(punchBagData[zone]) do
  203. if data.StrengthRequired and
  204. knuckleStrength >= data.StrengthRequired and
  205. data.StrengthRequired > highestRequired then
  206. bestTier = tier
  207. highestRequired = data.StrengthRequired
  208. end
  209. end
  210. -- Return best tier found in this zone
  211. return bestTier
  212. end
  213. end
  214. end
  215.  
  216.  
  217. local function GetBestDuckEquipment(equipmentType)
  218. local player = game.Players.LocalPlayer
  219. local currentZone = GetCurrentZone()
  220. local fallbackZone = "SpookyNeighborhood"
  221.  
  222. if not currentZone then
  223. return { equipment = fallbackZone .. "1", zone = fallbackZone }
  224. end
  225.  
  226. -- Determine attribute and data module based on type
  227. local dataModule
  228. local attrMap = {
  229. Dumbells = "TotalHalloween25Bicep",
  230. Grips = "TotalHalloween25Grip",
  231. Barbells = "TotalHalloween25Bicep"
  232. }
  233.  
  234. if equipmentType ~= "Dumbells" and equipmentType ~= "Grips" and equipmentType ~= "Barbells" then
  235. equipmentType = "Dumbells"
  236. end
  237.  
  238. dataModule = equipmentType
  239. local equipmentData
  240.  
  241. pcall(function()
  242. equipmentData = require(game:GetService("ReplicatedStorage").Data[dataModule])
  243. end)
  244.  
  245. if not equipmentData then
  246. return { equipment = fallbackZone .. "1", zone = fallbackZone }
  247. end
  248.  
  249. -- Zone priority list
  250. local zoneList = { currentZone, fallbackZone }
  251.  
  252. for _, zone in ipairs(zoneList) do
  253. local defaultEquipment = zone .. "1"
  254. local bestEquipment = defaultEquipment
  255. local highestRequired = 0
  256.  
  257. -- Use the correct attribute for fallback zone too
  258. local statValue = player:GetAttribute(attrMap[equipmentType]) or 0
  259.  
  260. if equipmentData[zone] then
  261. for name, data in pairs(equipmentData[zone]) do
  262. if data.StrengthRequired and
  263. statValue >= data.StrengthRequired and
  264. data.StrengthRequired > highestRequired then
  265. bestEquipment = name
  266. highestRequired = data.StrengthRequired
  267. end
  268. end
  269. return { equipment = bestEquipment, zone = zone }
  270. end
  271. end
  272.  
  273. return { equipment = fallbackZone .. "1", zone = fallbackZone }
  274. end
  275.  
  276.  
  277.  
  278. -- Add Training Section
  279. local TrainSection = Tabs.AutoFight:AddSection("Auto Train")
  280.  
  281. local TrainingDropdown = Tabs.AutoFight:AddDropdown("TrainingSelect", {
  282. Title = "Select Training Type",
  283. Values = {"Dumbells", "PunchBags", "Grips", "Barbells"},
  284. Multi = false,
  285. Default = "Dumbells"
  286. })
  287.  
  288. local AutoTrainToggle = Tabs.AutoFight:AddToggle("AutoTrain", {
  289. Title = "Auto Train",
  290. Description = "If this gets an error, turn the toggle off and on again. It occurs when you switch training types with the toggle on :)",
  291. Default = false
  292. })
  293.  
  294. -- Variable to store the current training equipment type
  295. local currentTrainingType = nil
  296.  
  297. AutoTrainToggle:OnChanged(function()
  298. if AutoTrainToggle.Value then
  299. -- Store the selected training type when starting
  300. currentTrainingType = TrainingDropdown.Value
  301.  
  302. spawn(function()
  303. local currentZone = GetCurrentZone()
  304.  
  305. if not currentZone then
  306. return
  307. end
  308.  
  309. if currentTrainingType == "Dumbells" then
  310. -- Function to equip Dumbells
  311. local function equipDumbells()
  312. local result = GetBestDuckEquipment("Dumbells")
  313. local equipment = result.equipment
  314. local equipZone = result.zone
  315. local args = {
  316. [1] = equipZone,
  317. [2] = "Dumbells",
  318. [3] = equipment
  319. }
  320. game:GetService("ReplicatedStorage").Packages.Knit.Services.ToolService.RE.onGuiEquipRequest:FireServer(unpack(args))
  321. end
  322.  
  323. -- Equip immediately
  324. equipDumbells()
  325.  
  326. -- Click loop (every 0.6 seconds for Dumbells)
  327. spawn(function()
  328. while AutoTrainToggle.Value and currentTrainingType == "Dumbells" and TrainingDropdown.Value == "Dumbells" do
  329. game:GetService("ReplicatedStorage").Packages.Knit.Services.ToolService.RE.onClick:FireServer()
  330. wait(0.6)
  331. end
  332. end)
  333.  
  334. -- Re-equip loop (every 5 seconds)
  335. while AutoTrainToggle.Value and currentTrainingType == "Dumbells" and TrainingDropdown.Value == "Dumbells" do
  336. wait(5) -- Wait 5 seconds before re-equipping
  337. if AutoTrainToggle.Value and currentTrainingType == "Dumbells" and TrainingDropdown.Value == "Dumbells" then
  338. equipDumbells()
  339. end
  340. end
  341.  
  342. elseif currentTrainingType == "Grips" then
  343. -- Function to equip Grips
  344. local function equipGrips()
  345. local result = GetBestDuckEquipment("Grips")
  346. local equipment = result.equipment
  347. local equipZone = result.zone
  348. local args = {
  349. [1] = equipZone,
  350. [2] = "Grips",
  351. [3] = equipment
  352. }
  353. game:GetService("ReplicatedStorage").Packages.Knit.Services.ToolService.RE.onGuiEquipRequest:FireServer(unpack(args))
  354. end
  355.  
  356. -- Equip immediately
  357. equipGrips()
  358.  
  359. -- Click loop (every 0.6 seconds for Grips)
  360. spawn(function()
  361. while AutoTrainToggle.Value and currentTrainingType == "Grips" and TrainingDropdown.Value == "Grips" do
  362. game:GetService("ReplicatedStorage").Packages.Knit.Services.ToolService.RE.onClick:FireServer()
  363. wait(0.6)
  364. end
  365. end)
  366.  
  367. -- Re-equip loop (every 5 seconds)
  368. while AutoTrainToggle.Value and currentTrainingType == "Grips" and TrainingDropdown.Value == "Grips" do
  369. wait(5) -- Wait 5 seconds before re-equipping
  370. if AutoTrainToggle.Value and currentTrainingType == "Grips" and TrainingDropdown.Value == "Grips" then
  371. equipGrips()
  372. end
  373. end
  374.  
  375. elseif currentTrainingType == "Barbells" then
  376. -- Function to equip Barbells
  377. local function equipBarbells()
  378. local result = GetBestDuckEquipment("Barbells")
  379. local equipment = result.equipment
  380. local equipZone = result.zone
  381. local args = {
  382. [1] = equipZone,
  383. [2] = "Barbells",
  384. [3] = equipment
  385. }
  386. game:GetService("ReplicatedStorage").Packages.Knit.Services.ToolService.RE.onGuiEquipRequest:FireServer(unpack(args))
  387. end
  388.  
  389. -- Equip immediately
  390. equipBarbells()
  391.  
  392. -- Click loop (every 1.55 seconds for Barbells)
  393. spawn(function()
  394. while AutoTrainToggle.Value and currentTrainingType == "Barbells" and TrainingDropdown.Value == "Barbells" do
  395. game:GetService("ReplicatedStorage").Packages.Knit.Services.ToolService.RE.onClick:FireServer()
  396. wait(1.55)
  397. end
  398. end)
  399.  
  400. -- Re-equip loop (every 5 seconds)
  401. while AutoTrainToggle.Value and currentTrainingType == "Barbells" and TrainingDropdown.Value == "Barbells" do
  402. wait(5) -- Wait 5 seconds before re-equipping
  403. if AutoTrainToggle.Value and currentTrainingType == "Barbells" and TrainingDropdown.Value == "Barbells" then
  404. equipBarbells()
  405. end
  406. end
  407. elseif currentTrainingType == "Pull up bar" then
  408. -- Add Pull up bar handling
  409. spawn(function()
  410. while AutoTrainToggle.Value and currentTrainingType == "Pull up bar" and TrainingDropdown.Value == "Pull up bar" do
  411. local statsArgs = {
  412. [1] = "17",
  413. [2] = "Tier4"
  414. }
  415. game:GetService("ReplicatedStorage").Packages.Knit.Services.PullupBarService.RE.onGiveStats:FireServer(unpack(statsArgs))
  416. wait(1.55) -- Pull up bar every 1.55 seconds
  417. end
  418. end)
  419. else -- PunchBags
  420. spawn(function()
  421. local lastTeleport = 0
  422. while AutoTrainToggle.Value and currentTrainingType == "PunchBags" and TrainingDropdown.Value == "PunchBags" do
  423. local tier = GetBestDuckBag()
  424. local validZone = GetValidZone("PunchBags")
  425.  
  426. -- Try to get the bag from workspace using the valid zone
  427. local bag = workspace.Zones[validZone].Interactables.Training.PunchBags:FindFirstChild(tier)
  428.  
  429. if bag then
  430. -- Only teleport every 5 seconds
  431. local currentTime = tick()
  432. if currentTime - lastTeleport >= 5 then
  433. local bagCFrame = bag:GetPivot()
  434. game.Players.LocalPlayer.Character:PivotTo(bagCFrame * CFrame.new(0, 0, -5))
  435. lastTeleport = currentTime
  436. end
  437.  
  438. -- Use the punch bag service every 0.2 seconds for knuckles (punch bags)
  439. local args = {
  440. [1] = validZone,
  441. [2] = tier,
  442. [3] = game.Players.LocalPlayer:GetAttribute("VIP") == true
  443. }
  444. game:GetService("ReplicatedStorage").Packages.Knit.Services.PunchBagService.RE.onGiveStats:FireServer(unpack(args))
  445. end
  446. wait(0.2)
  447. end
  448. end)
  449. end
  450. end)
  451. else
  452. -- Clear the current training type when stopping
  453. currentTrainingType = nil
  454. end
  455. end)
  456.  
  457. TrainingDropdown:OnChanged(function()
  458. if AutoTrainToggle.Value then
  459. AutoTrainToggle:SetValue(false) -- Turn off current training
  460. wait(0.1) -- Short delay to ensure loops are terminated
  461. AutoTrainToggle:SetValue(true) -- Turn on with new selection
  462. end
  463. end)
  464.  
  465.  
  466. -- UI section
  467. local FightSection = Tabs.AutoFight:AddSection("Auto Fight")
  468.  
  469. local npcLocations = {
  470. SpookyNeighborhood = workspace.GameObjects.ArmWrestling.SpookyNeighborhood.NPC,
  471. HauntedMansion = workspace.GameObjects.ArmWrestling.HauntedMansion.NPC,
  472. MansionBasement = workspace.GameObjects.ArmWrestling.MansionBasement.NPC,
  473. MansionUnderworld = workspace.GameObjects.ArmWrestling.MansionUnderworld.NPC,
  474. AbandonedThemePark = workspace.GameObjects.ArmWrestling.AbandonedThemePark.NPC,
  475. }
  476.  
  477. local modelNames = {}
  478.  
  479. -- Gather NPC names from all locations
  480. for _, path in pairs(npcLocations) do
  481. for _, npc in pairs(path:GetChildren()) do
  482. if npc:IsA("Model") then
  483. table.insert(modelNames, npc.Name)
  484. end
  485. end
  486. end
  487.  
  488. table.sort(modelNames)
  489.  
  490. -- Dropdown
  491. local modelDropdown = Tabs.AutoFight:AddDropdown("ModelDropdown", {
  492. Title = "Select Boss",
  493. Values = modelNames,
  494. Multi = false,
  495. Searchable = true,
  496. Default = modelNames[1] or "",
  497. })
  498.  
  499. -- Auto Click toggle
  500. local AutoClickToggle = Tabs.AutoFight:AddToggle("AutoClick", {
  501. Title = "Auto Click/Crit",
  502. Description = "Allows you to win fights over 5x as fast.",
  503. Default = false
  504. })
  505.  
  506. -- Auto Fight toggle
  507. local AutoFightToggle = Tabs.AutoFight:AddToggle("AutoFight", {
  508. Title = "Auto Fight",
  509. Description = "Automatically starts fights with the selected boss (to beat bosses much faster, enable the Auto Click/Crit toggle).",
  510. Default = false
  511. })
  512.  
  513. -- Block the GameAnalyticsError remote event from firing (run once at startup)
  514. pcall(function()
  515. local gameAnalyticsError = game:GetService("ReplicatedStorage"):FindFirstChild("GameAnalyticsError")
  516. if gameAnalyticsError then
  517. gameAnalyticsError.FireServer = function(self, ...)
  518. return
  519. end
  520. end
  521. end)
  522.  
  523.  
  524. local AlwaysWin = Tabs.AutoFight:AddButton({
  525. Title = "Always Win",
  526. Description = "This makes it impossible to lose, rejoining resets this.",
  527. Callback = function()
  528. coroutine.resume(coroutine.create(function()
  529. local armWrestle = require(game:GetService("ReplicatedStorage").Controllers.Fighting.ArmWrestleController)
  530.  
  531. -- Method 1: Hook the IncrementPower function
  532. local originalIncrementPower = armWrestle.IncrementPower
  533. armWrestle.IncrementPower = function(self, amount)
  534. -- Always increment by a large positive amount
  535. originalIncrementPower(self, math.abs(amount or 1) * 1000)
  536. end
  537.  
  538. -- Method 2: Continuously set health to max (more reliable)
  539. spawn(function()
  540. while armWrestle.Fighting do
  541. if armWrestle.Health and armWrestle.MaxHealth then
  542. armWrestle.Health = armWrestle.MaxHealth
  543. end
  544. wait(0.1)
  545. end
  546. end)
  547.  
  548. -- Method 3: Override the UpdateFight function to prevent NPC power
  549. local originalUpdateFight = armWrestle.UpdateFight
  550. armWrestle.UpdateFight = function(self)
  551. -- Do nothing - prevents NPC from gaining power
  552. end
  553.  
  554. end))
  555. end
  556. })
  557.  
  558.  
  559.  
  560. local notefight = Tabs.AutoFight:Paragraph("Note", {
  561. Title = "Note",
  562. Content = "If you get an error when you turn the toggles on, try turning them off and on again, this wont effect anything. Furthermore, the speeds in which you win, is further increased if you launch the script twice (Open it enable the toggles, disable them, and then re-execute the script.) ",
  563. TitleAlignment = "Middle",
  564. ContentAlignment = Enum.TextXAlignment.Left
  565. })
  566.  
  567. -- Services
  568. local KnitServices = game:GetService("ReplicatedStorage").Packages.Knit.Services
  569. local ArmwrestleServiceRF = KnitServices:WaitForChild("ArmWrestleService"):WaitForChild("RF")
  570. local ZoneService = KnitServices:WaitForChild("ZoneService"):WaitForChild("RE")
  571.  
  572. -- Variables
  573. local autoClickThreads = {}
  574. local autoFightThreads = {}
  575. local cleanupConnections = {}
  576. local lastZoneCheck = 0
  577.  
  578. -- Function to teleport to the correct zone for an NPC
  579. local function teleportToNpcZone(npcName)
  580. local player = game.Players.LocalPlayer
  581. local playerCurrentZone = player:GetAttribute("CurrentZone")
  582.  
  583. -- Find which zone the NPC is in
  584. local npcZone = nil
  585. for zoneName, path in pairs(npcLocations) do
  586. if path:FindFirstChild(npcName) then
  587. npcZone = zoneName == "MinersDreamland" and "MinersDreamland" or zoneName
  588. break
  589. end
  590. end
  591.  
  592. -- If NPC zone found and different from current zone, teleport
  593. if npcZone and playerCurrentZone ~= npcZone then
  594. -- Get the teleport destination
  595. local teleportDest = workspace.Zones[npcZone].Interactables.Teleports.Locations.Spawn
  596.  
  597. if teleportDest then
  598. -- Teleport to the appropriate zone
  599. local args = {
  600. [1] = teleportDest
  601. }
  602.  
  603. ZoneService.teleport:FireServer(unpack(args))
  604.  
  605. -- Wait for teleport to complete
  606. task.wait(2.5)
  607.  
  608. return true
  609. end
  610. end
  611. return npcZone ~= nil
  612. end
  613.  
  614. -- Cleanup function to clear pending requests
  615. local function cleanupRequests()
  616. -- Get memory info before cleanup
  617. local memoryBefore = gcinfo()
  618.  
  619. -- Force garbage collection to clear pending requests
  620. collectgarbage("count")
  621.  
  622. -- Get memory info after cleanup
  623. local memoryAfter = gcinfo()
  624.  
  625. pcall(function()
  626. -- Clear any pending remote calls by briefly disconnecting
  627. local temp = ArmwrestleServiceRF
  628. task.wait(0.01)
  629. end)
  630. end
  631.  
  632. -- Auto Click toggle handler
  633. AutoClickToggle:OnChanged(function()
  634. if AutoClickToggle.Value then
  635. -- Stop existing threads and cleanup
  636. for _, thread in pairs(autoClickThreads) do
  637. if typeof(thread) == "thread" then
  638. task.cancel(thread)
  639. elseif typeof(thread) == "table" then
  640. thread.active = false
  641. end
  642. end
  643. autoClickThreads = {}
  644.  
  645. -- Stop any existing cleanup connections
  646. if cleanupConnections.autoClick then
  647. cleanupConnections.autoClick:Disconnect()
  648. end
  649.  
  650. -- Spawn new click threads
  651. task.spawn(function()
  652. for i = 1, 500 do
  653. local threadData = { active = true }
  654. table.insert(autoClickThreads, threadData)
  655.  
  656. task.spawn(function()
  657. while threadData.active and AutoClickToggle.Value do
  658. pcall(function()
  659. ArmwrestleServiceRF:WaitForChild("RequestClick"):InvokeServer()
  660. ArmwrestleServiceRF:WaitForChild("RequestCritHit"):InvokeServer()
  661. end)
  662. task.wait()
  663. end
  664. end)
  665.  
  666. task.wait(0.001) -- Small delay between thread spawns to prevent all spawning at once
  667. end
  668. end)
  669.  
  670. -- Start cleanup timer for auto click
  671. cleanupConnections.autoClick = task.spawn(function()
  672. while AutoClickToggle.Value do
  673. task.wait(5) -- Wait 5 seconds
  674. if AutoClickToggle.Value then
  675. cleanupRequests()
  676. end
  677. end
  678. end)
  679. else
  680. -- Disable all click threads
  681. for _, thread in pairs(autoClickThreads) do
  682. if typeof(thread) == "thread" then
  683. task.cancel(thread)
  684. elseif typeof(thread) == "table" then
  685. thread.active = false
  686. end
  687. end
  688. autoClickThreads = {}
  689.  
  690. -- Stop cleanup timer
  691. if cleanupConnections.autoClick then
  692. task.cancel(cleanupConnections.autoClick)
  693. cleanupConnections.autoClick = nil
  694. end
  695.  
  696. -- Final cleanup
  697. cleanupRequests()
  698. end
  699. end)
  700.  
  701. -- Auto Fight toggle handler
  702. AutoFightToggle:OnChanged(function()
  703. if AutoFightToggle.Value then
  704. -- First try to teleport to correct zone if needed
  705. local selectedName = modelDropdown.Value
  706. teleportToNpcZone(selectedName)
  707.  
  708. -- Stop previous threads and cleanup
  709. for _, flag in pairs(autoFightThreads) do
  710. flag.active = false
  711. end
  712. autoFightThreads = {}
  713.  
  714. -- Stop any existing cleanup connections
  715. if cleanupConnections.autoFight then
  716. cleanupConnections.autoFight:Disconnect()
  717. end
  718.  
  719. -- Spawn threads for repeated boss fights
  720. for i = 1, 500 do
  721. local threadFlag = { active = true }
  722. table.insert(autoFightThreads, threadFlag)
  723.  
  724. task.spawn(function()
  725. while threadFlag.active and AutoFightToggle.Value do
  726. local selectedName = modelDropdown.Value
  727. if selectedName then
  728. -- Check if we need to teleport (periodically)
  729. local currentTime = tick()
  730. if currentTime - lastZoneCheck > 10 then
  731. teleportToNpcZone(selectedName)
  732. lastZoneCheck = currentTime
  733. end
  734.  
  735. -- Request fight with selected NPC
  736. local args = {
  737. [1] = selectedName
  738. }
  739.  
  740. pcall(function()
  741. ArmwrestleServiceRF:WaitForChild("RequestStartFight"):InvokeServer(unpack(args))
  742. end)
  743. end
  744. task.wait(0.01)
  745. end
  746. end)
  747.  
  748. task.wait(0.001) -- Small delay between thread spawns
  749. end
  750.  
  751. -- Start cleanup timer for auto fight
  752. cleanupConnections.autoFight = task.spawn(function()
  753. while AutoFightToggle.Value do
  754. task.wait(5) -- Wait 5 seconds
  755. if AutoFightToggle.Value then
  756. cleanupRequests()
  757. end
  758. end
  759. end)
  760. else
  761. -- Stop all fight threads
  762. for _, flag in pairs(autoFightThreads) do
  763. flag.active = false
  764. end
  765. autoFightThreads = {}
  766.  
  767. -- Stop cleanup timer
  768. if cleanupConnections.autoFight then
  769. task.cancel(cleanupConnections.autoFight)
  770. cleanupConnections.autoFight = nil
  771. end
  772.  
  773. -- Final cleanup
  774. cleanupRequests()
  775. end
  776. end)
  777.  
  778. -- Add zone check when dropdown selection changes
  779. modelDropdown:OnChanged(function()
  780. if AutoFightToggle.Value then
  781. local selectedName = modelDropdown.Value
  782. teleportToNpcZone(selectedName)
  783. lastZoneCheck = tick()
  784. end
  785. end)
  786.  
  787. local function aggressiveCleanup()
  788. -- Get memory info before cleanup
  789. local memoryBefore = gcinfo()
  790.  
  791. -- Method 1: Force disconnect and reconnect to service
  792. pcall(function()
  793. local oldService = ArmwrestleServiceRF
  794. ArmwrestleServiceRF = KnitServices:WaitForChild("ArmWrestleService"):WaitForChild("RF")
  795. end)
  796.  
  797. -- Method 2: Clear all pending coroutines
  798. collectgarbage("count")
  799.  
  800. -- Method 3: Brief pause to let network catch up
  801. task.wait(0.1)
  802.  
  803. -- Get memory info after cleanup
  804. local memoryAfter = gcinfo()
  805. end
  806.  
  807. local EggSection = Tabs.Eggs:AddSection("Eggs")
  808.  
  809. -- Hatch Amount Dropdown
  810. local HatchAmountDropdown = Tabs.Eggs:AddDropdown("HatchAmount", {
  811. Title = "Hatch Amount",
  812. Values = {"1x", "3x", "8x", "30x", "Max"},
  813. Multi = false,
  814. Searchable = true,
  815. Default = "1x"
  816. })
  817.  
  818. -- Egg Selection Dropdown (Populated Dynamically)
  819. local eggNames = getEggNames()
  820. local EggDropdown = Tabs.Eggs:AddDropdown("EggSelect", {
  821. Title = "Select Egg",
  822. Values = eggNames,
  823. Multi = false,
  824. Searchable = true,
  825. Default = eggNames[1] or "None"
  826. })
  827.  
  828. -- Auto Hatch Toggle
  829. local AutoHatchToggle = Tabs.Eggs:AddToggle("AutoHatch", {
  830. Title = "Auto Hatch",
  831. Default = false
  832. })
  833.  
  834. AutoHatchToggle:OnChanged(function()
  835. if AutoHatchToggle.Value then
  836. spawn(function()
  837. while AutoHatchToggle.Value do
  838. local selectedEgg = EggDropdown.Value
  839. local hatchMultiplier = HatchAmountDropdown.Value
  840.  
  841. local args = {}
  842.  
  843. if hatchMultiplier == "1x" then
  844. args = {selectedEgg, nil, nil, false, nil}
  845. elseif hatchMultiplier == "3x" then
  846. args = {selectedEgg, nil, true, false}
  847. elseif hatchMultiplier == "8x" then
  848. args = {selectedEgg, nil, false, true, true}
  849. elseif hatchMultiplier == "30x" or hatchMultiplier == "Max" then
  850. args = {selectedEgg, nil, nil, false, nil, true}
  851. end
  852.  
  853. -- Invoke server call to hatch egg
  854. game:GetService("ReplicatedStorage").Packages.Knit.Services.EggService.RF.purchaseEgg:InvokeServer(unpack(args))
  855.  
  856. wait(0.25)
  857. end
  858. end)
  859. end
  860. end)
  861.  
  862.  
  863. -- Create SuperRB Section
  864. local EventSection = Tabs.Merchant:AddSection("Individual Items")
  865.  
  866. -- Add Load Script Button
  867. EventSection:AddButton({
  868. Title = "Load better Merchant script",
  869. Description = "This allows you to select individual items, but MAY cause lag.",
  870. Callback = function()
  871. loadstring(game:HttpGet("https://raw.githubusercontent.com/bigbeanscripts/SeperateMerchant/refs/heads/main/LessLag"))()
  872. end
  873. })
  874.  
  875. local MerchantSection = Tabs.Merchant:AddSection("Halloween Merchant")
  876.  
  877. local BlackMarketDropdown = Tabs.Merchant:AddDropdown("BlackMarketDropdown", {
  878. Title = "Select Merchant Slot(s)",
  879. Values = {1, 2, 3, 4, 5},
  880. Multi = true,
  881. Default = {}
  882. })
  883.  
  884. local AutoBuyToggle = Tabs.Merchant:AddToggle("AutoBuyToggle", {
  885. Title = "Auto Buy (Selected Slots)",
  886. Default = false
  887. })
  888.  
  889. AutoBuyToggle:OnChanged(function()
  890. if AutoBuyToggle.Value then
  891. spawn(function()
  892. while true do
  893. if not AutoBuyToggle.Value then break end
  894. -- Buy 3 times
  895. for i = 1, 3 do
  896. for number, isSelected in pairs(BlackMarketDropdown.Value) do
  897. if isSelected then
  898. local args = {
  899. [1] = "Halloween Merchant",
  900. [2] = number
  901. }
  902. game:GetService("ReplicatedStorage").Packages.Knit.Services.LimitedMerchantService.RF.BuyItem:InvokeServer(unpack(args))
  903. wait(1)
  904. end
  905. end
  906. end
  907. wait(30) -- Wait 30 seconds before next cycle
  908. end
  909. end)
  910. end
  911. end)
  912.  
  913. local MerchantSection1 = Tabs.Merchant:AddSection("Carnival Merchant")
  914.  
  915. local BlackMarketDropdown1 = Tabs.Merchant:AddDropdown("BlackMarketDropdown", {
  916. Title = "Select Merchant Slot(s)",
  917. Values = {1, 2, 3, 4, 5},
  918. Multi = true,
  919. Default = {}
  920. })
  921.  
  922. local AutoBuyToggle1 = Tabs.Merchant:AddToggle("AutoBuyToggle", {
  923. Title = "Auto Buy (Selected Slots)",
  924. Default = false
  925. })
  926.  
  927. AutoBuyToggle1:OnChanged(function()
  928. if AutoBuyToggle1.Value then
  929. spawn(function()
  930. while true do
  931. if not AutoBuyToggle1.Value then break end
  932. -- Buy 3 times
  933. for i = 1, 3 do
  934. for number, isSelected in pairs(BlackMarketDropdown1.Value) do
  935. if isSelected then
  936. local args = {
  937. [1] = "Carnival Merchant",
  938. [2] = number
  939. }
  940. game:GetService("ReplicatedStorage").Packages.Knit.Services.LimitedMerchantService.RF.BuyItem:InvokeServer(unpack(args))
  941. wait(1)
  942. end
  943. end
  944. end
  945. wait(30) -- Wait 30 seconds before next cycle
  946. end
  947. end)
  948. end
  949. end)
  950.  
  951.  
  952.  
  953. -- Client-side patch for SimplePath
  954. local ReplicatedStorage = game:GetService("ReplicatedStorage")
  955. local SimplePath = require(ReplicatedStorage:WaitForChild("OOP"):WaitForChild("SimplePath"))
  956.  
  957. -- Patch __index to avoid errors
  958. local mt = getmetatable(SimplePath)
  959. if mt and mt.__index then
  960. local oldIndex = mt.__index
  961. mt.__index = function(self, key)
  962. local ok, res = pcall(function()
  963. return oldIndex(self, key)
  964. end)
  965. return ok and res or nil
  966. end
  967. end
  968.  
  969. -- Patch distance functions to avoid nil comparisons
  970. for key, value in pairs(SimplePath) do
  971. if type(value) == "function" then
  972. SimplePath[key] = function(...)
  973. local args = {...}
  974. -- Replace nil vectors/positions with Vector3.zero
  975. for i = 1, #args do
  976. if typeof(args[i]) == "Vector3" and args[i] == nil then
  977. args[i] = Vector3.new(0,0,0)
  978. end
  979. end
  980. local ok, res = pcall(value, ...)
  981. return ok and res or math.huge
  982. end
  983. end
  984. end
  985.  
  986.  
  987. local ClaimTreatBagSection = Tabs.Trick:AddSection("Claim Items")
  988.  
  989. ClaimTreatBagSection:AddButton({
  990. Title = "Claim Treat Bag",
  991. Description = "Claim the treat bag needed to go trick or treating.",
  992. Callback = function()
  993. local Knit = require(game:GetService("ReplicatedStorage").Packages.Knit.KnitClient)
  994. Knit.GetService("TrickOrTreatService"):ClaimTreatBag()
  995. end
  996. })
  997.  
  998. ClaimTreatBagSection:AddButton({
  999. Title = "Claim Grave Digger",
  1000. Description = "Claim the shovel to dig graves.",
  1001. Callback = function()
  1002. local Knit = require(game:GetService("ReplicatedStorage").Packages.Knit.KnitClient)
  1003. Knit.GetService("GraveDiggerService"):ClaimGraveDigger()
  1004. end
  1005. })
  1006.  
  1007.  
  1008. local CollectionService = game:GetService("CollectionService")
  1009. local Players = game:GetService("Players")
  1010. local ReplicatedStorage = game:GetService("ReplicatedStorage")
  1011. local LocalPlayer = Players.LocalPlayer
  1012. local Knit = require(ReplicatedStorage.Packages.Knit)
  1013. local CameraController = Knit.GetController("CameraController")
  1014. local TrickOrTreatController = Knit.GetController("TrickOrTreatController")
  1015. local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
  1016. local TrickOrTreatUI = PlayerGui:WaitForChild("TrickOrTreat")
  1017.  
  1018. local TrickOrTreatSection = Tabs.Trick:AddSection("Trick or Treat")
  1019.  
  1020. -- Toggles
  1021. local AutoTrickOrTreatToggle = TrickOrTreatSection:AddToggle("AutoTrickOrTreat", {
  1022. Title = "Auto Trick or Treat",
  1023. Description = "Automatically trick or treats. You will pause for about 120 seconds afer going to all houses. This is to let them reset.",
  1024. Default = false
  1025. })
  1026.  
  1027.  
  1028. local RemoveAnimationToggle = TrickOrTreatSection:AddToggle("RemoveAnimation", {
  1029. Title = "Remove Animation",
  1030. Description = "Removes camera movement and HUD changes during trick or treat - toggle above has this enabled already",
  1031. Default = false
  1032. })
  1033.  
  1034. -- Remove Animation logic
  1035. local originalMoveCamTo = CameraController.MoveCamTo
  1036. local originalToggleCamera = CameraController.ToggleCamera
  1037. local HudManaging = require(ReplicatedStorage.Vendor.HudManaging)
  1038. local originalClearHUD = HudManaging.ClearHUD
  1039. local originalBringHUD = HudManaging.BringHUD
  1040. local originalEndTrickOrTreat = TrickOrTreatController.EndTrickOrTreat
  1041.  
  1042. RemoveAnimationToggle:OnChanged(function()
  1043. if RemoveAnimationToggle.Value then
  1044. CameraController.MoveCamTo = function(...)
  1045. local Promise = require(ReplicatedStorage.Packages.Promise)
  1046. return Promise.resolve()
  1047. end
  1048. CameraController.ToggleCamera = function() end
  1049. HudManaging.ClearHUD = function() end
  1050. HudManaging.BringHUD = function() end
  1051. TrickOrTreatUI.Enabled = false
  1052.  
  1053. -- Prevent character anchoring
  1054. local function preventAnchoring()
  1055. local character = LocalPlayer.Character
  1056. if character then
  1057. local hrp = character:FindFirstChild("HumanoidRootPart")
  1058. if hrp then
  1059. hrp:GetPropertyChangedSignal("Anchored"):Connect(function()
  1060. if hrp.Anchored then
  1061. hrp.Anchored = false
  1062. end
  1063. end)
  1064. end
  1065. end
  1066. end
  1067. LocalPlayer.CharacterAdded:Connect(preventAnchoring)
  1068. preventAnchoring()
  1069. else
  1070. CameraController.MoveCamTo = originalMoveCamTo
  1071. CameraController.ToggleCamera = originalToggleCamera
  1072. HudManaging.ClearHUD = originalClearHUD
  1073. HudManaging.BringHUD = originalBringHUD
  1074. -- UI will be handled by game normally
  1075. end
  1076. end)
  1077.  
  1078. local autoTrickOrTreatThread = nil
  1079.  
  1080. AutoTrickOrTreatToggle:OnChanged(function()
  1081. if AutoTrickOrTreatToggle.Value then
  1082. autoTrickOrTreatThread = task.spawn(function()
  1083. local Players = game:GetService("Players")
  1084. local LocalPlayer = Players.LocalPlayer
  1085. local ReplicatedStorage = game:GetService("ReplicatedStorage")
  1086. local RequestEvent = ReplicatedStorage.Packages.Knit.Services.TrickOrTreatService.RF.RequestTrickOrTreat
  1087. local EndEvent = ReplicatedStorage.Packages.Knit.Services.TrickOrTreatService.RF.EndTrickOrTreat
  1088.  
  1089. while AutoTrickOrTreatToggle.Value do
  1090. local houses = workspace.GameObjects.TrickOrTreat:GetChildren()
  1091. local roundStart = tick() -- Start timer at first house
  1092.  
  1093. for i = 1, #houses do
  1094. local house = houses[i]
  1095. if house and house:FindFirstChild("Door") and house.Door:FindFirstChild("Primary") then
  1096. local character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
  1097. local charSpawn = house.Door.Primary:FindFirstChild("CharSpawn")
  1098. if charSpawn then
  1099. local extentsSize = character:GetExtentsSize()
  1100. character:PivotTo(charSpawn.WorldCFrame * CFrame.new(0, extentsSize.Y / 2, 0))
  1101. task.wait(0.5)
  1102. RequestEvent:InvokeServer(house)
  1103. task.wait()
  1104. EndEvent:InvokeServer(house)
  1105. task.wait(1)
  1106. end
  1107. end
  1108. end
  1109.  
  1110. local elapsed = tick() - roundStart
  1111. local waitTime = math.max(0, 125 - elapsed)
  1112. task.wait(waitTime)
  1113. end
  1114. end)
  1115. else
  1116. if autoTrickOrTreatThread then
  1117. task.cancel(autoTrickOrTreatThread)
  1118. autoTrickOrTreatThread = nil
  1119. end
  1120. end
  1121. end)
  1122.  
  1123. --[[
  1124.  
  1125. local Players = game:GetService("Players")
  1126. local ReplicatedStorage = game:GetService("ReplicatedStorage")
  1127. local player = Players.LocalPlayer
  1128.  
  1129. local TrickOrTreatSpamToggle = TrickOrTreatSection:AddToggle("TrickOrTreatSpam", {
  1130. Title = "Trick or Treat",
  1131. Description = "SOOOO OP... This causes a lot of lag, and you might need to wait a few seconds after turning this toggle off to stop seeing notifications.",
  1132. Default = false
  1133. })
  1134.  
  1135. local active = false
  1136. local anchorConnection
  1137.  
  1138.  
  1139. -- Prevent player being anchored
  1140. local function preventAnchoring(character)
  1141. local hrp = character:WaitForChild("HumanoidRootPart", 5)
  1142. if not hrp then return end
  1143.  
  1144. if anchorConnection then
  1145. anchorConnection:Disconnect()
  1146. end
  1147.  
  1148. anchorConnection = hrp:GetPropertyChangedSignal("Anchored"):Connect(function()
  1149. if hrp.Anchored then
  1150. hrp.Anchored = false
  1151. end
  1152. end)
  1153. end
  1154.  
  1155. -- Trick or treat spam loop
  1156. local function function1()
  1157. task.spawn(function()
  1158. while active and task.wait(0.1) do
  1159. local house = workspace:FindFirstChild("GameObjects")
  1160. and workspace.GameObjects.TrickOrTreat
  1161. and workspace.GameObjects.TrickOrTreat:FindFirstChild("House")
  1162.  
  1163. if house then
  1164. local RF = ReplicatedStorage.Packages.Knit.Services.TrickOrTreatService.RF
  1165. pcall(function()
  1166. RF.RequestTrickOrTreat:InvokeServer(house)
  1167. task.wait(0.01)
  1168. RF.EndTrickOrTreat:InvokeServer()
  1169. end)
  1170. end
  1171. end
  1172. end)
  1173. end
  1174.  
  1175. -- When toggle changes
  1176. TrickOrTreatSpamToggle:OnChanged(function()
  1177. if TrickOrTreatSpamToggle.Value then
  1178. active = true
  1179.  
  1180. -- Disable errors and anchors
  1181. error = function(...) end
  1182. if player.Character then
  1183. preventAnchoring(player.Character)
  1184. end
  1185. player.CharacterAdded:Connect(preventAnchoring)
  1186.  
  1187. -- Start infinite spam loop manager
  1188. task.spawn(function()
  1189. while active do
  1190. function1()
  1191. task.wait()
  1192. end
  1193. end)
  1194. else
  1195. active = false
  1196.  
  1197. if anchorConnection then
  1198. anchorConnection:Disconnect()
  1199. anchorConnection = nil
  1200. end
  1201. end
  1202. end)
  1203.  
  1204. local HideTreatNotificationsToggle = TrickOrTreatSection:AddToggle("HideTreatNotifications", {
  1205. Title = "Hide Treat Notifications",
  1206. Description = "Blocks notifications for Trick or Treat items and candy.",
  1207. Default = false
  1208. })
  1209.  
  1210. -- Notification hook variables
  1211. local notificationHooksActive = false
  1212. local originalCreateItemNotification, originalAddMessage, originalNotify, originalDisplayTopInfo
  1213.  
  1214. HideTreatNotificationsToggle:OnChanged(function()
  1215. local ReplicatedStorage = game:GetService("ReplicatedStorage")
  1216. local Knit = require(ReplicatedStorage.Packages.Knit)
  1217. local NotificationController = Knit.GetController("NotificationController")
  1218.  
  1219. if HideTreatNotificationsToggle.Value and not notificationHooksActive then
  1220. -- Build blocked items list
  1221. local success, TrickOrTreatData = pcall(function()
  1222. return require(ReplicatedStorage.Data.Halloween.TrickOrTreat)
  1223. end)
  1224. if not success then return end
  1225.  
  1226. local blockedItems = {}
  1227. for zone, treatData in pairs(TrickOrTreatData.Treats) do
  1228. if treatData.Rewards then
  1229. for _, item in ipairs(treatData.Rewards) do
  1230. if item.Title then
  1231. blockedItems[item.Title] = true
  1232. end
  1233. end
  1234. end
  1235. end
  1236. blockedItems["Candy"] = true
  1237. blockedItems["Halloween Candy"] = true
  1238.  
  1239. local function shouldBlockNotification(data)
  1240. if not data then return false end
  1241. if data.Content and type(data.Content) == "table" then
  1242. for _, item in pairs(data.Content) do
  1243. if type(item) == "table" then
  1244. local itemName = item.Title or item.Name or item.Item or item.Reward or item.Kind
  1245. if itemName and blockedItems[tostring(itemName)] then
  1246. return true
  1247. end
  1248. end
  1249. end
  1250. end
  1251. if data.PreContent and type(data.PreContent) == "table" then
  1252. for _, item in pairs(data.PreContent) do
  1253. if type(item) == "table" then
  1254. local itemName = item.Title or item.Name or item.Item or item.Reward or item.Kind
  1255. if itemName and blockedItems[tostring(itemName)] then
  1256. return true
  1257. end
  1258. end
  1259. end
  1260. end
  1261. if data.Message and type(data.Message) == "string" then
  1262. for itemName, _ in pairs(blockedItems) do
  1263. if string.find(data.Message, tostring(itemName), 1, true) then
  1264. return true
  1265. end
  1266. end
  1267. end
  1268. return false
  1269. end
  1270.  
  1271. -- Hook controller functions
  1272. originalCreateItemNotification = NotificationController.CreateItemNotification
  1273. NotificationController.CreateItemNotification = function(self, data)
  1274. if shouldBlockNotification(data) then return end
  1275. return originalCreateItemNotification(self, data)
  1276. end
  1277.  
  1278. originalAddMessage = NotificationController.AddMessage
  1279. NotificationController.AddMessage = function(self, data)
  1280. if shouldBlockNotification(data) then return end
  1281. return originalAddMessage(self, data)
  1282. end
  1283.  
  1284. originalNotify = NotificationController.Notify
  1285. NotificationController.Notify = function(self, data)
  1286. if shouldBlockNotification(data) then return end
  1287. return originalNotify(self, data)
  1288. end
  1289.  
  1290. originalDisplayTopInfo = NotificationController.DisplayTopInfo
  1291. NotificationController.DisplayTopInfo = function(self, data)
  1292. if shouldBlockNotification(data) then return end
  1293. return originalDisplayTopInfo(self, data)
  1294. end
  1295.  
  1296. notificationHooksActive = true
  1297. elseif not HideTreatNotificationsToggle.Value and notificationHooksActive then
  1298. -- Restore original controller functions
  1299. local NotificationController = Knit.GetController("NotificationController")
  1300. if originalCreateItemNotification then
  1301. NotificationController.CreateItemNotification = originalCreateItemNotification
  1302. end
  1303. if originalAddMessage then
  1304. NotificationController.AddMessage = originalAddMessage
  1305. end
  1306. if originalNotify then
  1307. NotificationController.Notify = originalNotify
  1308. end
  1309. if originalDisplayTopInfo then
  1310. NotificationController.DisplayTopInfo = originalDisplayTopInfo
  1311. end
  1312. notificationHooksActive = false
  1313. end
  1314. end)
  1315.  
  1316. --]]
  1317.  
  1318. local DigGravesSection = Tabs.Trick:AddSection("Dig Graves")
  1319.  
  1320. local AutoDigGravesToggle = DigGravesSection:AddToggle("AutoDigGraves", {
  1321. Title = "Auto Dig Graves",
  1322. Description = "Automatically digs all available graves.",
  1323. Default = false
  1324. })
  1325.  
  1326. AutoDigGravesToggle:OnChanged(function()
  1327. if AutoDigGravesToggle.Value then
  1328. spawn(function()
  1329. local ReplicatedStorage = game:GetService("ReplicatedStorage")
  1330. local CollectionService = game:GetService("CollectionService")
  1331. local Remote = ReplicatedStorage:WaitForChild("Packages")
  1332. :WaitForChild("Knit")
  1333. :WaitForChild("Services")
  1334. :WaitForChild("GraveDiggerService")
  1335. :WaitForChild("RF")
  1336. :WaitForChild("DigGrave")
  1337. while AutoDigGravesToggle.Value do
  1338. local graves = CollectionService:GetTagged("GraveDigging")
  1339. for _, grave in ipairs(graves) do
  1340. if grave and grave.Parent then
  1341. pcall(function()
  1342. Remote:InvokeServer(grave)
  1343. end)
  1344. task.wait(1)
  1345. end
  1346. end
  1347. task.wait(5)
  1348. end
  1349. end)
  1350. end
  1351. end)
  1352. local ZombiesSection = Tabs.Trick:AddSection("Zombies")
  1353.  
  1354. local ReplicatedStorage = game:GetService("ReplicatedStorage")
  1355. local Knit = require(ReplicatedStorage.Packages.Knit)
  1356. local GraveMonsterController = Knit.GetController("GraveMonsterController")
  1357. local GraveMonsterService = Knit.GetService("GraveMonsterService")
  1358. local TweenService = game:GetService("TweenService")
  1359.  
  1360. -- Save the original AttackMonster function
  1361. local originalAttackMonster = GraveMonsterController.AttackMonster
  1362.  
  1363. local autoAttackThread = nil
  1364.  
  1365. local AutoBeatZombiesToggle = ZombiesSection:AddToggle("AutoBeatZombies", {
  1366. Title = "Auto Beat Zombies",
  1367. Description = "Automatically attack zombies - Works while fighting bosses!",
  1368. Default = false
  1369. })
  1370.  
  1371. AutoBeatZombiesToggle:OnChanged(function()
  1372. if AutoBeatZombiesToggle.Value then
  1373. -- a(): Override AttackMonster to remove distance check
  1374. GraveMonsterController.AttackMonster = function(p44, p45)
  1375. local v_u_10 = require(ReplicatedStorage.Data.Halloween.GraveMonsters)
  1376. local v_u_17 = GraveMonsterController
  1377. local v_u_13 = game:GetService("Players").LocalPlayer.Character or game:GetService("Players").LocalPlayer.CharacterAdded:Wait()
  1378. local v46 = v_u_13.PrimaryPart
  1379. if v46 then
  1380. local v47 = v_u_17.GetGraveModelById(p44)
  1381. if v47 then
  1382. local v48 = p45.PrimaryPart
  1383. if v48 then
  1384. local v49 = v47:GetAttribute("Zone")
  1385. local v50 = v_u_10.Monsters[v49][p45.Name]
  1386. if v50 then
  1387. local _, v52 = GraveMonsterService:AttackMonster(p44):await()
  1388. if v52 then
  1389. local v53 = v52.NewHealth
  1390. local v54 = p45:GetAttribute("StartHealth")
  1391. local v55 = v53 / v54
  1392. local v56 = UDim2.fromScale(v55, 1)
  1393. local v57 = p45:WaitForChild("Head"):WaitForChild("Health")
  1394. v57.Health.Text = v53 .. "/" .. v54 .. " HP"
  1395. TweenService:Create(v57.Bar.Progress, TweenInfo.new(0.15, Enum.EasingStyle.Sine), {
  1396. ["Size"] = v56
  1397. }):Play()
  1398. if v52.Defeated then
  1399. GraveMonsterController.DefeatMonster(p44, p45)
  1400. end
  1401. end
  1402. end
  1403. end
  1404. end
  1405. end
  1406. end
  1407.  
  1408. -- b(): Simulate attack input (game thinks you are clicking)
  1409. local fakeInput = {
  1410. UserInputType = Enum.UserInputType.MouseButton1,
  1411. KeyCode = Enum.KeyCode.Unknown
  1412. }
  1413.  
  1414. autoAttackThread = task.spawn(function()
  1415. while AutoBeatZombiesToggle.Value do
  1416. GraveMonsterController.InputBegan(fakeInput, false)
  1417. task.wait()
  1418. end
  1419. end)
  1420. else
  1421. -- Restore the original AttackMonster function
  1422. GraveMonsterController.AttackMonster = originalAttackMonster
  1423.  
  1424. -- Stop simulated input thread
  1425. if autoAttackThread then
  1426. task.cancel(autoAttackThread)
  1427. autoAttackThread = nil
  1428. end
  1429. end
  1430. end)
  1431.  
  1432.  
  1433. local HauntedChestSection = Tabs.Trick:AddSection("Haunted Chest")
  1434.  
  1435. local HauntedGoldStatus = HauntedChestSection:Paragraph("HauntedGoldStatus", {
  1436. Title = "Haunted Gold Amount",
  1437. Content = "Loading..."
  1438. })
  1439.  
  1440. local AutoOpenChestToggle = HauntedChestSection:AddToggle("AutoOpenChest", {
  1441. Title = "Auto Open Haunted Chest",
  1442. Description = "Automatically opens Haunted Chest when you have Haunted Gold.",
  1443. Default = false
  1444. })
  1445.  
  1446. local function parseAmount(amtText)
  1447. local numStr = amtText:match("x(.+)")
  1448. if not numStr then return 0 end
  1449. if numStr:find("k") then
  1450. local baseNum = tonumber(numStr:match("(%d+%.?%d*)k"))
  1451. return baseNum and (baseNum * 1000) or 0
  1452. else
  1453. return tonumber(numStr) or 0
  1454. end
  1455. end
  1456.  
  1457. local function updateGoldStatus()
  1458. local success, result = pcall(function()
  1459. local player = game.Players.LocalPlayer
  1460. local goldObject = player.PlayerGui.GameUI.Menus.Inventory.Display.Items.MainFrame.ScrollingFrame.KeysStorage.Objects["Spooky Gold/1"]
  1461.  
  1462. if goldObject and goldObject:FindFirstChild("ButtonDisplay") and goldObject.ButtonDisplay:FindFirstChild("Amt") then
  1463. return goldObject.ButtonDisplay.Amt.Text
  1464. else
  1465. return nil
  1466. end
  1467. end)
  1468.  
  1469. if success and result then
  1470. HauntedGoldStatus:SetValue(result)
  1471. return result
  1472. else
  1473. HauntedGoldStatus:SetValue("No Gold")
  1474. return nil
  1475. end
  1476. end
  1477.  
  1478. -- Update status immediately on load
  1479. task.spawn(function()
  1480. task.wait(1) -- Wait for GUI to load
  1481. updateGoldStatus()
  1482. end)
  1483.  
  1484. -- Auto Open Haunted Chest Loop
  1485. AutoOpenChestToggle:OnChanged(function(enabled)
  1486. if enabled then
  1487. task.spawn(function()
  1488. local ReplicatedStorage = game:GetService("ReplicatedStorage")
  1489. while AutoOpenChestToggle.Value do
  1490. local amtText = updateGoldStatus()
  1491.  
  1492. if amtText then
  1493. local amount = parseAmount(amtText)
  1494.  
  1495. if amount >= 1 then
  1496. pcall(function()
  1497. local Knit = require(game:GetService("ReplicatedStorage").Packages.Knit.KnitClient)
  1498. Knit.GetService("ChestService"):Open("HauntedChest")
  1499. end)
  1500. task.wait(0.25)
  1501. else
  1502. task.wait(1)
  1503. end
  1504. else
  1505. task.wait(1)
  1506. end
  1507. end
  1508. end)
  1509. end
  1510. end)
  1511.  
  1512.  
  1513. local CauldronSection = Tabs.Trick:Section("Cauldron Brewing")
  1514.  
  1515. local brewing = require(game:GetService("ReplicatedStorage").Data.Halloween.Brewing)
  1516.  
  1517. -- Add dropdown and toggle to Cauldron section
  1518. local itemTitles = {}
  1519. local recipeMap = {}
  1520.  
  1521. for i, recipe in ipairs(brewing.Recipes.Halloween) do
  1522. local title = "Unknown"
  1523. if type(recipe.Reward) == "table" then
  1524. title = recipe.Reward.Title or recipe.Reward.Item or tostring(i)
  1525. elseif type(recipe.Reward) == "string" then
  1526. title = recipe.Reward
  1527. end
  1528. table.insert(itemTitles, title)
  1529. recipeMap[title] = recipe
  1530. end
  1531.  
  1532. local SelectItemDropdown = CauldronSection:AddDropdown("SelectItemDropdown", {
  1533. Title = "Select Item",
  1534. Values = itemTitles,
  1535. Multi = true, -- Multi-select enabled
  1536. Searchable = true,
  1537. Default = {},
  1538. })
  1539.  
  1540. local AutoBrewToggle = CauldronSection:AddToggle("AutoBrewToggle", {
  1541. Title = "Auto Brew",
  1542. Description = "Automatically brews a random selected item when ready.",
  1543. Default = false
  1544. })
  1545.  
  1546. AutoBrewToggle:OnChanged(function()
  1547. if AutoBrewToggle.Value then
  1548. spawn(function()
  1549. local ReplicatedStorage = game:GetService("ReplicatedStorage")
  1550. local Knit = require(ReplicatedStorage.Packages.Knit.KnitClient)
  1551. local RealTime = require(ReplicatedStorage.Vendor.RealTime)
  1552. local CustomReplicaController = Knit.GetController("CustomReplicaController")
  1553. local replica = CustomReplicaController:GetReplica()
  1554.  
  1555. while AutoBrewToggle.Value do
  1556. -- Gather selected items
  1557. local selectedItems = {}
  1558. for item, selected in pairs(SelectItemDropdown.Value) do
  1559. if selected then
  1560. table.insert(selectedItems, item)
  1561. end
  1562. end
  1563.  
  1564. if #selectedItems > 0 and replica and replica.Data and replica.Data.Events and replica.Data.Events.Halloween then
  1565. local brewingTimer = replica.Data.Events.Halloween.BrewingTimer
  1566. local currentTime = RealTime()
  1567. local elapsed = currentTime - brewingTimer
  1568. if elapsed >= 60 then
  1569. -- Pick a random item from selected
  1570. local selectedTitle = selectedItems[math.random(1, #selectedItems)]
  1571. local recipe = recipeMap[selectedTitle]
  1572. if recipe then
  1573. local itemsTable = {}
  1574. local slot = 1
  1575. for id, amount in pairs(recipe.Ingredients) do
  1576. itemsTable[tostring(id)] = {Slot = slot, Amount = amount}
  1577. slot = slot + 1
  1578. end
  1579. Knit.GetService("BrewingService"):Brew(itemsTable)
  1580. end
  1581. end
  1582. end
  1583. wait(1)
  1584. end
  1585. end)
  1586. end
  1587. end)
  1588.  
  1589. local ReciepeSection = Tabs.Trick:AddSection("Recipes")
  1590.  
  1591. -- Build ingredient lookup
  1592. local ingredientNames = {}
  1593. for id, info in pairs(brewing.Ingredients.Halloween) do
  1594. ingredientNames[id] = info.Item or tostring(id)
  1595. end
  1596.  
  1597. -- Add a paragraph for each recipe
  1598. for i, recipe in ipairs(brewing.Recipes.Halloween) do
  1599. local rewardTitle = "Unknown"
  1600.  
  1601. if type(recipe.Reward) == "table" then
  1602. rewardTitle = recipe.Reward.Title or recipe.Reward.Item or "Unknown"
  1603. elseif type(recipe.Reward) == "string" then
  1604. rewardTitle = recipe.Reward
  1605. end
  1606.  
  1607. -- Format ingredients: Name (xAmount)
  1608. local ingredientsList = {}
  1609. for id, amount in pairs(recipe.Ingredients or {}) do
  1610. local name = ingredientNames[id] or tostring(id)
  1611. table.insert(ingredientsList, string.format("%s (%dx)", name, amount))
  1612. end
  1613.  
  1614. -- Add a paragraph per recipe
  1615. ReciepeSection:Paragraph(`Recipe #{i}`, {
  1616. Title = string.format("Recipe: %s", rewardTitle),
  1617. Content = "Ingredients: " .. table.concat(ingredientsList, ", ")
  1618. })
  1619. end
  1620.  
  1621.  
  1622. local HauntedFortuneSection = Tabs.Wheel:AddSection("Haunted Fortune Wheel")
  1623.  
  1624. local GhostFortuneSpinDropdown = Tabs.Wheel:AddDropdown("GhostFortuneSpinAmount", {
  1625. Title = "Spin Amount",
  1626. Description = "Select Wheel Spin Amount",
  1627. Values = {"1x", "3x", "10x"},
  1628. Multi = false,
  1629. Default = "1x"
  1630. })
  1631.  
  1632. local AutoGhostFortuneToggle = Tabs.Wheel:AddToggle("AutoGhostFortuneSpin", {
  1633. Title = "Auto Haunted Fortune Wheel",
  1634. Default = false
  1635. })
  1636.  
  1637. AutoGhostFortuneToggle:OnChanged(function()
  1638. if AutoGhostFortuneToggle.Value then
  1639. spawn(function()
  1640. while true do
  1641. if not AutoGhostFortuneToggle.Value then break end
  1642.  
  1643. local args = {
  1644. [1] = "Haunted Fortune",
  1645. [2] = GhostFortuneSpinDropdown.Value == "3x" and "x10" or GhostFortuneSpinDropdown.Value == "10x" and "x25" or nil
  1646. }
  1647. game:GetService("ReplicatedStorage").Packages.Knit.Services.SpinnerService.RF.Spin:InvokeServer(unpack(args))
  1648.  
  1649. wait(1)
  1650. end
  1651. end)
  1652. end
  1653. end)
  1654.  
  1655.  
  1656.  
  1657. local UnderworldFortuneSection = Tabs.Wheel:AddSection("Underworld Fortune Wheel")
  1658.  
  1659. local GhostFortuneSpinDropdown1 = Tabs.Wheel:AddDropdown("UnderworldFortuneSpinAmount", {
  1660. Title = "Spin Amount",
  1661. Description = "Select Wheel Spin Amount",
  1662. Values = {"1x", "3x", "10x"},
  1663. Multi = false,
  1664. Default = "1x"
  1665. })
  1666.  
  1667. local AutoGhostFortuneToggle1 = Tabs.Wheel:AddToggle("AutoUnderworldFortuneSpin", {
  1668. Title = "Auto Underworld Fortune Wheel",
  1669. Default = false
  1670. })
  1671.  
  1672. AutoGhostFortuneToggle1:OnChanged(function()
  1673. if AutoGhostFortuneToggle1.Value then
  1674. spawn(function()
  1675. while true do
  1676. if not AutoGhostFortuneToggle1.Value then break end
  1677.  
  1678. local args = {
  1679. [1] = "Underworld Fortune",
  1680. [2] = GhostFortuneSpinDropdown1.Value == "3x" and "x10" or GhostFortuneSpinDropdown1.Value == "10x" and "x25" or nil
  1681. }
  1682. game:GetService("ReplicatedStorage").Packages.Knit.Services.SpinnerService.RF.Spin:InvokeServer(unpack(args))
  1683.  
  1684. wait(1)
  1685. end
  1686. end)
  1687. end
  1688. end)
  1689.  
  1690.  
  1691. local HauntedFortuneSection2 = Tabs.Wheel:AddSection("Carnival Fortune Wheel")
  1692.  
  1693. local GhostFortuneSpinDropdown2 = Tabs.Wheel:AddDropdown("GhostFortuneSpinAmount", {
  1694. Title = "Spin Amount",
  1695. Description = "Select Wheel Spin Amount",
  1696. Values = {"1x", "3x", "10x"},
  1697. Multi = false,
  1698. Default = "1x"
  1699. })
  1700.  
  1701. local AutoGhostFortuneToggle2 = Tabs.Wheel:AddToggle("AutoGhostFortuneSpin", {
  1702. Title = "Auto Carnival Fortune Wheel",
  1703. Default = false
  1704. })
  1705.  
  1706. AutoGhostFortuneToggle2:OnChanged(function()
  1707. if AutoGhostFortuneToggle2.Value then
  1708. spawn(function()
  1709. while true do
  1710. if not AutoGhostFortuneToggle2.Value then break end
  1711.  
  1712. local args = {
  1713. [1] = "Carnival Fortune",
  1714. [2] = GhostFortuneSpinDropdown2.Value == "3x" and "x10" or GhostFortuneSpinDropdown2.Value == "10x" and "x25" or nil
  1715. }
  1716. game:GetService("ReplicatedStorage").Packages.Knit.Services.SpinnerService.RF.Spin:InvokeServer(unpack(args))
  1717.  
  1718. wait(2)
  1719. end
  1720. end)
  1721. end
  1722. end)
  1723.  
  1724. local AutoClickSection = Tabs.Tower:AddSection("Auto Click")
  1725.  
  1726. -- Auto Click for Tower
  1727. local AutoClickTowerToggle = AutoClickSection:AddToggle("AutoClickTower", {
  1728. Title = "Auto Click",
  1729. Description = "Auto clicks during tower fights. This is because the normal auto click/crit will break the tower.",
  1730. Default = false
  1731. })
  1732.  
  1733.  
  1734. -- Variables for auto click
  1735. local customAutoClickActive = false
  1736.  
  1737. -- Function to perform custom clicks
  1738. local function performCustomClicks()
  1739. while customAutoClickActive do
  1740. pcall(function()
  1741. local Knit = require(game:GetService("ReplicatedStorage").Packages.Knit)
  1742. local ArmWrestleController = Knit.GetController("ArmWrestleController")
  1743.  
  1744. if ArmWrestleController and ArmWrestleController.Fighting and ArmWrestleController.IsStarted then
  1745. ArmWrestleController.MouseClick(Enum.UserInputType.MouseButton1, false)
  1746. end
  1747. end)
  1748. task.wait(0.05) -- Click fast
  1749. end
  1750. end
  1751.  
  1752. AutoClickTowerToggle:OnChanged(function(enabled)
  1753. if enabled then
  1754. customAutoClickActive = true
  1755. task.spawn(performCustomClicks)
  1756. else
  1757. customAutoClickActive = false
  1758. end
  1759. end)
  1760.  
  1761.  
  1762.  
  1763. local TowerNote1 = AutoClickSection:Paragraph("TowerNote1", {
  1764. Title = "Warning",
  1765. Content = "Before joining a tower, turn of the auto click/crit toggle in the Auto Fight Section - Main tab. If left on, the tower will break and you will lose your keys. The toggle above is what you should use for towers.",
  1766. TitleAlignment = "Middle",
  1767. ContentAlignment = Enum.TextXAlignment.Left
  1768. })
  1769.  
  1770. local TowerSection = Tabs.Tower:AddSection("Spooky Tower")
  1771.  
  1772. -- Tower Status
  1773. local TowerKeysStatus = TowerSection:Paragraph("TowerKeysStatus", {
  1774. Title = "Tower Status",
  1775. Content = "Loading..."
  1776. })
  1777.  
  1778. -- Function to parse tower key amount
  1779. local function parseTowerKeyAmount(amtText)
  1780. local numStr = amtText:match("x(.+)")
  1781. if not numStr then return 0 end
  1782. if numStr:find("k") then
  1783. local baseNum = tonumber(numStr:match("(%d+%.?%d*)k"))
  1784. return baseNum and (baseNum * 1000) or 0
  1785. else
  1786. return tonumber(numStr) or 0
  1787. end
  1788. end
  1789.  
  1790. -- Check if currently in a tower
  1791. local Knit = require(game:GetService("ReplicatedStorage").Packages.Knit)
  1792. Knit.OnStart():await()
  1793.  
  1794. local TowerController = Knit.GetController("TowerController")
  1795. local TowerService = Knit.GetService("TowerService")
  1796.  
  1797. -- Function to check tower status
  1798. local function CheckTowerStatus()
  1799. local inTower = false
  1800. local towerName = "None"
  1801.  
  1802. -- Method 1: Check TowerService for ongoing tower
  1803. pcall(function()
  1804. local playerData = Knit.GetController("CustomReplicaController"):GetReplica()
  1805. if playerData and playerData.Data and playerData.Data.OngoingTower then
  1806. inTower = true
  1807. towerName = playerData.Data.OngoingTower
  1808. end
  1809. end)
  1810.  
  1811. -- Method 2: Check if tower UI is visible
  1812. if not inTower then
  1813. pcall(function()
  1814. local towerHud = game.Players.LocalPlayer.PlayerGui.GameUI.Hud.Tower
  1815. if towerHud and towerHud.Visible then
  1816. inTower = true
  1817. towerName = towerHud.TowerName.Text or "Unknown Tower"
  1818. end
  1819. end)
  1820. end
  1821.  
  1822. return inTower, towerName
  1823. end
  1824.  
  1825. -- Passive Status Updater
  1826. task.spawn(function()
  1827. while true do
  1828. local player = game.Players.LocalPlayer
  1829.  
  1830. -- Safe one-line key amount retrieval
  1831. local keyAmount = game.Players.LocalPlayer.PlayerGui:FindFirstChild("GameUI") and game.Players.LocalPlayer.PlayerGui.GameUI:FindFirstChild("Menus") and game.Players.LocalPlayer.PlayerGui.GameUI.Menus:FindFirstChild("Inventory") and game.Players.LocalPlayer.PlayerGui.GameUI.Menus.Inventory:FindFirstChild("Display") and game.Players.LocalPlayer.PlayerGui.GameUI.Menus.Inventory.Display:FindFirstChild("Items") and game.Players.LocalPlayer.PlayerGui.GameUI.Menus.Inventory.Display.Items:FindFirstChild("MainFrame") and game.Players.LocalPlayer.PlayerGui.GameUI.Menus.Inventory.Display.Items.MainFrame:FindFirstChild("ScrollingFrame") and game.Players.LocalPlayer.PlayerGui.GameUI.Menus.Inventory.Display.Items.MainFrame.ScrollingFrame:FindFirstChild("KeysStorage") and game.Players.LocalPlayer.PlayerGui.GameUI.Menus.Inventory.Display.Items.MainFrame.ScrollingFrame.KeysStorage:FindFirstChild("Objects") and game.Players.LocalPlayer.PlayerGui.GameUI.Menus.Inventory.Display.Items.MainFrame.ScrollingFrame.KeysStorage.Objects:FindFirstChild("Spooky Tower Key/1") and game.Players.LocalPlayer.PlayerGui.GameUI.Menus.Inventory.Display.Items.MainFrame.ScrollingFrame.KeysStorage.Objects["Spooky Tower Key/1"]:FindFirstChild("ButtonDisplay") and game.Players.LocalPlayer.PlayerGui.GameUI.Menus.Inventory.Display.Items.MainFrame.ScrollingFrame.KeysStorage.Objects["Spooky Tower Key/1"].ButtonDisplay:FindFirstChild("Amt") and game.Players.LocalPlayer.PlayerGui.GameUI.Menus.Inventory.Display.Items.MainFrame.ScrollingFrame.KeysStorage.Objects["Spooky Tower Key/1"].ButtonDisplay.Amt.Text or "No Spooky Keys"
  1832.  
  1833. local inTower, towerName = CheckTowerStatus()
  1834. local statusText = "Spooky Keys: " .. keyAmount .. "\nIn Tower: " .. (inTower and "Yes (" .. towerName .. ")" or "No")
  1835. TowerKeysStatus:SetValue(statusText)
  1836.  
  1837. task.wait(1)
  1838. end
  1839. end)
  1840.  
  1841.  
  1842. -- Manual Tower Buttons
  1843. TowerSection:AddButton({
  1844. Title = "Use Spooky Keys (1x)",
  1845. Description = "Use the Spooky Key once.",
  1846. Callback = function()
  1847. -- End any ongoing fight before entering tower
  1848. pcall(function()
  1849. local Knit = require(game:GetService("ReplicatedStorage").Packages.Knit)
  1850. local ArmWrestleService = Knit.GetService("ArmWrestleService")
  1851. ArmWrestleService:RequestEndFight("SkipEnd")
  1852. end)
  1853.  
  1854. wait(0.5) -- Brief wait after ending fight
  1855.  
  1856. local args = {
  1857. [1] = "SpookyTower",
  1858. [2] = false
  1859. }
  1860. game:GetService("ReplicatedStorage").Packages.Knit.Services.TowerService.RF.EnterTower:InvokeServer(unpack(args))
  1861. end
  1862. })
  1863.  
  1864. TowerSection:AddButton({
  1865. Title = "Use All Spooky Keys (250x)",
  1866. Description = "Use All Spooky Keys (max 250 at a time).",
  1867. Callback = function()
  1868. -- End any ongoing fight before entering tower
  1869. pcall(function()
  1870. local Knit = require(game:GetService("ReplicatedStorage").Packages.Knit)
  1871. local ArmWrestleService = Knit.GetService("ArmWrestleService")
  1872. ArmWrestleService:RequestEndFight("SkipEnd")
  1873. end)
  1874.  
  1875. wait(0.5) -- Brief wait after ending fight
  1876.  
  1877. local args = {
  1878. [1] = "SpookyTower",
  1879. [2] = true
  1880. }
  1881. game:GetService("ReplicatedStorage").Packages.Knit.Services.TowerService.RF.EnterTower:InvokeServer(unpack(args))
  1882. end
  1883. })
  1884. -- Auto Tower Toggle
  1885. local AutoTowerToggle = TowerSection:AddToggle("AutoTower", {
  1886. Title = "Auto Tower (250 keys)",
  1887. Description = "Will auto complete the tower doing 250 keys each time. Temporarily disables Auto Fight/Click.",
  1888. Default = false
  1889. })
  1890.  
  1891. AutoTowerToggle:OnChanged(function()
  1892. if AutoTowerToggle.Value then
  1893. spawn(function()
  1894. -- Initialize state variables for this session
  1895. local player = game.Players.LocalPlayer
  1896. local togglesDisabled = false
  1897. local wasAutoFightOn = false
  1898. local wasAutoClickOn = false
  1899. local previousKeyAmount = 0
  1900.  
  1901. while AutoTowerToggle.Value do
  1902. local inTower, _ = CheckTowerStatus()
  1903.  
  1904. -- Check current key amount
  1905. local keyObject = player.PlayerGui.GameUI.Menus.Inventory.Display.Items.MainFrame.ScrollingFrame.KeysStorage.Objects:FindFirstChild("Spooky Tower Key/1") or "0"
  1906. local currentKeyAmount = 0
  1907.  
  1908. if keyObject and keyObject:FindFirstChild("ButtonDisplay") and keyObject.ButtonDisplay:FindFirstChild("Amt") then
  1909. local amtText = keyObject.ButtonDisplay.Amt.Text
  1910. currentKeyAmount = parseTowerKeyAmount(amtText)
  1911. end
  1912.  
  1913. local hasKeys = currentKeyAmount > 0
  1914.  
  1915. -- Handle key state transitions
  1916. if hasKeys and not togglesDisabled then
  1917. -- Just got keys, disable other toggles
  1918. wasAutoFightOn = AutoFightToggle and AutoFightToggle.Value or false
  1919. wasAutoClickOn = AutoClickToggle and AutoClickToggle.Value or false
  1920.  
  1921. if wasAutoFightOn then AutoFightToggle:SetValue(false) end
  1922. if wasAutoClickOn then AutoClickToggle:SetValue(false) end
  1923.  
  1924. togglesDisabled = true
  1925. wait(1) -- Wait for toggles to fully disable
  1926. elseif not hasKeys and togglesDisabled and not inTower then
  1927. -- Just ran out of keys AND not in tower, re-enable toggles
  1928. wait(2) -- Wait a bit
  1929.  
  1930. -- Re-enable toggles if they were on before
  1931. if wasAutoFightOn and AutoFightToggle then AutoFightToggle:SetValue(true) end
  1932. if wasAutoClickOn and AutoClickToggle then AutoClickToggle:SetValue(true) end
  1933.  
  1934. -- Reset state flags for the next cycle
  1935. wasAutoFightOn = false
  1936. wasAutoClickOn = false
  1937. togglesDisabled = false
  1938. end
  1939.  
  1940. if not inTower and hasKeys then
  1941. -- Has keys and not in tower, enter tower
  1942. -- End any ongoing fight before entering tower
  1943. pcall(function()
  1944. local Knit = require(game:GetService("ReplicatedStorage").Packages.Knit)
  1945. local ArmWrestleService = Knit.GetService("ArmWrestleService")
  1946. ArmWrestleService:RequestEndFight("SkipEnd")
  1947. end)
  1948.  
  1949. wait(0.5) -- Brief wait after ending fight
  1950.  
  1951. pcall(function()
  1952. local args = {
  1953. [1] = "SpookyTower",
  1954. [2] = true
  1955. }
  1956. game:GetService("ReplicatedStorage").Packages.Knit.Services.TowerService.RF.EnterTower:InvokeServer(unpack(args))
  1957. end)
  1958. end
  1959.  
  1960. previousKeyAmount = currentKeyAmount
  1961. wait(hasKeys and 1 or 5) -- Check more frequently when we have keys
  1962. end
  1963.  
  1964. -- ✅ Re-enable toggles when manually turned off (only if not in tower)
  1965. if togglesDisabled then
  1966. wait(1) -- Brief delay to ensure proper state
  1967.  
  1968. local inTower, _ = CheckTowerStatus()
  1969. if not inTower then
  1970. -- Re-enable toggles if they were on before
  1971. if wasAutoFightOn and AutoFightToggle then AutoFightToggle:SetValue(true) end
  1972. if wasAutoClickOn and AutoClickToggle then AutoClickToggle:SetValue(true) end
  1973. end
  1974. end
  1975. end)
  1976. end
  1977. end)
  1978.  
  1979.  
  1980. local TowerSection1 = Tabs.Tower:AddSection("Underworld Tower")
  1981.  
  1982. -- Tower Status
  1983. local TowerKeysStatus1 = TowerSection1:Paragraph("TowerKeysStatus1", {
  1984. Title = "Tower Status",
  1985. Content = "Loading..."
  1986. })
  1987.  
  1988. -- Function to parse tower key amount
  1989. local function parseTowerKeyAmount(amtText)
  1990. local numStr = amtText:match("x(.+)")
  1991. if not numStr then return 0 end
  1992. if numStr:find("k") then
  1993. local baseNum = tonumber(numStr:match("(%d+%.?%d*)k"))
  1994. return baseNum and (baseNum * 1000) or 0
  1995. else
  1996. return tonumber(numStr) or 0
  1997. end
  1998. end
  1999.  
  2000.  
  2001.  
  2002. local TowerController = Knit.GetController("TowerController")
  2003. local TowerService = Knit.GetService("TowerService")
  2004.  
  2005. -- Function to check tower status
  2006. local function CheckTowerStatus()
  2007. local inTower = false
  2008. local towerName = "None"
  2009.  
  2010. pcall(function()
  2011. local playerData = Knit.GetController("CustomReplicaController"):GetReplica()
  2012. if playerData and playerData.Data and playerData.Data.OngoingTower then
  2013. inTower = true
  2014. towerName = playerData.Data.OngoingTower
  2015. end
  2016. end)
  2017.  
  2018. if not inTower then
  2019. pcall(function()
  2020. local towerHud = game.Players.LocalPlayer.PlayerGui.GameUI.Hud.Tower
  2021. if towerHud and towerHud.Visible then
  2022. inTower = true
  2023. towerName = towerHud.TowerName.Text or "Unknown Tower"
  2024. end
  2025. end)
  2026. end
  2027.  
  2028. return inTower, towerName
  2029. end
  2030.  
  2031. -- Passive Status Updater
  2032. task.spawn(function()
  2033. while true do
  2034. local player = game.Players.LocalPlayer
  2035. local keyAmount = "No Underworld Keys"
  2036. pcall(function()
  2037. local keyObj = player.PlayerGui.GameUI.Menus.Inventory.Display.Items.MainFrame.ScrollingFrame.KeysStorage.Objects:FindFirstChild("Underworld Tower Key/1")
  2038. if keyObj and keyObj:FindFirstChild("ButtonDisplay") and keyObj.ButtonDisplay:FindFirstChild("Amt") then
  2039. keyAmount = keyObj.ButtonDisplay.Amt.Text
  2040. end
  2041. end)
  2042.  
  2043. local inTower, towerName = CheckTowerStatus()
  2044. local statusText = "Underworld Keys: " .. keyAmount .. "\nIn Tower: " .. (inTower and "Yes (" .. towerName .. ")" or "No")
  2045. TowerKeysStatus1:SetValue(statusText)
  2046.  
  2047. task.wait(1)
  2048. end
  2049. end)
  2050.  
  2051. -- Manual Tower Buttons
  2052. TowerSection1:AddButton({
  2053. Title = "Use Underworld Keys (1x)",
  2054. Description = "Use the Underworld Key once.",
  2055. Callback = function()
  2056. pcall(function()
  2057. local ArmWrestleService = Knit.GetService("ArmWrestleService")
  2058. ArmWrestleService:RequestEndFight("SkipEnd")
  2059. end)
  2060.  
  2061. wait(0.5)
  2062. local args = {"UnderworldTower", false}
  2063. game:GetService("ReplicatedStorage").Packages.Knit.Services.TowerService.RF.EnterTower:InvokeServer(unpack(args))
  2064. end
  2065. })
  2066.  
  2067. TowerSection1:AddButton({
  2068. Title = "Use All Underworld Keys (250x)",
  2069. Description = "Use All Underworld Keys (max 250 at a time).",
  2070. Callback = function()
  2071. pcall(function()
  2072. local ArmWrestleService = Knit.GetService("ArmWrestleService")
  2073. ArmWrestleService:RequestEndFight("SkipEnd")
  2074. end)
  2075.  
  2076. wait(0.5)
  2077. local args = {"UnderworldTower", true}
  2078. game:GetService("ReplicatedStorage").Packages.Knit.Services.TowerService.RF.EnterTower:InvokeServer(unpack(args))
  2079. end
  2080. })
  2081.  
  2082. -- Auto Tower Toggle
  2083. local AutoTowerToggle1 = TowerSection1:AddToggle("AutoTower", {
  2084. Title = "Auto Tower (250 keys)",
  2085. Description = "Will auto complete the tower doing 250 keys each time. Temporarily disables Auto Fight/Click.",
  2086. Default = false
  2087. })
  2088.  
  2089. AutoTowerToggle1:OnChanged(function()
  2090. if AutoTowerToggle1.Value then
  2091. spawn(function()
  2092. local player = game.Players.LocalPlayer
  2093. local togglesDisabled = false
  2094. local wasAutoFightOn = false
  2095. local wasAutoClickOn = false
  2096.  
  2097. while AutoTowerToggle1.Value do
  2098. local inTower, _ = CheckTowerStatus()
  2099.  
  2100. local keyObject = player.PlayerGui.GameUI.Menus.Inventory.Display.Items.MainFrame.ScrollingFrame.KeysStorage.Objects:FindFirstChild("Underworld Tower Key/1")
  2101. local currentKeyAmount = 0
  2102. if keyObject and keyObject:FindFirstChild("ButtonDisplay") and keyObject.ButtonDisplay:FindFirstChild("Amt") then
  2103. currentKeyAmount = parseTowerKeyAmount(keyObject.ButtonDisplay.Amt.Text)
  2104. end
  2105.  
  2106. local hasKeys = currentKeyAmount > 0
  2107.  
  2108. -- Disable other toggles if keys present
  2109. if hasKeys and not togglesDisabled then
  2110. wasAutoFightOn = AutoFightToggle and AutoFightToggle.Value or false
  2111. wasAutoClickOn = AutoClickToggle and AutoClickToggle.Value or false
  2112. if wasAutoFightOn then AutoFightToggle:SetValue(false) end
  2113. if wasAutoClickOn then AutoClickToggle:SetValue(false) end
  2114. togglesDisabled = true
  2115. wait(1)
  2116. elseif not hasKeys and togglesDisabled and not inTower then
  2117. if wasAutoFightOn and AutoFightToggle then AutoFightToggle:SetValue(true) end
  2118. if wasAutoClickOn and AutoClickToggle then AutoClickToggle:SetValue(true) end
  2119. togglesDisabled = false
  2120. end
  2121.  
  2122. if not inTower and hasKeys then
  2123. pcall(function()
  2124. local ArmWrestleService = Knit.GetService("ArmWrestleService")
  2125. ArmWrestleService:RequestEndFight("SkipEnd")
  2126. end)
  2127. wait(0.5)
  2128. pcall(function()
  2129. game:GetService("ReplicatedStorage").Packages.Knit.Services.TowerService.RF.EnterTower:InvokeServer("UnderworldTower", true)
  2130. end)
  2131. end
  2132.  
  2133. wait(hasKeys and 1 or 5)
  2134. end
  2135.  
  2136. -- Re-enable toggles when manually turned off
  2137. if togglesDisabled then
  2138. wait(1)
  2139. local inTower, _ = CheckTowerStatus()
  2140. if not inTower then
  2141. if wasAutoFightOn and AutoFightToggle then AutoFightToggle:SetValue(true) end
  2142. if wasAutoClickOn and AutoClickToggle then AutoClickToggle:SetValue(true) end
  2143. end
  2144. end
  2145. end)
  2146. end
  2147. end)
  2148.  
  2149. local CupMinigameData = require(ReplicatedStorage.Data.Halloween.CupMinigame)
  2150. local CupMinigameController = Knit.GetController("CupMinigameController")
  2151. local CustomReplicaController = Knit.GetController("CustomReplicaController")
  2152.  
  2153. local MinigameSection = Tabs.Minigame:AddSection("Cup Minigame")
  2154.  
  2155. local CupMinigameToggle = MinigameSection:AddToggle("CupMinigameToggle", {
  2156. Title = "100% Cup Minigame (Auto)",
  2157. Description = "Automatically plays the cup minigame, always selects the right cup, and claims rewards every 10 keys.",
  2158. Default = false
  2159. })
  2160.  
  2161. local CupParagraph = MinigameSection:Paragraph("CupParagraph", {
  2162. Title = "Shoutout",
  2163. Content = "A hugeeeeeeeeeeee thank you to a friend of mine who lent me over 100 cup keys to experiment with. I kept on wasting the keys with silly mistakes, but he kept giving me more and more keys/chances. Im not going to mention his name unless he wants me to, but thank you so much for the help!"
  2164. })
  2165.  
  2166. local currentHighlight
  2167. local startingKeys = 0
  2168. local nextClaimThreshold = 0
  2169.  
  2170. local function highlightCup(cup)
  2171. if currentHighlight then
  2172. currentHighlight:Destroy()
  2173. currentHighlight = nil
  2174. end
  2175. local highlight = Instance.new("Highlight")
  2176. highlight.FillColor = Color3.new(0, 1, 0)
  2177. highlight.OutlineColor = Color3.new(1, 1, 0)
  2178. highlight.FillTransparency = 0.5
  2179. highlight.OutlineTransparency = 0
  2180. highlight.Adornee = cup
  2181. highlight.Parent = cup
  2182. currentHighlight = highlight
  2183. end
  2184.  
  2185. local oldEndRound = CupMinigameController.EndRound
  2186. CupMinigameController.EndRound = function(...)
  2187. if currentHighlight then
  2188. currentHighlight:Destroy()
  2189. currentHighlight = nil
  2190. end
  2191. return oldEndRound(...)
  2192. end
  2193.  
  2194. local function getCupKeyAmount()
  2195. local replica = CustomReplicaController:GetReplica()
  2196. if replica and replica.Data and replica.Data.Items and replica.Data.Items.ItemInventory and replica.Data.Items.ItemInventory.Keys then
  2197. local keys = replica.Data.Items.ItemInventory.Keys
  2198. return (keys["Cup Key"] and keys["Cup Key"]["1"]) or (keys["CupKey"] and keys["CupKey"]["1"]) or 0
  2199. end
  2200. return 0
  2201. end
  2202.  
  2203. local function fireCupButtonWhenVisible(billboard)
  2204. local button = billboard:FindFirstChild("Button")
  2205. if not button then return false end
  2206. while not billboard.Enabled or not button.Visible do
  2207. task.wait(0.1)
  2208. end
  2209. for _, conn in ipairs(getconnections(button.MouseButton1Click)) do
  2210. conn:Fire()
  2211. end
  2212. return true
  2213. end
  2214.  
  2215. local function fireWinProceedButton()
  2216. local LocalPlayer = Players.LocalPlayer
  2217. local CupWin = LocalPlayer.PlayerGui.GameUI.Menus.CupWin
  2218. local proceedButton = CupWin.Actions.Proceed.Button
  2219. while not proceedButton.Visible do
  2220. task.wait(0.1)
  2221. end
  2222. for _, conn in ipairs(getconnections(proceedButton.MouseButton1Click)) do
  2223. conn:Fire()
  2224. end
  2225. end
  2226.  
  2227. local function fireWinCancelButton()
  2228. local LocalPlayer = Players.LocalPlayer
  2229. local CupWin = LocalPlayer.PlayerGui.GameUI.Menus.CupWin
  2230. local cancelButton = CupWin.Actions.Cancel.Button
  2231. while not cancelButton.Visible do
  2232. task.wait(0.1)
  2233. end
  2234. for _, conn in ipairs(getconnections(cancelButton.MouseButton1Click)) do
  2235. conn:Fire()
  2236. end
  2237. end
  2238.  
  2239. local function startCupGameIfInactive()
  2240. if not CupMinigameController.Stand then
  2241. local LocalPlayer = game:GetService("Players").LocalPlayer
  2242. local PlayNowButton = LocalPlayer.PlayerGui.GameUI.Menus.CupEntrance.PlayNow.Button
  2243. if PlayNowButton and PlayNowButton.Visible then
  2244. for _, conn in ipairs(getconnections(PlayNowButton.MouseButton1Click)) do
  2245. conn:Fire()
  2246. end
  2247. task.wait(1)
  2248. end
  2249. end
  2250. end
  2251.  
  2252. CupMinigameToggle:OnChanged(function()
  2253. if CupMinigameToggle.Value then
  2254. -- Initialize starting keys and claim threshold
  2255. startingKeys = getCupKeyAmount()
  2256. nextClaimThreshold = startingKeys - 10
  2257.  
  2258. -- Make the round go instantly
  2259. CupMinigameData.Config.TimeMultiplier = 0.01
  2260. CupMinigameData.Config.StartSpeed = 99999
  2261. CupMinigameData.Config.SpeedPerRound = 99999
  2262. CupMinigameData.Config.MaxSpeed = 99999
  2263.  
  2264. spawn(function()
  2265. local canContinue = true
  2266.  
  2267. while CupMinigameToggle.Value do
  2268. local cupKeyAmount = getCupKeyAmount()
  2269.  
  2270. -- Check if we've hit a multiple of 10 keys
  2271. if cupKeyAmount % 10 == 0 and cupKeyAmount > 0 and cupKeyAmount < startingKeys then
  2272. canContinue = false
  2273. task.wait(3)
  2274. fireWinCancelButton()
  2275. task.wait(3)
  2276. startingKeys = cupKeyAmount
  2277. canContinue = true
  2278. end
  2279.  
  2280. -- Stop if completely out of keys
  2281. if cupKeyAmount == 0 then
  2282. fireWinCancelButton()
  2283. task.wait(3)
  2284. end
  2285.  
  2286. if canContinue and not CupMinigameController.Stand and cupKeyAmount > 0 then
  2287. startCupGameIfInactive()
  2288. task.wait(1)
  2289. end
  2290.  
  2291. -- If in game, play the round
  2292. if canContinue and CupMinigameController.Stand then
  2293. local highlightedCup = nil
  2294. while not highlightedCup and CupMinigameToggle.Value do
  2295. for _, cup in pairs(CupMinigameController.Stand.Cups:GetChildren()) do
  2296. local ball = CupMinigameController.Stand.Balls:FindFirstChild(cup.Name)
  2297. if ball and ball.PrimaryPart and ball.PrimaryPart.Transparency == 0 then
  2298. highlightCup(cup)
  2299. highlightedCup = cup
  2300. break
  2301. end
  2302. end
  2303. task.wait(0.1)
  2304. end
  2305.  
  2306. task.wait(0.5)
  2307.  
  2308. local billboard = CupMinigameController.CupBillboards[highlightedCup]
  2309. if billboard then
  2310. fireCupButtonWhenVisible(billboard)
  2311. else
  2312. end
  2313.  
  2314. task.wait(1)
  2315. fireWinProceedButton()
  2316. task.wait(2)
  2317. else
  2318. -- Not in game or paused, wait 3 seconds before checking again
  2319. task.wait(3)
  2320. end
  2321. end
  2322. end)
  2323. end
  2324. end)
  2325.  
  2326. -- Hand the library over to our managers
  2327. SaveManager:SetLibrary(Library)
  2328. InterfaceManager:SetLibrary(Library)
  2329. SaveManager:IgnoreThemeSettings()
  2330. SaveManager:SetIgnoreIndexes{}
  2331. InterfaceManager:SetFolder("FluentScriptHub")
  2332. SaveManager:SetFolder("FluentScriptHub/specific-game")
  2333.  
  2334.  
  2335. InterfaceManager:BuildInterfaceSection(Tabs.Settings)
  2336. SaveManager:BuildConfigSection(Tabs.Settings)
  2337. Window:SelectTab(1)
  2338. SaveManager:LoadAutoloadConfig()
  2339.  
  2340.  
  2341.  
Add Comment
Please, Sign In to add comment