-- ==================== 悬浮窗系统(稳定版) ====================
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)