-- 使用 E03 的云模块(支持 CA 系列控件) loadYunLuaGroup("5C3C4E3813681C4C204C35346F1B4C2F7EFF612D2B22176FF346535E1C0B1E493339036EE15318") function init() stab = _ENV["分页"] ttitle = _ENV["标题"] xfcpic = _ENV["悬浮窗图标"] end -- ==================== 全局变量 ==================== local LAST_MODIFY_DATA = nil local LAST_SEARCH_VALUE = nil local LAST_MODIFY_COUNT = 0 local sj = {} local xgz = {} local LOOP_INTERVAL = 4 local IS_LOOP_ACTIVE = false local TERRAIN_LOOP_ACTIVE = false local TERRAIN_LOOP_INTERVAL = 4 local ssc_active = false local GLOBAL_SPEED_DATA = nil local GLOBAL_SPEED_MULTIPLIER = 3.0 local GAME_SPEED_ACTIVE = false local GAME_SPEED_VALUE = 3.0 local GAME_SPEED_TIMER = nil local MONSTER_TAKEOFF_DATA = nil local wukong_invincible_active = false local zuilong_gather_data = nil local step_active = false local MONSTER_0HP_LOOP_ACTIVE = false local LAST_MODIFIED_HERO_ID = nil local BUDDHA_LIGHT_DATA = nil local BUDDHA_LIGHT_ACTIVE = false local ZUILONG_NO_COOLDOWN_DATA = nil local ZUILONG_NO_MANACOST_DATA = nil -- ==================== 内存操作函数 ==================== function search(ss,lx,nc,dz1,dz2) if ss~=nil then if lx~=nil then if nc==nil then nc=32 end gg.setRanges(nc) if dz1==nil then dz1="-1" end if dz2==nil then dz1="0" end gg.searchNumber(ss,lx,false,536870912,dz1,dz2) sl=gg.getResultCount() if sl~=0 then sj=gg.getResults(sl) gg.clearResults() else gg.toast("未找到结果") end end end end function py1(value,lx,py) if #sj~=nil then z1={} z2={} for i=1,#sj do z1[i]={} z1[i].address=sj[i].address+py z1[i].flags=lx end z1=gg.getValues(z1) for i=1,#sj do if z1[i].value==value then z2[#z2+1]={} z2[#z2]=sj[i] end end sj=z2 z1={} z2={} else gg.toast("没有搜索结果") end end function py2(value,lx,py) if #sj~=nil then z1={} z2={} for i=1,#sj do z1[i]={} z1[i].address=sj[i].address+py z1[i].flags=lx end z1=gg.getValues(z1) for ii,value in ipairs(z1) do if z1[ii].value~=value then z2[#z2+1]={} z2[#z2]=sj[ii] end end sj=z2 z1={} z2={} end end function xg1(value,lx,py,dj) if #sj~=nil then z={} for i=1,#sj do z[i]={} z[i].address=sj[i].address+py z[i].flags=lx z[i].value=value if dj==true then z[i].freeze=true end end if dj==true then gg.addListItems(z) else gg.clearList() gg.setValues(z) end else gg.toast("没有可修改的结果") end end function xg2(bz,value,lx,py,dj) if #bz~=nil then z={} for i=1,#bz do z[i]={} z[i].address=bz[i].address+py z[i].flags=lx z[i].value=value if dj==true then z[i].freeze=true end end if dj==true then gg.addListItems(z) else gg.clearList() gg.setValues(z) end end end function bc(bz) if sj~=nil then _ENV[bz]=sj else gg.toast("没有结果可以保存") end end function BaAdd(add) t=gg.getValues({[1]={address=add,flags=4}}) return t[1].value&0xFFFFFFFF end function set(dz,xg,lx,dj) if dj=="true" then gg.addListItems({{address=dz,flags=lx,value=xg,freeze=true}}) else gg.setValues({{address=dz,flags=lx,value=xg}}) end end -- ==================== 秒过功能 ==================== function InstantPass() gg.clearResults() search(8000,4,4) py1(-1,4,48) py1(10,4,24) xg1(9000,4,56,true) search(900000,4,4) py1(700,4,80) xg1(0,4,-312,false) xg1(0,4,-268,false) xg1(1,4,-24,false) xg1(0,4,-248,false) xg1(1,4,-272,false) xg1(1,4,-152,false) xg1(2000000,4,0,false) gg.toast("秒过功能开启成功") gg.clearResults() end function SetLoopInterval() local input = gg.prompt({"请输入循环间隔时间(秒):"}, {tostring(LOOP_INTERVAL)}, {"number"}) if input and input[1] then local interval = tonumber(input[1]) if interval and interval > 0 then LOOP_INTERVAL = interval gg.toast("循环间隔已设置为: " .. interval .. "秒") else gg.toast("请输入有效的正数") end else gg.toast("设置已取消") end end function StartLoopInstantPass() if IS_LOOP_ACTIVE then gg.toast("循环已在运行中") return end IS_LOOP_ACTIVE = true gg.toast("秒过循环已开启,间隔: " .. LOOP_INTERVAL .. "秒") local loop_thread = function() local loop_count = 0 while IS_LOOP_ACTIVE do loop_count = loop_count + 1 gg.clearResults() search(8000,4,4) py1(-1,4,48) py1(10,4,24) xg1(9000,4,56,true) search(900000,4,4) py1(700,4,80) xg1(0,4,-312,false) xg1(0,4,-268,false) xg1(1,4,-24,false) xg1(0,4,-248,false) xg1(1,4,-272,false) xg1(1,4,-152,false) xg1(2000000,4,0,false) if loop_count == 1 then gg.toast("第" .. loop_count .. "次秒过完成") end gg.clearResults() if IS_LOOP_ACTIVE then local start_time = os.time() while os.time() - start_time < LOOP_INTERVAL and IS_LOOP_ACTIVE do gg.sleep(1000) end end end gg.toast("秒过循环已停止") end local success, error = pcall(loop_thread) if not success then gg.toast("循环执行出错: " .. tostring(error)) IS_LOOP_ACTIVE = false end end function StopLoopInstantPass() if not IS_LOOP_ACTIVE then gg.toast("循环未在运行") return end IS_LOOP_ACTIVE = false gg.toast("秒过循环已停止") end -- ==================== 无视地形秒过 ==================== function TerrainIgnorePass() gg.clearResults() search(-121, 4, 4) py1(-127, 4, 8) py1(-125, 4, 16) py1(-127, 4, -8) py1(-125, 4, -208) py1(-125, 4, -240) py1(-127, 4, -264) xg1(0, 4, -244, false) xg1(0, 4, -212, false) xg1(1, 4, -116, false) xg1(1, 4, -236, false) gg.toast("无视地形秒过功能开启成功") gg.clearResults() end function SetTerrainLoopInterval() local input = gg.prompt({"请输入循环间隔时间(秒):"}, {tostring(TERRAIN_LOOP_INTERVAL)}, {"number"}) if input and input[1] then local interval = tonumber(input[1]) if interval and interval > 0 then TERRAIN_LOOP_INTERVAL = interval gg.toast("循环间隔已设置为: " .. interval .. "秒") else gg.toast("请输入有效的正数") end else gg.toast("设置已取消") end end function StartLoopTerrainIgnorePass() if TERRAIN_LOOP_ACTIVE then gg.toast("循环已在运行中") return end TERRAIN_LOOP_ACTIVE = true gg.toast("无视地形秒过循环已开启,间隔: " .. TERRAIN_LOOP_INTERVAL .. "秒") local loop_thread = function() local loop_count = 0 while TERRAIN_LOOP_ACTIVE do loop_count = loop_count + 1 gg.clearResults() search(-121, 4, 4) py1(-127, 4, 8) py1(-125, 4, 16) py1(-127, 4, -8) py1(-125, 4, -208) py1(-125, 4, -240) py1(-127, 4, -264) xg1(0, 4, -244, false) xg1(0, 4, -212, false) xg1(1, 4, -116, false) xg1(1, 4, -236, false) if loop_count == 1 then gg.toast("第" .. loop_count .. "次无视地形秒过完成") end gg.clearResults() if TERRAIN_LOOP_ACTIVE then local start_time = os.time() while os.time() - start_time < TERRAIN_LOOP_INTERVAL and TERRAIN_LOOP_ACTIVE do gg.sleep(1000) end end end gg.toast("无视地形秒过循环已停止") end local success, error = pcall(loop_thread) if not success then gg.toast("循环执行出错: " .. tostring(error)) TERRAIN_LOOP_ACTIVE = false end end function StopLoopTerrainIgnorePass() if not TERRAIN_LOOP_ACTIVE then gg.toast("循环未在运行") return end TERRAIN_LOOP_ACTIVE = false gg.toast("无视地形秒过循环已停止") end -- ==================== 基础内存操作 ==================== local function simpleSearch(value, type) gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber(value, type) return gg.getResultsCount() end local function editAll(value, type) local results = gg.getResults(gg.getResultsCount()) for i, v in ipairs(results) do v.value = value v.freeze = false end gg.setValues(results) return #results end -- ==================== 万能修改 ==================== function UniversalModify() print("========================================") print(" 🛠️ 万能修改脚本 v1.0") print("========================================") gg.toast("请输入要搜索的数值") local searchValue = gg.prompt({"请输入要搜索的值:"}, {"100.0"}, {"number"}) if searchValue == nil then gg.toast("已取消") return end print("正在搜索数值: " .. searchValue[1]) gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber(searchValue[1], gg.TYPE_DOUBLE) local results = gg.getResults(10000) local resultCount = #results print("找到 " .. resultCount .. " 个结果") if resultCount == 0 then gg.alert("❌ 未找到匹配的数值", "确定") return end gg.toast("请选择要修改的数量") local modifyCountInput = gg.prompt({"请输入要修改的数量 (1-" .. resultCount .. "):"}, {tostring(math.min(150, resultCount))}, {"number"}) if modifyCountInput == nil then gg.toast("已取消") return end local modifyCount = tonumber(modifyCountInput[1]) if modifyCount < 1 or modifyCount > resultCount then modifyCount = math.min(150, resultCount) end local selectedResults = {} for i = 1, modifyCount do selectedResults[i] = results[i] end print("已选择 " .. modifyCount .. " 个结果") gg.toast("请输入新数值") local newValue = gg.prompt({"请输入要修改为的新数值:"}, {"999.0"}, {"number"}) if newValue == nil then gg.toast("已取消") return end local actionChoice = gg.choice({"✅ 仅修改数值", "❄️ 修改并冻结", "🚫 取消操作"}, nil, "请选择操作方式:") if actionChoice == nil or actionChoice == 3 then gg.toast("操作已取消") return end local originalData = {} for i = 1, modifyCount do originalData[i] = { address = selectedResults[i].address, originalValue = selectedResults[i].value, frozen = (actionChoice == 2) } end for i = 1, modifyCount do selectedResults[i].value = tonumber(newValue[1]) selectedResults[i].name = "修改项_" .. i if actionChoice == 2 then selectedResults[i].freeze = true else selectedResults[i].freeze = false end end gg.setValues(selectedResults) if actionChoice == 2 then gg.addListItems(selectedResults) end LAST_MODIFY_DATA = originalData LAST_SEARCH_VALUE = tonumber(searchValue[1]) LAST_MODIFY_COUNT = modifyCount local actionText = {"修改", "修改并冻结"} gg.toast("成功" .. actionText[actionChoice] .. " " .. modifyCount .. " 个数值") local detailMsg = "原数值: " .. searchValue[1] .. "\n新数值: " .. newValue[1] .. "\n修改数量: " .. modifyCount .. "\n操作类型: " .. actionText[actionChoice] gg.alert(detailMsg, "修改完成") gg.clearResults() end function RestoreLastModify() if LAST_MODIFY_DATA == nil then gg.alert("❌ 没有找到可恢复的修改记录", "确定") return end local choice = gg.choice({"✅ 确认恢复上次修改", "❌ 取消恢复"}, nil, "确定要恢复上次修改吗?\n将恢复 " .. LAST_MODIFY_COUNT .. " 个数值") if choice == 1 then local restoreResults = {} for i = 1, #LAST_MODIFY_DATA do local data = LAST_MODIFY_DATA[i] restoreResults[i] = { address = data.address, value = data.originalValue, flags = gg.TYPE_DOUBLE, freeze = false, name = "恢复项_" .. i } end gg.setValues(restoreResults) if gg.getListItems then local frozenItems = gg.getListItems() if #frozenItems > 0 then for i = 1, #frozenItems do for j = 1, #LAST_MODIFY_DATA do if frozenItems[i].address == LAST_MODIFY_DATA[j].address then gg.removeListItems({frozenItems[i]}) break end end end end end gg.toast("✅ 已恢复 " .. LAST_MODIFY_COUNT .. " 个数值") LAST_MODIFY_DATA = nil LAST_SEARCH_VALUE = nil LAST_MODIFY_COUNT = 0 else gg.toast("恢复操作已取消") end end function ShowUniversalModifyInstructions() gg.alert([[ 🛠️ 万能修改 - 使用攻略 1.八戒第四次普攻提高伤害(图内开):2.1 2.有效值(修改的是人物属性魔抗等) 0.008 0.002 0.013 0.001 0.05 ]], "修改攻略") end -- ==================== 穿图 ==================== function StepByStep_Enable() gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC) if simpleSearch("0.1", gg.TYPE_FLOAT) > 0 then editAll("-999", gg.TYPE_FLOAT) step_active = true gg.toast("穿图开启成功") else gg.toast("穿图功能开启失败") end gg.clearResults() end function StepByStep_Disable() gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC) if simpleSearch("-999", gg.TYPE_FLOAT) > 0 then editAll("0.1", gg.TYPE_FLOAT) step_active = false gg.toast("穿图关闭成功") else gg.toast("穿图功能关闭失败") end gg.clearResults() end -- ==================== 内购三生锤 ==================== function InternalBloodsucker() gg.clearResults() gg.setRanges(-1032320) gg.searchNumber("2330", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("2330", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(99999) gg.editAll("-99999999", gg.TYPE_DWORD) gg.toast("内购三生锤开启成功") gg.clearResults() end -- ==================== 三生锤无敌 ==================== function SanShengChuiInvincible_On() if ssc_active then gg.toast('三生锤无敌属性已开启') return end gg.setVisible(false) gg.clearResults() gg.setRanges(4) gg.toast('正在修改请勿操作') gg.searchNumber('500;40;15', gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) local count = gg.getResultsCount() if count == 0 then gg.toast('❌ 未找到数据') ssc_active = false return end gg.toast('✅ 找到 ' .. count .. ' 个匹配项,正在修改...') local results = gg.getResults(count) local modifyList = {} for _, v in ipairs(results) do table.insert(modifyList, {address = v.address, flags = gg.TYPE_DWORD, value = '9999'}) end gg.setValues(modifyList) gg.toast('✨ 三生锤无敌属性修改完成!共修改 ' .. #modifyList .. ' 个数值') ssc_active = true end function SanShengChuiInvincible_Off() if not ssc_active then gg.toast('三生锤无敌属性尚未开启') return end ssc_active = false gg.toast('三生锤无敌属性已关闭') end -- ==================== 游戏加速 ==================== function GameSpeed_On() if GAME_SPEED_ACTIVE then gg.toast("游戏加速已开启") return end GAME_SPEED_ACTIVE = true gg.setSpeed(GAME_SPEED_VALUE) if GAME_SPEED_TIMER then gg.clearTimer(GAME_SPEED_TIMER) end GAME_SPEED_TIMER = gg.timer(2000, function() if GAME_SPEED_ACTIVE then gg.setSpeed(GAME_SPEED_VALUE) end end) gg.toast("游戏加速已开启(倍速:" .. GAME_SPEED_VALUE .. ")") end function GameSpeed_Off() if not GAME_SPEED_ACTIVE then gg.toast("游戏加速未开启") return end GAME_SPEED_ACTIVE = false if GAME_SPEED_TIMER then gg.clearTimer(GAME_SPEED_TIMER) GAME_SPEED_TIMER = nil end gg.setSpeed(1.0) gg.toast("游戏加速已关闭") end function SetGameSpeedValue() local input = gg.prompt({"请输入游戏加速倍速 (建议 1~5 倍):"}, {tostring(GAME_SPEED_VALUE)}, {"number"}) if input == nil then gg.toast("已取消") return end local newSpeed = tonumber(input[1]) if not newSpeed or newSpeed <= 0 then gg.toast("倍速必须大于0") return end if newSpeed > 5 then local confirm = gg.choice({"继续使用", "重新输入"}, nil, "⚠️ 倍速超过5倍可能不稳定,是否继续?") if confirm == 2 or confirm == nil then return end end GAME_SPEED_VALUE = newSpeed if GAME_SPEED_ACTIVE then gg.setSpeed(GAME_SPEED_VALUE) gg.toast("游戏加速倍速已更新为: " .. GAME_SPEED_VALUE .. " 倍") else gg.toast("游戏加速倍速已保存为: " .. GAME_SPEED_VALUE .. " 倍") end end -- ==================== 全局加速(内存基址) ==================== function SetGlobalSpeedMultiplier() local input = gg.prompt({"请输入全局加速倍速 (建议 1~6 倍):"}, {tostring(GLOBAL_SPEED_MULTIPLIER)}, {"number"}) if input == nil then gg.toast("已取消") return end local newSpeed = tonumber(input[1]) if not newSpeed or newSpeed <= 0 then gg.toast("倍速必须大于0") return end if newSpeed > 6 then local confirm = gg.choice({"继续使用", "重新输入"}, nil, "⚠️ 倍速超过6倍可能不稳定,是否继续?") if confirm == 2 or confirm == nil then return end end GLOBAL_SPEED_MULTIPLIER = newSpeed if GLOBAL_SPEED_DATA then local setRes = gg.setValues({{address = GLOBAL_SPEED_DATA.address, flags = GLOBAL_SPEED_DATA.flags, value = GLOBAL_SPEED_MULTIPLIER}}) if setRes then gg.toast("全局加速倍速已更新为: " .. GLOBAL_SPEED_MULTIPLIER .. " 倍") else gg.toast("倍速更新失败") end else gg.toast("全局加速倍速已保存为: " .. GLOBAL_SPEED_MULTIPLIER .. " 倍") end end function GlobalSpeed_On() if GLOBAL_SPEED_DATA then gg.toast("全局加速已开启(倍速:" .. GLOBAL_SPEED_MULTIPLIER .. ")") return end local x64 = gg.getTargetInfo().x64 local py = {0x580C8, 0x90, 0x18} local v_t = {} local addr = 0 local idx = 1 for _, value in ipairs(gg.getRangesList("^/data/*libcocos2djs.so:bss*$")) do if value.type:sub(1, 1) == "r" and "Cb" == value.state then if idx == (tonumber('') or 1) then addr = value.start break end idx = idx + 1 end end if addr == 0 then gg.toast("无法定位到数值起始位置") return end v_t[1] = {address = addr + py[1], flags = x64 and 32 or 4} v_t = gg.getValues(v_t) for i = 2, #py do if not x64 then v_t[1].value = v_t[1].value & 0xFFFFFFFF end v_t[1].address = v_t[1].value + py[i] v_t = gg.getValues(v_t) end local targetAddr = v_t[1].address local flags = gg.TYPE_FLOAT local original = gg.getValues({{address = targetAddr, flags = flags}})[1].value GLOBAL_SPEED_DATA = {address = targetAddr, value = original, flags = flags} gg.setValues({{address = targetAddr, flags = flags, value = GLOBAL_SPEED_MULTIPLIER}}) gg.toast("全局加速已开启(倍速:" .. GLOBAL_SPEED_MULTIPLIER .. ")") end function GlobalSpeed_Off() if not GLOBAL_SPEED_DATA then gg.toast("全局加速未开启") return end local data = GLOBAL_SPEED_DATA gg.setValues({{address = data.address, flags = data.flags, value = data.value}}) GLOBAL_SPEED_DATA = nil gg.toast("全局加速已关闭") end -- ==================== 悟空功能 ==================== function WukongKill() gg.clearResults() search(1074921472,4,4) py1(1,4,-108) py1(165,4,4) py1(314,4,12) xg1(9999999999,4,84,false) gg.toast("悟空秒杀开启成功") gg.clearResults() end function WukongInvincible_On() if wukong_invincible_active then gg.toast("悟空无敌已开启") return end gg.clearResults() search(1074921472,4,4) py1(-125,4,8) xg1(1,4,12,false) wukong_invincible_active = true gg.toast("悟空无敌开启成功") gg.clearResults() end function WukongInvincible_Off() if not wukong_invincible_active then gg.toast("悟空无敌未开启") return end gg.clearResults() search(1074921472,4,4) py1(-125,4,8) xg1(0,4,12,false) wukong_invincible_active = false gg.toast("悟空无敌已关闭") gg.clearResults() end function WukongNewKill() gg.clearResults() search(1078198272,4,4) py1(-127,4,8) xg1(20786,4,4,false) gg.toast("悟空新版秒杀开启成功") gg.clearResults() end function WukongCombo() gg.clearResults() search(1074921472,4,4) py1(-125,4,8) xg1(1,4,12,false) search(1078198272,4,4) py1(-127,4,8) xg1(20786,4,4,false) search(1015598704,4,4) py1(-2,4,-8) xg1(0.00592857,16,0,false) xg1(0,16,-4,false) wukong_invincible_active = true gg.toast("悟空无敌+秒杀+加速已开启") gg.clearResults() end function WukongStrongPuReplace() gg.clearResults() search(1078198272, 4, 4) if #sj == 0 then gg.toast("未找到特征数据") return end py1(1015, 4, 4) if #sj == 0 then gg.toast("未找到匹配的技能地址") return end local v = gg.prompt({"请输入技能代码(自己解包查找)"}, {}, {"number"}) if not v then gg.alert("未输入数值") return end xg1(v[1], 4, 4, false) gg.toast("悟空强普技能替换成功") gg.clearResults() end function ShowWukongInstructions() gg.alert([[ 🐵 悟空功能使用说明 秒杀在准备战斗时开启,无敌在地图内开启,新秒杀进入战斗后开 强普技能替换:进入关卡后使用,输入技能代码即可替换普攻 ]], "悟空功能说明") end -- ==================== 坠龙之地 ==================== function Zuilong_Perspective_Single() gg.clearResults() search(1072483532,4,4) if #sj == 0 then gg.toast("未找到透视数据") return end py1(-121,4,-16) py1(-127,4,-8) xg1(999999999,4,52,false) gg.toast("透视已开启") gg.clearResults() end function Zuilong_LeftKill_On() gg.clearResults() search(50000, 4, 4) if #sj == 0 then gg.toast("未找到水晶血量数据") return end py1(1, 4, 8) py1(-120, 4, 188) py1(-125, 4, 212) xg1(0, 4, -32, false) search(2139095040, 4, 4) if #sj == 0 then gg.toast("未找到顺左数据") return end py1(1065353216, 4, -8) py1(1065353216, 4, -4) py1(0, 4, 4) py1(0, 4, 8) py1(0, 4, 12) xg1(529, 16, 20, false) xg1(882, 16, 16, false) gg.toast("秒左功能已执行") gg.clearResults() end function Zuilong_RightKill_On() gg.clearResults() search(50000, 4, 4) if #sj == 0 then gg.toast("未找到水晶血量数据") return end py1(1, 4, 8) py1(-120, 4, 188) py1(-125, 4, 212) xg1(0, 4, -32, false) search(2139095040, 4, 4) if #sj == 0 then gg.toast("未找到顺右数据") return end py1(1065353216, 4, -8) py1(1065353216, 4, -4) py1(0, 4, 4) py1(0, 4, 8) py1(0, 4, 12) xg1(530, 16, 20, false) xg1(6239, 16, 16, false) gg.toast("秒右功能已执行") gg.clearResults() end function Zuilong_Gather_On() if zuilong_gather_data then gg.toast("聚怪已开启") return end gg.clearResults() search(2139095040,4,4) if #sj == 0 then gg.toast("未找到聚怪数据") return end py1(1065353216,4,-8) py1(1065353216,4,-4) py1(0,4,4) py1(0,4,8) py1(0,4,12) xg1(1222,16,20,true) xg1(3563,16,16,true) local records = {} for i, v in ipairs(sj) do table.insert(records, {address=v.address+20, value=1222, flags=16, freeze=true}) table.insert(records, {address=v.address+16, value=3563, flags=16, freeze=true}) end zuilong_gather_data = records gg.toast("聚怪已开启") gg.clearResults() end function Zuilong_Gather_Off() if not zuilong_gather_data then gg.toast("聚怪未开启") return end for _, item in ipairs(zuilong_gather_data) do gg.removeListItems({item}) end zuilong_gather_data = nil gg.toast("聚怪已关闭") end -- ==================== 法宝无冷却(坠龙) ==================== function Zuilong_NoCooldown_On() if ZUILONG_NO_COOLDOWN_DATA then gg.toast("法宝无冷却已开启") return end gg.clearResults() gg.setRanges(4) gg.searchNumber("1072483532", 4) local count = gg.getResultsCount() if count == 0 then gg.toast("未找到法宝数据,请确保在坠龙之地关卡内") gg.clearResults() return end local results = gg.getResults(count) gg.clearResults() local spare = {{"-127", "-16", 4}, {"-123", "-32", 4}, {"-125", "16", 4}, {"-127", "80", 4}} for _, filter in ipairs(spare) do local tmp = {} for _, v in ipairs(results) do table.insert(tmp, {address = v.address + tonumber(filter[2]), flags = filter[3]}) end tmp = gg.getValues(tmp) local filtered = {} for i, val in ipairs(tmp) do if val.value == tonumber(filter[1]) then table.insert(filtered, results[i]) end end results = filtered if #results == 0 then break end end if #results == 0 then gg.toast("特征匹配失败,请确认法宝类型") gg.clearResults() return end local edit = {{"4", "-28", 4}, {"1", "68", 4}} local saveList = {} local origData = {} for _, addr in ipairs(results) do for _, e in ipairs(edit) do local targetAddr = addr.address + tonumber(e[2]) local orig = gg.getValues({{address = targetAddr, flags = e[3]}})[1].value table.insert(origData, {address = targetAddr, originalValue = orig, flags = e[3]}) table.insert(saveList, {address = targetAddr, flags = e[3], value = tonumber(e[1])}) end end gg.setValues(saveList) ZUILONG_NO_COOLDOWN_DATA = origData gg.toast("法宝无冷却已开启") gg.clearResults() end function Zuilong_NoCooldown_Off() if not ZUILONG_NO_COOLDOWN_DATA then gg.toast("法宝无冷却未开启") return end local restoreList = {} for _, item in ipairs(ZUILONG_NO_COOLDOWN_DATA) do table.insert(restoreList, {address = item.address, flags = item.flags, value = item.originalValue}) end gg.setValues(restoreList) ZUILONG_NO_COOLDOWN_DATA = nil gg.toast("法宝无冷却已关闭") end -- ==================== 角色无蓝耗(坠龙) ==================== function Zuilong_NoManaCost_On() if ZUILONG_NO_MANACOST_DATA then gg.toast("角色无蓝耗已开启") return end gg.clearResults() gg.setRanges(4) gg.searchNumber("500", 4) local count = gg.getResultsCount() if count == 0 then gg.toast("未找到数据,请确保在坠龙之地关卡内") gg.clearResults() return end local results = gg.getResults(count) gg.clearResults() local spare = {{"-120", "-4", 4}, {"-127", "4", 4}, {"-125", "12", 4}, {"-125", "20", 4}, {"-125", "28", 4}} for _, filter in ipairs(spare) do local tmp = {} for _, v in ipairs(results) do table.insert(tmp, {address = v.address + tonumber(filter[2]), flags = filter[3]}) end tmp = gg.getValues(tmp) local filtered = {} for i, val in ipairs(tmp) do if val.value == tonumber(filter[1]) then table.insert(filtered, results[i]) end end results = filtered if #results == 0 then break end end if #results == 0 then gg.toast("特征匹配失败,请确认法类型") gg.clearResults() return end local edit = {{"1", "24", 4}} local saveList = {} local origData = {} for _, addr in ipairs(results) do for _, e in ipairs(edit) do local targetAddr = addr.address + tonumber(e[2]) local orig = gg.getValues({{address = targetAddr, flags = e[3]}})[1].value table.insert(origData, {address = targetAddr, originalValue = orig, flags = e[3]}) table.insert(saveList, {address = targetAddr, flags = e[3], value = tonumber(e[1])}) end end gg.setValues(saveList) ZUILONG_NO_MANACOST_DATA = origData gg.toast("角色无蓝耗已开启") gg.clearResults() end function Zuilong_NoManaCost_Off() if not ZUILONG_NO_MANACOST_DATA then gg.toast("角色无蓝耗未开启") return end local restoreList = {} for _, item in ipairs(ZUILONG_NO_MANACOST_DATA) do table.insert(restoreList, {address = item.address, flags = item.flags, value = item.originalValue}) end gg.setValues(restoreList) ZUILONG_NO_MANACOST_DATA = nil gg.toast("角色无蓝耗已关闭") end -- ==================== 72变 ==================== function ModifyHero_72Bian() local id = gg.prompt({"输入英雄ID(数字)"}, {""}, {"number"}) if id and id[1] then local targetID = tonumber(id[1]) if targetID then gg.clearResults() gg.setRanges(-1032320) gg.searchNumber("1;-127;-123;-127;101::50", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("1", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) local count = gg.getResultsCount() if count == 0 then gg.toast("未找到英雄数据,请确保在训练营或关卡内") gg.clearResults() return end gg.getResults(100) gg.editAll(tostring(targetID), gg.TYPE_DWORD) LAST_MODIFIED_HERO_ID = targetID gg.toast("已修改为ID: " .. targetID .. ",共修改 " .. count .. " 处") gg.clearResults() else gg.toast("输入无效") end end end function RestoreHero_72Bian() if not LAST_MODIFIED_HERO_ID then gg.alert("❌ 没有找到修改记录\n请先使用「修改英雄ID」功能", "确定") return end local targetID = LAST_MODIFIED_HERO_ID gg.clearResults() gg.setRanges(-1032320) gg.searchNumber(targetID .. ";-127;-123;-127;101::50", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber(tostring(targetID), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) local count = gg.getResultsCount() if count == 0 then gg.toast("未找到ID为 " .. targetID .. " 的英雄数据") gg.clearResults() return end gg.getResults(100) gg.editAll("1", gg.TYPE_DWORD) LAST_MODIFIED_HERO_ID = nil gg.toast("已恢复英雄(ID:1),共恢复 " .. count .. " 处") gg.clearResults() end function ShowHeroIDTable() gg.alert([[ 英雄ID参考表 前100直接按顺序数 1-孙悟空 2-唐僧 40-通天 51-斗战胜佛 61-后羿 71-六耳 80-真武大帝 89-东皇太一 98-帝俊 后面较为特殊也可以自行测试 103-鹿 107-伏羲 108-女土蝠 ]], "英雄ID查询表") end -- ==================== 法宝秒怪 ==================== local function modifyFabaosearch(targetValue, newValue) gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber(tostring(targetValue), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber(tostring(targetValue), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll(tostring(newValue), gg.TYPE_DWORD) gg.toast("开启成功") end function FaBao_ZhenHunXiaoYiJie() modifyFabaosearch(100310, 20786) end function FaBao_ZhenHunXiaoErJie() modifyFabaosearch(100320, 20786) end function FaBao_YunYangBanYiJie() modifyFabaosearch(100250, 20786) end function FaBao_YunYangBanErJie() modifyFabaosearch(100260, 20786) end function FaBao_KuYeLingYiJie() modifyFabaosearch(100160, 20786) end function FaBao_KuYeLingErJie() modifyFabaosearch(100170, 20786) end function FaBao_KuiHuaLanYiJie() modifyFabaosearch(100330, 20786) end function FaBao_KuiHuaLanErJie() modifyFabaosearch(100340, 20786) end function ShowFaBaoInstructions() gg.alert([[ 法宝秒怪:装备对应法宝后点击按钮即可,一局一开 ]], "法宝秒怪说明") end function ShowZuilongInstructions() gg.alert([[ 坠龙之地功能谨慎使用,胆小者勿用 透视:对局中开启,全图透视,一局一开。 · 秒水晶:秒左边水晶 / 秒右边水晶。 · 聚怪:所有怪物(敌我)聚集在龙坑位置。 · 法宝无冷却:开启后法宝没有冷却时间(所有) · 无蓝耗:开启后角色使用技能无蓝耗。 · 72变改英雄:输入英雄ID替换英雄。只能在训练营使用,悟空必须带原皮。群内提供ID查询表。 · 穿图:坠龙开启后分机,实现穿墙/穿图。 · 内购三生锤:坠龙开启后三生锤价格变为 -999999。 · 三生锤属性增强:属性大幅提升(可能闪退,谨慎使用)。 ]], "坠龙之地说明") end function ShowInstantPassInstructions() gg.alert([[ 秒过功能只能过部分主线,特殊地形可用悟空功能过 假装打一下(1技能,2技能,法宝,普攻,开挂),其他模式直接开 支持元素、镇妖塔、试炼房等 ]], "秒过功能说明") end function ShowAdventureInstructions() gg.alert([[ 无视地形秒过能秒过全部主线,唯一不能秒过的是车迟国高台坐禅 主线假装打一下(1技能,2技能,法宝,普攻,开挂),其他模式直接开 支持元素、镇妖塔、试炼房等 ]], "无视地形秒过说明") end function ShowEntertainmentInstructions() gg.alert([[ 娱乐功能说明: 游戏加速用于活动 全局加速过检测稳定 高跳、佛光美化(降魔之光改双龙戏珠) 强制私聊:开启后可直接私聊指定玩家(具体效果自行测试) 火焰山替换主线关卡:双人组队替换关卡,请在组队界面再开启,输入关卡ID即可替换关卡,不会分机,队友无需操作,可以一起组队打主线 ]], "娱乐功能说明") end function ShowGeneralInstructions() gg.alert([[ 脚本版本 v4.2 功能分页:公告、秒过功能、冒险专区、悟空功能、法宝功能、坠龙之地、娱乐功能、万能修改、设置 请勿在竞技模式下使用 ]], "脚本使用说明") end function ShowNotice() gg.alert([[ 造梦西游外传多功能脚本 v4.2 - 上线直装版本 - 新增坠龙之地法宝无冷却 - 角色无蓝耗开关 - 新增强制私聊功能 - 新增火焰山替换主线关卡 请勿破坏游戏平衡 ]], "公告") end -- ==================== 佛光美化 ==================== local DEFAULT_BUDDHA_SKILL = 13678 local JIANGMO_SKILL = 13166 function BuddhaLight_On() if BUDDHA_LIGHT_ACTIVE then gg.toast("佛光美化已开启") return end gg.clearResults() gg.setRanges(2080896) gg.searchNumber("1635084391", gg.TYPE_DWORD) local count = gg.getResultsCount() if count == 0 then gg.toast("未找到佛光数据,请确保在关卡内") gg.clearResults() return end local results = gg.getResults(count) gg.clearResults() local filtered = {} local tmp = {} for i, v in ipairs(results) do table.insert(tmp, {address = v.address + 4, flags = gg.TYPE_DWORD}) end tmp = gg.getValues(tmp) for i, val in ipairs(tmp) do if val.value == JIANGMO_SKILL then table.insert(filtered, results[i]) end end if #filtered == 0 then gg.toast("未找到降魔之光技能,请确认装备了降魔之光") gg.clearResults() return end BUDDHA_LIGHT_DATA = {} for i, v in ipairs(filtered) do table.insert(BUDDHA_LIGHT_DATA, {address = v.address + 4, originalValue = JIANGMO_SKILL, flags = gg.TYPE_DWORD}) end local modifyList = {} for i, item in ipairs(BUDDHA_LIGHT_DATA) do table.insert(modifyList, {address = item.address, flags = item.flags, value = DEFAULT_BUDDHA_SKILL}) end gg.setValues(modifyList) BUDDHA_LIGHT_ACTIVE = true gg.toast("佛光美化已开启(降魔之光 → 双龙戏珠)") gg.clearResults() end function BuddhaLight_Off() if not BUDDHA_LIGHT_ACTIVE then gg.toast("佛光美化未开启") return end if not BUDDHA_LIGHT_DATA then gg.toast("未找到原始数据,无法恢复") BUDDHA_LIGHT_ACTIVE = false return end local restoreList = {} for i, item in ipairs(BUDDHA_LIGHT_DATA) do table.insert(restoreList, {address = item.address, flags = item.flags, value = item.originalValue}) end gg.setValues(restoreList) BUDDHA_LIGHT_DATA = nil BUDDHA_LIGHT_ACTIVE = false gg.toast("佛光美化已关闭(已恢复降魔之光)") end function BuddhaLight_Custom() local input = gg.prompt({"请输入技能代码(双龙戏珠13678,琉璃法环14190,菩提圣印14446,万法归宗14702)"}, {tostring(DEFAULT_BUDDHA_SKILL)}, {"number"}) if input == nil then gg.toast("已取消") return end local newCode = tonumber(input[1]) if not newCode then gg.toast("请输入有效数字") return end if not BUDDHA_LIGHT_ACTIVE then gg.toast("请先开启佛光美化,再使用自定义") return end if not BUDDHA_LIGHT_DATA then gg.toast("未找到佛光数据,请重新开启") return end local modifyList = {} for i, item in ipairs(BUDDHA_LIGHT_DATA) do table.insert(modifyList, {address = item.address, flags = item.flags, value = newCode}) end gg.setValues(modifyList) gg.toast("佛光技能已自定义为: " .. newCode) end -- ==================== 怪物0血循环 ==================== function Monster0Hp_Loop() gg.clearResults() search(-121,4,4) py1(-121,4,8) py1(-123,4,40) py1(-127,4,96) py1(-120,4,120) xg1(0,4,128,false) gg.clearResults() end function StartMonster0HpLoop() if MONSTER_0HP_LOOP_ACTIVE then gg.toast("怪物0血循环已在运行中") return end MONSTER_0HP_LOOP_ACTIVE = true gg.toast("怪物0血循环已开启,每0.5秒执行一次") local loop_thread = function() while MONSTER_0HP_LOOP_ACTIVE do Monster0Hp_Loop() if MONSTER_0HP_LOOP_ACTIVE then gg.sleep(500) end end gg.toast("怪物0血循环已停止") end local success, error = pcall(loop_thread) if not success then gg.toast("循环执行出错: " .. tostring(error)) MONSTER_0HP_LOOP_ACTIVE = false end end function StopMonster0HpLoop() if not MONSTER_0HP_LOOP_ACTIVE then gg.toast("怪物0血循环未在运行") return end MONSTER_0HP_LOOP_ACTIVE = false gg.toast("怪物0血循环已停止") end -- ==================== 新增:强制私聊 ==================== function ForcePrivateChat() gg.clearResults() search(1331709342,4,4) py1(0,4,4) xg1(257,4,28,false) gg.toast("强制私聊开启成功") gg.clearResults() end -- ==================== 新增:火焰山替换主线关卡 ==================== function FlameMountainReplace() local id = gg.prompt({"请输入关卡ID(在组队界面开启)"}, {""}, {"number"}) if id == nil or id[1] == nil or id[1] == "" then gg.toast("已取消") return end gg.clearResults() search(3005,4,4) py1(-127,4,4) py1(-1,4,16) py1(-127,4,20) xg1(id[1],4,0,false) gg.toast("火焰山关卡替换成功,ID: " .. id[1]) gg.clearResults() end -- ==================== 使用说明 ==================== function ShowPrivateChatInstructions() gg.alert([[ 强制私聊功能:开启后可直接私聊指定玩家(需要知道UID,不知道的也能开),具体效果自行测试。 火焰山替换主线关卡:双人组队替换关卡,请在组队界面再开启,输入关卡ID即可替换关卡,不会分机,队友无需操作,可以一起组队打主线 ]], "私聊&关卡替换说明") end -- ==================== 补全缺失函数 ==================== function MonsterTakeoff_On() gg.toast("怪物起飞功能暂未实现,请联系作者") end function MonsterTakeoff_Off() gg.toast("怪物起飞关闭") end function HighJump_Single() gg.toast("高跳功能暂未实现,请联系作者") end -- ==================== 弹窗公告 ==================== local function MaterialAlert() local alertBuilder = MaterialAlertDialogBuilder(context) alertBuilder.setTitle("公告") alertBuilder.setMessage("造梦西游外传 v4.2(直装版)已加载\n- 上线直装版本\n- 新增坠龙之地法宝无冷却\n- 角色无蓝耗开关\n- 新增强制私聊功能\n- 新增火焰山替换主线关卡") alertBuilder.setPositiveButton("确定") local LayoutParams = luajava.bindClass('android.view.WindowManager$LayoutParams') local alert = alertBuilder.create() alert.getWindow().setType(gg.ANDROID_SDK_INT >= 26 and LayoutParams.TYPE_APPLICATION_OVERLAY or LayoutParams.TYPE_PHONE) alert.show() end luajava.runOnUiThread(MaterialAlert) -- ==================== UI 配置 ==================== _ENV["悬浮窗图标"] = 'https://patchwiki.biligame.com/images/ys/2/29/4k98v9sdrrkrxw8vxfdxll42bdi3czo.png' _ENV["标题"] = '造梦西游外传 v4.2' _ENV["分页"] = { '公告', '秒过功能', '冒险专区', '悟空功能', '法宝功能', '坠龙之地', '娱乐功能', '万能修改', '设置' } init() uistart({ -- 1. 公告 { CAtext('造梦西游外传多功能脚本', '#FF6B35', '16sp', true), CAtext('v4.2 ', '#2196F3', '14sp', true), CAtext('请勿破坏游戏平衡', '#4CAF50', '12sp', true), CAtext('━━ 更新内容 ━━', '#FF9800', '12sp', true), CAtext('✅ 上线直装版本,无需额外配置', '#4CAF50', '12sp'), CAtext('✅ 新增坠龙之地法宝无冷却', '#4CAF50', '12sp'), CAtext('✅ 角色无蓝耗开关', '#4CAF50', '12sp'), CAtext('✅ 新增强制私聊功能', '#4CAF50', '12sp'), CAtext('✅ 新增火焰山替换主线关卡', '#4CAF50', '12sp'), CAtext('━━ 注意事项 ━━', '#FF9800', '12sp', true), CAtext('⚠️ 请勿在竞技模式下使用', '#F44336', '12sp'), CAtext('━━ 详细公告 ━━', '#FF9800', '12sp', true), CAbutton('查看详细公告', ShowNotice, '#4CAF50'), }, -- 2. 秒过功能 { CAtext('🏔️ 无视地形秒过', '#4CAF50', '16sp', true), CAbutton('无视地形秒过', TerrainIgnorePass, '#4CAF50'), CAtext('━━ 循环功能 ━━', '#FF9800', '12sp', true), CAswitch('循环无视地形秒过', StartLoopTerrainIgnorePass, StopLoopTerrainIgnorePass), CAbutton('设置循环时间', SetTerrainLoopInterval, '#9C27B0'), CAbutton('查看详细说明', ShowAdventureInstructions, '#4CAF50'), }, -- 3. 冒险专区 { CAtext('⚡ 冒险专区', '#8BC34A', '16sp', true), CAbutton('秒过功能', InstantPass, '#4CAF50'), CAswitch('循环秒过', StartLoopInstantPass, StopLoopInstantPass), CAbutton('设置循环时间', SetLoopInterval, '#9C27B0'), CAswitch('怪物起飞', MonsterTakeoff_On, MonsterTakeoff_Off), CAswitch('怪物0血循环', StartMonster0HpLoop, StopMonster0HpLoop), CAbutton('查看详细说明', ShowInstantPassInstructions, '#4CAF50'), }, -- 4. 悟空功能 { CAtext('🐵 悟空功能', '#FF9800', '16sp', true), CAbutton('开启悟空秒杀(原版)', WukongKill, '#FF5722'), CAswitch('悟空无敌', WukongInvincible_On, WukongInvincible_Off, '进入关卡后开启'), CAbutton('悟空新版秒杀', WukongNewKill, '#FF9800'), CAbutton('悟空无敌+秒杀+加速', WukongCombo, '#FF5722'), CAbutton('悟空强普技能替换', WukongStrongPuReplace, '#4CAF50'), CAbutton('查看详细说明', ShowWukongInstructions, '#4CAF50'), }, -- 5. 法宝功能 { CAtext('✨ 法宝秒怪', '#9C27B0', '16sp', true), CAbutton('镇魂萧二阶秒怪', FaBao_ZhenHunXiaoErJie, '#4CAF50'), CAbutton('镇魂萧一阶秒怪', FaBao_ZhenHunXiaoYiJie, '#4CAF50'), CAbutton('云阳板一阶秒怪', FaBao_YunYangBanYiJie, '#4CAF50'), CAbutton('云阳板二阶秒怪', FaBao_YunYangBanErJie, '#4CAF50'), CAbutton('枯叶灵一阶秒怪', FaBao_KuYeLingYiJie, '#4CAF50'), CAbutton('枯叶灵二阶秒怪', FaBao_KuYeLingErJie, '#4CAF50'), CAbutton('魁花篮一阶秒怪', FaBao_KuiHuaLanYiJie, '#4CAF50'), CAbutton('魁花篮二阶秒怪', FaBao_KuiHuaLanErJie, '#4CAF50'), CAbutton('查看详细说明', ShowFaBaoInstructions, '#2196F3'), }, -- 6. 坠龙之地 { CAtext('⚔️ 坠龙之地', '#FF5722', '16sp', true), CAbutton('透视', Zuilong_Perspective_Single, '#2196F3'), CAbutton('秒左边水晶', Zuilong_LeftKill_On, '#2196F3'), CAbutton('秒右边水晶', Zuilong_RightKill_On, '#2196F3'), CAswitch('聚怪', Zuilong_Gather_On, Zuilong_Gather_Off, '将怪物聚集到龙坑'), CAswitch('法宝无冷却', Zuilong_NoCooldown_On, Zuilong_NoCooldown_Off, '关闭技能消耗'), CAswitch('角色无蓝耗', Zuilong_NoManaCost_On, Zuilong_NoManaCost_Off), CAbutton('修改英雄ID(72变)', ModifyHero_72Bian, '#2196F3'), CAbutton('恢复英雄(72变)', RestoreHero_72Bian, '#4CAF50'), CAbutton('英雄ID查询表', ShowHeroIDTable, '#4CAF50'), CAswitch('穿图', StepByStep_Enable, StepByStep_Disable, '开启后达到分机效果'), CAbutton('内购三生锤', InternalBloodsucker, '#2196F3'), CAswitch('三生锤无敌属性', SanShengChuiInvincible_On, SanShengChuiInvincible_Off, '可能闪退'), CAbutton('查看详细说明', ShowZuilongInstructions, '#4CAF50'), }, -- 7. 娱乐功能(新增) { CAtext('🎮 娱乐功能', '#9C27B0', '16sp', true), CAswitch('游戏加速', GameSpeed_On, GameSpeed_Off, '活动使用'), CAtext('当前游戏加速倍速: ' .. (GAME_SPEED_VALUE or 3) .. ' 倍', '#FF9800', '12sp'), CAbutton('⚙️ 设置游戏加速倍速', SetGameSpeedValue, '#9C27B0'), CAswitch('全局加速', GlobalSpeed_On, GlobalSpeed_Off, '过检测'), CAtext('当前全局加速倍速: ' .. (GLOBAL_SPEED_MULTIPLIER or 3) .. ' 倍', '#FF9800', '12sp'), CAbutton('⚙️ 设置全局加速倍速', SetGlobalSpeedMultiplier, '#9C27B0'), CAbutton('高跳', HighJump_Single, '#9C27B0'), CAswitch('佛光美化(降魔→双龙)', BuddhaLight_On, BuddhaLight_Off), CAbutton('自定义佛光技能代码', BuddhaLight_Custom, '#2196F3'), CAbutton('强制私聊', ForcePrivateChat, '#4CAF50'), CAbutton('火焰山替换主线关卡', FlameMountainReplace, '#4CAF50'), CAbutton('私聊&关卡替换说明', ShowPrivateChatInstructions, '#2196F3'), CAbutton('查看使用说明', ShowEntertainmentInstructions, '#4CAF50'), }, -- 8. 万能修改 { CAtext('🛠️ 万能修改', '#607D8B', '16sp', true), CAbutton('启动万能修改', UniversalModify, '#2196F3'), CAbutton('一键恢复上次修改', RestoreLastModify, '#4CAF50'), CAbutton('查看攻略', ShowUniversalModifyInstructions, '#9C27B0'), }, -- 9. 设置 { CAtext('⚙️ 设置', '#673AB7', '16sp', true), CAswitch('退出脚本', function() if GAME_SPEED_ACTIVE then GameSpeed_Off() end if GLOBAL_SPEED_DATA then GlobalSpeed_Off() end if MONSTER_TAKEOFF_DATA then MonsterTakeoff_Off() end if wukong_invincible_active then WukongInvincible_Off() end if zuilong_gather_data then Zuilong_Gather_Off() end if step_active then StepByStep_Disable() end if ssc_active then SanShengChuiInvincible_Off() end if MONSTER_0HP_LOOP_ACTIVE then StopMonster0HpLoop() end if BUDDHA_LIGHT_ACTIVE then BuddhaLight_Off() end if ZUILONG_NO_COOLDOWN_DATA then Zuilong_NoCooldown_Off() end if ZUILONG_NO_MANACOST_DATA then Zuilong_NoManaCost_Off() end LAST_MODIFY_DATA = nil IS_LOOP_ACTIVE = false TERRAIN_LOOP_ACTIVE = false Lock.unUi() end, function() end), CAtext('欢迎使用', '#2196F3', '14sp', true), CAtext('请勿破坏游戏平衡', '#666666', '12sp', true), }, }) Lock.Ui(invoke, nil, function(err) print(err) end)