_ENV['小鱼云验证']=function(ionic) function __VCMD5_(code) local code = tostring(code) local HexTable = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"} local A = 0x67452301 local B = 0xefcdab89 local C = 0x98badcfe local D = 0x10325476 local S11 = 7 local S12 = 12 local S13 = 17 local S14 = 22 local S21 = 5 local S22 = 9 local S23 = 14 local S24 = 20 local S31 = 4 local S32 = 11 local S33 = 16 local S34 = 23 local S41 = 6 local S42 = 10 local S43 = 15 local S44 = 21 local function F(x,y,z) return (x & y) | ((~x) & z) end local function G(x,y,z) return (x & z) | (y & (~z)) end local function H(x,y,z) return x ~ y ~ z end local function I(x,y,z) return y ~ (x | (~z)) end local function FF(a,b,c,d,x,s,ac) a = a + F(b,c,d) + x + ac a = (((a & 0xffffffff) << s) | ((a & 0xffffffff) >> 32 - s)) + b return a & 0xffffffff end local function GG(a,b,c,d,x,s,ac) a = a + G(b,c,d) + x + ac a = (((a & 0xffffffff) << s) | ((a & 0xffffffff) >> 32 - s)) + b return a & 0xffffffff end local function HH(a,b,c,d,x,s,ac) a = a + H(b,c,d) + x + ac a = (((a & 0xffffffff) << s) | ((a & 0xffffffff) >> 32 - s)) + b return a & 0xffffffff end local function II(a,b,c,d,x,s,ac) a = a + I(b,c,d) + x + ac a = (((a & 0xffffffff) << s) | ((a & 0xffffffff) >> 32 - s)) + b return a & 0xffffffff end local function vcmd5StringFill(s) local len = s:len() local mod512 = len * 8 % 512 local fillSize = (448 - mod512) // 8 if mod512 > 448 then fillSize = (960 - mod512) // 8 end local rTab = {} local byteIndex = 1 for i = 1,len do local index = (i - 1) // 4 + 1 rTab[index] = rTab[index] or 0 rTab[index] = rTab[index] | (s:byte(i) << (byteIndex - 1) * 8) byteIndex = byteIndex + 1 if byteIndex == 5 then byteIndex = 1 end end local b0x80 = false local tLen = #rTab if byteIndex ~= 1 then rTab[tLen] = rTab[tLen] | 0x80 << (byteIndex - 1) * 8 b0x80 = true end for i = 1,fillSize // 4 do if not b0x80 and i == 1 then rTab[tLen + i] = 0x80 else rTab[tLen + i] = 0x0 end end local bitLen = math.floor(len * 8) tLen = #rTab rTab[tLen + 1] = bitLen & 0xffffffff rTab[tLen + 2] = bitLen >> 32 return rTab end function getvcmd5(s) local fillTab = vcmd5StringFill(s) local result = {A,B,C,D} for i = 1,#fillTab // 16 do local a = result[1] local b = result[2] local c = result[3] local d = result[4] local offset = (i - 1) * 16 + 1 a = FF(a, b, c, d, fillTab[offset + 0], S11, 0xd76aa478) d = FF(d, a, b, c, fillTab[offset + 1], S12, 0xe8c7b756) c = FF(c, d, a, b, fillTab[offset + 2], S13, 0x242070db) b = FF(b, c, d, a, fillTab[offset + 3], S14, 0xc1bdceee) a = FF(a, b, c, d, fillTab[offset + 4], S11, 0xf57c0faf) d = FF(d, a, b, c, fillTab[offset + 5], S12, 0x4787c62a) c = FF(c, d, a, b, fillTab[offset + 6], S13, 0xa8304613) b = FF(b, c, d, a, fillTab[offset + 7], S14, 0xfd469501) a = FF(a, b, c, d, fillTab[offset + 8], S11, 0x698098d8) d = FF(d, a, b, c, fillTab[offset + 9], S12, 0x8b44f7af) c = FF(c, d, a, b, fillTab[offset + 10], S13, 0xffff5bb1) b = FF(b, c, d, a, fillTab[offset + 11], S14, 0x895cd7be) a = FF(a, b, c, d, fillTab[offset + 12], S11, 0x6b901122) d = FF(d, a, b, c, fillTab[offset + 13], S12, 0xfd987193) c = FF(c, d, a, b, fillTab[offset + 14], S13, 0xa679438e) b = FF(b, c, d, a, fillTab[offset + 15], S14, 0x49b40821) a = GG(a, b, c, d, fillTab[offset + 1], S21, 0xf61e2562) d = GG(d, a, b, c, fillTab[offset + 6], S22, 0xc040b340) c = GG(c, d, a, b, fillTab[offset + 11], S23, 0x265e5a51) b = GG(b, c, d, a, fillTab[offset + 0], S24, 0xe9b6c7aa) a = GG(a, b, c, d, fillTab[offset + 5], S21, 0xd62f105d) d = GG(d, a, b, c, fillTab[offset + 10], S22, 0x2441453) c = GG(c, d, a, b, fillTab[offset + 15], S23, 0xd8a1e681) b = GG(b, c, d, a, fillTab[offset + 4], S24, 0xe7d3fbc8) a = GG(a, b, c, d, fillTab[offset + 9], S21, 0x21e1cde6) d = GG(d, a, b, c, fillTab[offset + 14], S22, 0xc33707d6) c = GG(c, d, a, b, fillTab[offset + 3], S23, 0xf4d50d87) b = GG(b, c, d, a, fillTab[offset + 8], S24, 0x455a14ed) a = GG(a, b, c, d, fillTab[offset + 13], S21, 0xa9e3e905) d = GG(d, a, b, c, fillTab[offset + 2], S22, 0xfcefa3f8) c = GG(c, d, a, b, fillTab[offset + 7], S23, 0x676f02d9) b = GG(b, c, d, a, fillTab[offset + 12], S24, 0x8d2a4c8a) a = HH(a, b, c, d, fillTab[offset + 5], S31, 0xfffa3942) d = HH(d, a, b, c, fillTab[offset + 8], S32, 0x8771f681) c = HH(c, d, a, b, fillTab[offset + 11], S33, 0x6d9d6122) b = HH(b, c, d, a, fillTab[offset + 14], S34, 0xfde5380c) a = HH(a, b, c, d, fillTab[offset + 1], S31, 0xa4beea44) d = HH(d, a, b, c, fillTab[offset + 4], S32, 0x4bdecfa9) c = HH(c, d, a, b, fillTab[offset + 7], S33, 0xf6bb4b60) b = HH(b, c, d, a, fillTab[offset + 10], S34, 0xbebfbc70) a = HH(a, b, c, d, fillTab[offset + 13], S31, 0x289b7ec6) d = HH(d, a, b, c, fillTab[offset + 0], S32, 0xeaa127fa) c = HH(c, d, a, b, fillTab[offset + 3], S33, 0xd4ef3085) b = HH(b, c, d, a, fillTab[offset + 6], S34, 0x4881d05) a = HH(a, b, c, d, fillTab[offset + 9], S31, 0xd9d4d039) d = HH(d, a, b, c, fillTab[offset + 12], S32, 0xe6db99e5) c = HH(c, d, a, b, fillTab[offset + 15], S33, 0x1fa27cf8) b = HH(b, c, d, a, fillTab[offset + 2], S34, 0xc4ac5665) a = II(a, b, c, d, fillTab[offset + 0], S41, 0xf4292244) d = II(d, a, b, c, fillTab[offset + 7], S42, 0x432aff97) c = II(c, d, a, b, fillTab[offset + 14], S43, 0xab9423a7) b = II(b, c, d, a, fillTab[offset + 5], S44, 0xfc93a039) a = II(a, b, c, d, fillTab[offset + 12], S41, 0x655b59c3) d = II(d, a, b, c, fillTab[offset + 3], S42, 0x8f0ccc92) c = II(c, d, a, b, fillTab[offset + 10], S43, 0xffeff47d) b = II(b, c, d, a, fillTab[offset + 1], S44, 0x85845dd1) a = II(a, b, c, d, fillTab[offset + 8], S41, 0x6fa87e4f) d = II(d, a, b, c, fillTab[offset + 15], S42, 0xfe2ce6e0) c = II(c, d, a, b, fillTab[offset + 6], S43, 0xa3014314) b = II(b, c, d, a, fillTab[offset + 13], S44, 0x4e0811a1) a = II(a, b, c, d, fillTab[offset + 4], S41, 0xf7537e82) d = II(d, a, b, c, fillTab[offset + 11], S42, 0xbd3af235) c = II(c, d, a, b, fillTab[offset + 2], S43, 0x2ad7d2bb) b = II(b, c, d, a, fillTab[offset + 9], S44, 0xeb86d391) result[1] = result[1] + a result[2] = result[2] + b result[3] = result[3] + c result[4] = result[4] + d result[1] = result[1] & 0xffffffff result[2] = result[2] & 0xffffffff result[3] = result[3] & 0xffffffff result[4] = result[4] & 0xffffffff end local retStr = '' for i = 1,4 do for _ = 1,4 do local temp = result[i] & 0x0F local str = HexTable[temp + 1] result[i] = result[i] >> 4 temp = result[i] & 0x0F retStr = retStr .. HexTable[temp + 1] .. str result[i] = result[i] >> 4 end end return string.lower(retStr) end return getvcmd5(code) end --vcmd5加密 __VCMD5_("加密内容") ZZRc4 = {} ZZMathBit = {} function ZZMathBit.__xorBit(left, right) return (left + right) == 1 and 1 or 0 end function ZZMathBit.__base(left, right, op) if left < right then left, right = right, left end local res = 0 local shift = 1 while left ~= 0 do local ra = left % 2 local rb = right % 2 res = shift * op(ra,rb) + res shift = shift * 2 left = math.modf( left / 2) right = math.modf( right / 2) end return res end function ZZMathBit.xorOp(left, right) return ZZMathBit.__base(left, right, ZZMathBit.__xorBit) end function __VCRC4_(text,key,kasi) if kasi==false then str = text str=str:gsub("[%s%p]",""):upper() local index=1 local ret="" for index=1,str:len(),2 do ret=ret..string.char(tonumber(str:sub(index,index+1),16)) end text=ret end local function KSA(key) local keyLen = string.len(key) local schedule = {} local keyByte = {} for i = 0, 255 do schedule[i] = i end for i = 1, keyLen do keyByte[i - 1] = string.byte(key, i, i) end local j = 0 for i = 0, 255 do j = (j + schedule[i] + keyByte[ i % keyLen]) % 256 schedule[i], schedule[j] = schedule[j], schedule[i] end return schedule end local function PRGA(schedule, textLen) local i = 0 local j = 0 local k = {} for n = 1, textLen do i = (i + 1) % 256 j = (j + schedule[i]) % 256 schedule[i], schedule[j] = schedule[j], schedule[i] k[n] = schedule[(schedule[i] + schedule[j]) % 256] end return k end local function output(schedule, text) local len = string.len(text) local c = nil local res = {} for i = 1, len do c = string.byte(text, i,i) res[i] = string.char(ZZMathBit.xorOp(schedule[i], c)) end return table.concat(res) end local textLen = string.len(text) local schedule = KSA(key) local k = PRGA(schedule, textLen) str=output(k, text) if kasi==true then str = tostring(str) local index=1 local ret="" for index=1,str:len() do ret=ret..string.format("%02X",str:sub(index):byte()) end return string.lower(ret) else return str end end --小鱼云验证RC42加密和解密配置 __VCRC4_("加密内容","密码",false=解密_true=加密) function ultra(get,post) local c=gg.makeRequest(get,nil,post).content if c == nil then os.exit(print('请允许网络申请')) end return c end --请求 ---[=[上面不要乱动]=]------------------------------------------------------------------------------------------------------------------- ---[=[下方为后台配置]=]------------------------------------------------------------------------------------------------------------------- xxxxxxx="https://www.xlcver.top/" local xxxxxxx_Kami=xxxxxxx.."/api.php?api=kmlogon" --接口名称[卡密登录] local xxxxxxx_jieba=xxxxxxx.."/api.php?api=kmunmachine" --接口名称[卡密解绑] local xxxxxxx_to_configure=xxxxxxx.."/api.php?api=ini" --接口名称[应用配置] local xxxxxxx_Notice=xxxxxxx.."/api.php?api=notice" --接口名称[应用公告] if ionic['appid']=='' or ionic['appidkey']=='' or ionic['rc4key']=='' or ionic['kawang']=='' or ionic['yzts']=='' then gg.alert("关键东西没填,运行啥啊?") os.exit() end local xxxxxxx_RC4=ionic['rc4'] --是否 __VCRC4_ 加密[false=关 true=开] --选择 RC4加密-2 否则会乱码 --打开 签名放DATA里:打开 FILES_DIR="/sdcard/Android/" --卡密 设备码 路径 ---[=[ ↑配置 ]=]------------------------------------------------------------------------------------------------------------------- Notice=ultra(xxxxxxx_Notice.."&app=".. ionic['appid'],"") No=Notice:match('"code":(.-),') if No ~= nil then No=Notice:match('"msg":"(.-)",') if No==nil then xxxxxxx_RC4=false--判定是否关闭 else gg.alert("公告接口:"..No)--对话框 os.exit() end end if xxxxxxx_RC4 == true then Notice=__VCRC4_(Notice,ionic['rc4key'],false) end Notice=Notice:match('"app_gg":"(.-)"},')--获取公告 if Notice==nil then gg.alert('错误❎') No=Notice:match('"code":(.-),') if No ~= nil then No=Notice:match('"msg":"(.-)",') if No==nil then xxxxxxx_RC4=false--判定是否关闭 else gg.alert("公告接口:"..No)--对话框 os.exit() end end else if Notice~="" then Notice1=Notice:gsub('换行代码','\n') __yygg_=Notice1 else __yygg_='空' end end ---[=[上面是公告]=]------------------------------------------------------------------------------------------------------------------- xxcisu="无法获取" gongxing=ultra(xxxxxxx_to_configure.."&app=".. ionic['appid'],"") No=gongxing:match('"code":(.-),') if No ~= nil then No=gongxing:match('"msg":"(.-)",') if No==nil then xxxxxxx_RC4=false--判定是否关闭 else gg.alert("应用配置接口:"..No)--对话框 os.exit() end end if xxxxxxx_RC4 == true then gongxing=__VCRC4_(gongxing,ionic['rc4key'],false) end xxcisu=gongxing:match('"api_total":"(.-)"}')--启动次数 if gongxing==nil then No=gongxing:match('"code":(.-),') if No ~= nil then No=gongxing:match('"msg":"(.-)",') if No==nil then xxxxxxx_RC4=false--判定是否关闭 else gg.alert("应用配置接口:"..No)--对话框 os.exit() end end else end ---[=[获取更新↑]=]------------------------------------------------------------------------------------------------------------------- function yanzzzzz(km,sbm) key=__VCMD5_("kami="..km.."&markcode="..sbm.."&t="..os.time().."&".. ionic['appidkey']) --计算签名 Random=__VCMD5_(__VCRC4_(os.time().."小鱼云验证",ionic['rc4key'],true)..ionic['appidkey']..sbm) --随机[用来计算是否相等] bops="kami="..km.."&markcode="..sbm.."&t="..os.time().."&sign="..key --需要请求的数据 if xxxxxxx_RC4 == true then bops="data="..__VCRC4_(bops,ionic['rc4key'],true) end-- 把请求数据用RC4加密 HUT=ultra(xxxxxxx_Kami.."&app=".. ionic['appid'],bops.."&value="..Random) --请求数据 if HUT~=nil then if xxxxxxx_RC4 == true then HUT=__VCRC4_(HUT,ionic['rc4key'],false) end-- 把返回的数据用RC4解密 qued=HUT:match('code":(.-),')--获取编号 200是成功 vip=HUT:match('vip":"(.-)"},')--获取 卡密时间 yanzen=HUT:match('check":"(.-)"')--获取随机值 tinme=HUT:match('time":(.-),')--获取时间搓 fanhui=HUT:match('msg":"(.-)",')--获取错误 if qued~="200" then gg.alert(fanhui)--返回错误 io.open(FILES_DIR.."卡密","w"):write("")--写 io.open(FILES_DIR.."登录","w"):write("false")--写 else if (tinme-os.time())>150 or (tinme-os.time())<-150 then gg.setVisible(false) gg.toast("数据超时!") else--时间10小于就跳转 if yanzen~=__VCMD5_(tinme..ionic['appidkey']..Random) then gg.setVisible(false) gg.toast("修改数据???") io.open(FILES_DIR.."登录","w"):write("false")--写 else--网络数据是否修改 gg.setVisible(false) vip1=os.date("%Y".."年".."%m".."月".."%d".."日".."\r".."%H".."时".."%M".."分".."%S".."秒\n",vip) io.open(FILES_DIR.."卡密","w"):write(km)--写 kll=gg.alert("登入成功:\n\n登录时间∶\n"..vip1,"确定","取消自动登录")--提示--获取到期时间 if kll == 2 then io.open(FILES_DIR.."登录","w"):write("false")--写 end _ENV['脚本内容']()-- --登入成功后的动作------------------------------------------------------------------------------------------------------------------ end end end else gg.setVisible(false) gg.toast("请检查网络!") end end ---[=[ 卡密登入↑ ]=]------------------------------------------------------------------------------------------------------------------- function jiebang(km,sbm) gg.setVisible(false) key=__VCMD5_("kami="..km.."&markcode="..sbm.."&t="..os.time().."&".. ionic['appidkey']) bops="kami="..km.."&markcode="..sbm.."&t="..os.time().."&sign="..key if xxxxxxx_RC4 == true then bops= "data="..__VCRC4_(bops,ionic['rc4key'],true) end HUT=ultra(xxxxxxx_jieba.."&app=".. ionic['appid'],bops) if xxxxxxx_RC4 == true then HUT=__VCRC4_(HUT,ionic['rc4key'],false) end-- xxxxxxx_Base64 qued=HUT:match('code":(.-),') fanhui=HUT:match('msg":"(.-)",') yanzen=HUT:match('check":"(.-)"') tinme=HUT:match('time":(.-),') gg.alert(fanhui) end ---[=[ 解绑卡密↑ ]=]------------------------------------------------------------------------------------------------------------------- rq=os.date("%Y".."年".."%m".."月".."%d".."日".." ".."%H".."时".."%M".."分".."%S".."秒") local a={} fien={io.open(FILES_DIR.."卡密","r"),io.open(FILES_DIR.."设备码","r"),io.open(FILES_DIR.."登录","r")} if fien[1]==nil then io.open(FILES_DIR.."卡密","w"):write("")--写 a[1]=io.open(FILES_DIR.."卡密","r"):read("*a")--读 else a[1]=io.open(FILES_DIR.."卡密","r"):read("*a")--读 end--fien[1]--卡密 if fien[2]==nil then io.open(FILES_DIR.."设备码","w"):write(__VCMD5_(rq))--写 a[2]=io.open(FILES_DIR.."设备码","r"):read("*a")--读 else a[2]=io.open(FILES_DIR.."设备码","r"):read("*a")--读 end--fien[2]--机器码 fien2=io.open(FILES_DIR.."设备码","r"):read("*a")--读 if fien2=="" then io.open(FILES_DIR.."设备码","w"):write(__VCMD5_(rq))--写 fien2=io.open(FILES_DIR.."设备码","r"):read("*a")--读 a[2]=fien2 end if fien[3]==nil then io.open(FILES_DIR.."登录","w"):write("false")--写 a[3]=io.open(FILES_DIR.."登录","r"):read("*a")--读 else a[3]=io.open(FILES_DIR.."登录","r"):read("*a")--读 end--fien[2]--机器码 fien3=io.open(FILES_DIR.."登录","r"):read("*a")--读 if fien3=="" then io.open(FILES_DIR.."登录","w"):write("false")--写 fien3=io.open(FILES_DIR.."登录","r"):read("*a")--读 a[3]=fien3 end sbm=a[2]--设备码 km=a[1]--卡密 --判定自动登入 if a[3]=="true" then a[3]=true yanzzzzz(a[1],sbm) elseif a[3]=="false" then a[3]=false MainVC=function() ionic['yzts']=ionic['yzts']:gsub('验证启动',xxcisu) ionic['yzts']=ionic['yzts']:gsub('验证公告',__yygg_) local hak=gg.prompt({ ionic['yzts'],'自动登入','购买卡密','退出脚本' },{ km, a[3] },{ 'text',--文字 'checkbox',--多选 'checkbox', 'checkbox', }) if hak==nil then gg.toast("取消……")--提示 elseif hak[1]=="1" then---[=[ ↓解绑 ]=]------------------------------------------------------------------------------------------------------------------- gg.toast("开始解绑卡密……")--提示 local hak2=gg.prompt({ '现在时间:'..rq.."\n请输入解绑卡密:" },{ km, },{ 'text',--文字 })--文本功能 if hak2==nil then gg.toast("取消……")--提示 else jiebang(hak2[1],sbm) ---[=[ ↑ 输入卡密跳转解绑卡密 ]=]------------------------------------------------------------------------------------------------------------------- end else---[=[ ↓卡密登入 ]=]------------------------------------------------------------------------------------------------------------------- if hak[2]==true then io.open(FILES_DIR.."登录","w"):write("true")--写 elseif hak[2]==false then io.open(FILES_DIR.."登录","w"):write("false")--写 end if hak[3]==true then gg.alert(ionic['kawang'],'复制') gg.copyText(ionic['kawang']) os.exit() end if hak[4]==true then os.exit() end yanzzzzz(hak[1],sbm) ---[=[ ↑ 输入卡密跳转登入卡密 ]=]------------------------------------------------------------------------------------------------------------------- end end mainvc='MainVC' end while(true) do if gg.isVisible(true) then gg.setVisible(false) _G[mainvc]() end end end local ionic = { appid = '11424', --APPID appidkey = 'ZxyxA3XDNJdj8Aoc', --APPID密钥 rc4key = 'WwZEnY3PDJY11424', --RC4密钥 kawang = '【闲鱼】https://m.tb.cn/h.itQvcUq?tk=SEwh58g9G49 CZ057 ', --卡网地址 yzts = [[ 请输入卡密: 全网启动:验证启动次 公告:验证公告 ]], --验证提示 rc4=true, --是否RC4 false=关 true=开 --如加密 后台请选择RC4加密-2 否则会乱码 } _ENV['脚本内容']=function() ---[=[脚本可以复制到下面]=]------------------------------------------------------------------------------------------------------------------- -- 使用 E03 的云模块(支持 CA 系列控件) loadYunLuaGroup("5C3C4E3813681C4C204C35346F1B4C2F7EFF612D2B22176FF346535E1C0B1E493339036EE15318") function init() stab = _ENV["分页"] ttitle = _ENV["标题"] xfcpic = _ENV["悬浮窗图标"] end -- ==================== 全局变量 ==================== local LAST_MODIFY_DATA = nil local LAST_SEARCH_VALUE = nil local LAST_MODIFY_COUNT = 0 local sj = {} local xgz = {} local LOOP_INTERVAL = 4 local IS_LOOP_ACTIVE = false local TERRAIN_LOOP_ACTIVE = false local TERRAIN_LOOP_INTERVAL = 4 local ssc_active = false local GLOBAL_SPEED_DATA = nil local GLOBAL_SPEED_MULTIPLIER = 3.0 local GAME_SPEED_ACTIVE = false local GAME_SPEED_VALUE = 3.0 local GAME_SPEED_TIMER = nil local MONSTER_TAKEOFF_DATA = nil local wukong_invincible_active = false local zuilong_gather_data = nil local step_active = false local MONSTER_0HP_LOOP_ACTIVE = false local LAST_MODIFIED_HERO_ID = nil local BUDDHA_LIGHT_DATA = nil local BUDDHA_LIGHT_ACTIVE = false local ZUILONG_NO_COOLDOWN_DATA = nil local ZUILONG_NO_MANACOST_DATA = nil -- ==================== 内存操作函数 ==================== function search(ss,lx,nc,dz1,dz2) if ss~=nil then if lx~=nil then if nc==nil then nc=32 end gg.setRanges(nc) if dz1==nil then dz1="-1" end if dz2==nil then dz1="0" end gg.searchNumber(ss,lx,false,536870912,dz1,dz2) sl=gg.getResultCount() if sl~=0 then sj=gg.getResults(sl) gg.clearResults() else gg.toast("未找到结果") end end end end function py1(value,lx,py) if #sj~=nil then z1={} z2={} for i=1,#sj do z1[i]={} z1[i].address=sj[i].address+py z1[i].flags=lx end z1=gg.getValues(z1) for i=1,#sj do if z1[i].value==value then z2[#z2+1]={} z2[#z2]=sj[i] end end sj=z2 z1={} z2={} else gg.toast("没有搜索结果") end end function py2(value,lx,py) if #sj~=nil then z1={} z2={} for i=1,#sj do z1[i]={} z1[i].address=sj[i].address+py z1[i].flags=lx end z1=gg.getValues(z1) for ii,value in ipairs(z1) do if z1[ii].value~=value then z2[#z2+1]={} z2[#z2]=sj[ii] end end sj=z2 z1={} z2={} end end function xg1(value,lx,py,dj) if #sj~=nil then z={} for i=1,#sj do z[i]={} z[i].address=sj[i].address+py z[i].flags=lx z[i].value=value if dj==true then z[i].freeze=true end end if dj==true then gg.addListItems(z) else gg.clearList() gg.setValues(z) end else gg.toast("没有可修改的结果") end end function xg2(bz,value,lx,py,dj) if #bz~=nil then z={} for i=1,#bz do z[i]={} z[i].address=bz[i].address+py z[i].flags=lx z[i].value=value if dj==true then z[i].freeze=true end end if dj==true then gg.addListItems(z) else gg.clearList() gg.setValues(z) end end end function bc(bz) if sj~=nil then _ENV[bz]=sj else gg.toast("没有结果可以保存") end end function BaAdd(add) t=gg.getValues({[1]={address=add,flags=4}}) return t[1].value&0xFFFFFFFF end function set(dz,xg,lx,dj) if dj=="true" then gg.addListItems({{address=dz,flags=lx,value=xg,freeze=true}}) else gg.setValues({{address=dz,flags=lx,value=xg}}) end end -- ==================== 秒过功能 ==================== function InstantPass() gg.clearResults() search(8000,4,4) py1(-1,4,48) py1(10,4,24) xg1(9000,4,56,true) search(900000,4,4) py1(700,4,80) xg1(0,4,-312,false) xg1(0,4,-268,false) xg1(1,4,-24,false) xg1(0,4,-248,false) xg1(1,4,-272,false) xg1(1,4,-152,false) xg1(2000000,4,0,false) gg.toast("秒过功能开启成功") gg.clearResults() end function SetLoopInterval() local input = gg.prompt({"请输入循环间隔时间(秒):"}, {tostring(LOOP_INTERVAL)}, {"number"}) if input and input[1] then local interval = tonumber(input[1]) if interval and interval > 0 then LOOP_INTERVAL = interval gg.toast("循环间隔已设置为: " .. interval .. "秒") else gg.toast("请输入有效的正数") end else gg.toast("设置已取消") end end function StartLoopInstantPass() if IS_LOOP_ACTIVE then gg.toast("循环已在运行中") return end IS_LOOP_ACTIVE = true gg.toast("秒过循环已开启,间隔: " .. LOOP_INTERVAL .. "秒") local loop_thread = function() local loop_count = 0 while IS_LOOP_ACTIVE do loop_count = loop_count + 1 gg.clearResults() search(8000,4,4) py1(-1,4,48) py1(10,4,24) xg1(9000,4,56,true) search(900000,4,4) py1(700,4,80) xg1(0,4,-312,false) xg1(0,4,-268,false) xg1(1,4,-24,false) xg1(0,4,-248,false) xg1(1,4,-272,false) xg1(1,4,-152,false) xg1(2000000,4,0,false) if loop_count == 1 then gg.toast("第" .. loop_count .. "次秒过完成") end gg.clearResults() if IS_LOOP_ACTIVE then local start_time = os.time() while os.time() - start_time < LOOP_INTERVAL and IS_LOOP_ACTIVE do gg.sleep(1000) end end end gg.toast("秒过循环已停止") end local success, error = pcall(loop_thread) if not success then gg.toast("循环执行出错: " .. tostring(error)) IS_LOOP_ACTIVE = false end end function StopLoopInstantPass() if not IS_LOOP_ACTIVE then gg.toast("循环未在运行") return end IS_LOOP_ACTIVE = false gg.toast("秒过循环已停止") end -- ==================== 无视地形秒过 ==================== function TerrainIgnorePass() gg.clearResults() search(-121, 4, 4) py1(-127, 4, 8) py1(-125, 4, 16) py1(-127, 4, -8) py1(-125, 4, -208) py1(-125, 4, -240) py1(-127, 4, -264) xg1(0, 4, -244, false) xg1(0, 4, -212, false) xg1(1, 4, -116, false) xg1(1, 4, -236, false) gg.toast("无视地形秒过功能开启成功") gg.clearResults() end function SetTerrainLoopInterval() local input = gg.prompt({"请输入循环间隔时间(秒):"}, {tostring(TERRAIN_LOOP_INTERVAL)}, {"number"}) if input and input[1] then local interval = tonumber(input[1]) if interval and interval > 0 then TERRAIN_LOOP_INTERVAL = interval gg.toast("循环间隔已设置为: " .. interval .. "秒") else gg.toast("请输入有效的正数") end else gg.toast("设置已取消") end end function StartLoopTerrainIgnorePass() if TERRAIN_LOOP_ACTIVE then gg.toast("循环已在运行中") return end TERRAIN_LOOP_ACTIVE = true gg.toast("无视地形秒过循环已开启,间隔: " .. TERRAIN_LOOP_INTERVAL .. "秒") local loop_thread = function() local loop_count = 0 while TERRAIN_LOOP_ACTIVE do loop_count = loop_count + 1 gg.clearResults() search(-121, 4, 4) py1(-127, 4, 8) py1(-125, 4, 16) py1(-127, 4, -8) py1(-125, 4, -208) py1(-125, 4, -240) py1(-127, 4, -264) xg1(0, 4, -244, false) xg1(0, 4, -212, false) xg1(1, 4, -116, false) xg1(1, 4, -236, false) if loop_count == 1 then gg.toast("第" .. loop_count .. "次无视地形秒过完成") end gg.clearResults() if TERRAIN_LOOP_ACTIVE then local start_time = os.time() while os.time() - start_time < TERRAIN_LOOP_INTERVAL and TERRAIN_LOOP_ACTIVE do gg.sleep(1000) end end end gg.toast("无视地形秒过循环已停止") end local success, error = pcall(loop_thread) if not success then gg.toast("循环执行出错: " .. tostring(error)) TERRAIN_LOOP_ACTIVE = false end end function StopLoopTerrainIgnorePass() if not TERRAIN_LOOP_ACTIVE then gg.toast("循环未在运行") return end TERRAIN_LOOP_ACTIVE = false gg.toast("无视地形秒过循环已停止") end -- ==================== 基础内存操作 ==================== local function simpleSearch(value, type) gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber(value, type) return gg.getResultsCount() end local function editAll(value, type) local results = gg.getResults(gg.getResultsCount()) for i, v in ipairs(results) do v.value = value v.freeze = false end gg.setValues(results) return #results end -- ==================== 万能修改 ==================== function UniversalModify() print("========================================") print(" 🛠️ 万能修改脚本 v1.0") print("========================================") gg.toast("请输入要搜索的数值") local searchValue = gg.prompt({"请输入要搜索的值:"}, {"100.0"}, {"number"}) if searchValue == nil then gg.toast("已取消") return end print("正在搜索数值: " .. searchValue[1]) gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber(searchValue[1], gg.TYPE_DOUBLE) local results = gg.getResults(10000) local resultCount = #results print("找到 " .. resultCount .. " 个结果") if resultCount == 0 then gg.alert("❌ 未找到匹配的数值", "确定") return end gg.toast("请选择要修改的数量") local modifyCountInput = gg.prompt({"请输入要修改的数量 (1-" .. resultCount .. "):"}, {tostring(math.min(150, resultCount))}, {"number"}) if modifyCountInput == nil then gg.toast("已取消") return end local modifyCount = tonumber(modifyCountInput[1]) if modifyCount < 1 or modifyCount > resultCount then modifyCount = math.min(150, resultCount) end local selectedResults = {} for i = 1, modifyCount do selectedResults[i] = results[i] end print("已选择 " .. modifyCount .. " 个结果") gg.toast("请输入新数值") local newValue = gg.prompt({"请输入要修改为的新数值:"}, {"999.0"}, {"number"}) if newValue == nil then gg.toast("已取消") return end local actionChoice = gg.choice({"✅ 仅修改数值", "❄️ 修改并冻结", "🚫 取消操作"}, nil, "请选择操作方式:") if actionChoice == nil or actionChoice == 3 then gg.toast("操作已取消") return end local originalData = {} for i = 1, modifyCount do originalData[i] = { address = selectedResults[i].address, originalValue = selectedResults[i].value, frozen = (actionChoice == 2) } end for i = 1, modifyCount do selectedResults[i].value = tonumber(newValue[1]) selectedResults[i].name = "修改项_" .. i if actionChoice == 2 then selectedResults[i].freeze = true else selectedResults[i].freeze = false end end gg.setValues(selectedResults) if actionChoice == 2 then gg.addListItems(selectedResults) end LAST_MODIFY_DATA = originalData LAST_SEARCH_VALUE = tonumber(searchValue[1]) LAST_MODIFY_COUNT = modifyCount local actionText = {"修改", "修改并冻结"} gg.toast("成功" .. actionText[actionChoice] .. " " .. modifyCount .. " 个数值") local detailMsg = "原数值: " .. searchValue[1] .. "\n新数值: " .. newValue[1] .. "\n修改数量: " .. modifyCount .. "\n操作类型: " .. actionText[actionChoice] gg.alert(detailMsg, "修改完成") gg.clearResults() end function RestoreLastModify() if LAST_MODIFY_DATA == nil then gg.alert("❌ 没有找到可恢复的修改记录", "确定") return end local choice = gg.choice({"✅ 确认恢复上次修改", "❌ 取消恢复"}, nil, "确定要恢复上次修改吗?\n将恢复 " .. LAST_MODIFY_COUNT .. " 个数值") if choice == 1 then local restoreResults = {} for i = 1, #LAST_MODIFY_DATA do local data = LAST_MODIFY_DATA[i] restoreResults[i] = { address = data.address, value = data.originalValue, flags = gg.TYPE_DOUBLE, freeze = false, name = "恢复项_" .. i } end gg.setValues(restoreResults) if gg.getListItems then local frozenItems = gg.getListItems() if #frozenItems > 0 then for i = 1, #frozenItems do for j = 1, #LAST_MODIFY_DATA do if frozenItems[i].address == LAST_MODIFY_DATA[j].address then gg.removeListItems({frozenItems[i]}) break end end end end end gg.toast("✅ 已恢复 " .. LAST_MODIFY_COUNT .. " 个数值") LAST_MODIFY_DATA = nil LAST_SEARCH_VALUE = nil LAST_MODIFY_COUNT = 0 else gg.toast("恢复操作已取消") end end function ShowUniversalModifyInstructions() gg.alert([[ 🛠️ 万能修改 - 使用攻略 1.八戒第四次普攻提高伤害(图内开):2.1 2.有效值(修改的是人物属性魔抗等) 0.008 0.002 0.013 0.001 0.05 ]], "修改攻略") end -- ==================== 穿图 ==================== function StepByStep_Enable() gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC) if simpleSearch("0.1", gg.TYPE_FLOAT) > 0 then editAll("-999", gg.TYPE_FLOAT) step_active = true gg.toast("穿图开启成功") else gg.toast("穿图功能开启失败") end gg.clearResults() end function StepByStep_Disable() gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC) if simpleSearch("-999", gg.TYPE_FLOAT) > 0 then editAll("0.1", gg.TYPE_FLOAT) step_active = false gg.toast("穿图关闭成功") else gg.toast("穿图功能关闭失败") end gg.clearResults() end -- ==================== 内购三生锤 ==================== function InternalBloodsucker() gg.clearResults() gg.setRanges(-1032320) gg.searchNumber("2330", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("2330", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(99999) gg.editAll("-99999999", gg.TYPE_DWORD) gg.toast("内购三生锤开启成功") gg.clearResults() end -- ==================== 三生锤无敌 ==================== function SanShengChuiInvincible_On() if ssc_active then gg.toast('三生锤无敌属性已开启') return end gg.setVisible(false) gg.clearResults() gg.setRanges(4) gg.toast('正在修改请勿操作') gg.searchNumber('500;40;15', gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) local count = gg.getResultsCount() if count == 0 then gg.toast('❌ 未找到数据') ssc_active = false return end gg.toast('✅ 找到 ' .. count .. ' 个匹配项,正在修改...') local results = gg.getResults(count) local modifyList = {} for _, v in ipairs(results) do table.insert(modifyList, {address = v.address, flags = gg.TYPE_DWORD, value = '9999'}) end gg.setValues(modifyList) gg.toast('✨ 三生锤无敌属性修改完成!共修改 ' .. #modifyList .. ' 个数值') ssc_active = true end function SanShengChuiInvincible_Off() if not ssc_active then gg.toast('三生锤无敌属性尚未开启') return end ssc_active = false gg.toast('三生锤无敌属性已关闭') end -- ==================== 游戏加速 ==================== function GameSpeed_On() if GAME_SPEED_ACTIVE then gg.toast("游戏加速已开启") return end GAME_SPEED_ACTIVE = true gg.setSpeed(GAME_SPEED_VALUE) if GAME_SPEED_TIMER then gg.clearTimer(GAME_SPEED_TIMER) end GAME_SPEED_TIMER = gg.timer(2000, function() if GAME_SPEED_ACTIVE then gg.setSpeed(GAME_SPEED_VALUE) end end) gg.toast("游戏加速已开启(倍速:" .. GAME_SPEED_VALUE .. ")") end function GameSpeed_Off() if not GAME_SPEED_ACTIVE then gg.toast("游戏加速未开启") return end GAME_SPEED_ACTIVE = false if GAME_SPEED_TIMER then gg.clearTimer(GAME_SPEED_TIMER) GAME_SPEED_TIMER = nil end gg.setSpeed(1.0) gg.toast("游戏加速已关闭") end function SetGameSpeedValue() local input = gg.prompt({"请输入游戏加速倍速 (建议 1~5 倍):"}, {tostring(GAME_SPEED_VALUE)}, {"number"}) if input == nil then gg.toast("已取消") return end local newSpeed = tonumber(input[1]) if not newSpeed or newSpeed <= 0 then gg.toast("倍速必须大于0") return end if newSpeed > 5 then local confirm = gg.choice({"继续使用", "重新输入"}, nil, "⚠️ 倍速超过5倍可能不稳定,是否继续?") if confirm == 2 or confirm == nil then return end end GAME_SPEED_VALUE = newSpeed if GAME_SPEED_ACTIVE then gg.setSpeed(GAME_SPEED_VALUE) gg.toast("游戏加速倍速已更新为: " .. GAME_SPEED_VALUE .. " 倍") else gg.toast("游戏加速倍速已保存为: " .. GAME_SPEED_VALUE .. " 倍") end end -- ==================== 全局加速(内存基址) ==================== function SetGlobalSpeedMultiplier() local input = gg.prompt({"请输入全局加速倍速 (建议 1~6 倍):"}, {tostring(GLOBAL_SPEED_MULTIPLIER)}, {"number"}) if input == nil then gg.toast("已取消") return end local newSpeed = tonumber(input[1]) if not newSpeed or newSpeed <= 0 then gg.toast("倍速必须大于0") return end if newSpeed > 6 then local confirm = gg.choice({"继续使用", "重新输入"}, nil, "⚠️ 倍速超过6倍可能不稳定,是否继续?") if confirm == 2 or confirm == nil then return end end GLOBAL_SPEED_MULTIPLIER = newSpeed if GLOBAL_SPEED_DATA then local setRes = gg.setValues({{address = GLOBAL_SPEED_DATA.address, flags = GLOBAL_SPEED_DATA.flags, value = GLOBAL_SPEED_MULTIPLIER}}) if setRes then gg.toast("全局加速倍速已更新为: " .. GLOBAL_SPEED_MULTIPLIER .. " 倍") else gg.toast("倍速更新失败") end else gg.toast("全局加速倍速已保存为: " .. GLOBAL_SPEED_MULTIPLIER .. " 倍") end end function GlobalSpeed_On() if GLOBAL_SPEED_DATA then gg.toast("全局加速已开启(倍速:" .. GLOBAL_SPEED_MULTIPLIER .. ")") return end local x64 = gg.getTargetInfo().x64 local py = {0x580C8, 0x90, 0x18} local v_t = {} local addr = 0 local idx = 1 for _, value in ipairs(gg.getRangesList("^/data/*libcocos2djs.so:bss*$")) do if value.type:sub(1, 1) == "r" and "Cb" == value.state then if idx == (tonumber('') or 1) then addr = value.start break end idx = idx + 1 end end if addr == 0 then gg.toast("无法定位到数值起始位置") return end v_t[1] = {address = addr + py[1], flags = x64 and 32 or 4} v_t = gg.getValues(v_t) for i = 2, #py do if not x64 then v_t[1].value = v_t[1].value & 0xFFFFFFFF end v_t[1].address = v_t[1].value + py[i] v_t = gg.getValues(v_t) end local targetAddr = v_t[1].address local flags = gg.TYPE_FLOAT local original = gg.getValues({{address = targetAddr, flags = flags}})[1].value GLOBAL_SPEED_DATA = {address = targetAddr, value = original, flags = flags} gg.setValues({{address = targetAddr, flags = flags, value = GLOBAL_SPEED_MULTIPLIER}}) gg.toast("全局加速已开启(倍速:" .. GLOBAL_SPEED_MULTIPLIER .. ")") end function GlobalSpeed_Off() if not GLOBAL_SPEED_DATA then gg.toast("全局加速未开启") return end local data = GLOBAL_SPEED_DATA gg.setValues({{address = data.address, flags = data.flags, value = data.value}}) GLOBAL_SPEED_DATA = nil gg.toast("全局加速已关闭") end -- ==================== 悟空功能 ==================== function WukongKill() gg.clearResults() search(1074921472,4,4) py1(1,4,-108) py1(165,4,4) py1(314,4,12) xg1(9999999999,4,84,false) gg.toast("悟空秒杀开启成功") gg.clearResults() end function WukongInvincible_On() if wukong_invincible_active then gg.toast("悟空无敌已开启") return end gg.clearResults() search(1074921472,4,4) py1(-125,4,8) xg1(1,4,12,false) wukong_invincible_active = true gg.toast("悟空无敌开启成功") gg.clearResults() end function WukongInvincible_Off() if not wukong_invincible_active then gg.toast("悟空无敌未开启") return end gg.clearResults() search(1074921472,4,4) py1(-125,4,8) xg1(0,4,12,false) wukong_invincible_active = false gg.toast("悟空无敌已关闭") gg.clearResults() end function WukongNewKill() gg.clearResults() search(1078198272,4,4) py1(-127,4,8) xg1(20786,4,4,false) gg.toast("悟空新版秒杀开启成功") gg.clearResults() end function WukongCombo() gg.clearResults() search(1074921472,4,4) py1(-125,4,8) xg1(1,4,12,false) search(1078198272,4,4) py1(-127,4,8) xg1(20786,4,4,false) search(1015598704,4,4) py1(-2,4,-8) xg1(0.00592857,16,0,false) xg1(0,16,-4,false) wukong_invincible_active = true gg.toast("悟空无敌+秒杀+加速已开启") gg.clearResults() end function WukongStrongPuReplace() gg.clearResults() search(1078198272, 4, 4) if #sj == 0 then gg.toast("未找到特征数据") return end py1(1015, 4, 4) if #sj == 0 then gg.toast("未找到匹配的技能地址") return end local v = gg.prompt({"请输入技能代码(自己解包查找)"}, {}, {"number"}) if not v then gg.alert("未输入数值") return end xg1(v[1], 4, 4, false) gg.toast("悟空强普技能替换成功") gg.clearResults() end function ShowWukongInstructions() gg.alert([[ 🐵 悟空功能使用说明 秒杀在准备战斗时开启,无敌在地图内开启,新秒杀进入战斗后开 强普技能替换:进入关卡后使用,输入技能代码即可替换普攻 ]], "悟空功能说明") end -- ==================== 坠龙之地 ==================== function Zuilong_Perspective_Single() gg.clearResults() search(1072483532,4,4) if #sj == 0 then gg.toast("未找到透视数据") return end py1(-121,4,-16) py1(-127,4,-8) xg1(999999999,4,52,false) gg.toast("透视已开启") gg.clearResults() end function Zuilong_LeftKill_On() gg.clearResults() search(50000, 4, 4) if #sj == 0 then gg.toast("未找到水晶血量数据") return end py1(1, 4, 8) py1(-120, 4, 188) py1(-125, 4, 212) xg1(0, 4, -32, false) search(2139095040, 4, 4) if #sj == 0 then gg.toast("未找到顺左数据") return end py1(1065353216, 4, -8) py1(1065353216, 4, -4) py1(0, 4, 4) py1(0, 4, 8) py1(0, 4, 12) xg1(529, 16, 20, false) xg1(882, 16, 16, false) gg.toast("秒左功能已执行") gg.clearResults() end function Zuilong_RightKill_On() gg.clearResults() search(50000, 4, 4) if #sj == 0 then gg.toast("未找到水晶血量数据") return end py1(1, 4, 8) py1(-120, 4, 188) py1(-125, 4, 212) xg1(0, 4, -32, false) search(2139095040, 4, 4) if #sj == 0 then gg.toast("未找到顺右数据") return end py1(1065353216, 4, -8) py1(1065353216, 4, -4) py1(0, 4, 4) py1(0, 4, 8) py1(0, 4, 12) xg1(530, 16, 20, false) xg1(6239, 16, 16, false) gg.toast("秒右功能已执行") gg.clearResults() end function Zuilong_Gather_On() if zuilong_gather_data then gg.toast("聚怪已开启") return end gg.clearResults() search(2139095040,4,4) if #sj == 0 then gg.toast("未找到聚怪数据") return end py1(1065353216,4,-8) py1(1065353216,4,-4) py1(0,4,4) py1(0,4,8) py1(0,4,12) xg1(1222,16,20,true) xg1(3563,16,16,true) local records = {} for i, v in ipairs(sj) do table.insert(records, {address=v.address+20, value=1222, flags=16, freeze=true}) table.insert(records, {address=v.address+16, value=3563, flags=16, freeze=true}) end zuilong_gather_data = records gg.toast("聚怪已开启") gg.clearResults() end function Zuilong_Gather_Off() if not zuilong_gather_data then gg.toast("聚怪未开启") return end for _, item in ipairs(zuilong_gather_data) do gg.removeListItems({item}) end zuilong_gather_data = nil gg.toast("聚怪已关闭") end -- ==================== 法宝无冷却(坠龙) ==================== function Zuilong_NoCooldown_On() if ZUILONG_NO_COOLDOWN_DATA then gg.toast("法宝无冷却已开启") return end gg.clearResults() gg.setRanges(4) gg.searchNumber("1072483532", 4) local count = gg.getResultsCount() if count == 0 then gg.toast("未找到法宝数据,请确保在坠龙之地关卡内") gg.clearResults() return end local results = gg.getResults(count) gg.clearResults() local spare = {{"-127", "-16", 4}, {"-123", "-32", 4}, {"-125", "16", 4}, {"-127", "80", 4}} for _, filter in ipairs(spare) do local tmp = {} for _, v in ipairs(results) do table.insert(tmp, {address = v.address + tonumber(filter[2]), flags = filter[3]}) end tmp = gg.getValues(tmp) local filtered = {} for i, val in ipairs(tmp) do if val.value == tonumber(filter[1]) then table.insert(filtered, results[i]) end end results = filtered if #results == 0 then break end end if #results == 0 then gg.toast("特征匹配失败,请确认法宝类型") gg.clearResults() return end local edit = {{"4", "-28", 4}, {"1", "68", 4}} local saveList = {} local origData = {} for _, addr in ipairs(results) do for _, e in ipairs(edit) do local targetAddr = addr.address + tonumber(e[2]) local orig = gg.getValues({{address = targetAddr, flags = e[3]}})[1].value table.insert(origData, {address = targetAddr, originalValue = orig, flags = e[3]}) table.insert(saveList, {address = targetAddr, flags = e[3], value = tonumber(e[1])}) end end gg.setValues(saveList) ZUILONG_NO_COOLDOWN_DATA = origData gg.toast("法宝无冷却已开启") gg.clearResults() end function Zuilong_NoCooldown_Off() if not ZUILONG_NO_COOLDOWN_DATA then gg.toast("法宝无冷却未开启") return end local restoreList = {} for _, item in ipairs(ZUILONG_NO_COOLDOWN_DATA) do table.insert(restoreList, {address = item.address, flags = item.flags, value = item.originalValue}) end gg.setValues(restoreList) ZUILONG_NO_COOLDOWN_DATA = nil gg.toast("法宝无冷却已关闭") end -- ==================== 角色无蓝耗(坠龙) ==================== function Zuilong_NoManaCost_On() if ZUILONG_NO_MANACOST_DATA then gg.toast("角色无蓝耗已开启") return end gg.clearResults() gg.setRanges(4) gg.searchNumber("500", 4) local count = gg.getResultsCount() if count == 0 then gg.toast("未找到数据,请确保在坠龙之地关卡内") gg.clearResults() return end local results = gg.getResults(count) gg.clearResults() local spare = {{"-120", "-4", 4}, {"-127", "4", 4}, {"-125", "12", 4}, {"-125", "20", 4}, {"-125", "28", 4}} for _, filter in ipairs(spare) do local tmp = {} for _, v in ipairs(results) do table.insert(tmp, {address = v.address + tonumber(filter[2]), flags = filter[3]}) end tmp = gg.getValues(tmp) local filtered = {} for i, val in ipairs(tmp) do if val.value == tonumber(filter[1]) then table.insert(filtered, results[i]) end end results = filtered if #results == 0 then break end end if #results == 0 then gg.toast("特征匹配失败,请确认法类型") gg.clearResults() return end local edit = {{"1", "24", 4}} local saveList = {} local origData = {} for _, addr in ipairs(results) do for _, e in ipairs(edit) do local targetAddr = addr.address + tonumber(e[2]) local orig = gg.getValues({{address = targetAddr, flags = e[3]}})[1].value table.insert(origData, {address = targetAddr, originalValue = orig, flags = e[3]}) table.insert(saveList, {address = targetAddr, flags = e[3], value = tonumber(e[1])}) end end gg.setValues(saveList) ZUILONG_NO_MANACOST_DATA = origData gg.toast("角色无蓝耗已开启") gg.clearResults() end function Zuilong_NoManaCost_Off() if not ZUILONG_NO_MANACOST_DATA then gg.toast("角色无蓝耗未开启") return end local restoreList = {} for _, item in ipairs(ZUILONG_NO_MANACOST_DATA) do table.insert(restoreList, {address = item.address, flags = item.flags, value = item.originalValue}) end gg.setValues(restoreList) ZUILONG_NO_MANACOST_DATA = nil gg.toast("角色无蓝耗已关闭") end -- ==================== 72变 ==================== function ModifyHero_72Bian() local id = gg.prompt({"输入英雄ID(数字)"}, {""}, {"number"}) if id and id[1] then local targetID = tonumber(id[1]) if targetID then gg.clearResults() gg.setRanges(-1032320) gg.searchNumber("1;-127;-123;-127;101::50", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("1", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) local count = gg.getResultsCount() if count == 0 then gg.toast("未找到英雄数据,请确保在训练营或关卡内") gg.clearResults() return end gg.getResults(100) gg.editAll(tostring(targetID), gg.TYPE_DWORD) LAST_MODIFIED_HERO_ID = targetID gg.toast("已修改为ID: " .. targetID .. ",共修改 " .. count .. " 处") gg.clearResults() else gg.toast("输入无效") end end end function RestoreHero_72Bian() if not LAST_MODIFIED_HERO_ID then gg.alert("❌ 没有找到修改记录\n请先使用「修改英雄ID」功能", "确定") return end local targetID = LAST_MODIFIED_HERO_ID gg.clearResults() gg.setRanges(-1032320) gg.searchNumber(targetID .. ";-127;-123;-127;101::50", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber(tostring(targetID), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) local count = gg.getResultsCount() if count == 0 then gg.toast("未找到ID为 " .. targetID .. " 的英雄数据") gg.clearResults() return end gg.getResults(100) gg.editAll("1", gg.TYPE_DWORD) LAST_MODIFIED_HERO_ID = nil gg.toast("已恢复英雄(ID:1),共恢复 " .. count .. " 处") gg.clearResults() end function ShowHeroIDTable() gg.alert([[ 英雄ID参考表 前100直接按顺序数 1-孙悟空 2-唐僧 40-通天 51-斗战胜佛 61-后羿 71-六耳 80-真武大帝 89-东皇太一 98-帝俊 后面较为特殊也可以自行测试 103-鹿 107-伏羲 108-女土蝠 ]], "英雄ID查询表") end -- ==================== 法宝秒怪 ==================== local function modifyFabaosearch(targetValue, newValue) gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber(tostring(targetValue), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber(tostring(targetValue), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll(tostring(newValue), gg.TYPE_DWORD) gg.toast("开启成功") end function FaBao_ZhenHunXiaoYiJie() modifyFabaosearch(100310, 20786) end function FaBao_ZhenHunXiaoErJie() modifyFabaosearch(100320, 20786) end function FaBao_YunYangBanYiJie() modifyFabaosearch(100250, 20786) end function FaBao_YunYangBanErJie() modifyFabaosearch(100260, 20786) end function FaBao_KuYeLingYiJie() modifyFabaosearch(100160, 20786) end function FaBao_KuYeLingErJie() modifyFabaosearch(100170, 20786) end function FaBao_KuiHuaLanYiJie() modifyFabaosearch(100330, 20786) end function FaBao_KuiHuaLanErJie() modifyFabaosearch(100340, 20786) end function ShowFaBaoInstructions() gg.alert([[ 法宝秒怪:装备对应法宝后点击按钮即可,一局一开 ]], "法宝秒怪说明") end function ShowZuilongInstructions() gg.alert([[ 坠龙之地功能谨慎使用,胆小者勿用 透视:对局中开启,全图透视,一局一开。 · 秒水晶:秒左边水晶 / 秒右边水晶。 · 聚怪:所有怪物(敌我)聚集在龙坑位置。 · 法宝无冷却:开启后法宝没有冷却时间(所有) · 无蓝耗:开启后角色使用技能无蓝耗。 · 72变改英雄:输入英雄ID替换英雄。只能在训练营使用,悟空必须带原皮。群内提供ID查询表。 · 穿图:坠龙开启后分机,实现穿墙/穿图。 · 内购三生锤:坠龙开启后三生锤价格变为 -999999。 · 三生锤属性增强:属性大幅提升(可能闪退,谨慎使用)。 ]], "坠龙之地说明") end function ShowInstantPassInstructions() gg.alert([[ 秒过功能只能过部分主线,特殊地形可用悟空功能过 假装打一下(1技能,2技能,法宝,普攻,开挂),其他模式直接开 支持元素、镇妖塔、试炼房等 ]], "秒过功能说明") end function ShowAdventureInstructions() gg.alert([[ 无视地形秒过能秒过全部主线,唯一不能秒过的是车迟国高台坐禅 主线假装打一下(1技能,2技能,法宝,普攻,开挂),其他模式直接开 支持元素、镇妖塔、试炼房等 ]], "无视地形秒过说明") end function ShowEntertainmentInstructions() gg.alert([[ 娱乐功能说明: 游戏加速用于活动 全局加速过检测稳定 高跳、佛光美化(降魔之光改双龙戏珠) 强制私聊:开启后可直接私聊指定玩家(具体效果自行测试) 火焰山替换主线关卡:双人组队替换关卡,请在组队界面再开启,输入关卡ID即可替换关卡,不会分机,队友无需操作,可以一起组队打主线 ]], "娱乐功能说明") end function ShowGeneralInstructions() gg.alert([[ 脚本版本 v4.2 功能分页:公告、秒过功能、冒险专区、悟空功能、法宝功能、坠龙之地、娱乐功能、万能修改、设置 请勿在竞技模式下使用 ]], "脚本使用说明") end function ShowNotice() gg.alert([[ 造梦西游外传多功能脚本 v4.2 - 上线直装版本 - 新增坠龙之地法宝无冷却 - 角色无蓝耗开关 - 新增强制私聊功能 - 新增火焰山替换主线关卡 请勿破坏游戏平衡 ]], "公告") end -- ==================== 佛光美化 ==================== local DEFAULT_BUDDHA_SKILL = 13678 local JIANGMO_SKILL = 13166 function BuddhaLight_On() if BUDDHA_LIGHT_ACTIVE then gg.toast("佛光美化已开启") return end gg.clearResults() gg.setRanges(2080896) gg.searchNumber("1635084391", gg.TYPE_DWORD) local count = gg.getResultsCount() if count == 0 then gg.toast("未找到佛光数据,请确保在关卡内") gg.clearResults() return end local results = gg.getResults(count) gg.clearResults() local filtered = {} local tmp = {} for i, v in ipairs(results) do table.insert(tmp, {address = v.address + 4, flags = gg.TYPE_DWORD}) end tmp = gg.getValues(tmp) for i, val in ipairs(tmp) do if val.value == JIANGMO_SKILL then table.insert(filtered, results[i]) end end if #filtered == 0 then gg.toast("未找到降魔之光技能,请确认装备了降魔之光") gg.clearResults() return end BUDDHA_LIGHT_DATA = {} for i, v in ipairs(filtered) do table.insert(BUDDHA_LIGHT_DATA, {address = v.address + 4, originalValue = JIANGMO_SKILL, flags = gg.TYPE_DWORD}) end local modifyList = {} for i, item in ipairs(BUDDHA_LIGHT_DATA) do table.insert(modifyList, {address = item.address, flags = item.flags, value = DEFAULT_BUDDHA_SKILL}) end gg.setValues(modifyList) BUDDHA_LIGHT_ACTIVE = true gg.toast("佛光美化已开启(降魔之光 → 双龙戏珠)") gg.clearResults() end function BuddhaLight_Off() if not BUDDHA_LIGHT_ACTIVE then gg.toast("佛光美化未开启") return end if not BUDDHA_LIGHT_DATA then gg.toast("未找到原始数据,无法恢复") BUDDHA_LIGHT_ACTIVE = false return end local restoreList = {} for i, item in ipairs(BUDDHA_LIGHT_DATA) do table.insert(restoreList, {address = item.address, flags = item.flags, value = item.originalValue}) end gg.setValues(restoreList) BUDDHA_LIGHT_DATA = nil BUDDHA_LIGHT_ACTIVE = false gg.toast("佛光美化已关闭(已恢复降魔之光)") end function BuddhaLight_Custom() local input = gg.prompt({"请输入技能代码(双龙戏珠13678,琉璃法环14190,菩提圣印14446,万法归宗14702)"}, {tostring(DEFAULT_BUDDHA_SKILL)}, {"number"}) if input == nil then gg.toast("已取消") return end local newCode = tonumber(input[1]) if not newCode then gg.toast("请输入有效数字") return end if not BUDDHA_LIGHT_ACTIVE then gg.toast("请先开启佛光美化,再使用自定义") return end if not BUDDHA_LIGHT_DATA then gg.toast("未找到佛光数据,请重新开启") return end local modifyList = {} for i, item in ipairs(BUDDHA_LIGHT_DATA) do table.insert(modifyList, {address = item.address, flags = item.flags, value = newCode}) end gg.setValues(modifyList) gg.toast("佛光技能已自定义为: " .. newCode) end -- ==================== 怪物0血循环 ==================== function Monster0Hp_Loop() gg.clearResults() search(-121,4,4) py1(-121,4,8) py1(-123,4,40) py1(-127,4,96) py1(-120,4,120) xg1(0,4,128,false) gg.clearResults() end function StartMonster0HpLoop() if MONSTER_0HP_LOOP_ACTIVE then gg.toast("怪物0血循环已在运行中") return end MONSTER_0HP_LOOP_ACTIVE = true gg.toast("怪物0血循环已开启,每0.5秒执行一次") local loop_thread = function() while MONSTER_0HP_LOOP_ACTIVE do Monster0Hp_Loop() if MONSTER_0HP_LOOP_ACTIVE then gg.sleep(500) end end gg.toast("怪物0血循环已停止") end local success, error = pcall(loop_thread) if not success then gg.toast("循环执行出错: " .. tostring(error)) MONSTER_0HP_LOOP_ACTIVE = false end end function StopMonster0HpLoop() if not MONSTER_0HP_LOOP_ACTIVE then gg.toast("怪物0血循环未在运行") return end MONSTER_0HP_LOOP_ACTIVE = false gg.toast("怪物0血循环已停止") end -- ==================== 新增:强制私聊 ==================== function ForcePrivateChat() gg.clearResults() search(1331709342,4,4) py1(0,4,4) xg1(257,4,28,false) gg.toast("强制私聊开启成功") gg.clearResults() end -- ==================== 新增:火焰山替换主线关卡 ==================== function FlameMountainReplace() local id = gg.prompt({"请输入关卡ID(在组队界面开启)"}, {""}, {"number"}) if id == nil or id[1] == nil or id[1] == "" then gg.toast("已取消") return end gg.clearResults() search(3005,4,4) py1(-127,4,4) py1(-1,4,16) py1(-127,4,20) xg1(id[1],4,0,false) gg.toast("火焰山关卡替换成功,ID: " .. id[1]) gg.clearResults() end -- ==================== 使用说明 ==================== function ShowPrivateChatInstructions() gg.alert([[ 强制私聊功能:开启后可直接私聊指定玩家(需要知道UID,不知道的也能开),具体效果自行测试。 火焰山替换主线关卡:双人组队替换关卡,请在组队界面再开启,输入关卡ID即可替换关卡,不会分机,队友无需操作,可以一起组队打主线 ]], "私聊&关卡替换说明") end -- ==================== 补全缺失函数 ==================== function MonsterTakeoff_On() gg.toast("怪物起飞功能暂未实现,请联系作者") end function MonsterTakeoff_Off() gg.toast("怪物起飞关闭") end function HighJump_Single() gg.toast("高跳功能暂未实现,请联系作者") end -- ==================== 弹窗公告 ==================== local function MaterialAlert() local alertBuilder = MaterialAlertDialogBuilder(context) alertBuilder.setTitle("公告") alertBuilder.setMessage("造梦西游外传 v4.2(直装版)已加载\n- 上线直装版本\n- 新增坠龙之地法宝无冷却\n- 角色无蓝耗开关\n- 新增强制私聊功能\n- 新增火焰山替换主线关卡") alertBuilder.setPositiveButton("确定") local LayoutParams = luajava.bindClass('android.view.WindowManager$LayoutParams') local alert = alertBuilder.create() alert.getWindow().setType(gg.ANDROID_SDK_INT >= 26 and LayoutParams.TYPE_APPLICATION_OVERLAY or LayoutParams.TYPE_PHONE) alert.show() end luajava.runOnUiThread(MaterialAlert) -- ==================== UI 配置 ==================== _ENV["悬浮窗图标"] = 'https://patchwiki.biligame.com/images/ys/2/29/4k98v9sdrrkrxw8vxfdxll42bdi3czo.png' _ENV["标题"] = '造梦西游外传 v4.2' _ENV["分页"] = { '公告', '秒过功能', '冒险专区', '悟空功能', '法宝功能', '坠龙之地', '娱乐功能', '万能修改', '设置' } init() uistart({ -- 1. 公告 { CAtext('造梦西游外传多功能脚本', '#FF6B35', '16sp', true), CAtext('v4.2 ', '#2196F3', '14sp', true), CAtext('请勿破坏游戏平衡', '#4CAF50', '12sp', true), CAtext('━━ 更新内容 ━━', '#FF9800', '12sp', true), CAtext('✅ 上线直装版本,无需额外配置', '#4CAF50', '12sp'), CAtext('✅ 新增坠龙之地法宝无冷却', '#4CAF50', '12sp'), CAtext('✅ 角色无蓝耗开关', '#4CAF50', '12sp'), CAtext('✅ 新增强制私聊功能', '#4CAF50', '12sp'), CAtext('✅ 新增火焰山替换主线关卡', '#4CAF50', '12sp'), CAtext('━━ 注意事项 ━━', '#FF9800', '12sp', true), CAtext('⚠️ 请勿在竞技模式下使用', '#F44336', '12sp'), CAtext('━━ 详细公告 ━━', '#FF9800', '12sp', true), CAbutton('查看详细公告', ShowNotice, '#4CAF50'), }, -- 2. 秒过功能 { CAtext('🏔️ 无视地形秒过', '#4CAF50', '16sp', true), CAbutton('无视地形秒过', TerrainIgnorePass, '#4CAF50'), CAtext('━━ 循环功能 ━━', '#FF9800', '12sp', true), CAswitch('循环无视地形秒过', StartLoopTerrainIgnorePass, StopLoopTerrainIgnorePass), CAbutton('设置循环时间', SetTerrainLoopInterval, '#9C27B0'), CAbutton('查看详细说明', ShowAdventureInstructions, '#4CAF50'), }, -- 3. 冒险专区 { CAtext('⚡ 冒险专区', '#8BC34A', '16sp', true), CAbutton('秒过功能', InstantPass, '#4CAF50'), CAswitch('循环秒过', StartLoopInstantPass, StopLoopInstantPass), CAbutton('设置循环时间', SetLoopInterval, '#9C27B0'), CAswitch('怪物起飞', MonsterTakeoff_On, MonsterTakeoff_Off), CAswitch('怪物0血循环', StartMonster0HpLoop, StopMonster0HpLoop), CAbutton('查看详细说明', ShowInstantPassInstructions, '#4CAF50'), }, -- 4. 悟空功能 { CAtext('🐵 悟空功能', '#FF9800', '16sp', true), CAbutton('开启悟空秒杀(原版)', WukongKill, '#FF5722'), CAswitch('悟空无敌', WukongInvincible_On, WukongInvincible_Off, '进入关卡后开启'), CAbutton('悟空新版秒杀', WukongNewKill, '#FF9800'), CAbutton('悟空无敌+秒杀+加速', WukongCombo, '#FF5722'), CAbutton('悟空强普技能替换', WukongStrongPuReplace, '#4CAF50'), CAbutton('查看详细说明', ShowWukongInstructions, '#4CAF50'), }, -- 5. 法宝功能 { CAtext('✨ 法宝秒怪', '#9C27B0', '16sp', true), CAbutton('镇魂萧二阶秒怪', FaBao_ZhenHunXiaoErJie, '#4CAF50'), CAbutton('镇魂萧一阶秒怪', FaBao_ZhenHunXiaoYiJie, '#4CAF50'), CAbutton('云阳板一阶秒怪', FaBao_YunYangBanYiJie, '#4CAF50'), CAbutton('云阳板二阶秒怪', FaBao_YunYangBanErJie, '#4CAF50'), CAbutton('枯叶灵一阶秒怪', FaBao_KuYeLingYiJie, '#4CAF50'), CAbutton('枯叶灵二阶秒怪', FaBao_KuYeLingErJie, '#4CAF50'), CAbutton('魁花篮一阶秒怪', FaBao_KuiHuaLanYiJie, '#4CAF50'), CAbutton('魁花篮二阶秒怪', FaBao_KuiHuaLanErJie, '#4CAF50'), CAbutton('查看详细说明', ShowFaBaoInstructions, '#2196F3'), }, -- 6. 坠龙之地 { CAtext('⚔️ 坠龙之地', '#FF5722', '16sp', true), CAbutton('透视', Zuilong_Perspective_Single, '#2196F3'), CAbutton('秒左边水晶', Zuilong_LeftKill_On, '#2196F3'), CAbutton('秒右边水晶', Zuilong_RightKill_On, '#2196F3'), CAswitch('聚怪', Zuilong_Gather_On, Zuilong_Gather_Off, '将怪物聚集到龙坑'), CAswitch('法宝无冷却', Zuilong_NoCooldown_On, Zuilong_NoCooldown_Off, '关闭技能消耗'), CAswitch('角色无蓝耗', Zuilong_NoManaCost_On, Zuilong_NoManaCost_Off), CAbutton('修改英雄ID(72变)', ModifyHero_72Bian, '#2196F3'), CAbutton('恢复英雄(72变)', RestoreHero_72Bian, '#4CAF50'), CAbutton('英雄ID查询表', ShowHeroIDTable, '#4CAF50'), CAswitch('穿图', StepByStep_Enable, StepByStep_Disable, '开启后达到分机效果'), CAbutton('内购三生锤', InternalBloodsucker, '#2196F3'), CAswitch('三生锤无敌属性', SanShengChuiInvincible_On, SanShengChuiInvincible_Off, '可能闪退'), CAbutton('查看详细说明', ShowZuilongInstructions, '#4CAF50'), }, -- 7. 娱乐功能(新增) { CAtext('🎮 娱乐功能', '#9C27B0', '16sp', true), CAswitch('游戏加速', GameSpeed_On, GameSpeed_Off, '活动使用'), CAtext('当前游戏加速倍速: ' .. (GAME_SPEED_VALUE or 3) .. ' 倍', '#FF9800', '12sp'), CAbutton('⚙️ 设置游戏加速倍速', SetGameSpeedValue, '#9C27B0'), CAswitch('全局加速', GlobalSpeed_On, GlobalSpeed_Off, '过检测'), CAtext('当前全局加速倍速: ' .. (GLOBAL_SPEED_MULTIPLIER or 3) .. ' 倍', '#FF9800', '12sp'), CAbutton('⚙️ 设置全局加速倍速', SetGlobalSpeedMultiplier, '#9C27B0'), CAbutton('高跳', HighJump_Single, '#9C27B0'), CAswitch('佛光美化(降魔→双龙)', BuddhaLight_On, BuddhaLight_Off), CAbutton('自定义佛光技能代码', BuddhaLight_Custom, '#2196F3'), CAbutton('强制私聊', ForcePrivateChat, '#4CAF50'), CAbutton('火焰山替换主线关卡', FlameMountainReplace, '#4CAF50'), CAbutton('私聊&关卡替换说明', ShowPrivateChatInstructions, '#2196F3'), CAbutton('查看使用说明', ShowEntertainmentInstructions, '#4CAF50'), }, -- 8. 万能修改 { CAtext('🛠️ 万能修改', '#607D8B', '16sp', true), CAbutton('启动万能修改', UniversalModify, '#2196F3'), CAbutton('一键恢复上次修改', RestoreLastModify, '#4CAF50'), CAbutton('查看攻略', ShowUniversalModifyInstructions, '#9C27B0'), }, -- 9. 设置 { CAtext('⚙️ 设置', '#673AB7', '16sp', true), CAswitch('退出脚本', function() if GAME_SPEED_ACTIVE then GameSpeed_Off() end if GLOBAL_SPEED_DATA then GlobalSpeed_Off() end if MONSTER_TAKEOFF_DATA then MonsterTakeoff_Off() end if wukong_invincible_active then WukongInvincible_Off() end if zuilong_gather_data then Zuilong_Gather_Off() end if step_active then StepByStep_Disable() end if ssc_active then SanShengChuiInvincible_Off() end if MONSTER_0HP_LOOP_ACTIVE then StopMonster0HpLoop() end if BUDDHA_LIGHT_ACTIVE then BuddhaLight_Off() end if ZUILONG_NO_COOLDOWN_DATA then Zuilong_NoCooldown_Off() end if ZUILONG_NO_MANACOST_DATA then Zuilong_NoManaCost_Off() end LAST_MODIFY_DATA = nil IS_LOOP_ACTIVE = false TERRAIN_LOOP_ACTIVE = false Lock.unUi() end, function() end), CAtext('欢迎使用', '#2196F3', '14sp', true), CAtext('请勿破坏游戏平衡', '#666666', '12sp', true), }, }) Lock.Ui(invoke, nil, function(err) print(err) end) --content ---[=[上面可以复制上你的脚本]=]------------------------------------------------------------------------------------------------------------------- end-- ab80fff28ac9259a245266d5b0cc5575c7 while(true) do if gg.isVisible(true) then gg.setVisible(false) _G['Main']() end end end _ENV['小鱼云验证'](ionic)