-- ==================== 悬浮窗系统(稳定版) ==================== import "android.app.*" import "android.os.*" import "android.widget.*" import "android.view.*" import "android.content.*" import "android.graphics.drawable.*" import "android.graphics.PixelFormat" import "android.animation.ObjectAnimator" import "android.view.animation.DecelerateInterpolator" import "android.graphics.Typeface" import "android.graphics.drawable.GradientDrawable" TEXT_open = 0xFFFF57B0 TEXT_close = 0xFFFFFFFF BG_COLOR = 0xFF3B3C40 BORDER_close = 0xFF2B2D2F BORDER_width = 8 CORNER_RADIUS = 15 context = activity windowManager = context.getSystemService("window") allSwitches = {} -- ==================== 新增:模式切换全局变量 ==================== PC_MODE_ENABLED = false -- 电脑模式(特征码) MOBILE_MODE_ENABLED = false -- 手机模式(指针) -- ==================== 新增:泳池体力修改 ==================== local POOL_ENERGY_ADDRS = nil -- 存储修改过的地址 function createRoundRectBg(fillColor, borderColor, borderWidth, cornerRadius) local shape = GradientDrawable() shape.setShape(GradientDrawable.RECTANGLE) shape.setColor(fillColor) shape.setCornerRadius(cornerRadius) shape.setStroke(borderWidth, borderColor) return shape end function clickAnimation(view) local anim1 = ObjectAnimator.ofFloat(view, "scaleX", 1.2, 0.8, 1.1, 0.9, 1.0) local anim2 = ObjectAnimator.ofFloat(view, "scaleY", 1.2, 0.8, 1.1, 0.9, 1.0) anim1.setDuration(500) anim2.setDuration(500) anim1.start() anim2.start() end function getLayoutParams() local LayoutParams = WindowManager.LayoutParams local layoutParams = luajava.new(LayoutParams) if (Build.VERSION.SDK_INT >= 26) then layoutParams.type = LayoutParams.TYPE_APPLICATION_OVERLAY else layoutParams.type = LayoutParams.TYPE_PHONE end layoutParams.format = PixelFormat.RGBA_8888 layoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE layoutParams.gravity = Gravity.CENTER layoutParams.width = LayoutParams.WRAP_CONTENT layoutParams.height = LayoutParams.WRAP_CONTENT return layoutParams end function showFloatingNotify(title, msg) luajava.runOnUiThread(function() if Inform and Inform.showSuccessNotification_Simplicity then Inform.showSuccessNotification_Simplicity(nil, title, msg, 2000) else toast.black(title .. ":" .. msg, 1) end end) end function createSwitch(name, onFunction, offFunction) local switch = {} local isActive = false local layoutParams = getLayoutParams() layoutParams.x = math.random(200, 500) layoutParams.y = math.random(30, 200) local switchLayout = { LinearLayout; layout_height="fill"; layout_width="fill"; { TextView; layout_width="150"; layout_height="70"; id="switch_" .. name; text=name; textColor=TEXT_close; textSize="13"; gravity="center"; background=createRoundRectBg(BG_COLOR, BORDER_close, BORDER_width, CORNER_RADIUS); padding="8"; typeface=Typeface.DEFAULT_BOLD; }; } local switchView = loadlayout(switchLayout) local textView = switchView.getChildAt(0) local initialX, initialY = 0, 0 local initialTouchX, initialTouchY = 0, 0 switchView.setOnTouchListener(View.OnTouchListener{ onTouch=function(v, event) local action = event.getAction() if action == MotionEvent.ACTION_DOWN then initialX = layoutParams.x initialY = layoutParams.y initialTouchX = event.getRawX() initialTouchY = event.getRawY() return true elseif action == MotionEvent.ACTION_MOVE then local deltaX = event.getRawX() - initialTouchX local deltaY = event.getRawY() - initialTouchY layoutParams.x = initialX + deltaX layoutParams.y = initialY + deltaY windowManager.updateViewLayout(switchView, layoutParams) return true elseif action == MotionEvent.ACTION_UP then local moveDistance = math.sqrt( math.pow(event.getRawX() - initialTouchX, 2) + math.pow(event.getRawY() - initialTouchY, 2) ) if moveDistance < 50 then if isActive then textView.setTextColor(TEXT_close) textView.setBackground(createRoundRectBg(BG_COLOR, BORDER_close, BORDER_width, CORNER_RADIUS)) isActive = false if offFunction then thread(function() local ok, err = pcall(offFunction) if not ok then showFloatingNotify(name, "关闭出错: " .. tostring(err)) else showFloatingNotify(name, "已关闭") end end) else showFloatingNotify(name, "已关闭") end else textView.setTextColor(TEXT_open) textView.setBackground(createRoundRectBg(BG_COLOR, TEXT_open, BORDER_width, CORNER_RADIUS)) isActive = true if onFunction then thread(function() local ok, err = pcall(onFunction) if not ok then showFloatingNotify(name, "开启出错: " .. tostring(err)) else showFloatingNotify(name, "已开启") end end) else showFloatingNotify(name, "已开启") end end clickAnimation(textView) end return true end return false end }) function switch.show() if not switchView:isAttachedToWindow() then windowManager.addView(switchView, layoutParams) clickAnimation(textView) end end function switch.hide() if switchView:isAttachedToWindow() then windowManager.removeView(switchView) end end function switch.setState(state) if state then textView.setTextColor(TEXT_open) textView.setBackground(createRoundRectBg(BG_COLOR, TEXT_open, BORDER_width, CORNER_RADIUS)) isActive = true else textView.setTextColor(TEXT_close) textView.setBackground(createRoundRectBg(BG_COLOR, BORDER_close, BORDER_width, CORNER_RADIUS)) isActive = false end end function switch.getState() return isActive end allSwitches[name] = switch return switch end -- 悬浮窗绑定功能(原有) function createLeftCrystalSwitch() return createSwitch("秒左", function() Zuilong_LeftKill_On() end, function() end) end function createRightCrystalSwitch() return createSwitch("秒右", function() Zuilong_RightKill_On() end, function() end) end function createPerspectiveSwitch() return createSwitch("透视", function() ModelPenetration_On() end, function() ModelPenetration_Off() end) end function createGatherSwitch() return createSwitch("聚怪", function() Zuilong_Gather_On() end, function() Zuilong_Gather_Off() end) end function createStepSwitch() return createSwitch("穿图", function() StepByStep_Enable() end, function() StepByStep_Disable() end) end -- ==================== 新增:电脑模式(特征码)开关 ==================== function createPCSwitch() return createSwitch( "电脑模式", function() PC_MODE_ENABLED = true showCloudNotify("模式切换", "电脑模式(特征码)已开启", true) end, function() PC_MODE_ENABLED = false showCloudNotify("模式切换", "电脑模式(特征码)已关闭", true) end ) end -- ==================== 新增:手机模式(指针)开关 ==================== function createMobileSwitch() return createSwitch( "手机模式", function() MOBILE_MODE_ENABLED = true showCloudNotify("模式切换", "手机模式(指针)已开启", true) end, function() MOBILE_MODE_ENABLED = false showCloudNotify("模式切换", "手机模式(指针)已关闭", true) end ) end local leftSwitch, rightSwitch, perspectiveSwitch, gatherSwitch, stepSwitch, pcSwitch, mobileSwitch = nil, nil, nil, nil, nil, nil, nil function initAllSwitches() leftSwitch = createLeftCrystalSwitch() rightSwitch = createRightCrystalSwitch() perspectiveSwitch = createPerspectiveSwitch() gatherSwitch = createGatherSwitch() stepSwitch = createStepSwitch() pcSwitch = createPCSwitch() mobileSwitch = createMobileSwitch() end function showSwitch(switchName) luajava.runOnUiThread(function() local s = allSwitches[switchName] if s then s.show() end end) end function hideSwitch(switchName) luajava.runOnUiThread(function() local s = allSwitches[switchName] if s then s.hide() end end) end function hideAllSwitches() luajava.runOnUiThread(function() for _, s in pairs(allSwitches) do if s and s.hide then s.hide() end end end) end function allshowSwitches() luajava.runOnUiThread(function() for _, s in pairs(allSwitches) do if s and s.show then s.show() end end end) end -- ==================== 云通知初始化 ==================== loadYunLuaGroup("5C3C4E3813681C4C204C35346F1B4C2F7EFF612D2B22176FF346535E1C0B1E493339036EE15318") function init() stab = _ENV["分页"]; ttitle = _ENV["标题"]; xfcpic = _ENV["悬浮窗图标"] end local Cloud_Note_Url = 'https://sharechain.qq.com/bb8dfff6a3346b24f73fe7c626ae6ec7' local function getCloudContent() local response = gg.makeRequest(Cloud_Note_Url) if not response or not response.content then return nil,nil,nil,"网络错误" end local note_content = response.content:match('"html_content":"(.-)",') if not note_content then return nil,nil,nil,"QQ收藏格式错误" end note_content = note_content:gsub("\\u003C","<"):gsub("\\u003E",">"):gsub("\\u003Cbr%s*/?%s*\\u003E","\n"):gsub("
","\n"):gsub("
",""):gsub(" "," ") local announcement = note_content:match("【公告】(.-)【公告】") local notification = note_content:match("【通知】(.-)【通知】") local qqGroupKey = note_content:match("【joinQQGroup】(.-)【joinQQGroup】") if announcement then announcement = announcement:gsub("<.->",""):gsub("^%s+",""):gsub("%s+$","") end if notification then notification = notification:gsub("<.->",""):gsub("^%s+",""):gsub("%s+$","") end if qqGroupKey then qqGroupKey = qqGroupKey:gsub("<.->",""):gsub("%s+","") end return announcement, notification, qqGroupKey end local announcement, notification, qqGroupKey = getCloudContent() elgg.import("toast") elgg.import("AlGui") import "android.graphics.drawable.GradientDrawable" import "android.widget.LinearLayout" import "android.view.LayoutInflater" import "android.widget.TextView" import "android.widget.Button" import "java.util.Locale" import "android.view.Gravity" import "android.graphics.Typeface" import "irene.window.algui.AlGuiData" import "android.view.animation.Animation" import "irene.window.algui.AlGuiDialogBox" import "irene.window.algui.AlGuiSoundEffect" import "irene.window.algui.AlGuiWindowView" import "irene.window.algui.Tools.VariousTools" local neonColors = { [0]=0xFFff00cc, [1]=0xFFffcc00, [2]=0xFF00ffcc, [3]=0xFFff0066 } luajava.runOnUiThread(function() if AlGui.algui then AlGui.algui.clearBall() AlGui.algui.clearMenu() AlGuiWindowView.clearAllViews(context) gui = AlGui.newGUI(context) else gui = AlGui.GUI(context) end if AlGuiBubbleNotification.bn then Inform = AlGuiBubbleNotification.newInform(context) else Inform = AlGuiBubbleNotification.Inform(context) end AlGuiWindowView.showNeonLightText(context, "YZ科技", neonColors, 15, nil, Gravity.START|Gravity.BOTTOM, 50, 100) end) function showCloudNotify(title, msg, isSuccess) luajava.runOnUiThread(function() if isSuccess then Inform.showSuccessNotification_Simplicity(nil, title, msg, 3000) else Inform.showMessageNotification_Simplicity(nil, title, msg, 3000) end end) end -- ==================== v2.2 视奸模式(单次执行,开关式) ==================== local SHIJIAN_BUSY = false -- 视奸模式 - 切磋(只改当前值为1的地址) function doQieCuo() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber(1135494768, gg.TYPE_DWORD) local cnt = gg.getResultsCount() if cnt and cnt > 0 then local results = gg.getResults(math.min(cnt, 500)) local editList = {} for _, v in ipairs(results) do if v.address and v.address ~= 0 then local targetAddr = v.address + 408 local curVal = gg.getValues({{address = targetAddr, flags = gg.TYPE_DWORD}}) if curVal and curVal[1] and curVal[1].value == 1 then table.insert(editList, {address = targetAddr, flags = gg.TYPE_DWORD, value = 257}) end end end if #editList > 0 then gg.setValues(editList) end end gg.clearResults() end -- 视奸模式 - 状态(只改当前值为1的地址) function doZhuangTai() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber(1223231026, gg.TYPE_DWORD) local cnt = gg.getResultsCount() if cnt and cnt > 0 then local results = gg.getResults(math.min(cnt, 500)) local editList = {} for _, v in ipairs(results) do if v.address and v.address ~= 0 then local targetAddr = v.address - 312 local curVal = gg.getValues({{address = targetAddr, flags = gg.TYPE_DWORD}}) if curVal and curVal[1] and curVal[1].value == 1 then table.insert(editList, {address = targetAddr, flags = gg.TYPE_DWORD, value = 257}) end end end if #editList > 0 then gg.setValues(editList) end end gg.clearResults() end -- 视奸模式 - 私聊(只改当前值为1的地址) function doSiLiao() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber(-1670169661, gg.TYPE_DWORD) local cnt = gg.getResultsCount() if cnt and cnt > 0 then local results = gg.getResults(math.min(cnt, 500)) local editList = {} for _, v in ipairs(results) do if v.address and v.address ~= 0 then local targetAddr = v.address + 0x34 local curVal = gg.getValues({{address = targetAddr, flags = gg.TYPE_DWORD}}) if curVal and curVal[1] and curVal[1].value == 1 then table.insert(editList, {address = targetAddr, flags = gg.TYPE_DWORD, value = 257}) end end end if #editList > 0 then gg.setValues(editList) end end gg.clearResults() end function Shijian_On() if SHIJIAN_BUSY then showCloudNotify("视奸模式", "正在执行中,请稍后...", false) return end SHIJIAN_BUSY = true showCloudNotify("视奸模式", "正在执行...", false) doQieCuo() doZhuangTai() doSiLiao() showCloudNotify("视奸模式", "执行完成", true) SHIJIAN_BUSY = false end function Shijian_Off() showCloudNotify("视奸模式", "无需关闭,再次开启可重新执行", false) end -- ============ 通用变量声明 ============ local LAST_MODIFY_DATA = nil local LAST_SEARCH_VALUE = nil local LAST_MODIFY_COUNT = 0 local sj = {} local LOOP_INTERVAL = 4 local IS_LOOP_ACTIVE = false local TERRAIN_LOOP_ACTIVE = false local TERRAIN_LOOP_INTERVAL = 4 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 zuilong_gather_data = nil local step_active = false local BUDDHA_LIGHT_DATA = nil local BUDDHA_LIGHT_ACTIVE = false local INFINITE_JUMP_ACTIVE = false local INFINITE_JUMP_LIST = nil local MONKEY_INVINCIBLE_KILL_DATA = nil local WUKONG_STRONG_REPLACE_ACTIVE = false local WUKONG_STRONG_REPLACE_VALUE = 8660 local WUKONG_STRONG_REPLACE_DATA = nil local MONKEY_SKILL_DATA = nil local FLAME_MOUNTAIN_DATA = nil local FLAME_MOUNTAIN_ID = 1032 local MODEL_PENETRATION_DATA = nil local ALL_NO_COOLDOWN_DATA = nil local NO_MANA_LIST_ITEMS = nil local ZUILONG_ROLE_INVINCIBLE_ACTIVE = false local ZUILONG_ROLE_INVINCIBLE_DATA = nil local MONSTER_FIX_ACTIVE = false local MONSTER_FIX_INTERVAL = 0.1 local POOL_MODIFY_ADDRS = nil local WHACK_A_MOLE_DATA = nil local WIDE_SCREEN_DATA = nil local SPEED_BUTTON_DATA = nil _72Bian_Active = false _72Bian_Data = {} _72Bian_TargetID = 40 local EAT_ZONGZI_DATA = nil local GM_DATA = nil local WaiZhuan64_GM_DATA = nil local SHUA_WENDIE_DATA = nil local ALL_INVINCIBLE_DATA = nil local leftRoleData = nil local rightRoleData = nil local leftRoleFeatureData = nil local rightRoleFeatureData = nil local SANSHENGCHUI_DATA = nil ALL_SECOND_KILL_LOOP_ACTIVE = false local MAI_DONGXI_ACTIVE = false local MAI_DONGXI_DATA = nil local MOONCAKE_DATA = nil -- ==================== 外传64 GM 功能(开关式) ==================== function WaiZhuan64_GM_Enable() if WaiZhuan64_GM_DATA then return end gg.clearResults() search(101, 4, -2080896) if #sj == 0 then showCloudNotify("外传64 GM", "未找到特征值 101", false) gg.clearResults() return end py1(11, 4, -16) if #sj == 0 then showCloudNotify("外传64 GM", "筛选值 11 失败", false) gg.clearResults() return end py1(-425984, 4, 172) if #sj == 0 then showCloudNotify("外传64 GM", "筛选值 -425984 失败", false) gg.clearResults() return end local modifyList = {} local recordList = {} for _, v in ipairs(sj) do local targetAddr = v.address + 168 local orig = gg.getValues({{address = targetAddr, flags = 4}})[1].value table.insert(recordList, {address = targetAddr, flags = 4, originalValue = orig}) table.insert(modifyList, {address = targetAddr, flags = 4, value = 0}) end if #modifyList == 0 then showCloudNotify("外传64 GM", "无有效修改项", false) gg.clearResults() return end gg.setValues(modifyList) WaiZhuan64_GM_DATA = recordList gg.clearResults() end function WaiZhuan64_GM_Disable() if not WaiZhuan64_GM_DATA then return end local restoreList = {} for _, item in ipairs(WaiZhuan64_GM_DATA) do table.insert(restoreList, {address = item.address, flags = item.flags, value = item.originalValue}) end gg.setValues(restoreList) WaiZhuan64_GM_DATA = nil end function GM_On_Internal() gg.clearResults() search(101, 4, 4) if #sj == 0 then showCloudNotify("GM模式", "未找到特征值 101", false) return end py1(11, 4, -16) if #sj == 0 then showCloudNotify("GM模式", "筛选值 11 失败", false) return end py1(-425984, 4, 172) if #sj == 0 then showCloudNotify("GM模式", "筛选值 -425984 失败", false) return end local modifyList = {} local recordList = {} for _, v in ipairs(sj) do local targetAddr = v.address + 168 local orig = gg.getValues({{address = targetAddr, flags = 4}})[1].value table.insert(recordList, {address = targetAddr, flags = 4, originalValue = orig}) table.insert(modifyList, {address = targetAddr, flags = 4, value = 0}) end if #modifyList == 0 then showCloudNotify("GM模式", "无有效修改项", false) return end gg.setValues(modifyList) GM_DATA = recordList gg.clearResults() end function GM_Off_Internal() if not GM_DATA then return end local restoreList = {} for _, item in ipairs(GM_DATA) do table.insert(restoreList, {address = item.address, flags = item.flags, value = item.originalValue}) end gg.setValues(restoreList) GM_DATA = nil end function GM_On() if GM_DATA or WaiZhuan64_GM_DATA then showCloudNotify("GM模式", "已开启,无需重复操作", false) return end WaiZhuan64_GM_Enable() GM_On_Internal() if GM_DATA or WaiZhuan64_GM_DATA then showCloudNotify("GM模式", "已开启(外传64 + 原版)", true) else showCloudNotify("GM模式", "开启失败,请检查环境", false) end end function GM_Off() if not GM_DATA and not WaiZhuan64_GM_DATA then showCloudNotify("GM模式", "未开启,无需关闭", false) return end WaiZhuan64_GM_Disable() GM_Off_Internal() showCloudNotify("GM模式", "已关闭(已恢复两个GM)", true) end -- ==================== 卖道具功能(自定义输入,写值-1) ==================== function MaiDongXi_On() if MAI_DONGXI_ACTIVE then showCloudNotify("卖道具", "已开启,无需重复操作", false) return end gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.clearResults() -- 搜索特征值 -425984 gg.searchNumber("-425984", gg.TYPE_DWORD) local results = gg.getResults(gg.getResultsCount()) if results == nil or #results == 0 then showCloudNotify("卖道具", "未找到匹配结果", false) gg.clearResults() return end -- 批量读取偏移20和24的值 local readList = {} for i, v in ipairs(results) do table.insert(readList, {address = v.address + 20, flags = gg.TYPE_DWORD}) table.insert(readList, {address = v.address + 24, flags = gg.TYPE_DWORD}) end local readValues = gg.getValues(readList) if not readValues then showCloudNotify("卖道具", "读取内存失败", false) gg.clearResults() return end -- 验证条件 local validAddresses = {} for i = 1, #results do local idx20 = (i - 1) * 2 + 1 local idx24 = (i - 1) * 2 + 2 local val20 = readValues[idx20] and readValues[idx20].value local val24 = readValues[idx24] and readValues[idx24].value if val20 and val24 then if val20 >= 1 and val20 <= 30 and val24 == -491520 then table.insert(validAddresses, results[i].address) end end end gg.clearResults() if #validAddresses == 0 then showCloudNotify("卖道具", "未找到符合条件的地址", false) return end -- 弹出输入框让用户输入自定义数值 local input = gg.prompt( { "请输入要修改的值(将自动写入 输入值-1):" }, { [1] = "1" }, { [1] = "number" } ) if input == nil then showCloudNotify("卖道具", "已取消", false) return end local userInput = tonumber(input[1]) if userInput == nil then showCloudNotify("卖道具", "输入无效,请输入数字", false) return end -- 写入值为 用户输入的值 - 1 local modifyValue = userInput - 1 local setList = {} local recordList = {} for _, addr in ipairs(validAddresses) do local targetAddr = addr + 20 local orig = gg.getValues({{address = targetAddr, flags = gg.TYPE_DWORD}})[1].value table.insert(recordList, {address = targetAddr, flags = gg.TYPE_DWORD, originalValue = orig}) table.insert(setList, {address = targetAddr, flags = gg.TYPE_DWORD, value = modifyValue}) end gg.setValues(setList) MAI_DONGXI_ACTIVE = true MAI_DONGXI_DATA = recordList showCloudNotify("卖道具", string.format("已开启,共修改 %d 个地址,写入值: %d", #setList, modifyValue), true) end function MaiDongXi_Off() if not MAI_DONGXI_ACTIVE or not MAI_DONGXI_DATA then showCloudNotify("卖道具", "未开启,无需关闭", false) return end local restoreList = {} for _, item in ipairs(MAI_DONGXI_DATA) do table.insert(restoreList, { address = item.address, flags = item.flags, value = item.originalValue }) end gg.setValues(restoreList) MAI_DONGXI_ACTIVE = false MAI_DONGXI_DATA = nil showCloudNotify("卖道具", "已关闭,数值已恢复", true) end function ShowMaiDongXiInstructions() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "卖道具使用说明", "1. 进入游戏商城或道具购买界面\n" .. "2. 开启本开关后输入自定义数值\n" .. "3. 脚本会自动搜索并验证条件(偏移20在[1,30]且偏移24为-491520)\n" .. "4. 将偏移20处的值修改为【您输入的值-1】\n\n" .. "示例:输入 5,则写入 4\n" .. "示例:输入 1,则写入 0\n\n" .. "⚠️ 注意:开关式功能,退出商城后建议关闭恢复", "知道了") end) end) end function EatZongzi_On() if EAT_ZONGZI_DATA then showCloudNotify("吃粽子刷分", "已开启,无需重复操作", false) return end gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber('4262', gg.TYPE_DWORD) local results = gg.getResults(gg.getResultCount()) if #results == 0 then showCloudNotify("吃粽子刷分", "未找到特征数据,请确保在粽子活动界面内", false) gg.clearResults() return end local targetList = {} local modifyList = {} for i, v in ipairs(results) do local check1 = gg.getValues({{address = v.address + 8, flags = gg.TYPE_DWORD}}) if check1[1].value == 4263 then local check2 = gg.getValues({{address = v.address + 16, flags = gg.TYPE_DWORD}}) if check2[1].value == 5 then local targetAddr = v.address - 16 local orig = gg.getValues({{address = targetAddr, flags = gg.TYPE_DWORD}})[1].value table.insert(targetList, { address = targetAddr, flags = gg.TYPE_DWORD, originalValue = orig }) table.insert(modifyList, { address = targetAddr, flags = gg.TYPE_DWORD, value = 211, freeze = true }) end end end if #modifyList == 0 then showCloudNotify("吃粽子刷分", "未找到符合条件的地址", false) gg.clearResults() return end gg.addListItems(modifyList) gg.setValues(modifyList) EAT_ZONGZI_DATA = targetList showCloudNotify("吃粽子刷分", "已开启(撞一次桌子得211分,建议刷到2000分即停)", true) gg.clearResults() end function EatZongzi_Off() if not EAT_ZONGZI_DATA then showCloudNotify("吃粽子刷分", "未开启,无需关闭", false) return end local listItems = gg.getListItems() for _, item in ipairs(EAT_ZONGZI_DATA) do for _, li in ipairs(listItems) do if li.address == item.address then gg.removeListItems({li}) break end end end local restoreList = {} for _, item in ipairs(EAT_ZONGZI_DATA) do table.insert(restoreList, { address = item.address, flags = item.flags, value = item.originalValue }) end gg.setValues(restoreList) EAT_ZONGZI_DATA = nil showCloudNotify("吃粽子刷分", "已关闭,数值已恢复", true) end function ShowEatZongziInstructions() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "吃粽子刷分使用说明", "1. 进入游戏,打开粽子活动界面\n2. 点击暂停按钮(进入暂停状态)\n3. 开启本开关\n4. 撞一次桌子即可获得211分\n5. 累计达到2000分即可拿满奖励,请勿刷太高(否则可能被检测)\n\n⚠️ 注意:退出后记得关闭,不然会闪退。", "知道了") end) end) end -- ==================== 修改月饼数量(开关式,特征码验证) ==================== function Mooncake_On() if MOONCAKE_DATA then showCloudNotify("修改月饼数量", "已开启,无需重复操作", false) return end gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) local mainCode = 1836265217 local subCode1 = 1735158881 local subCode2 = 794886145 gg.searchNumber(mainCode, gg.TYPE_DWORD) local count = gg.getResultsCount() if count == 0 then showCloudNotify("修改月饼数量", "未找到主特征码 1836265217", false) gg.clearResults() return end local results = gg.getResults(count) local saveList = {} local recordList = {} for _, v in ipairs(results) do local mainAddr = v.address local sub1Addr = mainAddr + 0x4 local sub2Addr = mainAddr - 0xC local funcAddr = mainAddr - 0xB0 local check = gg.getValues({ {address = sub1Addr, flags = gg.TYPE_DWORD}, {address = sub2Addr, flags = gg.TYPE_DWORD} }) if check[1].value == subCode1 and check[2].value == subCode2 then local orig = gg.getValues({{address = funcAddr, flags = gg.TYPE_DWORD}})[1].value table.insert(recordList, {address = funcAddr, flags = gg.TYPE_DWORD, originalValue = orig}) table.insert(saveList, {address = funcAddr, flags = gg.TYPE_DWORD, value = 800}) end end gg.clearResults() if #saveList == 0 then showCloudNotify("修改月饼数量", "未找到符合副特征码的地址", false) return end gg.setValues(saveList) MOONCAKE_DATA = recordList showCloudNotify("修改月饼数量", string.format("已开启,共修改 %d 处为 800", #saveList), true) end function Mooncake_Off() if not MOONCAKE_DATA then showCloudNotify("修改月饼数量", "未开启,无需关闭", false) return end local restoreList = {} for _, item in ipairs(MOONCAKE_DATA) do table.insert(restoreList, {address = item.address, flags = item.flags, value = item.originalValue}) end gg.setValues(restoreList) MOONCAKE_DATA = nil showCloudNotify("修改月饼数量", "已关闭,数值已恢复", true) end function ShowMooncakeInstructions() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "修改月饼数量使用说明", "1. 进入月饼活动界面\n" .. "2. 开启本开关后自动搜索特征码\n" .. "3. 脚本会验证主特征码 1836265217\n" .. " 副特征码1: 1735158881(偏移+0x4)\n" .. " 副特征码2: 794886145(偏移-0xC)\n" .. "4. 将偏移-0xB0处的值修改为 800\n\n" .. "⚠️ 注意:开关式功能,退出后记得关闭恢复", "知道了") end) end) end -- ==================== 泳池修改(单向,每次开启重新执行,基于140特征,写值40) ==================== function PoolModify_On() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.clearResults() gg.searchNumber(140, gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) local results = gg.getResults(gg.getResultsCount()) if #results == 0 then showCloudNotify("泳池修改", "未搜索到,请确保在泳池活动关卡内", false) return end local valid_addrs = {} for _, r in ipairs(results) do local addr = r.address local vals = gg.getValues({ {address = addr - 28, flags = gg.TYPE_DWORD}, {address = addr - 36, flags = gg.TYPE_DWORD} }) if vals and #vals == 2 and vals[1].value and vals[2].value then if vals[1].value == -491520 and vals[2].value == -491520 then table.insert(valid_addrs, addr) end end end if #valid_addrs == 0 then showCloudNotify("泳池修改", "未找到有效地址", false) return end local writes = {} for _, addr in ipairs(valid_addrs) do table.insert(writes, {address = addr - 40, value = 80, flags = gg.TYPE_DWORD}) end local write_results = gg.setValues(writes) local success_count = 0 if type(write_results) == "table" then for _, res in ipairs(write_results) do if res and res.result == true then success_count = success_count + 1 end end elseif write_results == true then success_count = #writes else success_count = 0 end gg.clearResults() if success_count > 0 then showCloudNotify("泳池修改", string.format("开启成功,修改了 %d (可再次开启重复执行)", success_count), true) else showCloudNotify("泳池修改", "写入失败,请检查权限或游戏保护", false) end end function PoolModify_Off() showCloudNotify("泳池修改", "此功能为单向修改,无需关闭(退出关卡后数值恢复)", false) end function ShowPoolModifyInstructions() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "泳池修改使用说明", "1. 进入泳池活动关卡\n2. 暂停游戏(建议暂停后操作)\n3. 改分数为:点击「开启」修改分数为 800\n4. 改体力为:开启时体力变为无限,关闭后立即结算(建议先开体力再改分数)\n\n⚠️ 注意:进泳池后10s内暂停开启,最佳时间为进图后5s。", "知道了") end) end) end -- ==================== 刷成就(单次执行,点击即生效,无需关闭) ==================== function Achievement_Once() gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber("500", gg.TYPE_DWORD) local results = gg.getResults(9999999) if #results == 0 then showCloudNotify("刷成就", "未搜索到特征数据,请确保在游戏关卡内", false) gg.clearResults() return end local validAddresses = {} for i, v in ipairs(results) do local reads = { {address = v.address - 560, flags = gg.TYPE_DWORD}, {address = v.address - 72, flags = gg.TYPE_DWORD}, {address = v.address - 496, flags = gg.TYPE_DWORD} } local values = gg.getValues(reads) if values and #values == 3 then if values[1].value == 1 and values[2].value == 1 and values[3].value == 40 then table.insert(validAddresses, v) end end if i % 500 == 0 then gg.sleep(0) end end if #validAddresses == 0 then showCloudNotify("刷成就", "未找到符合条件的地址", false) gg.clearResults() return end local modifyList = {} for _, v in ipairs(validAddresses) do local addr448 = v.address - 448 local addr432 = v.address - 432 local addr408 = v.address - 408 local addr148 = v.address - 328 local addr352 = v.address - 352 table.insert(modifyList, {address = addr448, flags = gg.TYPE_DWORD, value = 100}) table.insert(modifyList, {address = addr432, flags = gg.TYPE_DWORD, value = 100}) table.insert(modifyList, {address = addr408, flags = gg.TYPE_DWORD, value = 5}) table.insert(modifyList, {address = addr148, flags = gg.TYPE_DWORD, value = 40}) table.insert(modifyList, {address = addr352, flags = gg.TYPE_DWORD, value = 3}) end gg.setValues(modifyList) showCloudNotify("刷成就", "已执行(效果:MVP、助攻、野怪王子、斩龙)", true) gg.clearResults() end -- ==================== 内存操作函数 ==================== function search(ss,lx,nc,dz1,dz2) if ss~=nil then if lx~=nil then if nc==nil then nc = gg.REGION_C_ALLOC | gg.REGION_OTHER 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) local sl = gg.getResultCount() if sl~=0 then sj = gg.getResults(sl) gg.clearResults() else showCloudNotify("提示","未找到结果",false) end end end end function py1(value,lx,py) if #sj~=nil then local z1={} local 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]=sj[i] end end sj=z2 else showCloudNotify("提示","没有搜索结果",false) end end function xg1(value,lx,py,dj) if #sj~=nil then local 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 showCloudNotify("提示","没有可修改的结果",false) end end function S_Pointer(t_So, t_Offset, _bit) local function getRanges() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v.type:sub(2,2) == 'w' then table.insert(ranges, v) end end return ranges end local function Get_Address(N_So, Offset, ti_bit) local ti = gg.getTargetInfo() local S_list = getRanges() local t = {} local _t local _S = nil if ti_bit then _t = 32 else _t = 4 end for i in pairs(S_list) do local _N = S_list[i].internalName:gsub('^.*/','') if N_So[1] == _N and N_So[2] == S_list[i].state then _S = S_list[i] break end end if _S then t[#t+1] = {} t[#t].address = _S.start + Offset[1] t[#t].flags = _t if #Offset ~= 1 then for i = 2, #Offset do local S = gg.getValues(t) t = {} for _ in pairs(S) do if not ti.x64 then S[_].value = S[_].value & 0xFFFFFFFF end t[#t+1] = {} t[#t].address = S[_].value + Offset[i] t[#t].flags = _t end end end _S = t[#t].address end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end -- ==================== 稳定秒过 ==================== function StableInstantPass() gg.clearResults() local extendedRanges = gg.REGION_C_ALLOC | gg.REGION_OTHER | gg.REGION_ANONYMOUS gg.setRanges(extendedRanges) gg.searchNumber("900000", gg.TYPE_DWORD) local cnt = gg.getResultCount() if cnt > 0 then local results = gg.getResults(cnt) local addrs = {} for i, v in ipairs(results) do addrs[i] = {address = v.address + 80, flags = gg.TYPE_DWORD} end local vals = gg.getValues(addrs) local filtered = {} for i, val in ipairs(vals) do if val.value == 700 then table.insert(filtered, results[i]) end end if #filtered > 0 then local modifyList = {} for _, v in ipairs(filtered) do table.insert(modifyList, {address = v.address - 312, flags = gg.TYPE_DWORD, value = 0}) table.insert(modifyList, {address = v.address - 268, flags = gg.TYPE_DWORD, value = 0}) table.insert(modifyList, {address = v.address - 24, flags = gg.TYPE_DWORD, value = 1}) table.insert(modifyList, {address = v.address - 248, flags = gg.TYPE_DWORD, value = 0}) table.insert(modifyList, {address = v.address - 272, flags = gg.TYPE_DWORD, value = 1}) table.insert(modifyList, {address = v.address - 152, flags = gg.TYPE_DWORD, value = 1}) table.insert(modifyList, {address = v.address, flags = gg.TYPE_DWORD, value = 2000000}) end gg.setValues(modifyList) end end gg.clearResults() search(-121, 4, extendedRanges) if #sj > 0 then py1(-127, 4, 8) py1(-125, 4, 16) py1(-127, 4, -8) py1(-125, 4, -208) py1(-125, 4, -240) py1(-127, 4, -264) if #sj > 0 then xg1(0, 4, -244, false) xg1(0, 4, -212, false) xg1(1, 4, -116, false) xg1(1, 4, -236, false) end end gg.clearResults() search(-294912, 4, extendedRanges) if #sj > 0 then py1(-491520, 4, 8) py1(-425984, 4, 16) py1(-491520, 4, -8) py1(-425984, 4, -208) py1(-425984, 4, -240) py1(-491520, 4, -264) xg1(0, 4, -244, false) xg1(0, 4, -212, false) xg1(1, 4, -116, false) xg1(1, 4, -236, false) end gg.clearResults() end function TerrainIgnorePass() StableInstantPass() showCloudNotify("无视地形秒过","增强版已执行(必定触发入侵奖励)",true) 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 showCloudNotify("设置","间隔已设为"..interval.."秒",true) else showCloudNotify("错误","请输入正数",false) end else showCloudNotify("提示","已取消",false) end end function StartLoopTerrainIgnorePass() if TERRAIN_LOOP_ACTIVE then showCloudNotify("提示","循环已在运行",false) return end TERRAIN_LOOP_ACTIVE = true showCloudNotify("无视地形循环","已开启,间隔"..TERRAIN_LOOP_INTERVAL.."秒",true) local loop_thread = function() while TERRAIN_LOOP_ACTIVE do StableInstantPass() 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 showCloudNotify("无视地形循环","已停止",true) end pcall(loop_thread) end function StopLoopTerrainIgnorePass() if not TERRAIN_LOOP_ACTIVE then showCloudNotify("提示","循环未运行",false) return end TERRAIN_LOOP_ACTIVE = false showCloudNotify("无视地形循环","已停止",true) end function InstantPass() gg.clearResults() search(8000,4) py1(-1,4,48) py1(10,4,24) xg1(9000,4,56,true) search(900000,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.clearResults() showCloudNotify("秒过","单次秒过成功",true) 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 showCloudNotify("设置","间隔已设为"..interval.."秒",true) else showCloudNotify("错误","请输入正数",false) end else showCloudNotify("提示","已取消",false) end end function StartLoopInstantPass() if IS_LOOP_ACTIVE then showCloudNotify("提示","循环已在运行",false) return end IS_LOOP_ACTIVE = true showCloudNotify("秒过循环","已开启,间隔"..LOOP_INTERVAL.."秒",true) local loop_thread = function() while IS_LOOP_ACTIVE do gg.clearResults() search(8000,4) py1(-1,4,48) py1(10,4,24) xg1(9000,4,56,true) search(900000,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.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 showCloudNotify("秒过循环","已停止",true) end pcall(loop_thread) end function StopLoopInstantPass() if not IS_LOOP_ACTIVE then showCloudNotify("提示","循环未运行",false) return end IS_LOOP_ACTIVE = false showCloudNotify("秒过循环","已停止",true) end -- 万能修改 function UniversalModify() local searchValue = gg.prompt({"请输入要搜索的值:"},{"100.0"},{"number"}) if searchValue == nil then showCloudNotify("万能修改","已取消",false) return end gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC|gg.REGION_OTHER) gg.searchNumber(searchValue[1], gg.TYPE_DOUBLE) local results = gg.getResults(10000) local resultCount = #results if resultCount == 0 then showCloudNotify("万能修改","未找到匹配数值",false) return end local modifyCountInput = gg.prompt({"请输入要修改的数量(1-"..resultCount.."):"},{tostring(math.min(150, resultCount))},{"number"}) if modifyCountInput == nil then showCloudNotify("万能修改","已取消",false) 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 local newValue = gg.prompt({"请输入新数值:"},{"999.0"},{"number"}) if newValue == nil then showCloudNotify("万能修改","已取消",false) return end local actionChoice = gg.choice({"✅仅修改数值","❄️修改并冻结","🚫取消"},nil,"请选择操作方式:") if actionChoice == nil or actionChoice == 3 then showCloudNotify("万能修改","已取消",false) 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]) 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 = {"修改","修改并冻结"} showCloudNotify("万能修改","成功"..actionText[actionChoice]..modifyCount.."个数值",true) end function RestoreLastModify() if LAST_MODIFY_DATA == nil then showCloudNotify("恢复","没有可恢复的记录",false) return end local choice = gg.choice({"✅确认恢复","❌取消"},nil,"恢复上次修改?") if choice == 1 then local restoreResults = {} for i = 1, #LAST_MODIFY_DATA do restoreResults[i] = {address = LAST_MODIFY_DATA[i].address, value = LAST_MODIFY_DATA[i].originalValue, flags = gg.TYPE_DOUBLE, freeze = false} end gg.setValues(restoreResults) 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 showCloudNotify("恢复","已恢复"..LAST_MODIFY_COUNT.."个数值",true) LAST_MODIFY_DATA = nil else showCloudNotify("恢复","已取消",false) end end function ShowUniversalModifyInstructions() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "万能修改攻略", "八戒第四次普攻提高伤害(图内开):2.1\n有效值(修改人物属性魔抗等):0.008 0.002 0.013 0.001 0.05", "知道了") end) end) end -- 穿图 function StepByStep_Enable() gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC|gg.REGION_OTHER) local function simpleSearch(v,t) gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC|gg.REGION_OTHER) gg.searchNumber(v,t) return gg.getResultsCount() end local function editAll(v,t) local r = gg.getResults(gg.getResultsCount()) for i=1,#r do r[i].value=v r[i].freeze=false end gg.setValues(r) return #r end if simpleSearch("0.1",gg.TYPE_FLOAT)>0 then editAll("-999",gg.TYPE_FLOAT) step_active = true showCloudNotify("穿图","已开启",true) else showCloudNotify("穿图","开启失败",false) end gg.clearResults() end function StepByStep_Disable() gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC|gg.REGION_OTHER) local function simpleSearch(v,t) gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC|gg.REGION_OTHER) gg.searchNumber(v,t) return gg.getResultsCount() end local function editAll(v,t) local r = gg.getResults(gg.getResultsCount()) for i=1,#r do r[i].value=v r[i].freeze=false end gg.setValues(r) return #r end if simpleSearch("-999",gg.TYPE_FLOAT)>0 then editAll("0.1",gg.TYPE_FLOAT) step_active = false showCloudNotify("穿图","已关闭",true) else showCloudNotify("穿图","关闭失败",false) end gg.clearResults() end -- 内购三生锤 function InternalBloodsucker() gg.clearResults() gg.setRanges(gg.REGION_OTHER) -- 仅搜索 other 区 -- 特征码数据(基于您提供的文件) local MAIN_VAL = 2260 local SUB1_VAL = 2270 local SUB2_VAL = 1362 local OFF_SUB1 = 0x4C0 local OFF_SUB2 = 0x500 local OFF_TARGET = 0x340 -- 搜索主特征码 gg.searchNumber(MAIN_VAL, gg.TYPE_DWORD) local cnt = gg.getResultCount() if cnt == 0 then showCloudNotify("内购三生锤", "未找到主特征码 2260", false) gg.clearResults() return end local results = gg.getResults(cnt) local modifyList = {} local validCount = 0 for _, v in ipairs(results) do -- 验证副特征码1和2 local check = gg.getValues({ {address = v.address + OFF_SUB1, flags = gg.TYPE_DWORD}, {address = v.address + OFF_SUB2, flags = gg.TYPE_DWORD} }) if check[1].value == SUB1_VAL and check[2].value == SUB2_VAL then local targetAddr = v.address + OFF_TARGET table.insert(modifyList, { address = targetAddr, flags = gg.TYPE_DWORD, value = -99999999 }) validCount = validCount + 1 end end if #modifyList > 0 then gg.setValues(modifyList) showCloudNotify("内购三生锤", "开启成功,修改 " .. #modifyList .. " 处", true) else showCloudNotify("内购三生锤", "未找到同时匹配副特征码的地址", false) end gg.clearResults() end -- ==================== 法宝秒怪 ==================== local function modifyFabaosearch(targetValue, newValue) gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) 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) showCloudNotify("法宝秒怪","开启成功",true) 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 -- ==================== v2.5 三生锤无敌属性(开关式) ==================== function SanShengChui_On() if SANSHENGCHUI_DATA then showCloudNotify("三生锤无敌属性", "已开启,无需重复操作", false) return end gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) local MAIN_VAL = 1070176665 local SUB1_VAL = 1069128089 local SUB2_VAL = 40 local OFF_SUB1 = 320 local OFF_SUB2 = 204 local BASE_OFF = 188 local STEP = 8 local COUNT = 12 local NEW_VAL = 99999 gg.searchNumber(MAIN_VAL, gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1, 0) local cnt = gg.getResultsCount() if cnt == 0 then showCloudNotify("三生锤无敌属性", "未找到主特征码,请确认游戏内存区域", false) gg.clearResults() return end local results = gg.getResults(cnt) local targetAddrs = {} for _, r in ipairs(results) do local addr = r.address local check = gg.getValues({ { address = addr + OFF_SUB1, flags = gg.TYPE_DWORD }, { address = addr + OFF_SUB2, flags = gg.TYPE_DWORD } }) if check[1].value == SUB1_VAL and check[2].value == SUB2_VAL then table.insert(targetAddrs, addr) end end if #targetAddrs == 0 then showCloudNotify("三生锤无敌属性", "未找到同时匹配副特征码的地址,可能偏移或数值有变化", false) gg.clearResults() return end local setList = {} local saveList = {} local recordList = {} for _, baseAddr in ipairs(targetAddrs) do for i = 0, COUNT - 1 do local curAddr = baseAddr + BASE_OFF + i * STEP local orig = gg.getValues({{ address = curAddr, flags = gg.TYPE_DWORD }})[1].value table.insert(recordList, { address = curAddr, flags = gg.TYPE_DWORD, originalValue = orig }) local entry = { address = curAddr, flags = gg.TYPE_DWORD, value = NEW_VAL } table.insert(setList, entry) table.insert(saveList, entry) end end gg.setValues(setList) gg.addListItems(saveList) SANSHENGCHUI_DATA = recordList gg.clearResults() local total = #targetAddrs * COUNT showCloudNotify("三生锤无敌属性", string.format("已开启,修改 %d 个地址(%d 个主地址 × %d 个偏移),已保存至保存列表", total, #targetAddrs, COUNT), true) end function SanShengChui_Off() if not SANSHENGCHUI_DATA then showCloudNotify("三生锤无敌属性", "未开启,无需关闭", false) return end local restoreList = {} for _, item in ipairs(SANSHENGCHUI_DATA) do table.insert(restoreList, { address = item.address, flags = item.flags, value = item.originalValue }) end gg.setValues(restoreList) local listItems = gg.getListItems() for _, item in ipairs(SANSHENGCHUI_DATA) do for _, li in ipairs(listItems) do if li.address == item.address and li.flags == item.flags then gg.removeListItems({ li }) break end end end SANSHENGCHUI_DATA = nil showCloudNotify("三生锤无敌属性", "已关闭,所有数值已恢复", true) end -- 游戏加速 function GameSpeed_On() if GAME_SPEED_ACTIVE then showCloudNotify("游戏加速","已开启",false) 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) showCloudNotify("游戏加速","已开启(倍速:"..GAME_SPEED_VALUE..")",true) end function GameSpeed_Off() if not GAME_SPEED_ACTIVE then showCloudNotify("游戏加速","未开启",false) 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) showCloudNotify("游戏加速","已关闭",true) end function SetGameSpeedValue() local input = gg.prompt({"请输入游戏加速倍速(建议1~5倍):"},{tostring(GAME_SPEED_VALUE)},{"number"}) if input == nil then showCloudNotify("设置","已取消",false) return end local newSpeed = tonumber(input[1]) if not newSpeed or newSpeed <= 0 then showCloudNotify("错误","倍速必须大于0",false) 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) showCloudNotify("游戏加速","倍速已更新为"..GAME_SPEED_VALUE.."倍",true) else showCloudNotify("游戏加速","倍速已保存为"..GAME_SPEED_VALUE.."倍",true) end end -- 全局加速 function SetGlobalSpeedMultiplier() local input = gg.prompt({"请输入全局加速倍速(建议1~6倍):"},{tostring(GLOBAL_SPEED_MULTIPLIER)},{"number"}) if input == nil then showCloudNotify("设置","已取消",false) return end local newSpeed = tonumber(input[1]) if not newSpeed or newSpeed <= 0 then showCloudNotify("错误","倍速必须大于0",false) 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 gg.setValues({{address = GLOBAL_SPEED_DATA.address, flags = GLOBAL_SPEED_DATA.flags, value = GLOBAL_SPEED_MULTIPLIER}}) showCloudNotify("全局加速","倍速已更新为"..GLOBAL_SPEED_MULTIPLIER.."倍",true) else showCloudNotify("全局加速","倍速已保存为"..GLOBAL_SPEED_MULTIPLIER.."倍",true) end end function GlobalSpeed_On() if GLOBAL_SPEED_DATA then showCloudNotify("全局加速","已开启",false) return end local t = {'libcocos2djs.so:bss', 'Cb'} local tt = {0xA4698, 0x118, 0x24} local ttt = S_Pointer(t, tt, true) if ttt == nil or ttt == "0x0" then showCloudNotify("全局加速","无法定位地址",false) return end local addr = tonumber(ttt) local flags = gg.TYPE_FLOAT local orig = gg.getValues({{address = addr, flags = flags}})[1].value GLOBAL_SPEED_DATA = {address = addr, flags = flags, originalValue = orig} gg.setValues({{address = addr, flags = flags, value = GLOBAL_SPEED_MULTIPLIER}}) showCloudNotify("全局加速","已开启(倍速:"..GLOBAL_SPEED_MULTIPLIER..")",true) end function GlobalSpeed_Off() if not GLOBAL_SPEED_DATA then showCloudNotify("全局加速","未开启",false) return end gg.setValues({{address = GLOBAL_SPEED_DATA.address, flags = GLOBAL_SPEED_DATA.flags, value = GLOBAL_SPEED_DATA.originalValue}}) GLOBAL_SPEED_DATA = nil showCloudNotify("全局加速","已关闭",true) end -- 猴子无敌秒 function MonkeyInvincibleKill_On() if MONKEY_INVINCIBLE_KILL_DATA then showCloudNotify("猴子无敌秒","已开启",false) return end gg.clearResults() local modifyList = {} local saveData = {} local extendedRanges = gg.REGION_C_ALLOC | gg.REGION_OTHER search(1074921472, 4, extendedRanges) if #sj == 0 then showCloudNotify("猴子无敌秒","未找到无敌特征",false) gg.clearResults() return end py1(-425984, 4, 8) if #sj == 0 then showCloudNotify("猴子无敌秒","无敌特征筛选失败",false) gg.clearResults() return end for _, v in ipairs(sj) do local targetAddr = v.address + 12 local orig = gg.getValues({{address = targetAddr, flags = 4}})[1].value table.insert(saveData, {address = targetAddr, flags = 4, originalValue = orig}) table.insert(modifyList, {address = targetAddr, flags = 4, value = 1}) end search(1078198272, 4, extendedRanges) if #sj == 0 then showCloudNotify("猴子无敌秒","未找到秒杀特征",false) gg.clearResults() return end py1(-491520, 4, 8) if #sj == 0 then showCloudNotify("猴子无敌秒","秒杀特征筛选失败",false) gg.clearResults() return end for _, v in ipairs(sj) do local targetAddr = v.address + 4 local orig = gg.getValues({{address = targetAddr, flags = 4}})[1].value table.insert(saveData, {address = targetAddr, flags = 4, originalValue = orig}) table.insert(modifyList, {address = targetAddr, flags = 4, value = 20786}) end if #modifyList == 0 then showCloudNotify("猴子无敌秒","未生成修改项",false) return end gg.setValues(modifyList) MONKEY_INVINCIBLE_KILL_DATA = saveData showCloudNotify("猴子无敌秒","已开启(无敌+秒杀)",true) gg.clearResults() end function MonkeyInvincibleKill_Off() if not MONKEY_INVINCIBLE_KILL_DATA then showCloudNotify("猴子无敌秒","未开启",false) return end local restoreList = {} for _, item in ipairs(MONKEY_INVINCIBLE_KILL_DATA) do table.insert(restoreList, {address = item.address, flags = item.flags, value = item.originalValue}) end gg.setValues(restoreList) MONKEY_INVINCIBLE_KILL_DATA = nil showCloudNotify("猴子无敌秒","已关闭",true) gg.clearResults() end -- 悟空强普替换 function WukongStrongReplace_On() if WUKONG_STRONG_REPLACE_ACTIVE then showCloudNotify("悟空强普替换","已开启",false) return end gg.clearResults() search(1078198272, 4) if #sj == 0 then showCloudNotify("悟空强普替换","未找到特征数据",false) return end py1(1015, 4, 4) if #sj == 0 then showCloudNotify("悟空强普替换","未找到匹配的技能地址",false) return end local targetAddr = sj[1].address + 4 local orig = gg.getValues({{address = targetAddr, flags = 4}})[1].value local freezeItem = {address = targetAddr, flags = 4, value = WUKONG_STRONG_REPLACE_VALUE, freeze = true} gg.addListItems({freezeItem}) WUKONG_STRONG_REPLACE_DATA = {address = targetAddr, originalValue = orig, flags = 4} WUKONG_STRONG_REPLACE_ACTIVE = true showCloudNotify("悟空强普替换","已开启(技能代码:"..WUKONG_STRONG_REPLACE_VALUE..")",true) gg.clearResults() end function WukongStrongReplace_Off() if not WUKONG_STRONG_REPLACE_ACTIVE then showCloudNotify("悟空强普替换","未开启",false) return end if WUKONG_STRONG_REPLACE_DATA then local listItems = gg.getListItems() for _, li in ipairs(listItems) do if li.address == WUKONG_STRONG_REPLACE_DATA.address then gg.removeListItems({li}) break end end gg.setValues({{address = WUKONG_STRONG_REPLACE_DATA.address, flags = WUKONG_STRONG_REPLACE_DATA.flags, value = WUKONG_STRONG_REPLACE_DATA.originalValue}}) WUKONG_STRONG_REPLACE_DATA = nil end WUKONG_STRONG_REPLACE_ACTIVE = false showCloudNotify("悟空强普替换","已关闭",true) end function SetWukongStrongReplaceValue() local input = gg.prompt({"请输入技能代码(默认8660)"},{tostring(WUKONG_STRONG_REPLACE_VALUE)},{"number"}) if input == nil then showCloudNotify("设置","已取消",false) return end local newCode = tonumber(input[1]) if not newCode then showCloudNotify("错误","请输入有效数字",false) return end WUKONG_STRONG_REPLACE_VALUE = newCode showCloudNotify("悟空强普","技能代码已设置为"..newCode,true) if WUKONG_STRONG_REPLACE_ACTIVE then WukongStrongReplace_Off() WukongStrongReplace_On() end end -- 通天神猴 function MonkeySkillReplace_On() if MONKEY_SKILL_DATA then showCloudNotify("通天神猴","已开启",false) return end gg.clearResults() local modifyRecords = {} gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber("942956337", gg.TYPE_DWORD) local cnt = gg.getResultCount() if cnt == 0 then showCloudNotify("通天神猴","未找到普攻特征",false) return end local results1 = gg.getResults(cnt) local filtered1 = {} for _, v in ipairs(results1) do local checkAddr = v.address + 4 local val = gg.getValues({{address = checkAddr, flags = 4}})[1].value if val == 12848 then filtered1[#filtered1 + 1] = v end end if #filtered1 == 0 then showCloudNotify("通天神猴","普攻特征筛选失败",false) return end local mods1 = { {offset = 400, newVal = 1735290740, flags = 4},{offset = 404, newVal = 1851877748, flags = 4}, {offset = 408, newVal = 1868654954, flags = 4},{offset = 412, newVal = 1601529978, flags = 4}, {offset = 416, newVal = 1818848115, flags = 4},{offset = 420, newVal = 13420, flags = 4}, {offset = 492, newVal = 22, flags = 4},{offset = 496, newVal = 1735290740, flags = 4}, {offset = 500, newVal = 1851877748, flags = 4},{offset = 504, newVal = 1868654954, flags = 4}, {offset = 508, newVal = 1601529978, flags = 4},{offset = 512, newVal = 1818848115, flags = 4}, {offset = 516, newVal = 13676, flags = 4},{offset = 588, newVal = 22, flags = 4}, {offset = 592, newVal = 2054516580, flags = 4},{offset = 596, newVal = 1936613736, flags = 4}, {offset = 600, newVal = 1735288168, flags = 4},{offset = 604, newVal = 1935634278, flags = 4}, {offset = 608, newVal = 1819044203, flags = 4},{offset = 612, newVal = 12849, flags = 4}, {offset = 684, newVal = 22, flags = 4},{offset = 688, newVal = 1634497125, flags = 4}, {offset = 692, newVal = 1752393582, flags = 4},{offset = 696, newVal = 1935634021, flags = 4}, {offset = 700, newVal = 1819044203, flags = 4},{offset = 704, newVal = 909336374, flags = 4}, {offset = 708, newVal = 12848, flags = 4},{offset = 780, newVal = 23, flags = 4}, {offset = 784, newVal = 1735290740, flags = 4},{offset = 788, newVal = 1851877748, flags = 4}, {offset = 792, newVal = 1868654954, flags = 4},{offset = 796, newVal = 1601529978, flags = 4}, {offset = 800, newVal = 1818848115, flags = 4},{offset = 804, newVal = 3158380, flags = 4}, {offset = 972, newVal = 17, flags = 4},{offset = 976, newVal = 1634497125, flags = 4}, {offset = 980, newVal = 1752393582, flags = 4},{offset = 984, newVal = 1935634021, flags = 4}, {offset = 988, newVal = 1819044203, flags = 4},{offset = 992, newVal = 50, flags = 4}, {offset = 996, newVal = 0, flags = 4},{offset = 396, newVal = 22, flags = 4}, } for _, r in ipairs(filtered1) do for _, m in ipairs(mods1) do local targetAddr = r.address + m.offset local orig = gg.getValues({{address = targetAddr, flags = m.flags}})[1].value table.insert(modifyRecords, {address = targetAddr, flags = m.flags, originalValue = orig}) gg.setValues({{address = targetAddr, flags = m.flags, value = m.newVal}}) end end gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber("909128031", gg.TYPE_DWORD) local cnt2 = gg.getResultCount() if cnt2 == 0 then showCloudNotify("通天神猴","未找到技能特征,普攻已改",false) for _, rec in ipairs(modifyRecords) do gg.setValues({{address = rec.address, flags = rec.flags, value = rec.originalValue}}) end return end local results2 = gg.getResults(cnt2) local filtered2 = {} for _, v in ipairs(results2) do local checkAddr = v.address - 4 local val = gg.getValues({{address = checkAddr, flags = 4}})[1].value if val == 862743657 then filtered2[#filtered2 + 1] = v end end if #filtered2 == 0 then showCloudNotify("通天神猴","技能特征筛选失败,普攻已改",false) for _, rec in ipairs(modifyRecords) do gg.setValues({{address = rec.address, flags = rec.flags, value = rec.originalValue}}) end return end local mods2 = { {offset = 112, newVal = 1735290740, flags = 4},{offset = 116, newVal = 1851877748, flags = 4}, {offset = 120, newVal = 1868654954, flags = 4},{offset = 124, newVal = 1601529978, flags = 4}, {offset = 128, newVal = 1818848115, flags = 4},{offset = 132, newVal = 3223916, flags = 4}, {offset = -372, newVal = 17, flags = 4},{offset = -368, newVal = 1702193516, flags = 4}, {offset = -364, newVal = 1936671346, flags = 4},{offset = -360, newVal = 1802723187, flags = 4}, {offset = -356, newVal = 829189225, flags = 4},{offset = -352, newVal = 48, flags = 4}, {offset = -348, newVal = 0, flags = 4},{offset = 108, newVal = 23, flags = 4}, } for _, r in ipairs(filtered2) do for _, m in ipairs(mods2) do local targetAddr = r.address + m.offset local orig = gg.getValues({{address = targetAddr, flags = m.flags}})[1].value table.insert(modifyRecords, {address = targetAddr, flags = m.flags, originalValue = orig}) gg.setValues({{address = targetAddr, flags = m.flags, value = m.newVal}}) end end if #modifyRecords == 0 then showCloudNotify("通天神猴","未生成修改项",false) return end MONKEY_SKILL_DATA = modifyRecords showCloudNotify("通天神猴","已开启(替换普攻+技能)",true) gg.clearResults() end function MonkeySkillReplace_Off() if not MONKEY_SKILL_DATA then showCloudNotify("通天神猴","未开启",false) return end local restoreList = {} for _, item in ipairs(MONKEY_SKILL_DATA) do restoreList[#restoreList + 1] = {address = item.address, flags = item.flags, value = item.originalValue} end gg.setValues(restoreList) MONKEY_SKILL_DATA = nil showCloudNotify("通天神猴","已关闭",true) gg.clearResults() end -- 模型透视 function ModelPenetration_On() if MODEL_PENETRATION_DATA then showCloudNotify("模型透视","已开启",false) return end gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber("876899620", gg.TYPE_DWORD) local count = gg.getResultCount() if count == 0 then showCloudNotify("模型透视","未找到特征",false) gg.clearResults() return end local results = gg.getResults(count) gg.clearResults() local filtered = {} local checkAddrs = {} for i, v in ipairs(results) do checkAddrs[i] = {address = v.address + 4, flags = gg.TYPE_DWORD} end local checkVals = gg.getValues(checkAddrs) for i, val in ipairs(checkVals) do if val.value == 0 then table.insert(filtered, results[i]) end end if #filtered == 0 then showCloudNotify("模型透视","特征匹配失败",false) return end local modifyList = {} local recordList = {} for _, addrInfo in ipairs(filtered) do local targetAddr = addrInfo.address + 52 local orig = gg.getValues({{address = targetAddr, flags = gg.TYPE_DWORD}})[1].value table.insert(recordList, {address = targetAddr, flags = gg.TYPE_DWORD, originalValue = orig}) table.insert(modifyList, {address = targetAddr, flags = gg.TYPE_DWORD, value = 257, freeze = true}) end gg.addListItems(modifyList) gg.setValues(modifyList) MODEL_PENETRATION_DATA = recordList showCloudNotify("模型透视","已开启,修改"..#modifyList.."处",true) end function ModelPenetration_Off() if not MODEL_PENETRATION_DATA then showCloudNotify("模型透视","未开启",false) return end local restoreList = {} for _, item in ipairs(MODEL_PENETRATION_DATA) do table.insert(restoreList, {address = item.address, flags = item.flags, value = item.originalValue}) end gg.setValues(restoreList) local currentList = gg.getListItems() for _, item in ipairs(MODEL_PENETRATION_DATA) do for _, li in ipairs(currentList) do if li.address == item.address and li.flags == item.flags then gg.removeListItems({li}) break end end end MODEL_PENETRATION_DATA = nil showCloudNotify("模型透视","已关闭",true) gg.clearResults() end -- 全员技能无冷却 function AllNoCooldown_On() if ALL_NO_COOLDOWN_DATA then showCloudNotify("全员无冷却","已开启",false) return end gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber("2680", gg.TYPE_DWORD) local resultCount = gg.getResultCount() if resultCount == 0 then showCloudNotify("全员无冷却","未找到冷却特征",false) gg.clearResults() return end local results = gg.getResults(resultCount) local modifyList = {} local recordList = {} for _, v in ipairs(results) do local addr2680 = v.address local verifyAddr = addr2680 - 16 local verifyVal = gg.getValues({{address = verifyAddr, flags = gg.TYPE_DWORD}})[1].value if verifyVal == 1000 then local checkAddr = addr2680 + 24 local checkVal = gg.getValues({{address = checkAddr, flags = gg.TYPE_DWORD}})[1].value if checkVal == 4 then local targetAddr = addr2680 - 8 local origVal = gg.getValues({{address = targetAddr, flags = gg.TYPE_DWORD}})[1].value table.insert(recordList, {address = targetAddr, flags = gg.TYPE_DWORD, originalValue = origVal}) table.insert(modifyList, {address = targetAddr, flags = gg.TYPE_DWORD, value = 0}) end end end if #modifyList == 0 then showCloudNotify("全员无冷却","没有满足条件的地址",false) gg.clearResults() return end gg.setValues(modifyList) ALL_NO_COOLDOWN_DATA = recordList showCloudNotify("全员无冷却","已开启,共修改"..#modifyList.."处",true) gg.clearResults() end function AllNoCooldown_Off() if not ALL_NO_COOLDOWN_DATA then showCloudNotify("全员无冷却","未开启",false) return end local restoreList = {} for _, item in ipairs(ALL_NO_COOLDOWN_DATA) do table.insert(restoreList, {address = item.address, flags = item.flags, value = item.originalValue}) end gg.setValues(restoreList) ALL_NO_COOLDOWN_DATA = nil showCloudNotify("全员无冷却","已关闭",true) gg.clearResults() end -- 角色无蓝耗 function NoManaCost_On() if NO_MANA_LIST_ITEMS then showCloudNotify("无蓝耗","已开启",false) return end gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber("500", gg.TYPE_DWORD) local count = gg.getResultCount() if count == 0 then showCloudNotify("无蓝耗","未找到数据",false) gg.clearResults() return end local results = gg.getResults(count) gg.clearResults() local filters = {{"-425984", "12"}, {"-425984", "20"}, {"-425984", "28"}} for _, f in ipairs(filters) do local tmp = {} for _, v in ipairs(results) do tmp[#tmp+1] = {address = v.address + tonumber(f[2]), flags = gg.TYPE_DWORD} end tmp = gg.getValues(tmp) local filtered = {} for i, val in ipairs(tmp) do if tostring(val.value) == f[1] then filtered[#filtered+1] = results[i] end end results = filtered if #results == 0 then break end end if #results == 0 then showCloudNotify("无蓝耗","特征匹配失败",false) return end local itemsToAdd = {} local backup = {} for _, addrInfo in ipairs(results) do local targetAddr = addrInfo.address + 24 local orig = gg.getValues({{address = targetAddr, flags = gg.TYPE_DWORD}})[1].value table.insert(backup, {address = targetAddr, original = orig, flags = gg.TYPE_DWORD}) table.insert(itemsToAdd, {address = targetAddr, flags = gg.TYPE_DWORD, value = 1, freeze = false}) end local writeList = {} for _, item in ipairs(itemsToAdd) do writeList[#writeList+1] = {address = item.address, flags = item.flags, value = item.value} end gg.setValues(writeList) gg.addListItems(itemsToAdd) NO_MANA_LIST_ITEMS = {addedItems = itemsToAdd, backup = backup} showCloudNotify("无蓝耗","已开启,共"..#itemsToAdd.."项",true) gg.clearResults() end function NoManaCost_Off() if not NO_MANA_LIST_ITEMS then showCloudNotify("无蓝耗","未开启",false) return end local currentList = gg.getListItems() for _, added in ipairs(NO_MANA_LIST_ITEMS.addedItems) do for _, li in ipairs(currentList) do if li.address == added.address and li.flags == added.flags then gg.removeListItems({li}) break end end end local restoreList = {} for _, bk in ipairs(NO_MANA_LIST_ITEMS.backup) do restoreList[#restoreList+1] = {address = bk.address, flags = bk.flags, value = bk.original} end gg.setValues(restoreList) NO_MANA_LIST_ITEMS = nil showCloudNotify("无蓝耗","已关闭",true) end local function BothOn() NoManaCost_On() AllNoCooldown_On() end local function BothOff() NoManaCost_Off() AllNoCooldown_Off() end -- 坠龙角色无敌 function ZuilongRoleInvincible_On() if ZUILONG_ROLE_INVINCIBLE_ACTIVE then showCloudNotify("坠龙角色无敌","已开启",false) return end gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber("500", gg.TYPE_DWORD) local count = gg.getResultCount() if count == 0 then showCloudNotify("坠龙角色无敌","未找到特征",false) gg.clearResults() return end local results = gg.getResults(count) local validAddrs = {} local origData = {} for _, v in ipairs(results) do local addr = v.address local check = gg.getValues({ {address = addr + 4, flags = gg.TYPE_DWORD}, {address = addr - 4, flags = gg.TYPE_DWORD}, {address = addr - 76, flags = gg.TYPE_DWORD}, {address = addr + 12, flags = gg.TYPE_DWORD}, {address = addr - 12, flags = gg.TYPE_DWORD}, {address = addr - 16, flags = gg.TYPE_DWORD} }) local c1, c2, c3, c4, c5, c6 = check[1].value, check[2].value, check[3].value, check[4].value, check[5].value, check[6].value if c1 == -491520 and c2 == -262026 and c3 == -262026 and c4 == -425984 and c5 == -425984 and c6 == 0 then table.insert(validAddrs, addr) local targetAddr = addr + 16 local origVal = gg.getValues({{address = targetAddr, flags = gg.TYPE_DWORD}})[1].value table.insert(origData, {address = targetAddr, originalValue = origVal, flags = gg.TYPE_DWORD}) end end if #validAddrs == 0 then showCloudNotify("坠龙角色无敌","未找到满足条件的地址",false) gg.clearResults() return end local modifyList = {} for _, addr in ipairs(validAddrs) do table.insert(modifyList, {address = addr + 16, flags = gg.TYPE_DWORD, value = 1}) end gg.setValues(modifyList) ZUILONG_ROLE_INVINCIBLE_DATA = origData ZUILONG_ROLE_INVINCIBLE_ACTIVE = true showCloudNotify("坠龙角色无敌","已开启,共修改"..#modifyList.."处",true) gg.clearResults() end function ZuilongRoleInvincible_Off() if not ZUILONG_ROLE_INVINCIBLE_ACTIVE then showCloudNotify("坠龙角色无敌","未开启",false) return end if ZUILONG_ROLE_INVINCIBLE_DATA and #ZUILONG_ROLE_INVINCIBLE_DATA > 0 then local restoreList = {} for _, item in ipairs(ZUILONG_ROLE_INVINCIBLE_DATA) do table.insert(restoreList, {address = item.address, flags = item.flags, value = item.originalValue}) end gg.setValues(restoreList) showCloudNotify("坠龙角色无敌","已关闭,已恢复"..#restoreList.."处",true) else showCloudNotify("坠龙角色无敌","未找到可恢复数据",false) end ZUILONG_ROLE_INVINCIBLE_ACTIVE = false ZUILONG_ROLE_INVINCIBLE_DATA = nil gg.clearResults() end -- 火焰山替换主线关卡(单次执行,保留开关,每次开启重新执行) function FlameMountain_On() gg.clearResults() local modifyList = {} local ranges = gg.REGION_C_ALLOC | gg.REGION_OTHER gg.setRanges(ranges) -- 搜索特征 9010 gg.searchNumber("9010", gg.TYPE_DWORD) local cnt1 = gg.getResultCount() if cnt1 > 0 then local results1 = gg.getResults(cnt1) for _, v in ipairs(results1) do local addr = v.address local val1 = gg.getValues({{address = addr + 4, flags = gg.TYPE_DWORD}})[1].value if val1 == -491520 then local val2 = gg.getValues({{address = addr + 16, flags = gg.TYPE_DWORD}})[1].value if val2 == -1 then local val3 = gg.getValues({{address = addr + 20, flags = gg.TYPE_DWORD}})[1].value if val3 == -491520 then table.insert(modifyList, {address = addr, flags = gg.TYPE_DWORD, value = FLAME_MOUNTAIN_ID}) end end end end end -- 搜索特征 3005 gg.clearResults() gg.setRanges(ranges) gg.searchNumber("3005", gg.TYPE_DWORD) local cnt2 = gg.getResultCount() if cnt2 > 0 then local results2 = gg.getResults(cnt2) for _, v in ipairs(results2) do local addr = v.address local val1 = gg.getValues({{address = addr + 4, flags = gg.TYPE_DWORD}})[1].value if val1 == -491520 then local val2 = gg.getValues({{address = addr + 16, flags = gg.TYPE_DWORD}})[1].value if val2 == -1 then local val3 = gg.getValues({{address = addr + 20, flags = gg.TYPE_DWORD}})[1].value if val3 == -491520 then table.insert(modifyList, {address = addr, flags = gg.TYPE_DWORD, value = FLAME_MOUNTAIN_ID}) end end end end end if #modifyList == 0 then showCloudNotify("火焰山替换", "未找到组队特征,请确保在组队界面开启", false) gg.clearResults() return end gg.setValues(modifyList) gg.clearResults() showCloudNotify("火焰山替换", string.format("已执行,修改 %d 处,关卡ID: %d(可重复开启)", #modifyList, FLAME_MOUNTAIN_ID), true) end function FlameMountain_Off() -- 单次执行功能,关闭时不恢复数据 showCloudNotify("火焰山替换", "单次执行功能,关闭无影响(再次开启可重新执行)", false) end function SetFlameMountainID() local input = gg.prompt({"请输入关卡ID(默认1032代表火焰山)"},{tostring(FLAME_MOUNTAIN_ID)},{"number"}) if input == nil then showCloudNotify("设置","已取消",false) return end local newID = tonumber(input[1]) if not newID then showCloudNotify("错误","请输入有效数字",false) return end FLAME_MOUNTAIN_ID = newID showCloudNotify("火焰山","关卡ID已设置为 "..newID..",请重新开启开关生效",true) end -- 坠龙聚怪、秒水晶 function Zuilong_Gather_On() if zuilong_gather_data then showCloudNotify("聚怪","已开启",false) return end gg.clearResults() search(2139095040,4) if #sj == 0 then showCloudNotify("聚怪","未找到聚怪数据",false) 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 showCloudNotify("聚怪","已开启",true) gg.clearResults() end function Zuilong_Gather_Off() if not zuilong_gather_data then showCloudNotify("聚怪","未开启",false) return end for _, item in ipairs(zuilong_gather_data) do gg.removeListItems({item}) end zuilong_gather_data = nil showCloudNotify("聚怪","已关闭",true) end function Zuilong_LeftKill_On() gg.clearResults() search(50000, 4) if #sj == 0 then showCloudNotify("秒左","未找到水晶血量",false) return end py1(1, 4, 8) py1(60, 4, 920) xg1(0, 4, -32, false) search(2139095040, 4) if #sj == 0 then showCloudNotify("秒左","未找到顺左数据",false) 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) showCloudNotify("秒左","已执行",true) gg.clearResults() end function Zuilong_RightKill_On() gg.clearResults() search(50000, 4) if #sj == 0 then showCloudNotify("秒右","未找到水晶血量",false) return end py1(1, 4, 8) py1(60, 4, 920) xg1(0, 4, -32, false) search(2139095040, 4) if #sj == 0 then showCloudNotify("秒右","未找到顺右数据",false) 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) showCloudNotify("秒右","已执行",true) gg.clearResults() end -- ==================== 72变功能(特征码版 - 基于101) ==================== local _72BIAN_SEARCH = 101 local _72BIAN_OFFSET_CHECK1 = -40 local _72BIAN_CHECK1_MIN = 1 local _72BIAN_CHECK1_MAX = 130 local _72BIAN_OFFSET_CHECK2 = -36 local _72BIAN_CHECK2_VALUE = -491520 local _72BIAN_OFFSET_TARGET = -40 -- 目标地址 = 搜索结果地址 + 这个偏移 function _72Bian_Enable(targetID) if _72Bian_Active then _72Bian_Disable() end gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) -- 搜索特征码 101 gg.searchNumber(tostring(_72BIAN_SEARCH), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) local mainCount = gg.getResultsCount() if mainCount == 0 then showCloudNotify("72变", "未找到特征码 101,请确保在训练营或关卡内", false) gg.clearResults() return false end local mainResults = gg.getResults(mainCount) -- 批量读取两个偏移处的值 local checkList = {} for i, v in ipairs(mainResults) do local addr = v.address table.insert(checkList, {address = addr + _72BIAN_OFFSET_CHECK1, flags = gg.TYPE_DWORD}) table.insert(checkList, {address = addr + _72BIAN_OFFSET_CHECK2, flags = gg.TYPE_DWORD}) end local checkValues = gg.getValues(checkList) -- 筛选符合条件的地址,并收集目标地址 local targetAddrs = {} local idx = 1 for i = 1, #mainResults do local val1 = checkValues[idx].value local val2 = checkValues[idx + 1].value idx = idx + 2 -- 验证条件:val1 在 1~130 之间,val2 等于 -491520 if val1 >= _72BIAN_CHECK1_MIN and val1 <= _72BIAN_CHECK1_MAX and val2 == _72BIAN_CHECK2_VALUE then local targetAddr = mainResults[i].address + _72BIAN_OFFSET_TARGET table.insert(targetAddrs, targetAddr) end end if #targetAddrs == 0 then showCloudNotify("72变", "未找到满足条件的地址(偏移-40不在1~130或-36不为-491520)", false) gg.clearResults() return false end -- 修改目标地址的值(英雄ID) local edits = {} _72Bian_Data = {} for _, addr in ipairs(targetAddrs) do local orig = gg.getValues({{address = addr, flags = gg.TYPE_DWORD}})[1].value table.insert(_72Bian_Data, {address = addr, flags = gg.TYPE_DWORD, originalValue = orig}) table.insert(edits, {address = addr, flags = gg.TYPE_DWORD, value = targetID}) end gg.setValues(edits) _72Bian_Active = true _72Bian_TargetID = targetID showCloudNotify("72变", string.format("已开启(特征码101模式),英雄ID修改为 %d,共修改 %d 处", targetID, #edits), true) gg.clearResults() return true end function _72Bian_Disable() if not _72Bian_Active then showCloudNotify("72变", "未开启,无需关闭", false) return end if #_72Bian_Data == 0 then _72Bian_Active = false showCloudNotify("72变", "无数据可恢复", false) return end local restoreList = {} for _, item in ipairs(_72Bian_Data) do table.insert(restoreList, {address = item.address, flags = item.flags, value = item.originalValue}) end gg.setValues(restoreList) _72Bian_Data = {} _72Bian_Active = false showCloudNotify("72变", "已关闭,已恢复原始英雄", true) end function SeventyTwo_Modify(targetID) return _72Bian_Enable(targetID) end function SeventyTwo_Restore() _72Bian_Disable() end function new72Bian_set(targetID) if _72Bian_Active and _72Bian_TargetID == targetID then showCloudNotify("72变", "已是该英雄,无需重复修改", false) return true end if _72Bian_Active then _72Bian_Disable() end return _72Bian_Enable(targetID) end function SeventyTwo_Custom() local input = gg.prompt({"请输入英雄ID(数字)"}, {""}, {"number"}) if input and input[1] then local id = tonumber(input[1]) if id then _72Bian_TargetID = id if _72Bian_Active then _72Bian_Enable(id) else showCloudNotify("72变", "目标ID已保存为 " .. id .. ",请开启开关生效", true) end else showCloudNotify("72变", "输入无效", false) end end end function ShowHeroIDTable() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "英雄ID参考表(完整版)", "━━━ 初始角色 ━━━\n" .. "1-孙悟空(原皮) 2-唐僧 3-猪八戒 4-沙悟净\n\n" .. "━━━ 传说/限定英雄 ━━━\n" .. "40-通天教主 41-通天教主(皮肤) 51-斗战胜佛 52-斗战胜佛(皮肤)\n" .. "61-后羿 62-后羿(皮肤) 71-六耳猕猴 72-六耳猕猴(皮肤)\n" .. "80-真武大帝 81-真武大帝(皮肤) 89-东皇太一 90-东皇太一(皮肤)\n" .. "98-帝俊 99-帝俊(皮肤)\n\n" .. "━━━ 其他英雄 ━━━\n" .. "103-鹿 104-鹿(皮肤) 107-伏羲 108-女土蝠 109-女土蝠(皮肤)\n\n" .. "━━━ 使用说明 ━━━\n" .. "1️⃣ 必须在训练营或关卡内使用\n" .. "2️⃣ 孙悟空必须穿原皮肤\n" .. "3️⃣ 修改后切图或下一关会失效,需重新开启\n" .. "4️⃣ 点击【恢复原始英雄】可改回孙悟空(1)", "知道了") end) end) end function ShowSeventyTwoInstructions() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "72变功能使用说明", "━━━ 功能原理 ━━━\n" .. "通过修改内存中的英雄ID数据,实现角色替换\n\n" .. "━━━ 使用步骤 ━━━\n" .. "1️⃣ 进入训练营或任意关卡\n" .. "2️⃣ 孙悟空必须装备【原皮肤】(重要!)\n" .. "3️⃣ 点击「自定义修改」输入英雄ID\n" .. " 或直接点击快捷开关(如:变通天教主)\n" .. "4️⃣ 修改成功后立即生效\n\n" .. "━━━ 注意事项 ━━━\n" .. "⚠️ 修改后切图、下一关或死亡后会失效\n" .. "⚠️ 失效后重新点击开关即可\n" .. "⚠️ 本功能不冻结、不保存地址\n" .. "⚠️ 关闭脚本或重启游戏自动恢复\n" .. "⚠️ 部分英雄技能可能不完整,属正常现象\n\n" .. "━━━ 恢复方法 ━━━\n" .. "点击【恢复原始英雄】即可变回孙悟空(1)", "知道了") end) end) end -- 佛光美化 local DEFAULT_BUDDHA_SKILL = 13678 local JIANGMO_SKILL = 13166 function BuddhaLight_On() if BUDDHA_LIGHT_ACTIVE then showCloudNotify("佛光美化","已开启",false) return end gg.clearResults() gg.setRanges(2080896) gg.searchNumber("1635084391", gg.TYPE_DWORD) local count = gg.getResultCount() if count == 0 then showCloudNotify("佛光美化","未找到佛光数据",false) 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 showCloudNotify("佛光美化","未找到降魔之光技能",false) 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 showCloudNotify("佛光美化","已开启(降魔→双龙)",true) gg.clearResults() end function BuddhaLight_Off() if not BUDDHA_LIGHT_ACTIVE then showCloudNotify("佛光美化","未开启",false) return end if not BUDDHA_LIGHT_DATA then showCloudNotify("佛光美化","未找到原始数据",false) 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 showCloudNotify("佛光美化","已关闭",true) end function BuddhaLight_Custom() local input = gg.prompt({"请输入技能代码(双龙戏珠13678,琉璃法环14190,菩提圣印14446,万法归宗14702)"},{tostring(DEFAULT_BUDDHA_SKILL)},{"number"}) if input == nil then showCloudNotify("自定义","已取消",false) return end local newCode = tonumber(input[1]) if not newCode then showCloudNotify("错误","请输入有效数字",false) return end if not BUDDHA_LIGHT_ACTIVE then showCloudNotify("错误","请先开启佛光美化",false) return end if not BUDDHA_LIGHT_DATA then showCloudNotify("错误","未找到佛光数据",false) 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) showCloudNotify("佛光美化","技能已自定义为"..newCode,true) end -- 无限跳跃 function InfiniteJump_On() if INFINITE_JUMP_ACTIVE then showCloudNotify("无限跳跃","已开启",false) return end gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber(750, 4) local count = gg.getResultCount() if count == 0 then showCloudNotify("无限跳跃","未找到特征",false) gg.clearResults() return end local results = gg.getResults(count) local addrs = {} for _, r in ipairs(results) do addrs[#addrs + 1] = {address = r.address - 32, flags = 4} end local values = gg.getValues(addrs) local filtered = {} for i, v in ipairs(values) do if v.value == 10 then filtered[#filtered + 1] = results[i] end end if #filtered == 0 then showCloudNotify("无限跳跃","特征匹配失败",false) gg.clearResults() return end INFINITE_JUMP_LIST = {} local freezeItems = {} for _, addrInfo in ipairs(filtered) do local targetAddr = addrInfo.address - 56 local item = {address = targetAddr, flags = 4, value = 0, freeze = true} freezeItems[#freezeItems + 1] = item INFINITE_JUMP_LIST[#INFINITE_JUMP_LIST + 1] = item end gg.addListItems(freezeItems) INFINITE_JUMP_ACTIVE = true showCloudNotify("无限跳跃","已开启(冻结"..#freezeItems.."处)",true) gg.clearResults() end function InfiniteJump_Off() if not INFINITE_JUMP_ACTIVE then showCloudNotify("无限跳跃","未开启",false) return end if INFINITE_JUMP_LIST then for _, item in ipairs(INFINITE_JUMP_LIST) do gg.removeListItems({item}) end INFINITE_JUMP_LIST = nil end INFINITE_JUMP_ACTIVE = false showCloudNotify("无限跳跃","已关闭",true) end -- 定怪功能 function MonsterFix_Once() gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber(750, 4) local count = gg.getResultCount() if count == 0 then gg.clearResults() return end local results = gg.getResults(count) local validAddrs = {} for _, v in ipairs(results) do local val = gg.getValues({{address = v.address - 32, flags = gg.TYPE_DWORD}})[1].value if val == 10 then val = gg.getValues({{address = v.address + 4, flags = gg.TYPE_DWORD}})[1].value if val == -491520 then val = gg.getValues({{address = v.address + 132, flags = gg.TYPE_DWORD}})[1].value if val == -425984 then table.insert(validAddrs, v.address) end end end end if #validAddrs == 0 then gg.clearResults() return end local writeList = {} for _, addr in ipairs(validAddrs) do table.insert(writeList, {address = addr + 496, flags = gg.TYPE_DWORD, value = 1}) end gg.setValues(writeList) gg.clearResults() end function StartMonsterFixLoop() if MONSTER_FIX_ACTIVE then showCloudNotify("定怪","循环已在运行",false) return end MONSTER_FIX_ACTIVE = true showCloudNotify("定怪","已开启,每"..MONSTER_FIX_INTERVAL.."秒执行",true) local loop_thread = function() while MONSTER_FIX_ACTIVE do MonsterFix_Once() if MONSTER_FIX_ACTIVE then gg.sleep(MONSTER_FIX_INTERVAL * 1000) end end showCloudNotify("定怪","已停止",true) end pcall(loop_thread) end function StopMonsterFixLoop() if not MONSTER_FIX_ACTIVE then showCloudNotify("定怪","未运行",false) return end MONSTER_FIX_ACTIVE = false showCloudNotify("定怪","已关闭",true) end -- ==================== 活动专区 ==================== -- 打地鼠增加时长(原极速版,正式版) function WhackAMole_On() if WHACK_A_MOLE_DATA then showCloudNotify("打地鼠增加时长", "已开启,无需重复操作", false) return end gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) local searchValue = -1829587348619263 local verifyValue = -2111062325329920 local modifyValue = -8000 gg.searchNumber(tostring(searchValue), gg.TYPE_QWORD, false, gg.SIGN_EQUAL, 0, -1) local results = gg.getResults(9999990) if #results == 0 then showCloudNotify("打地鼠增加时长", "未找到匹配值", false) gg.clearResults() return end local saveList = {} local modifyList = {} for _, result in ipairs(results) do local verifyAddr = result.address + 40 local verifyVal = gg.getValues({{address = verifyAddr, flags = gg.TYPE_QWORD}})[1].value if verifyVal == verifyValue then local targetAddr = result.address + 64 local currentVal = gg.getValues({{address = targetAddr, flags = gg.TYPE_DWORD}})[1].value if currentVal > 1 and currentVal < 2000 then table.insert(saveList, { address = targetAddr, flags = gg.TYPE_DWORD, originalValue = currentVal }) table.insert(modifyList, { address = targetAddr, flags = gg.TYPE_DWORD, value = modifyValue }) end end end gg.clearResults() if #modifyList == 0 then showCloudNotify("打地鼠增加时长", "验证通过但无符合条件地址(需 >1 且 <2000)", false) return end gg.setValues(modifyList) WHACK_A_MOLE_DATA = saveList showCloudNotify("打地鼠增加时长", "已开启,修改 " .. #modifyList .. " 处(不冻结)", true) end function WhackAMole_Off() if not WHACK_A_MOLE_DATA then showCloudNotify("打地鼠增加时长", "未开启,无需关闭", false) return end local restoreList = {} for _, item in ipairs(WHACK_A_MOLE_DATA) do table.insert(restoreList, { address = item.address, flags = item.flags, value = item.originalValue }) end gg.setValues(restoreList) WHACK_A_MOLE_DATA = nil showCloudNotify("打地鼠增加时长", "已关闭,已恢复原始值", true) end -- ==================== v1.8 新增:显示宽屏按键(不冻结) ==================== function WideScreen_On() if WIDE_SCREEN_DATA then showCloudNotify("显示宽屏按键", "已开启,无需重复操作", false) return end gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber('904136849', gg.TYPE_DWORD) local resultCount = gg.getResultCount() if resultCount == 0 then showCloudNotify("显示宽屏按键", "未找到任何结果,请确保在坠龙战斗内开启", false) return end local results = gg.getResults(resultCount) local modifyList = {} local recordList = {} for i, v in ipairs(results) do local targetAddr = v.address + 56 local orig = gg.getValues({{address = targetAddr, flags = gg.TYPE_DWORD}})[1].value table.insert(recordList, {address = targetAddr, flags = gg.TYPE_DWORD, originalValue = orig}) table.insert(modifyList, {address = targetAddr, flags = gg.TYPE_DWORD, value = 257}) end if #modifyList == 0 then showCloudNotify("显示宽屏按键", "未生成有效修改项", false) return end gg.setValues(modifyList) WIDE_SCREEN_DATA = recordList showCloudNotify("显示宽屏按键", "已开启,共修改 " .. #modifyList .. " 处", true) gg.clearResults() end function WideScreen_Off() if not WIDE_SCREEN_DATA then showCloudNotify("显示宽屏按键", "未开启,无需关闭", false) return end local restoreList = {} for _, item in ipairs(WIDE_SCREEN_DATA) do table.insert(restoreList, {address = item.address, flags = item.flags, value = item.originalValue}) end gg.setValues(restoreList) WIDE_SCREEN_DATA = nil showCloudNotify("显示宽屏按键", "已关闭,数值已恢复", true) end -- ==================== v1.9 新增:显示变速按键(冒险关卡) ==================== function SpeedButton_On() if SPEED_BUTTON_DATA then showCloudNotify("显示变速按键", "已开启,无需重复操作", false) return end gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber('848467071', gg.TYPE_DWORD) local resultCount = gg.getResultCount() if resultCount == 0 then showCloudNotify("显示变速按键", "未找到任何结果,请确保在冒险关卡内开启", false) return end local results = gg.getResults(resultCount) local modifyList = {} local recordList = {} for i, v in ipairs(results) do local targetAddr = v.address + 68 local orig = gg.getValues({{address = targetAddr, flags = gg.TYPE_DWORD}})[1].value table.insert(recordList, {address = targetAddr, flags = gg.TYPE_DWORD, originalValue = orig}) table.insert(modifyList, {address = targetAddr, flags = gg.TYPE_DWORD, value = 257}) end if #modifyList == 0 then showCloudNotify("显示变速按键", "未生成有效修改项", false) return end gg.setValues(modifyList) SPEED_BUTTON_DATA = recordList showCloudNotify("显示变速按键", "已开启,共修改 " .. #modifyList .. " 处", true) gg.clearResults() end function SpeedButton_Off() if not SPEED_BUTTON_DATA then showCloudNotify("显示变速按键", "未开启,无需关闭", false) return end local restoreList = {} for _, item in ipairs(SPEED_BUTTON_DATA) do table.insert(restoreList, {address = item.address, flags = item.flags, value = item.originalValue}) end gg.setValues(restoreList) SPEED_BUTTON_DATA = nil showCloudNotify("显示变速按键", "已关闭,数值已恢复", true) end -- ==================== 刷文碟(单次执行,不保存列表) ==================== function ShuaWenDie_On() gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber('4294541312', gg.TYPE_QWORD) local count = gg.getResultCount() if count == 0 then showCloudNotify("刷文碟", "未找到特征值 4294541312", false) gg.clearResults() return end local results = gg.getResults(count) local modified = 0 for _, v in ipairs(results) do local addr = v.address local check1 = gg.getValues({{address = addr - 500, flags = gg.TYPE_QWORD}}) if check1[1].value == -2111062325329920 then local check2 = gg.getValues({{address = addr + 440, flags = gg.TYPE_QWORD}}) if check2[1].value == 8589443072 then gg.setValues({{address = addr + 436, flags = gg.TYPE_DWORD, value = 16}}) modified = modified + 1 end end end gg.clearResults() if modified > 0 then showCloudNotify("刷文碟", "已修改 " .. modified .. " 处(单次执行,无需关闭)", true) else showCloudNotify("刷文碟", "没有符合条件的地址(验证1或2不通过)", false) end end function ShuaWenDie_Off() showCloudNotify("刷文碟", "此功能为单次执行,无需关闭", false) end -- ==================== v2.3 新增:全员无敌(开关式) ==================== function AllInvincible_On() if ALL_INVINCIBLE_DATA then showCloudNotify("全员无敌", "已开启,无需重复操作", false) return end gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber(750, gg.TYPE_DWORD) if gg.getResultCount() == 0 then showCloudNotify("全员无敌", "未找到特征数据,请确保在关卡内", false) gg.clearResults() return end local results = gg.getResults(gg.getResultCount()) local addrs = {} for i, v in ipairs(results) do addrs[i] = { address = v.address + 736, flags = gg.TYPE_DWORD } end local values = gg.getValues(addrs) local validResults = {} for i, val in ipairs(values) do if val.value == 1 then table.insert(validResults, results[i]) end end if #validResults == 0 then showCloudNotify("全员无敌", "未找到符合条件的地址(偏移+736处不为1)", false) gg.clearResults() return end local savedData = {} local modifyList = {} for _, res in ipairs(validResults) do local addr = res.address + 736 local orig = gg.getValues({{ address = addr, flags = gg.TYPE_DWORD }})[1].value table.insert(savedData, { address = addr, originalValue = orig, flags = gg.TYPE_DWORD }) table.insert(modifyList, { address = addr, flags = gg.TYPE_DWORD, value = 2 }) end gg.setValues(modifyList) ALL_INVINCIBLE_DATA = savedData showCloudNotify("全员无敌", "已开启,修改了 " .. #modifyList .. " 处", true) gg.clearResults() end function AllInvincible_Off() if not ALL_INVINCIBLE_DATA then showCloudNotify("全员无敌", "未开启,无需关闭", false) return end if #ALL_INVINCIBLE_DATA > 0 then local restoreList = {} for _, item in ipairs(ALL_INVINCIBLE_DATA) do table.insert(restoreList, { address = item.address, flags = item.flags, value = item.originalValue }) end gg.setValues(restoreList) showCloudNotify("全员无敌", "已关闭,恢复了 " .. #restoreList .. " 处", true) else showCloudNotify("全员无敌", "没有可恢复的数据", false) end ALL_INVINCIBLE_DATA = nil gg.clearResults() end -- ==================== v2.6 全员秒杀无冷却(循环模式,500ms) ==================== function AllSecondKill_On() if ALL_SECOND_KILL_LOOP_ACTIVE then showCloudNotify("全员秒杀无冷却", "循环已在运行,无需重复开启", false) return end ALL_SECOND_KILL_LOOP_ACTIVE = true showCloudNotify("全员秒杀无冷却", "循环已启动,每500ms执行一次", true) local loop_thread = function() while ALL_SECOND_KILL_LOOP_ACTIVE do gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber("30000", gg.TYPE_DWORD) if gg.getResultCount() > 0 then local results = gg.getResults(gg.getResultCount()) local validAddrs = {} for _, v in ipairs(results) do local chk = gg.getValues({{address = v.address + 8, flags = gg.TYPE_DWORD}}) if chk[1].value == 20000 then table.insert(validAddrs, v.address) end end if #validAddrs > 0 then local modifyList = {} for _, addr in ipairs(validAddrs) do table.insert(modifyList, {address = addr - 112, flags = gg.TYPE_DWORD, value = 9999}) table.insert(modifyList, {address = addr - 128, flags = gg.TYPE_DWORD, value = 1}) end gg.setValues(modifyList) end end gg.clearResults() if ALL_SECOND_KILL_LOOP_ACTIVE then gg.sleep(500) end end showCloudNotify("全员秒杀无冷却", "循环已停止", true) end pcall(loop_thread) end function AllSecondKill_Off() if not ALL_SECOND_KILL_LOOP_ACTIVE then showCloudNotify("全员秒杀无冷却", "循环未运行,无需关闭", false) return end ALL_SECOND_KILL_LOOP_ACTIVE = false showCloudNotify("全员秒杀无冷却", "正在停止循环...", false) end -- ==================== 竞技专区 ==================== -- 特征码模式函数(左入坑-小数组) function LeftRoleFeature_On() if leftRoleFeatureData then showCloudNotify("左边角色入坑", "特征码模式已开启,无需重复", false) return true end gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber("2139095040", gg.TYPE_DWORD) local count = gg.getResultCount() if count == 0 then return false end local results = gg.getResults(math.min(count, 2000)) local validEntries = {} local readList = {} for i, v in ipairs(results) do local addr = v.address table.insert(readList, {address = addr + 0x3C, flags = gg.TYPE_DWORD}) table.insert(readList, {address = addr + 0x34, flags = gg.TYPE_DWORD}) table.insert(readList, {address = addr + 0x10, flags = gg.TYPE_DWORD}) end local allVals = gg.getValues(readList) if not allVals then return false end local idx = 1 for i = 1, #results do local sub1 = allVals[idx].value local sub2 = allVals[idx+1].value local target = allVals[idx+2].value idx = idx + 3 if sub1 == -2147483648 and sub2 == 1065353216 then table.insert(validEntries, { address = results[i].address + 0x10, currentValue = target }) end end gg.clearResults() if #validEntries == 0 then return false end table.sort(validEntries, function(a, b) return a.currentValue < b.currentValue end) local total = #validEntries local splitIndex = math.floor(total / 2) local smallGroup = {} for i = 1, splitIndex do table.insert(smallGroup, validEntries[i]) end if #smallGroup == 0 then return false end local modifyList = {} local recordList = {} for _, entry in ipairs(smallGroup) do table.insert(recordList, { address = entry.address, flags = gg.TYPE_DWORD, originalValue = entry.currentValue }) table.insert(modifyList, { address = entry.address, flags = gg.TYPE_DWORD, value = 1145111210, freeze = true }) end gg.setValues(modifyList) gg.addListItems(modifyList) leftRoleFeatureData = recordList showCloudNotify("左边角色入坑", string.format("特征码模式(小数组)已开启,修改 %d 处并冻结", #modifyList), true) return true end function LeftRoleFeature_Off() if not leftRoleFeatureData then return end local restoreList = {} for _, item in ipairs(leftRoleFeatureData) do table.insert(restoreList, { address = item.address, flags = item.flags, value = item.originalValue, freeze = false }) end gg.setValues(restoreList) local currentList = gg.getListItems() for _, item in ipairs(leftRoleFeatureData) do for _, li in ipairs(currentList) do if li.address == item.address and li.flags == item.flags then gg.removeListItems({li}) break end end end leftRoleFeatureData = nil showCloudNotify("左边角色入坑", "特征码模式已关闭,已恢复原值并移除冻结", true) end -- 特征码模式函数(右入坑-大数组) function RightRoleFeature_On() if rightRoleFeatureData then showCloudNotify("右边角色入坑", "特征码模式已开启,无需重复", false) return true end gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) gg.searchNumber("2139095040", gg.TYPE_DWORD) local count = gg.getResultCount() if count == 0 then return false end local results = gg.getResults(math.min(count, 2000)) local validEntries = {} local readList = {} for i, v in ipairs(results) do local addr = v.address table.insert(readList, {address = addr + 0x3C, flags = gg.TYPE_DWORD}) table.insert(readList, {address = addr + 0x34, flags = gg.TYPE_DWORD}) table.insert(readList, {address = addr + 0x10, flags = gg.TYPE_DWORD}) end local allVals = gg.getValues(readList) if not allVals then return false end local idx = 1 for i = 1, #results do local sub1 = allVals[idx].value local sub2 = allVals[idx+1].value local target = allVals[idx+2].value idx = idx + 3 if sub1 == -2147483648 and sub2 == 1065353216 then table.insert(validEntries, { address = results[i].address + 0x10, currentValue = target }) end end gg.clearResults() if #validEntries == 0 then return false end table.sort(validEntries, function(a, b) return a.currentValue < b.currentValue end) local total = #validEntries local splitIndex = math.floor(total / 2) local bigGroup = {} for i = splitIndex + 1, total do table.insert(bigGroup, validEntries[i]) end if #bigGroup == 0 then return false end local modifyList = {} local recordList = {} for _, entry in ipairs(bigGroup) do table.insert(recordList, { address = entry.address, flags = gg.TYPE_DWORD, originalValue = entry.currentValue }) table.insert(modifyList, { address = entry.address, flags = gg.TYPE_DWORD, value = 1145111210, freeze = true }) end gg.setValues(modifyList) gg.addListItems(modifyList) rightRoleFeatureData = recordList showCloudNotify("右边角色入坑", string.format("特征码模式(大数组)已开启,修改 %d 处并冻结", #modifyList), true) return true end function RightRoleFeature_Off() if not rightRoleFeatureData then return end local restoreList = {} for _, item in ipairs(rightRoleFeatureData) do table.insert(restoreList, { address = item.address, flags = item.flags, value = item.originalValue, freeze = false }) end gg.setValues(restoreList) local currentList = gg.getListItems() for _, item in ipairs(rightRoleFeatureData) do for _, li in ipairs(currentList) do if li.address == item.address and li.flags == item.flags then gg.removeListItems({li}) break end end end rightRoleFeatureData = nil showCloudNotify("右边角色入坑", "特征码模式已关闭,已恢复原值并移除冻结", true) end -- 指针模式函数(左入坑) function LeftRolePointer_On() local module_name = "libcocos2djs.so" local offsets = {0x8B50, 0x40, 0x38, 0x8, 0x0, 0x28} local target_value = 1145111210 local val_flag = gg.TYPE_DWORD local ranges = gg.getRangesList(module_name) local bss_start = nil if ranges and #ranges > 0 then for _, v in ipairs(ranges) do if string.find(v.name, "bss") then bss_start = v.start break end end end if bss_start then local is_64bit = false for _, v in ipairs(ranges) do if string.find(v.name, "64") or v.start > 0xFFFFFFFF then is_64bit = true break end end local ptr_flag = is_64bit and gg.TYPE_QWORD or gg.TYPE_DWORD local current_addr = bss_start + offsets[1] local pointer_ok = true for i = 2, #offsets do local result = gg.getValues({{address = current_addr, flags = ptr_flag}}) if not result or not result[1] then pointer_ok = false break end local ptr = result[1].value if ptr == 0 or ptr == nil then pointer_ok = false break end current_addr = ptr + offsets[i] end if pointer_ok then local orig = gg.getValues({{address = current_addr, flags = val_flag}})[1].value leftRoleData = {address = current_addr, flags = val_flag, originalValue = orig} local mod = {address = current_addr, flags = val_flag, value = target_value, freeze = true} gg.setValues({mod}) gg.addListItems({mod}) showCloudNotify("左边角色入坑", "指针模式已修改", true) return true end end return false end -- 指针模式函数(右入坑) function RightRolePointer_On() local module_name = "libcocos2djs.so" local offsets = {0x8B50, 0x40, 0x38, 0x8, 0x8, 0x28} local target_value = 1145111210 local val_flag = gg.TYPE_DWORD local ranges = gg.getRangesList(module_name) local bss_start = nil if ranges and #ranges > 0 then for _, v in ipairs(ranges) do if string.find(v.name, "bss") then bss_start = v.start break end end end if bss_start then local is_64bit = false for _, v in ipairs(ranges) do if string.find(v.name, "64") or v.start > 0xFFFFFFFF then is_64bit = true break end end local ptr_flag = is_64bit and gg.TYPE_QWORD or gg.TYPE_DWORD local current_addr = bss_start + offsets[1] local pointer_ok = true for i = 2, #offsets do local result = gg.getValues({{address = current_addr, flags = ptr_flag}}) if not result or not result[1] then pointer_ok = false break end local ptr = result[1].value if ptr == 0 or ptr == nil then pointer_ok = false break end current_addr = ptr + offsets[i] end if pointer_ok then local orig = gg.getValues({{address = current_addr, flags = val_flag}})[1].value rightRoleData = {address = current_addr, flags = val_flag, originalValue = orig} local mod = {address = current_addr, flags = val_flag, value = target_value, freeze = true} gg.setValues({mod}) gg.addListItems({mod}) showCloudNotify("右边角色入坑", "指针模式已修改", true) return true end end return false end -- 主开关函数(根据模式变量执行) function LeftRoleEnter_On() local executed = false if PC_MODE_ENABLED then if LeftRoleFeature_On() then executed = true end end if MOBILE_MODE_ENABLED then if LeftRolePointer_On() then executed = true end end if executed then showCloudNotify("左边角色入坑", "已执行选中的搜索模式", true) else showCloudNotify("左边角色入坑", "未找到有效修改,请检查开关或环境", false) end end function LeftRoleEnter_Off() local restored = false if leftRoleData then gg.setValues({{address = leftRoleData.address, flags = leftRoleData.flags, value = leftRoleData.originalValue, freeze = false}}) local currentList = gg.getListItems() for _, li in ipairs(currentList) do if li.address == leftRoleData.address and li.flags == leftRoleData.flags then gg.removeListItems({li}) break end end leftRoleData = nil restored = true end if leftRoleFeatureData then LeftRoleFeature_Off() restored = true end if restored then showCloudNotify("左边角色入坑", "已关闭,所有修改已恢复并移除冻结", true) else showCloudNotify("左边角色入坑", "未开启,无需关闭", false) end end function RightRoleEnter_On() local executed = false if PC_MODE_ENABLED then if RightRoleFeature_On() then executed = true end end if MOBILE_MODE_ENABLED then if RightRolePointer_On() then executed = true end end if executed then showCloudNotify("右边角色入坑", "已执行选中的搜索模式", true) else showCloudNotify("右边角色入坑", "未找到有效修改,请检查开关或环境", false) end end function RightRoleEnter_Off() local restored = false if rightRoleData then gg.setValues({{address = rightRoleData.address, flags = rightRoleData.flags, value = rightRoleData.originalValue, freeze = false}}) local currentList = gg.getListItems() for _, li in ipairs(currentList) do if li.address == rightRoleData.address and li.flags == rightRoleData.flags then gg.removeListItems({li}) break end end rightRoleData = nil restored = true end if rightRoleFeatureData then RightRoleFeature_Off() restored = true end if restored then showCloudNotify("右边角色入坑", "已关闭,所有修改已恢复并移除冻结", true) else showCloudNotify("右边角色入坑", "未开启,无需关闭", false) end end -- ==================== 竞技专区查看详细说明 ==================== function ShowJingJiInstructions() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "竞技专区使用说明", "━━━ 左边角色入坑 ━━━\n" .. "进去后再开\n" .. "开启后左边角色掉入坑。\n\n" .. "━━━ 右边角色入坑 ━━━\n" .. "进去后再开\n" .. "开启后右边角色掉入坑。\n\n" .. "━━━ 模式切换 ━━━\n" .. "通过上方复选框选择「电脑模式」或「手机模式」\n" .. "电脑模式=电脑上用,手机模式=手机上用\n\n" .. "━━━ 全员秒杀无冷却 ━━━\n" .. "循环模式:开启后每隔500ms自动修改,关闭停止。") end) end) end -- ==================== 使用说明(原有) ==================== function ShowWukongInstructions() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "悟空功能说明", "秒杀在准备战斗时开启,无敌在地图内开启,新秒杀进入战斗后开\n" .. "强普技能替换(开关式):开启后替换普攻为指定技能代码(默认8660),可自定义。", "知道了") end) end) end function ShowFaBaoInstructions() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "法宝秒怪说明", "装备对应法宝后点击按钮即可,一局一开", "知道了") end) end) end function ShowZuilongInstructions() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "坠龙之地说明", "模型透视:拖动地图可见敌人模型\n秒水晶:秒左边/右边水晶\n聚怪:所有怪物聚集在龙坑\n" .. "穿图:分机效果\n宽屏按键:进坠龙战斗后开(训练营无效),开启后屏幕下方会多出一个宽屏缩放按键\n" .. "法宝无冷却\n技能无蓝耗+无冷却(合并开关)\n坠龙角色无敌\n" .. "72变改英雄:训练营使用,悟空必须带原皮\n内购三生锤:价格变为-999999\n" .. "刷成就:修改击杀数和助攻数,用来刷mvp和助攻的成就,不会分机", "知道了") end) end) end function ShowInstantPassInstructions() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "冒险专区", "秒过功能:只能过部分主线,特殊地形\n" .. "猴子无敌秒:悟空带分身被动,开启后猴子无法被攻击,最后一次普攻秒全图\n" .. "通天神猴:准备战斗界面开启,开启后全图生效\n" .. "悟空强普替换:悟空带分身被动,默认8660,伏羲大招,悟空最后一次普攻触发\n" .. "全员技能无冷却:图内开,开启后全员技能和法宝无冷却\n" .. "定怪:图内图外都可以开,开启后怪物不会攻击\n" .. "全员无敌:开关式,在关卡内开启,令所有角色(包括敌人?)无敌,适用于需要全员生存的场景。\n\n" .. "━━━ 全员秒杀无冷却 ━━━\n" .. "循环模式:开启后每隔500ms自动搜索并修改,关闭停止。") end) end) end function ShowAdventureInstructions() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "无视地形秒过说明", "无视地形秒过能秒过全部主线\n" .. "直接开\n" .. "支持元素、镇妖塔、试炼房等\n\n" .. "⚡增强版新特性:必定触发入侵奖励", "知道了") end) end) end function ShowEntertainmentInstructions() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "娱乐功能说明", "游戏加速用于活动\n全局加速过检测稳定\n佛光美化(降魔之光改双龙戏珠)\n" .. "无限跳跃(关卡内开启后可以无限跳跃)\n火焰山替换主线关卡:双人组队替换关卡,请在组队界面再开启\n" .. "显示变速按键:冒险关卡内开启,显示变速按钮\n" .. "GM模式:开启后进入GM状态\n" .. "卖道具:自定义输入值后,自动写入(输入值-1)到道具价格\n" .. "视奸模式(单次执行):点击开启后,执行一次修改,实现查看陌生人状态、可切磋、强制私聊效果", "知道了") end) end) end function ShowGeneralInstructions() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "脚本使用说明", "造梦西游外传 v2.8(新增卖道具功能)\n适配 iQOO、vivo 等直装设备\n" .. "功能分页:公告、悬浮窗功能、秒过功能、冒险专区、竞技专区、法宝功能、坠龙之地、活动专区、娱乐功能、万能修改、设置\n" .. "请勿在竞技模式下使用", "知道了") end) end) end -- ==================== 修改体力值(开关式) ==================== function PoolEnergy_On() if POOL_ENERGY_ADDRS and #POOL_ENERGY_ADDRS > 0 then showCloudNotify("修改体力值", "已开启,无需重复", false) return end gg.clearResults() gg.setRanges(gg.REGION_OTHER) gg.searchNumber("50~60", gg.TYPE_DWORD) local resultCount = gg.getResultsCount() if resultCount == 0 then showCloudNotify("修改体力值", "未找到匹配数值(50~60)", false) return end local results = gg.getResults(resultCount) if not results or #results == 0 then showCloudNotify("修改体力值", "获取结果失败", false) return end local readList = {} for i, v in ipairs(results) do table.insert(readList, {address = v.address - 4, flags = gg.TYPE_DWORD}) table.insert(readList, {address = v.address + 4, flags = gg.TYPE_DWORD}) end local readValues = gg.getValues(readList) if not readValues then showCloudNotify("修改体力值", "读取内存失败", false) return end local modifyList = {} local addrList = {} for i = 1, #results do local idx1 = (i - 1) * 2 + 1 local idx2 = (i - 1) * 2 + 2 local val1 = readValues[idx1] local val2 = readValues[idx2] if val1 and val2 then local check1 = val1.value local check2 = val2.value if check1 >= -262050 and check1 <= -200000 and check2 == -491520 then local targetAddr = results[i].address table.insert(modifyList, {address = targetAddr, flags = gg.TYPE_DWORD, value = 9999}) table.insert(addrList, {address = targetAddr, flags = gg.TYPE_DWORD}) end end end if #modifyList == 0 then showCloudNotify("修改体力值", "未找到完全符合偏移条件的地址", false) return end local setResult = gg.setValues(modifyList) if setResult then POOL_ENERGY_ADDRS = addrList showCloudNotify("修改体力值", "已开启,修改 " .. #modifyList .. " 处为 9999", true) else showCloudNotify("修改体力值", "写入失败,请检查权限", false) end gg.clearResults() end function PoolEnergy_Off() if not POOL_ENERGY_ADDRS or #POOL_ENERGY_ADDRS == 0 then showCloudNotify("修改体力值", "未开启,无需关闭", false) return end local restoreList = {} for _, item in ipairs(POOL_ENERGY_ADDRS) do table.insert(restoreList, {address = item.address, flags = item.flags, value = 0}) end gg.setValues(restoreList) POOL_ENERGY_ADDRS = nil showCloudNotify("修改体力值", "已关闭,所有地址改回 0", true) end -- ==================== 更新后的公告(ShowNotice) ==================== function ShowNotice() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "公告", "造梦西游外传多功能脚本 v2.9\n\n✨ 更新 v2.9:\n" .. "✅ 新增「修改月饼数量」开关(活动专区)\n" .. "✅ 自定义输入数值,自动写入(输入值-1)\n" .. "✅ 泳池修改重构\n" .. "✅ 新增「修改体力值」开关(活动专区)\n" .. "✅ 新增「泳池二合一」总开关(活动专区),一键同时执行体力+分数修改\n" .. "✅ 优化使用说明\n\n" .. "🔧 其他功能保持稳定", "知道了") end) end) end -- 自动过检测 function AutoBypass() gg.clearResults() gg.setRanges(gg.REGION_OTHER) gg.searchNumber("1749250921;7627109", gg.TYPE_DWORD) local count = gg.getResultCount() if count == 0 then showCloudNotify("自动过检测","未找到特征值",false) return end local results = gg.getResults(count) for i = 1, #results do results[i].value = 0 results[i].freeze = false end gg.setValues(results) gg.clearResults() showCloudNotify("自动过检测","已执行,修改 "..count.." 个值",true) end -- ==================== 更新后的启动弹窗公告(MaterialAlert) ==================== local function MaterialAlert() local alertBuilder = MaterialAlertDialogBuilder(context) alertBuilder.setTitle("公告") alertBuilder.setMessage([[ "造梦西游外传 v2.9 (64位流畅版) - 新增修改月饼数量功能 🌟 核心优点:更流畅、更稳定 🔧 专为64位游戏优化,运行丝滑 ✨ 悬浮窗功能:秒左、秒右、透视、聚怪、穿图 ✨ 泳池分数修改:开启后直接变成800分 ✨ 新增「修改体力值」:开启改9999,关闭改0 ✨ 新增「泳池二合一」总开关(活动专区) 请勿破坏游戏平衡 ]]) 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) gg.sleep(500) AutoBypass() -- ==================== UI 配置 ==================== _ENV["悬浮窗图标"] = 'https://patchwiki.biligame.com/images/ys/2/29/4k98v9sdrrkrxw8vxfdxll42bdi3czo.png' _ENV["标题"] = '造梦西游外传 v2.9' _ENV["分页"] = { '公告', '悬浮窗功能', '秒过功能', '冒险专区', '竞技专区', '法宝功能', '坠龙之地', '活动专区', '娱乐功能', '万能修改', '设置' } init() uistart({ -- 公告页 { CAtext('造梦西游外传多功能脚本 v2.9', '#FF6B35', '16sp', true), CAbutton('手动过检测', AutoBypass, '#2196F3'), CAtext('━━ 最新更新 ━━', '#FF9800', '12sp', true), CAtext('✅ 新增「卖道具」功能(娱乐功能页)', '#4CAF50', '12sp'), CAtext('✅ 泳池修改重构', '#4CAF50', '12sp'), CAtext('✅ 新增「修改体力值」开关(活动专区)', '#4CAF50', '12sp'), CAtext('✅ 新增「泳池二合一」总开关(活动专区)', '#4CAF50', '12sp'), CAtext('✅ 新增「全员秒杀无冷却」循环模式(竞技&冒险)', '#4CAF50', '12sp'), CAtext('✅ 新增「三生锤无敌属性」开关(坠龙之地)', '#4CAF50', '12sp'), CAtext('✅ 新增「竞技专区」分页(左右角色入坑)', '#4CAF50', '12sp'), CAtext('✅ 新增「全员无敌」开关(冒险专区)', '#4CAF50', '12sp'), CAtext('✅ 新增「视奸模式」开关(娱乐功能页)', '#4CAF50', '12sp'), CAtext('✅ 新增「刷文碟」开关(活动专区)', '#4CAF50', '12sp'), CAtext('✅ 新增「修改月饼数量」开关(活动专区)', '#4CAF50', '12sp'), CAtext('━━ 注意事项 ━━', '#FF9800', '12sp', true), CAtext('⚠️ 请勿在竞技模式下使用', '#F44336', '12sp'), CAbutton('查看详细公告', ShowNotice, '#4CAF50'), }, -- 悬浮窗功能页 { CAtext('🖥️ 快捷悬浮窗控制', '#673AB7', '16sp', true), CAtext('每个开关独立控制对应悬浮窗的显示/隐藏,悬浮窗可拖拽,点击切换功能状态', '#666666', '12sp'), CAtext('━━ 水晶秒杀 ━━', '#FF9800', '12sp', true), CAswitch('显示「秒左」悬浮窗', function() showSwitch("秒左") end, function() hideSwitch("秒左") end), CAswitch('显示「秒右」悬浮窗', function() showSwitch("秒右") end, function() hideSwitch("秒右") end), CAtext('━━ 常用功能 ━━', '#FF9800', '12sp', true), CAswitch('显示「透视」悬浮窗', function() showSwitch("透视") end, function() hideSwitch("透视") end), CAswitch('显示「聚怪」悬浮窗', function() showSwitch("聚怪") end, function() hideSwitch("聚怪") end), CAswitch('显示「穿图」悬浮窗', function() showSwitch("穿图") end, function() hideSwitch("穿图") end), CAtext('━━ 模式切换悬浮窗 ━━', '#FF9800', '12sp', true), CAswitch('显示「电脑模式」悬浮窗', function() showSwitch("电脑模式") end, function() hideSwitch("电脑模式") end), CAswitch('显示「手机模式」悬浮窗', function() showSwitch("手机模式") end, function() hideSwitch("手机模式") end), CAtext('━━ 提示 ━━', '#4CAF50', '12sp', true), CAtext('注意:悬浮窗需要悬浮权限,如不显示请检查权限', '#2196F3', '12sp'), CAbutton('隐藏全部悬浮窗', function() hideAllSwitches() end, '#F44336'), }, -- 秒过功能页 { CAtext('🏔️ 稳定秒过', '#4CAF50', '16sp', true), CAbutton('无视地形秒过', TerrainIgnorePass, '#4CAF50'), CAtext('━━ 循环功能 ━━', '#FF9800', '12sp', true), CAswitch('循环无视地形秒过', StartLoopTerrainIgnorePass, StopLoopTerrainIgnorePass), CAbutton('设置循环间隔', SetTerrainLoopInterval, '#9C27B0'), CAbutton('查看详细说明', ShowAdventureInstructions, '#4CAF50'), }, -- 冒险专区 { CAtext('⚡ 冒险专区', '#8BC34A', '16sp', true), CAbutton('秒过功能', InstantPass, '#4CAF50'), CAswitch('循环秒过', StartLoopInstantPass, StopLoopInstantPass), CAbutton('设置循环时间', SetLoopInterval, '#9C27B0'), CAswitch('猴子无敌秒(无敌+秒杀)', MonkeyInvincibleKill_On, MonkeyInvincibleKill_Off), CAtext('━━ 通天神猴 ━━', '#FF9800', '12sp', true), CAswitch('🐒 通天神猴', MonkeySkillReplace_On, MonkeySkillReplace_Off), CAtext('提示:开启后替换普攻和技能为通天效果,退出关卡后依然有效。关闭则恢复原技能。', '#666666', '10sp'), CAtext('━━ 悟空功能 ━━', '#FF9800', '12sp', true), CAswitch('悟空强普替换', WukongStrongReplace_On, WukongStrongReplace_Off), CAbutton('⚙️ 自定义技能代码', SetWukongStrongReplaceValue, '#9C27B0'), CAtext('当前代码: ' .. WUKONG_STRONG_REPLACE_VALUE, '#2196F3', '12sp'), CAbutton('📖 悟空功能说明', ShowWukongInstructions, '#4CAF50'), CAtext('━━ 全技能无冷却 ━━', '#FF9800', '12sp', true), CAswitch('全员技能无冷却', AllNoCooldown_On, AllNoCooldown_Off), CAtext('━━ 定怪功能 ━━', '#FF9800', '12sp', true), CAswitch('定怪', StartMonsterFixLoop, StopMonsterFixLoop, '冻结怪物无法行动'), CAtext('━━ 全员无敌 ━━', '#FF9800', '12sp', true), CAswitch('全员无敌(开关式)', AllInvincible_On, AllInvincible_Off, '在关卡内开启,所有角色无敌'), CAtext('━━ 秒杀辅助 ━━', '#FF9800', '12sp', true), CAswitch('全员秒杀无冷却(循环)', AllSecondKill_On, AllSecondKill_Off), CAbutton('查看详细说明', ShowInstantPassInstructions, '#4CAF50'), }, -- ==================== 竞技专区 ==================== { CAtext('🏆 竞技专区', '#FF5722', '16sp', true), CAtext('━━ 搜索模式(勾选启用) ━━', '#FF9800', '12sp', true), CAcheck({ { "💻 电脑模式", function() PC_MODE_ENABLED = true showCloudNotify("模式", "电脑模式已开启", true) local s = allSwitches["电脑模式"] if s then s.setState(true) end end, function() PC_MODE_ENABLED = false showCloudNotify("模式", "电脑模式已关闭", true) local s = allSwitches["电脑模式"] if s then s.setState(false) end end }, { "📱 手机模式", function() MOBILE_MODE_ENABLED = true showCloudNotify("模式", "手机模式已开启", true) local s = allSwitches["手机模式"] if s then s.setState(true) end end, function() MOBILE_MODE_ENABLED = false showCloudNotify("模式", "手机模式已关闭", true) local s = allSwitches["手机模式"] if s then s.setState(false) end end }, }), CAtext('━━ 角色入坑 ━━', '#FF9800', '12sp', true), CAswitch('左边入坑', LeftRoleEnter_On, LeftRoleEnter_Off), CAswitch('右边入坑', RightRoleEnter_On, RightRoleEnter_Off), CAtext('━━ 秒杀辅助 ━━', '#FF9800', '12sp', true), CAswitch('全员秒杀无冷却(循环)', AllSecondKill_On, AllSecondKill_Off), CAbutton('查看详细说明', ShowJingJiInstructions, '#4CAF50'), }, -- 法宝功能 { 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'), }, -- 坠龙之地 { CAtext('⚔️ 坠龙之地', '#FF5722', '16sp', true), CAswitch('模型透视', ModelPenetration_On, ModelPenetration_Off, '不分机'), CAbutton('秒左边水晶', Zuilong_LeftKill_On, '#2196F3'), CAbutton('秒右边水晶', Zuilong_RightKill_On, '#2196F3'), CAswitch('显示宽屏按键', WideScreen_On, WideScreen_Off), CAtext(' 开启后屏幕下方会多出一个宽屏缩放按钮', '#666666', '10sp'), CAswitch('聚怪', Zuilong_Gather_On, Zuilong_Gather_Off, '将怪物聚集到龙坑'), CAswitch('无蓝耗 + 全员无冷却', BothOn, BothOff), CAswitch('坠龙角色无敌', ZuilongRoleInvincible_On, ZuilongRoleInvincible_Off), CAbutton('内购三生锤', InternalBloodsucker, '#2196F3'), CAswitch('🔨 三生锤无敌属性', SanShengChui_On, SanShengChui_Off, '开关式,修改12处属性为99999'), CAswitch('穿图', StepByStep_Enable, StepByStep_Disable, '开启后达到分机效果'), CAbutton('刷成就(单次执行)', Achievement_Once, '#4CAF50'), CAbox({ '72变(英雄修改)', CAtext('当前目标ID: ' .. (_72Bian_TargetID or 40), '#FF9800', '12sp'), CAtext('━━ 一键变身上古英雄 ━━', '#FF9800', '12sp', true), CAswitch('变通天教主 (40)', function() new72Bian_set(40) end, function() if _72Bian_Active and _72Bian_TargetID == 40 then _72Bian_Disable() end end), CAswitch('变帝俊 (98)', function() new72Bian_set(98) end, function() if _72Bian_Active and _72Bian_TargetID == 98 then _72Bian_Disable() end end), CAswitch('变伏羲 (107)', function() new72Bian_set(107) end, function() if _72Bian_Active and _72Bian_TargetID == 107 then _72Bian_Disable() end end), CAtext('━━ 一键变身其他英雄 ━━', '#FF9800', '12sp', true), CAswitch('变斗战胜佛 (51)', function() new72Bian_set(51) end, function() if _72Bian_Active and _72Bian_TargetID == 51 then _72Bian_Disable() end end), CAswitch('变后羿 (61)', function() new72Bian_set(61) end, function() if _72Bian_Active and _72Bian_TargetID == 61 then _72Bian_Disable() end end), CAswitch('变六耳猕猴 (71)', function() new72Bian_set(71) end, function() if _72Bian_Active and _72Bian_TargetID == 71 then _72Bian_Disable() end end), CAswitch('变真武大帝 (80)', function() new72Bian_set(80) end, function() if _72Bian_Active and _72Bian_TargetID == 80 then _72Bian_Disable() end end), CAswitch('变东皇太一 (89)', function() new72Bian_set(89) end, function() if _72Bian_Active and _72Bian_TargetID == 89 then _72Bian_Disable() end end), CAswitch('变鹿 (103)', function() new72Bian_set(103) end, function() if _72Bian_Active and _72Bian_TargetID == 103 then _72Bian_Disable() end end), CAswitch('变女土蝠 (108)', function() new72Bian_set(108) end, function() if _72Bian_Active and _72Bian_TargetID == 108 then _72Bian_Disable() end end), CAtext('━━ 自定义与恢复 ━━', '#FF9800', '12sp', true), CAswitch('开启72变(悟空改英雄)', function() local id = _72Bian_TargetID or 40 _72Bian_Enable(id) end, function() _72Bian_Disable() end ), CAbutton('自定义修改(输入ID)', SeventyTwo_Custom, '#9C27B0'), CAbutton('恢复原始英雄 (1)', SeventyTwo_Restore, '#F44336'), CAbutton('英雄ID查询表', ShowHeroIDTable, '#607D8B'), CAbutton('📖 72变使用说明', ShowSeventyTwoInstructions, '#4CAF50'), }), CAbutton('查看详细说明', ShowZuilongInstructions, '#4CAF50'), }, -- 活动专区 { CAtext('🎉 活动专区', '#E91E63', '16sp', true), CAtext('━━ 打地鼠功能 ━━', '#FF9800', '12sp', true), CAswitch('⏱️ 打地鼠增加时长', WhackAMole_On, WhackAMole_Off), CAbutton('📖 打地鼠使用说明', function() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "打地鼠增加时长使用说明", "本功能为原极速版优化而来,开启后打地鼠时间显著增加,可轻松拿高分。\n" .. "若搜索不到则说明不兼容,请重试或重启游戏。\n\n" .. "⚠️ 开关式,关闭时自动恢复原始值。", "知道了") end) end) end, '#4CAF50'), CAswitch('🍙 吃粽子刷分(撞桌211分)', EatZongzi_On, EatZongzi_Off), CAbutton('📖 查看吃粽子刷分说明', ShowEatZongziInstructions, '#2196F3'), CAtext('━━ 泳池修改 ━━', '#FF9800', '12sp', true), -- 二合一总开关(放在上面) CAswitch('🌟 泳池二合一', function() PoolEnergy_On() PoolModify_On() end, function() PoolEnergy_Off() end ), -- 下面两个并排复选框(类似竞技专区) CAcheck({ { "修改体力", function() PoolEnergy_On() end, function() PoolEnergy_Off() end }, { "修改分数", function() PoolModify_On() end, function() PoolModify_Off() end } }), CAbutton('📖 查看泳池修改说明', ShowPoolModifyInstructions, '#2196F3'), CAtext('━━ 刷文碟(坠龙之地) ━━', '#FF9800', '12sp', true), CAswitch('刷文碟', ShuaWenDie_On, ShuaWenDie_Off), CAbutton('📖 刷文碟使用说明', function() luajava.runOnUiThread(function() pcall(function() AlGuiDialogBox.showTextDiaLog(context, "刷文碟使用说明", "什么对局都可以,进游戏后开启功能等待通知提醒即可(可能比较久3到5分钟具体等通知,开的过程可以战斗,不会分机)", "知道了") end) end) end, '#4CAF50'), CAtext('━━ 修改月饼数量 ━━', '#FF9800', '12sp', true), CAswitch('🥮 修改月饼数量(800)', Mooncake_On, Mooncake_Off), CAbutton('📖 修改月饼数量说明', ShowMooncakeInstructions, '#4CAF50'), }, -- 娱乐功能 { 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'), CAswitch('无限跳跃', InfiniteJump_On, InfiniteJump_Off, '无限跳跃'), CAswitch('佛光美化(降魔→双龙)', BuddhaLight_On, BuddhaLight_Off), CAbutton('自定义佛光技能代码', BuddhaLight_Custom, '#2196F3'), CAswitch('火焰山替换主线关卡', FlameMountain_On, FlameMountain_Off, '替换组队关卡ID(默认1032火焰山)'), CAbutton('⚙️ 自定义关卡ID', SetFlameMountainID, '#9C27B0'), CAtext('当前关卡ID: ' .. FLAME_MOUNTAIN_ID, '#FF9800', '12sp'), CAswitch('显示变速按键(冒险关卡)', SpeedButton_On, SpeedButton_Off), CAswitch('GM模式', GM_On, GM_Off), CAtext('━━ 卖道具功能 ━━', '#FF9800', '12sp', true), CAswitch('🛒 自定义卖道具', MaiDongXi_On, MaiDongXi_Off), CAbutton('📖 查看使用说明', ShowMaiDongXiInstructions, '#2196F3'), CAtext('━━ 视奸模式 ━━', '#FF9800', '12sp', true), CAswitch('👀 视奸模式(单次执行)', Shijian_On, Shijian_Off, '点击开启执行一次,关闭无影响'), CAbutton('查看使用说明', ShowEntertainmentInstructions, '#4CAF50'), }, -- 万能修改 { CAtext('🛠️ 万能修改', '#607D8B', '16sp', true), CAbutton('启动万能修改', UniversalModify, '#2196F3'), CAbutton('一键恢复上次修改', RestoreLastModify, '#4CAF50'), CAbutton('查看攻略', ShowUniversalModifyInstructions, '#9C27B0'), }, -- 设置 { CAtext('⚙️ 设置', '#673AB7', '16sp', true), CAswitch('退出脚本', function() if SHIJIAN_BUSY then SHIJIAN_BUSY = false end if GAME_SPEED_ACTIVE then GameSpeed_Off() end if GLOBAL_SPEED_DATA then GlobalSpeed_Off() end if zuilong_gather_data then Zuilong_Gather_Off() end if step_active then StepByStep_Disable() end if BUDDHA_LIGHT_ACTIVE then BuddhaLight_Off() end if INFINITE_JUMP_ACTIVE then InfiniteJump_Off() end if MONKEY_INVINCIBLE_KILL_DATA then MonkeyInvincibleKill_Off() end if WUKONG_STRONG_REPLACE_ACTIVE then WukongStrongReplace_Off() end if MONKEY_SKILL_DATA then MonkeySkillReplace_Off() end if ALL_NO_COOLDOWN_DATA then AllNoCooldown_Off() end if NO_MANA_LIST_ITEMS then NoManaCost_Off() end if MODEL_PENETRATION_DATA then ModelPenetration_Off() end if FLAME_MOUNTAIN_DATA then FlameMountain_Off() end if ZUILONG_ROLE_INVINCIBLE_ACTIVE then ZuilongRoleInvincible_Off() end if MONSTER_FIX_ACTIVE then StopMonsterFixLoop() end if EAT_ZONGZI_DATA then EatZongzi_Off() end if POOL_MODIFY_ADDRS then PoolModify_Off() end if WHACK_A_MOLE_DATA then WhackAMole_Off() end if WIDE_SCREEN_DATA then WideScreen_Off() end if SPEED_BUTTON_DATA then SpeedButton_Off() end if GM_DATA or WaiZhuan64_GM_DATA then GM_Off() end if SHUA_WENDIE_DATA then ShuaWenDie_Off() end if MOONCAKE_DATA then Mooncake_Off() end if ALL_INVINCIBLE_DATA then AllInvincible_Off() end if ALL_SECOND_KILL_LOOP_ACTIVE then AllSecondKill_Off() end if leftRoleData then LeftRoleEnter_Off() end if rightRoleData then RightRoleEnter_Off() end if SANSHENGCHUI_DATA then SanShengChui_Off() end if POOL_ENERGY_ADDRS then PoolEnergy_Off() end LAST_MODIFY_DATA = nil IS_LOOP_ACTIVE = false TERRAIN_LOOP_ACTIVE = false hideAllSwitches() Lock.unUi() end, function() end), CAtext('感谢方法提供过检测技术', '#2196F3', '14sp', true), CAtext('请勿破坏游戏平衡', '#666666', '12sp', true), }, }) -- 初始化悬浮窗(默认隐藏) initAllSwitches() -- 启动UI Lock.Ui(invoke, nil, function(err) print("UI错误:", err) end)