function readValue(address, flags) return gg.getValues({{address = address, flags = flags}})[1]["value"]end ms = { } function setvalue ( add , value , falgs , dj ) local WY = { } WY [ 1 ] = { } WY [ 1 ].address = add WY [ 1 ].value = value WY [ 1 ].flags = falgs if dj == true then WY [ 1 ].freeze = true gg.addListItems ( WY ) else gg.setValues ( WY ) end end function ms.ss ( num , ty , nc ) local GGNUMBER_1 = num local GGNUMBER_2 = ty local GGNUMBER_3 = false local GGNUMBER_4 = gg.SIGN_EQUAL local GGNUMBER_5 = 0x3000000000 local GGNUMBER_6 = 0xFFFFFFFFFF local GGNUMBER_7 = 0 gg.clearResults ( ) gg.setRanges ( nc ) gg.searchNumber ( GGNUMBER_1 , GGNUMBER_2 , GGNUMBER_3 , GGNUMBER_4 , GGNUMBER_5 , GGNUMBER_6 , GGNUMBER_7 ) Result = gg.getResults ( gg.getResultCount ( ) ) end function ms.py ( num , py , ty ) if ( Result and # Result ~= 0 ) then t = { } for i , v in ipairs ( Result ) do t [ i ] = { } t [ i ].address = v.address + py t [ i ].flags = ty end t = gg.getValues ( t ) for i , v in ipairs ( t ) do if v.value ~= num then Result [ i ] = nil end end local MS = { } for i , v in pairs ( Result ) do MS [ # MS + 1 ] = v end Result = MS end end function ms.bc ( ) data = { } if Result == nil or # Result == 0 then gg.alert ( "开启失败" ) else for i , v in pairs ( Result ) do data [ # data + 1 ] = v.address end end Result = nil end function ms.edit ( nn , off , ty , dj ) if ( Result ) then ms.bc ( ) end if # data > 0 then for i , v in ipairs ( data ) do setvalue ( v + off , nn , ty , dj or false ) end end end local lib = gg.getRangesList() for _ in ipairs(lib) do if string.find(lib[_].name, 'libil2cpp.so') and lib[_].state == 'Xa' and lib[_].type == 'r-xp' then module = lib[_].start break end end hook = { StaticUpdater = 0x1929f34, } function HookCall(set) local action = module + set.hook local recover = gg.getValues({{address = action, flags = 4}})[1].value local function offset(a, b) if a >= b then return string.format("-0x%X", a - b) else return string.format("0x%X", b - a) end return 0 end local original = {} for a, r in pairs(set.method) do original[#original+1] = {address = action, flags = 4, value = "~A8 B [PC,#"..offset(action, module + r).."]"} end original[#original+1] = {address = action, flags = 4, value = recover} for I in ipairs(original) do gg.setValues({original[I]}) gg.sleep(math.random(4 * 7, 5 * 7)) end return true end 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,gg.SIGN_EQUAL,dz1,dz2) sl=gg.getResultCount() if sl~=0 then sj=gg.getResults(sl) gg.toast("搜索到 "..sl.." 个结果️️️") gg.clearResults() else gg.toast("未搜索到结果") end else gg.toast("无搜索值类型") end else gg.toast("无需搜索值") end end function py1(value,lx,py) if #sj~=nil then z1={} z2={} for i=1,#sj do z1[1]={} z1[1].address=sj[i].address+py z1[1].flags=lx z1=gg.getValues(z1) if z1[1].value==value then z2[#z2+1]={} z2[#z2]=sj[i] end end sj=z2 z1={} z2={} gg.toast("共偏移 "..#sj.." 个数据") else gg.toast("没有搜索数据") end end function py2(value,lx,py) if #sj~=nil then z1={} z2={} for i=1,#sj do z1[1]={} z1[1].address=sj[i].address+py z1[1].flags=lx z1=gg.getValues(z1) if z1[1].value~=value then z2[#z2+1]={} z2[#z2]=sj[i] end end sj=z2 z1={} z2={} gg.toast("共偏移 "..#sj.." 个数据") else gg.toast("没有搜索数据") 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 gg.toast("️共修改 "..#z.." 个数据️") 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 gg.toast("❣共修改 "..#z.." 个数据❣") else gg.toast("️️没有搜索数据️️️") end end function editData(qmnb,qmxg)gg.setVisible(false)gg.clearResults()qmnbv=qmnb[3]["value"]or qmnb[3][1]qmnbt=qmnb[3]["type"]or qmnb[3][2]qmnbn=qmnb[2]["name"]or qmnb[2][1]gg.setRanges(qmnb[1]["memory"]or qmnb[1][1])gg.searchNumber(qmnbv,qmnbt)gg.refineNumber(qmnbv,qmnbt)sz=gg.getResultCount()if sz==0 then gg.toast(qmnbn.."开启失败")else sl=gg.getResults(999999)for i=1,sz do pdsz=true for v=4,#qmnb do if pdsz==true then pysz={{}}pysz[1].address=sl[i].address+(qmnb[v]["offset"]or qmnb[v][2])pysz[1].flags=qmnb[v]["type"]or qmnb[v][3]szpy=gg.getValues(pysz)tzszpd=tostring(qmnb[v]["lv"]or qmnb[v][1]):gsub(",","")pyszpd=tostring(szpy[1].value):gsub(",","")if tzszpd==pyszpd then pdjg=true pdsz=true else pdjg=false pdsz=false end end end if pdjg==true then szpy=sl[i].address for x=1,#qmxg do xgsz=qmxg[x]["value"]or qmxg[x][1]xgpy=szpy+(qmxg[x]["offset"]or qmxg[x][2])xglx=qmxg[x]["type"]or qmxg[x][3]xgdj=qmxg[x]["freeze"]or qmxg[x][4]xg={{address=xgpy,flags=xglx,value=xgsz}}if xgdj==true then xg[1].freeze=xgdj gg.addListItems(xg)else gg.setValues(xg)end end xgjg=true end end if xgjg==true then gg.toast(qmnbn.."开启成功")else gg.toast(qmnbn.."开启失败")end end end local lib = gg.getRangesList() for _ in ipairs(lib) do if string.find(lib[_].name, 'libil2cpp.so') and lib[_].state == 'Xa' and lib[_].type == 'r-xp' then module = lib[_].start break end end function returnValue(set) local inputRegister local page = module + set[1] local mmap = set[4] local setva = { {address = mmap + 0x4, flags = 4, value = '~A8 BR X30'}, {address = mmap + set[2], flags = 16, value = set[3]}, {address = page, flags = 4, value = '~A8 LDR X0, [PC,#0x8]'}, {address = page + 0x4, flags = 4, value = '~A8 BR X0'}, {address = page + 0x8, flags = 32, value = mmap}, } if set[3] % 1 == 0 then inputRegister = 'X0' else inputRegister = 'S0' end table.insert(setva, {address = mmap, flags = 4, value = '~A8 LDR '..inputRegister..', [PC,#'..string.format('0x%X', set[2])..']'}) return gg.setValues(setva) end function TL(FUNCTIONADD,TYPE,VALUE) local SOMOD=gg.getRangesList("il2cpp.so") if SOMOD[1]==nil then _error() else gg.setValues({{address=SOMOD[1].start+FUNCTIONADD,flags=TYPE,value=VALUE}}) gg.setValues({{address=SOMOD[1].start+FUNCTIONADD+4,flags=TYPE,value="1EFF2FE1r"}}) end end function WT(FUNCTIONADD,VALUE,REPAIR,REPAIR2) local aa = gg.getRangesList("il2cpp.so")[2] if aa==nil then _error() else gg.setValues({{address=aa.start+FUNCTIONADD,flags=4,value=VALUE}}) if REPAIR == nil then else gg.setValues({{address=aa.start+FUNCTIONADD+4,flags=4,value=REPAIR}}) end if REPAIR2 == nil then else gg.setValues({{address=aa.start+FUNCTIONADD+8,flags=4,value=REPAIR2}}) end end end function _error() TLt = gg.alert("模块未加载\n或选错游戏进程","取消","选择进程") if TLt == 2 then gg.setProcessX() end end function Set(seach,target,set,name) local timeStart = os.clock() gg.clearResults() gg.setRanges(seach[3]) gg.searchNumber(seach[1], seach[2]) local results = gg.getResults(gg.getResultCount()) if #results == 0 then gg.toast("开启失败") return end local kv = {} for tt = 1, #results do kv[tt] = false end for ts = 1, #target do for tt = 1, #results do local currentValue = gg.getValues({{address=results[tt].address+target[ts][2],flags=target[ts][3]}})[1].value if currentValue ~= target[ts][1] then kv[tt] = true end end end local conut = 0 for tttt = 1, #set do for ttt = 1, #results do if not kv[ttt] then gg.addListItems({{address=results[ttt].address+set[tttt][1],flags=set[tttt][2],freeze=true,value=set[tttt][3]}}) conut = conut + 1 end end end if conut > 0 then gg.toast(""..name.."开启成功 共修改"..conut.."个值\n共耗时"..(os.clock() - timeStart).."秒") else gg.toast("未修改任何值") end end function WY(a,b,c,d,e) local time = os.clock() kv = {} local aa = gg.getRangesList(a) if aa[1] == nil then gg.alert("模块未加载\n或选错游戏进程") end local l = gg.getRangesList(a)[1].start for i, k in ipairs (b) do local v = l + k kv[#kv+1] = {address = v, flags = c, value = d, freeze = true} end gg.addListItems(kv) gg.toast(e.."开启成功\n共耗时"..os.clock() - time.."秒\n共修改"..#b.."条值") end function SOGSPY_ST(HDZ,DYZ) if HDZ >= DYZ then py = string.format("0x%X", HDZ - DYZ) return tostring(string.format("-0x%X", py)) else py = string.format("0x%X", DYZ - HDZ) return tostring(string.format("0x%X", py)) end end function SO_PT(FUNCTIONADD, TYPE, VALUE) local SOMOD = gg.getRangesList("il2cpp.so") if SOMOD[2] == nil then gg.alert("开启失败\n内存\n解决方法:请重新选择游戏进程\n") else gg.setValues({{address=SOMOD[2].start+FUNCTIONADD, flags=TYPE, value=VALUE}}) gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+4, flags=TYPE, value="~A8 RET"}}) end end function SO_Deposit(FUNCTIONADD, TYPE, VALUE) local SOMOD = gg.getRangesList("il2cpp.so") if SOMOD[2] == nil then gg.alert("开启失败\n内存\n解决方法:请重新选择游戏进程\n") else gg.setValues({{address=SOMOD[2].start+FUNCTIONADD, flags=4, value="~A8 LDR X0, [PC, #0x8]"}}) gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+4, flags=4, value="~A8 RET"}}) gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+8, flags=TYPE, value=VALUE}}) end end function SO_Deposit(FUNCTIONADD,TYPE,VALUE) local SOMOD=gg.getRangesList("il2cpp.so") if SOMOD[2]==nil then gg.alert("开启失败\n━━━━━━━━━━━━━━━\n错误原因:未找到相关内存\n解决方法:请重新选择游戏进程\n━━━━━━━━━━━━━━━") else gg.setValues({{address=SOMOD[2].start+FUNCTIONADD,flags=4,value='~A8 LDR X0, [PC,#0x8]'}}) gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+4,flags=4,value='~A8 RET'}}) gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+8,flags=TYPE,value=VALUE}}) end end 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.toast("搜索到 "..sl.." 个结果") gg.clearResults() else gg.toast("未搜索到结果") end else gg.toast("无搜索值类型") end else gg.toast("无需搜索值") 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={} gg.toast("共偏移 "..#sj.." 个数据") 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 i=1,#sj do if z1[i].value~=value then z2[#z2+1]={} z2[#z2]=sj[i] end end sj=z2 z1={} z2={} gg.toast("共偏移 "..#sj.." 个数据") 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 i=1,#sj do if z1[i].value~=value then z2[#z2+1]={} z2[#z2]=sj[i] end end sj=z2 z1={} z2={} gg.toast("共偏移 "..#sj.." 个数据") else gg.toast("没有搜索数据") 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 gg.toast("共修改 "..#z.." 个数据") else gg.toast("没有搜索数据") end end function GL(FUNCTIONADD,TYPE,VALUE) local SOMOD=gg.getRangesList("il2cpp.so") if SOMOD[2]==nil then gg.alert("开启失败\n━━━━━━━━━━━━━━━\n错误原因:未找到相关内存\n解决方法:请重新选择游戏进程\n━━━━━━━━━━━━━━━") else gg.setValues({{address=SOMOD[2].start+FUNCTIONADD,flags=TYPE,value=VALUE}}) gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+4,flags=TYPE,value="~A8 RET"}}) end end function TL_TL(a,b,c,d,e) local time = os.clock() kv = {} local aa = gg.getRangesList(a) if aa[1] == nil then gg.alert("模块未加载\n或选错游戏进程") end local l = gg.getRangesList(a)[1].start for i, k in ipairs (b) do local v = l + k kv[#kv+1] = {address = v, flags = c, value = d, freeze = true} end gg.addListItems(kv) gg.toast(e.."开启成功\n共耗时"..os.clock() - time.."秒\n共修改"..#b.."条值") 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 TL(FUNCTIONADD,VALUE,REPAIR,REPAIR2) local aa = gg.getRangesList("libil2cpp.so")[2] if aa==nil then _error() else gg.setValues({{address=aa.start+FUNCTIONADD,flags=4,value=VALUE}}) if REPAIR == nil then else gg.setValues({{address=aa.start+FUNCTIONADD+4,flags=4,value=REPAIR}}) if REPAIR2 == nil then else gg.setValues({{address=aa.start+FUNCTIONADD+8,flags=4,value=REPAIR2}}) end end end end function _error() TLt = gg.alert("模块未加载\n或选错游戏进程","取消","选择进程") if TLt == 2 then gg.setProcessX() end end function SOGSPY_ST(HDZ,DYZ) if HDZ >= DYZ then py=string.format("0x%X",HDZ-DYZ) return tostring(string.format("-0x%X",py)) else py=string.format("0x%X",DYZ-HDZ) return tostring(string.format("0x%X",py)) end end function SO_PT(FUNCTIONADD,TYPE,VALUE) local SOMOD=gg.getRangesList("il2cpp.so") if SOMOD[2]==nil then gg.alert("开启失败\n━━━━━━━━━━━━━━━\n错误原因:未找到相关内存\n解决方法:请重新选择游戏进程\n━━━━━━━━━━━━━━━") else gg.setValues({{address=SOMOD[2].start+FUNCTIONADD,flags=TYPE,value=VALUE}}) gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+4,flags=TYPE,value="~A8 RET"}}) end end local json = json function json() local always_try_using_lpeg = true local register_global_module_table = false local global_module_name = 'json' local pairs, type, tostring, tonumber, getmetatable, setmetatable, rawset = pairs, type, tostring, tonumber, getmetatable, setmetatable, rawset local error, require, pcall, select = error, require, pcall, select local floor, huge = math.floor, math.huge local strrep, gsub, strsub, strbyte, strchar, strfind, strlen, strformat = string.rep, string.gsub, string.sub, string.byte, string.char, string.find, string.len, string.format local strmatch = string.match local concat = table.concat local json = { version = "dkjson 2.5" } if register_global_module_table then _G[global_module_name] = json end local _ENV = nil pcall(function() local debmeta = require "debug".getmetatable if debmeta then getmetatable = debmeta end end) json.null = setmetatable({}, { __tojson = function() return "null" end }) local function isarray (tbl) local max, n, arraylen = 0, 0, 0 for k, v in pairs(tbl) do if k == 'n' and type(v) == 'number' then arraylen = v if v > max then max = v end else if type(k) ~= 'number' or k < 1 or floor(k) ~= k then return false end if k > max then max = k end n = n + 1 end end if max > 10 and max > arraylen and max > n * 2 then return false end return true, max end local escapecodes = { ["\""] = "\\\"", ["\\"] = "\\\\", ["\b"] = "\\b", ["\f"] = "\\f", ["\n"] = "\\n", ["\r"] = "\\r", ["\t"] = "\\t" } local function escapeutf8 (uchar) local value = escapecodes[uchar] if value then return value end local a, b, c, d = strbyte(uchar, 1, 4) a, b, c, d = a or 0, b or 0, c or 0, d or 0 if a <= 0x7f then value = a elseif 0xc0 <= a and a <= 0xdf and b >= 0x80 then value = (a - 0xc0) * 0x40 + b - 0x80 elseif 0xe0 <= a and a <= 0xef and b >= 0x80 and c >= 0x80 then value = ((a - 0xe0) * 0x40 + b - 0x80) * 0x40 + c - 0x80 elseif 0xf0 <= a and a <= 0xf7 and b >= 0x80 and c >= 0x80 and d >= 0x80 then value = (((a - 0xf0) * 0x40 + b - 0x80) * 0x40 + c - 0x80) * 0x40 + d - 0x80 else return "" end if value <= 0xffff then return strformat("\\u%.4x", value) elseif value <= 0x10ffff then value = value - 0x10000 local highsur, lowsur = 0xD800 + floor(value / 0x400), 0xDC00 + (value % 0x400) return strformat("\\u%.4x\\u%.4x", highsur, lowsur) else return "" end end local function fsub (str, pattern, repl) if strfind(str, pattern) then return gsub(str, pattern, repl) else return str end end local function quotestring (value) value = fsub(value, "[%z\1-\31\"\\\127]", escapeutf8) if strfind(value, "[\194\216\220\225\226\239]") then value = fsub(value, "\194[\128-\159\173]", escapeutf8) value = fsub(value, "\216[\128-\132]", escapeutf8) value = fsub(value, "\220\143", escapeutf8) value = fsub(value, "\225\158[\180\181]", escapeutf8) value = fsub(value, "\226\128[\140-\143\168-\175]", escapeutf8) value = fsub(value, "\226\129[\160-\175]", escapeutf8) value = fsub(value, "\239\187\191", escapeutf8) value = fsub(value, "\239\191[\176-\191]", escapeutf8) end return "\"" .. value .. "\"" end json.quotestring = quotestring local function replace(str, o, n) local i, j = strfind(str, o, 1, true) if i then return strsub(str, 1, i - 1) .. n .. strsub(str, j + 1, -1) else return str end end local decpoint, numfilter local function updatedecpoint () decpoint = strmatch(tostring(0.5), "([^05+])") numfilter = "[^0-9%-%+eE" .. gsub(decpoint, "[%^%$%(%)%%%.%[%]%*%+%-%?]", "%%%0") .. "]+" end updatedecpoint() local function num2str (num) return replace(fsub(tostring(num), numfilter, ""), decpoint, ".") end local function str2num (str) local num = tonumber(replace(str, ".", decpoint)) if not num then updatedecpoint() num = tonumber(replace(str, ".", decpoint)) end return num end local function addnewline2 (level, buffer, buflen) buffer[buflen + 1] = "\n" buffer[buflen + 2] = strrep(" ", level) buflen = buflen + 2 return buflen end function json.addnewline (state) if state.indent then state.bufferlen = addnewline2(state.level or 0, state.buffer, state.bufferlen or #(state.buffer)) end end local encode2 local function addpair (key, value, prev, indent, level, buffer, buflen, tables, globalorder, state) local kt = type(key) if kt ~= 'string' and kt ~= 'number' then return nil, "type '" .. kt .. "' is not supported as a key by JSON." end if prev then buflen = buflen + 1 buffer[buflen] = "," end if indent then buflen = addnewline2(level, buffer, buflen) end buffer[buflen + 1] = quotestring(key) buffer[buflen + 2] = ":" return encode2(value, indent, level, buffer, buflen + 2, tables, globalorder, state) end local function appendcustom(res, buffer, state) local buflen = state.bufferlen if type(res) == 'string' then buflen = buflen + 1 buffer[buflen] = res end return buflen end local function exception(reason, value, state, buffer, buflen, defaultmessage) defaultmessage = defaultmessage or reason local handler = state.exception if not handler then return nil, defaultmessage else state.bufferlen = buflen local ret, msg = handler(reason, value, state, defaultmessage) if not ret then return nil, msg or defaultmessage end return appendcustom(ret, buffer, state) end end function json.encodeexception(reason, value, state, defaultmessage) return quotestring("<" .. defaultmessage .. ">") end encode2 = function(value, indent, level, buffer, buflen, tables, globalorder, state) local valtype = type(value) local valmeta = getmetatable(value) valmeta = type(valmeta) == 'table' and valmeta local valtojson = valmeta and valmeta.__tojson if valtojson then if tables[value] then return exception('reference cycle', value, state, buffer, buflen) end tables[value] = true state.bufferlen = buflen local ret, msg = valtojson(value, state) if not ret then return exception('custom encoder failed', value, state, buffer, buflen, msg)end tables[value] = nil buflen = appendcustom(ret, buffer, state) elseif value == nil then buflen = buflen + 1 buffer[buflen] = "null" elseif valtype == 'number' then local s if value ~= value or value >= huge or -value >= huge then s = "null" else s = num2str(value) end buflen = buflen + 1 buffer[buflen] = s elseif valtype == 'boolean' then buflen = buflen + 1 buffer[buflen] = value and "true" or "false" elseif valtype == 'string' then buflen = buflen + 1 buffer[buflen] = quotestring(value) elseif valtype == 'table' then if tables[value] then return exception('reference cycle', value, state, buffer, buflen) end tables[value] = true level = level + 1 local isa, n = isarray(value) if n == 0 and valmeta and valmeta.__jsontype == 'object' then isa = false end local msg if isa then buflen = buflen + 1 buffer[buflen] = "[" for i = 1, n do buflen, msg = encode2(value[i], indent, level, buffer, buflen, tables, globalorder, state) if not buflen then return nil, msg end if i < n then buflen = buflen + 1 buffer[buflen] = "," end end buflen = buflen + 1 buffer[buflen] = "]" else local prev = false buflen = buflen + 1 buffer[buflen] = "{" local order = valmeta and valmeta.__jsonorder or globalorder if order then local used = {} n = #order for i = 1, n do local k = order[i] local v = value[k] if v then used[k] = true buflen, msg = addpair(k, v, prev, indent, level, buffer, buflen, tables, globalorder, state) prev = true end end for k, v in pairs(value) do if not used[k] then buflen, msg = addpair(k, v, prev, indent, level, buffer, buflen, tables, globalorder, state) if not buflen then return nil, msg end prev = true end end else for k, v in pairs(value) do buflen, msg = addpair(k, v, prev, indent, level, buffer, buflen, tables, globalorder, state) if not buflen then return nil, msg end prev = true end end if indent then buflen = addnewline2(level - 1, buffer, buflen) end buflen = buflen + 1 buffer[buflen] = "}" end tables[value] = nil else return exception('unsupported type', value, state, buffer, buflen, "type '" .. valtype .. "' is not supported by JSON.") end return buflen end function json.encode (value, state) state = state or {} local oldbuffer = state.buffer local buffer = oldbuffer or {} state.buffer = buffer updatedecpoint() local ret, msg = encode2(value, state.indent, state.level or 0, buffer, state.bufferlen or 0, state.tables or {}, state.keyorder, state) if not ret then error(msg, 2) elseif oldbuffer == buffer then state.bufferlen = ret return true else state.bufferlen = nil state.buffer = nil return concat(buffer) end end local function loc (str, where) local line, pos, linepos = 1, 1, 0 while true do pos = strfind(str, "\n", pos, true) if pos and pos < where then line = line + 1 linepos = pos pos = pos + 1 else break end end return "line " .. line .. ", column " .. (where - linepos) end local function unterminated (str, what, where) return nil, strlen(str) + 1, "unterminated " .. what .. " at " .. loc(str, where) end local function scanwhite (str, pos) while true do pos = strfind(str, "%S", pos) if not pos then return nil end local sub2 = strsub(str, pos, pos + 1) if sub2 == "\239\187" and strsub(str, pos + 2, pos + 2) == "\191" then pos = pos + 3 elseif sub2 == "//" then pos = strfind(str, "[\n\r]", pos + 2) if not pos then return nil end elseif sub2 == "/*" then pos = strfind(str, "*/", pos + 2) if not pos then return nil end pos = pos + 2 else return pos end end end local escapechars = { ["\""] = "\"", ["\\"] = "\\", ["/"] = "/", ["b"] = "\b", ["f"] = "\f", ["n"] = "\n", ["r"] = "\r", ["t"] = "\t" } local function unichar (value) if value < 0 then return nil elseif value <= 0x007f then return strchar(value) elseif value <= 0x07ff then return strchar(0xc0 + floor(value / 0x40), 0x80 + (floor(value) % 0x40)) elseif value <= 0xffff then return strchar(0xe0 + floor(value / 0x1000), 0x80 + (floor(value / 0x40) % 0x40), 0x80 + (floor(value) % 0x40)) elseif value <= 0x10ffff then return strchar(0xf0 + floor(value / 0x40000), 0x80 + (floor(value / 0x1000) % 0x40), 0x80 + (floor(value / 0x40) % 0x40), 0x80 + (floor(value) % 0x40)) else return nil end end local function scanstring (str, pos) local lastpos = pos + 1 local buffer, n = {}, 0 while true do local nextpos = strfind(str, "[\"\\]", lastpos) if not nextpos then return unterminated(str, "string", pos) end if nextpos > lastpos then n = n + 1 buffer[n] = strsub(str, lastpos, nextpos - 1) end if strsub(str, nextpos, nextpos) == "\"" then lastpos = nextpos + 1 break else local escchar = strsub(str, nextpos + 1, nextpos + 1) local value if escchar == "u" then value = tonumber(strsub(str, nextpos + 2, nextpos + 5), 16) if value then local value2 if 0xD800 <= value and value <= 0xDBff then if strsub(str, nextpos + 6, nextpos + 7) == "\\u" then value2 = tonumber(strsub(str, nextpos + 8, nextpos + 11), 16) if value2 and 0xDC00 <= value2 and value2 <= 0xDFFF then value = (value - 0xD800) * 0x400 + (value2 - 0xDC00) + 0x10000 else value2 = nil end end end value = value and unichar(value) if value then if value2 then lastpos = nextpos + 12 else lastpos = nextpos + 6 end end end end if not value then value = escapechars[escchar] or escchar lastpos = nextpos + 2 end n = n + 1 buffer[n] = value end end if n == 1 then return buffer[1], lastpos elseif n > 1 then return concat(buffer), lastpos else return "", lastpos end end local scanvalue local function scantable (what, closechar, str, startpos, nullval, objectmeta, arraymeta) local len = strlen(str) local tbl, n = {}, 0 local pos = startpos + 1 if what == 'object' then setmetatable(tbl, objectmeta) else setmetatable(tbl, arraymeta) end while true do pos = scanwhite(str, pos) if not pos then return unterminated(str, what, startpos) end local char = strsub(str, pos, pos) if char == closechar then return tbl, pos + 1 end local val1, err val1, pos, err = scanvalue(str, pos, nullval, objectmeta, arraymeta) if err then return nil, pos, err end pos = scanwhite(str, pos) if not pos then return unterminated(str, what, startpos) end char = strsub(str, pos, pos) if char == ":" then if val1 == nil then return nil, pos, "cannot use nil as table index (at " .. loc(str, pos) .. ")" end pos = scanwhite(str, pos + 1) if not pos then return unterminated(str, what, startpos) end local val2 val2, pos, err = scanvalue(str, pos, nullval, objectmeta, arraymeta) if err then return nil, pos, err end tbl[val1] = val2 pos = scanwhite(str, pos) if not pos then return unterminated(str, what, startpos) end char = strsub(str, pos, pos) else n = n + 1 tbl[n] = val1 end if char == "," then pos = pos + 1 end end end scanvalue = function(str, pos, nullval, objectmeta, arraymeta) pos = pos or 1 pos = scanwhite(str, pos) if not pos then return nil, strlen(str) + 1, "no valid JSON value (reached the end)" end local char = strsub(str, pos, pos) if char == "{" then return scantable('object', "}", str, pos, nullval, objectmeta, arraymeta) elseif char == "[" then return scantable('array', "]", str, pos, nullval, objectmeta, arraymeta) elseif char == "\"" then return scanstring(str, pos) else local pstart, pend = strfind(str, "^%-?[%d%.]+[eE]?[%+%-]?%d*", pos) if pstart then local number = str2num(strsub(str, pstart, pend)) if number then return number, pend + 1 end end pstart, pend = strfind(str, "^%a%w*", pos) if pstart then local name = strsub(str, pstart, pend) if name == "true" then return true, pend + 1 elseif name == "false" then return false, pend + 1 elseif name == "null" then return nullval, pend + 1 end end return nil, pos, "no valid JSON value at " .. loc(str, pos) end end local function optionalmetatables(...) if select("#", ...) > 0 then return ... else return { __jsontype = 'object' }, { __jsontype = 'array' } end end function json.decode (str, pos, nullval, ...) local objectmeta, arraymeta = optionalmetatables(...) return scanvalue(str, pos, nullval, objectmeta, arraymeta) end function json.use_lpeg () local g = require("lpeg") if g.version() == "0.11" then error "due to a bug in LPeg 0.11, it cannot be used for JSON matching" end local pegmatch = g.match local P, S, R = g.P, g.S, g.R local function ErrorCall (str, pos, msg, state) if not state.msg then state.msg = msg .. " at " .. loc(str, pos) state.pos = pos end return false end local function Err (msg) return g.Cmt(g.Cc(msg) * g.Carg(2), ErrorCall) end local SingleLineComment = P "//" * (1 - S "\n\r") ^ 0 local MultiLineComment = P "/*" * (1 - P "*/") ^ 0 * P "*/" local Space = (S " \n\r\t" + P "\239\187\191" + SingleLineComment + MultiLineComment) ^ 0 local PlainChar = 1 - S "\"\\\n\r" local EscapeSequence = (P "\\" * g.C(S "\"\\/bfnrt" + Err "unsupported escape sequence")) / escapechars local HexDigit = R("09", "af", "AF") local function UTF16Surrogate (match, pos, high, low) high, low = tonumber(high, 16), tonumber(low, 16) if 0xD800 <= high and high <= 0xDBff and 0xDC00 <= low and low <= 0xDFFF then return true, unichar((high - 0xD800) * 0x400 + (low - 0xDC00) + 0x10000) else return false end end local function UTF16BMP (hex) return unichar(tonumber(hex, 16)) end local U16Sequence = (P "\\u" * g.C(HexDigit * HexDigit * HexDigit * HexDigit)) local UnicodeEscape = g.Cmt(U16Sequence * U16Sequence, UTF16Surrogate) + U16Sequence / UTF16BMP local Char = UnicodeEscape + EscapeSequence + PlainChar local String = P "\"" * g.Cs(Char ^ 0) * (P "\"" + Err "unterminated string") local Integer = P "-" ^ (-1) * (P "0" + (R "19" * R "09" ^ 0)) local Fractal = P "." * R "09" ^ 0 local Exponent = (S "eE") * (S "+-") ^ (-1) * R "09" ^ 1 local Number = (Integer * Fractal ^ (-1) * Exponent ^ (-1)) / str2num local Constant = P "true" * g.Cc(true) + P "false" * g.Cc(false) + P "null" * g.Carg(1) local SimpleValue = Number + String + Constant local ArrayContent, ObjectContent local function parsearray (str, pos, nullval, state) local obj, cont local npos local t, nt = {}, 0 repeat obj, cont, npos = pegmatch(ArrayContent, str, pos, nullval, state) if not npos then break end pos = npos nt = nt + 1 t[nt] = obj until cont == 'last' return pos, setmetatable(t, state.arraymeta) end local function parseobject (str, pos, nullval, state) local obj, key, cont local npos local t = {} repeat key, obj, cont, npos = pegmatch(ObjectContent, str, pos, nullval, state) if not npos then break end pos = npos t[key] = obj until cont == 'last' return pos, setmetatable(t, state.objectmeta) end local Array = P "[" * g.Cmt(g.Carg(1) * g.Carg(2), parsearray) * Space * (P "]" + Err "']' expected") local Object = P "{" * g.Cmt(g.Carg(1) * g.Carg(2), parseobject) * Space * (P "}" + Err "'}' expected") local Value = Space * (Array + Object + SimpleValue) local ExpectedValue = Value + Space * Err "value expected" ArrayContent = Value * Space * (P "," * g.Cc 'cont' + g.Cc 'last') * g.Cp() local Pair = g.Cg(Space * String * Space * (P ":" + Err "colon expected") * ExpectedValue) ObjectContent = Pair * Space * (P "," * g.Cc 'cont' + g.Cc 'last') * g.Cp() local DecodeValue = ExpectedValue * g.Cp() function json.decode (str, pos, nullval, ...) local state = {} state.objectmeta, state.arraymeta = optionalmetatables(...) local obj, retpos = pegmatch(DecodeValue, str, pos, nullval, state) if state.msg then return nil, state.pos, state.msg else return obj, retpos end end json.use_lpeg = function() return json end json.using_lpeg = true return json end if always_try_using_lpeg then pcall(json.use_lpeg) end return json end function _getTableCount(search) local conut=0 for k ,v in pairs(search) do conut = conut+1 end return conut end function readValue(address, flags) return gg.getValues({{address = address, flags = flags}})[1]["value"]end ms = { } function setvalue ( add , value , falgs , dj ) local WY = { } WY [ 1 ] = { } WY [ 1 ].address = add WY [ 1 ].value = value WY [ 1 ].flags = falgs if dj == true then WY [ 1 ].freeze = true gg.addListItems ( WY ) else gg.setValues ( WY ) end end function ms.ss ( num , ty , nc ) local GGNUMBER_1 = num local GGNUMBER_2 = ty local GGNUMBER_3 = false local GGNUMBER_4 = gg.SIGN_EQUAL local GGNUMBER_5 = 0x3000000000 local GGNUMBER_6 = 0xFFFFFFFFFF local GGNUMBER_7 = 0 gg.clearResults ( ) gg.setRanges ( nc ) gg.searchNumber ( GGNUMBER_1 , GGNUMBER_2 , GGNUMBER_3 , GGNUMBER_4 , GGNUMBER_5 , GGNUMBER_6 , GGNUMBER_7 ) Result = gg.getResults ( gg.getResultCount ( ) ) end function ms.py ( num , py , ty ) if ( Result and # Result ~= 0 ) then t = { } for i , v in ipairs ( Result ) do t [ i ] = { } t [ i ].address = v.address + py t [ i ].flags = ty end t = gg.getValues ( t ) for i , v in ipairs ( t ) do if v.value ~= num then Result [ i ] = nil end end local MS = { } for i , v in pairs ( Result ) do MS [ # MS + 1 ] = v end Result = MS end end function ms.bc ( ) data = { } if Result == nil or # Result == 0 then gg.alert ( "开启失败" ) else for i , v in pairs ( Result ) do data [ # data + 1 ] = v.address end end Result = nil end function ms.edit ( nn , off , ty , dj ) if ( Result ) then ms.bc ( ) end if # data > 0 then for i , v in ipairs ( data ) do setvalue ( v + off , nn , ty , dj or false ) end end end function readPointer(name, offset, i) local re = gg.getRangesList(name) local x64 = gg.getTargetInfo().x64 local va = x64 and 32 or 4 local addr if re[i or 1] then addr = re[i or 1].start + offset[1] for j = 2, #offset do local result = gg.getValues({ { address = addr, flags = va } })[1] if not result then gg.toast("读取指针失败") return nil end addr = (result.value & (x64 and 18446744073709551615 or 4294967295)) + offset[j] end else gg.toast("模块不存在") return nil end return addr end function gg.edits(addr, Table, name) if not addr then gg.toast('修改失败, 可能是模块不存在') return end local Table1 = { {}, {} } for k, v in ipairs(Table) do local value = { address = addr + v[3], value = v[1], flags = v[2], freeze = v[4] } Table1[v[4] and 2 or 1][#Table1[v[4] and 2 or 1] + 1] = value end if #Table1[2] > 0 then gg.addListItems(Table1[2]) end gg.setValues(Table1[1]) gg.toast((name or "") .. "开启成功, 共修改" .. #Table .. "个值") end So_32 = function ( Ad , Value , IF ) if gg.getRangesList ( 'libil2cpp.so' ) [ 1 ] == nil then gg.alert("请重新选择进程") else gg.clearResults ( ) local Ret = "~A8 RET" local So = gg.getRangesList ( 'libil2cpp.so' ) for key , value in pairs ( So ) do if value.state ~= "Xa" then return else local Soad = value.start local Add = Soad + Ad gg.processPause ( ) gg.setValues ( { { address = Add , flags = 4 , value = Value } } ) gg.processResume ( ) if IF == true then gg.setValues ( { { address = Add + 4 , flags = 4 , value = Ret } } ) gg.processResume ( ) elseif IF == nil then gg.processPause ( ) gg.setValues ( { { address = Add + 4 , flags = 4 , value =Ret } } ) gg.processResume ( ) elseif IF == false then break end end end end end function readValue(address, flags) return gg.getValues({{address = address, flags = flags}})[1]["value"]end ms = { } function setvalue ( add , value , falgs , dj ) local WY = { } WY [ 1 ] = { } WY [ 1 ].address = add WY [ 1 ].value = value WY [ 1 ].flags = falgs if dj == true then WY [ 1 ].freeze = true gg.addListItems ( WY ) else gg.setValues ( WY ) end end function ms.ss ( num , ty , nc ) local GGNUMBER_1 = num local GGNUMBER_2 = ty local GGNUMBER_3 = false local GGNUMBER_4 = gg.SIGN_EQUAL local GGNUMBER_5 = 0x3000000000 local GGNUMBER_6 = 0xFFFFFFFFFF local GGNUMBER_7 = 0 gg.clearResults ( ) gg.setRanges ( nc ) gg.searchNumber ( GGNUMBER_1 , GGNUMBER_2 , GGNUMBER_3 , GGNUMBER_4 , GGNUMBER_5 , GGNUMBER_6 , GGNUMBER_7 ) Result = gg.getResults ( gg.getResultCount ( ) ) end function ms.py ( num , py , ty ) if ( Result and # Result ~= 0 ) then t = { } for i , v in ipairs ( Result ) do t [ i ] = { } t [ i ].address = v.address + py t [ i ].flags = ty end t = gg.getValues ( t ) for i , v in ipairs ( t ) do if v.value ~= num then Result [ i ] = nil end end local MS = { } for i , v in pairs ( Result ) do MS [ # MS + 1 ] = v end Result = MS end end function ms.bc ( ) data = { } if Result == nil or # Result == 0 then gg.alert ( "开启失败" ) else for i , v in pairs ( Result ) do data [ # data + 1 ] = v.address end end Result = nil end function ms.edit ( nn , off , ty , dj ) if ( Result ) then ms.bc ( ) end if # data > 0 then for i , v in ipairs ( data ) do setvalue ( v + off , nn , ty , dj or false ) end gg.toast ( Name.."成功" ) end end Sy_x32 = function ( Address , Value ) local Somod = gg.getRangesList ( 'il2cpp.so' ) [ 2 ] if Somod == nil then gg.alert ( '请重新选择地铁跑酷进程' ) else local So = Somod.start local Add = So + Address gg.processPause ( ) gg.setValues ( { { address = Add , flags = 4 , value = Value } } ) gg.setValues ( { { address = Add + 4 , flags = 4 , value = "~A BX LR" } } ) gg.processResume ( ) end end function SO_FLPTXG(FUNCTIONADD,TYPE,VALUE) local SOMOD=gg.getRangesList("il2cpp.so") if SOMOD[2]==nil then gg.alert("开启失败\n━━━━━━━━━━━━━━━\n错误原因:未找到相关内存\n解决方法:请重新选择游戏进程\n━━━━━━━━━━━━━━━") else local SOMOD1=gg.getRangesList("libil2cpp.so")[2].start gg.setValues({{address=SOMOD1+FUNCTIONADD,flags=TYPE,value='~A8 MOV W0, #'..VALUE}}) gg.setValues({{address=SOMOD1+FUNCTIONADD+4,flags=TYPE,value="0000271Er"}}) gg.setValues({{address=SOMOD1+FUNCTIONADD+8,flags=TYPE,value="00D8215Er"}}) gg.setValues({{address=SOMOD1+FUNCTIONADD+12,flags=TYPE,value="0000261Er"}}) gg.setValues({{address=SOMOD1+FUNCTIONADD+16,flags=TYPE,value="~A8 RET"}}) end end function search(ss,lx,nc,dz1,dz2) gg.setVisible(false) 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.toast("搜索到 "..sl.." 个结果") gg.clearResults() else gg.toast("未搜索到结果") end else gg.toast("无搜索值类型") end else gg.toast("无需搜索值") 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={} gg.toast("共偏移 "..#sj.." 个数据") 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 i=1,#sj do if z1[i].value~=value then z2[#z2+1]={} z2[#z2]=sj[i] end end sj=z2 z1={} z2={} gg.toast("共偏移 "..#sj.." 个数据") 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 i=1,#sj do if z1[i].value~=value then z2[#z2+1]={} z2[#z2]=sj[i] end end sj=z2 z1={} z2={} gg.toast("共偏移 "..#sj.." 个数据") else gg.toast("没有搜索数据") 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 gg.toast("共修改 "..#z.." 个数据") else gg.toast("没有搜索数据") end end function editData(qmnb,qmxg)gg.setVisible(false)gg.clearResults()qmnbv=qmnb[3]["value"]or qmnb[3][1]qmnbt=qmnb[3]["type"]or qmnb[3][2]qmnbn=qmnb[2]["name"]or qmnb[2][1]gg.setRanges(qmnb[1]["memory"]or qmnb[1][1])gg.searchNumber(qmnbv,qmnbt)gg.refineNumber(qmnbv,qmnbt)sz=gg.getResultCount()if sz==0 then gg.toast(qmnbn.."开启失败")else sl=gg.getResults(999999)for i=1,sz do pdsz=true for v=4,#qmnb do if pdsz==true then pysz={{}}pysz[1].address=sl[i].address+(qmnb[v]["offset"]or qmnb[v][2])pysz[1].flags=qmnb[v]["type"]or qmnb[v][3]szpy=gg.getValues(pysz)tzszpd=tostring(qmnb[v]["lv"]or qmnb[v][1]):gsub(",","")pyszpd=tostring(szpy[1].value):gsub(",","")if tzszpd==pyszpd then pdjg=true pdsz=true else pdjg=false pdsz=false end end end if pdjg==true then szpy=sl[i].address for x=1,#qmxg do xgsz=qmxg[x]["value"]or qmxg[x][1]xgpy=szpy+(qmxg[x]["offset"]or qmxg[x][2])xglx=qmxg[x]["type"]or qmxg[x][3]xgdj=qmxg[x]["freeze"]or qmxg[x][4]xg={{address=xgpy,flags=xglx,value=xgsz}}if xgdj==true then xg[1].freeze=xgdj gg.addListItems(xg)else gg.setValues(xg)end end xgjg=true end end if xgjg==true then gg.toast(qmnbn.."开启成功")else gg.toast(qmnbn.."开启失败")end end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) if gg.searchNumber(qmnb[3]["value"],qmnb[3]["type"],false,gg.SIGN_EQUAL,0,-1)~=true then gg.searchAddress(qmnb[3]["value"],-1,qmnb[3]["type"]) end if gg.getResultCount()==0 then gg.toast(qmnb[2]["name"].."开启失败")return end szxx=gg.getResults(gg.getResultCount()) szpd={} a=0 for i=4,#qmnb do for s=1,#szxx do if szpd[s]~="false" then if gg.getValues({{address=szxx[s].address+qmnb[i]["offset"],flags=qmnb[i]["type"]}})[1].value+0~=qmnb[i]["lv"]then szpd[s]="false" a=a+1 end end end end if a==#szxx then gg.toast(qmnb[2]["name"].."开启失败")return end b=0 t={} for x=1,#qmxg do if qmxg[x]["freeze"]==true then a=1 end for i=1,#szxx do if szpd[i]==nil then b=b+1 table.insert(t,{address=szxx[i].address+qmxg[x]["offset"],flags=qmxg[x]["type"],freeze=qmxg[x]["freeze"],value=qmxg[x]["value"]}) end end end gg.setValues(t) gg.addListItems(t) gg.clearResults() if a~=1 then gg.clearList()else a=nil end gg.toast(qmnb[2]["name"].."开启成功,共修改了"..b.."条数据") end qmnb = function(daarr) local array = {} for i = 1, #daarr["搜索数组"] do local data = {["lv"] =daarr["搜索数组"][i][1], ["offset"] = daarr["搜索数组"][i][2], ["type"] = daarr["搜索类型"]} table.insert(array, i, data) end local isok, data = app.memorysearch(daarr["搜索内存"], array) if isok then for i = 1, #data do for x = 1, #daarr["修改数组"] do app.memorywrite(data[i] + daarr["修改数组"][x][2], daarr["搜索类型"], daarr["修改数组"][x][1]) end end gg.toast(daarr["功能名称"] .. "共修改" .. #data * #daarr["修改数组"] .. "条数据") else gg.toast(daarr["功能名称"] .. "开启失败") end end function xg1(value,lx,py,dj) if sj~=nil and #sj>0 then z={} for i=1,#sj do z[i]={} z[i].address=sj[i].address+py z[i].flags=lx if value == nil then value = readValue(z[i].address, lx) end z[i].value= value z[i].freeze = dj and true or false end if dj == true or dj == false then gg.addListItems(z) else gg.setValues(z) end gg.toast('') 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 gg.toast('') else gg.toast('') end end function bc(bz) if sj~=nil then _ENV[bz]=sj else gg.toast('') end end Qr_UIP2FazG='Main' gg.clearResults() sj={} xgz={} 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,gg.SIGN_EQUAL,dz1,dz2) sl=gg.getResultCount() if sl~=0 then sj=gg.getResults(sl) gg.toast("搜索到 "..sl.." 个结果") gg.clearResults() else gg.toast("未搜索到结果") end else gg.toast("无搜索值类型") end else gg.toast("无需搜索值") 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={} gg.toast("共偏移 "..#sj.." 个数据") 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 i=1,#sj do if z1[i].value~=value then z2[#z2+1]={} z2[#z2]=sj[i] end end sj=z2 z1={} z2={} gg.toast("共偏移 "..#sj.." 个数据") else gg.toast("没有搜索数据") 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 gg.toast("共修改 "..#z.." 个数据") 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 gg.toast("共修改 "..#z.." 个数据") else gg.toast("没有搜索数据") end end function bc(bz) if sj~=nil then _ENV[bz]=sj else gg.toast("无数据") end end function BaAdd(add) if gg.getTargetInfo().x64==true then t=gg.getValues({[1]={address=add,flags=32}}) return t[1].value else t=gg.getValues({[1]={address=add,flags=4}}) return t[1].value&0xFFFFFFFF end 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 gg.toast("已修改完成~") end DWORD=gg.TYPE_DWORD DOUBLE=gg.TYPE_DOUBLE FLOAT=gg.TYPE_FLOAT WORD=gg.TYPE_WORD BYTE=gg.TYPE_BYTE XOR=gg.TYPE_XOR QWORD=gg.TYPE_QWORD D=gg.TYPE_DWORD E=gg.TYPE_DOUBLE F=gg.TYPE_FLOAT W=gg.TYPE_WORD B=gg.TYPE_BYTE X=gg.TYPE_XOR Q=gg.TYPE_QWORD -------------不懂勿动------------ ------------道具赛配置--------------- function SearchWrite(Search, Write, Type, Name) local time=os.clock() gg.clearResults() gg.setVisible(false) gg.searchNumber(Search[1][1], Type) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][2] if (count > 0) then for i, v in ipairs(result) do v.isUseful = true end for k=2, #Search do local tmp = {} local offset = Search[k][2] - base local num = Search[k][1] for i, v in ipairs(result) do tmp[#tmp+1] = {} tmp[#tmp].address = v.address + offset tmp[#tmp].flags = v.flags end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= tostring(num) ) then result[i].isUseful = false end end end for i, v in ipairs(result) do if (v.isUseful) then data[#data+1] = v.address end end if (#data > 0) then gg.toast("搜索到"..#data.."条数据") local t = {} local base = Search[1][2] for i=1, #data do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = Type t[#t].value = w[1] if (w[3] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) local time=string.sub(os.clock()-time,0,5) gg.toast("开启成功 已修改:"..#t.."条数据 本次启动耗时:"..time.."秒") gg.addListItems(t) else gg.toast("开启失败未搜索到任何数据", false) return false end else gg.toast("开启失败未搜索到任何数据") return false end end function Fs3Fs4(Fs1, Fs2, Fs3, Fs4, Fs5) gg.clearResults() gg.setRanges(Fs2) gg.setVisible(false) gg.searchNumber(Fs3[1][1], Fs3[1][3]) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Fs3[1][2] if (count > 0) then for i, v in ipairs(result) do v.isUseful = true end for k=2, #Fs3 do local tmp = {} local offset = Fs3[k][2] - base local num = Fs3[k][1] for i, v in ipairs(result) do tmp[#tmp+1] = {} tmp[#tmp].address = v.address + offset tmp[#tmp].flags = Fs3[k][3] end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= tostring(num) ) then result[i].isUseful = false end end end for i, v in ipairs(result) do if (v.isUseful) then data[#data+1] = v.address end end if (#data > 0) then gg.toast(Fs1..'\n搜索到{'..#data..'}条数据') local t = {} local base = Fs3[1][2] if Fs5 == '' and Fs5 > 0 and Fs5 < #data then Fs5 = Fs5 else Fs5 = #data end for i=1, Fs5 do for k, w in ipairs(Fs4) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = w[3] t[#t].value = w[1] if (w[4] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast(Fs1..'️\n已修改{'..#t..'}条数据') else gg.toast(Fs1..'\n数据搜索失败', false) return false end else gg.toast(Fs1..'\n数据修改失败', false) return false end end 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.toast("搜索到 "..sl.." 个结果") gg.clearResults() else gg.toast("未搜索到结果") end else gg.toast("无搜索值类型") end else gg.toast("无需搜索值") 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={} gg.toast("共偏移 "..#sj.." 个数据") 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 i=1,#sj do if z1[i].value~=value then z2[#z2+1]={} z2[#z2]=sj[i] end end sj=z2 z1={} z2={} gg.toast("共偏移 "..#sj.." 个数据") else gg.toast("没有搜索数据") 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 gg.toast("共修改 "..#z.." 个数据") 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 gg.toast("共修改 "..#z.." 个数据") else gg.toast("没有搜索数据") 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 gg.toast("已修改完成~") end function readWrite(Search,Get,Type,Range,Name) gg.clearResults() gg.setRanges(Range) gg.setVisible(false) if Search[1][1]~=false then gg.searchAddress(Search[1][1],0xFFFFFFFF,Search[1][4] or Type,gg.SIGN_EQUAL,Search[1][5] or 1,Search[1][6] or -1) end gg.searchNumber(Search[1][2],Search[1][4] or Type,false,gg.SIGN_EQUAL,Search[1][5] or 1,Search[1][6] or -1) local count=gg.getResultCount() local result=gg.getResults(count) gg.clearResults() local data={} local base=Search[1][3] if (count > 0) then for i,v in ipairs(result) do v.isUseful=true end for k=2,#Search do local tmp={} local offset=Search[k][2] - base local num=Search[k][1] for i,v in ipairs(result) do tmp[#tmp+1]={} tmp[#tmp].address=v.address+offset tmp[#tmp].flags=Search[k][3] or Type end tmp=gg.getValues(tmp) for i,v in ipairs(tmp) do if v.flags==16 or v.flags==64 then values=tostring(v.value):sub(1,6) num=tostring(num):sub(1,6) else values=v.value end if tostring(values)~=tostring(num) then result[i].isUseful=false end end end for i,v in ipairs(result) do if (v.isUseful) then data[#data+1]=v.address end end if (#data > 0) then local t,t_={},{} local base=Search[1][3] for i=1,#data do for k,w in ipairs(Get) do offset=w[2] - base if w[1]==false then t_[#t_+1]={} t_[#t_].address=data[i]+offset t_[#t_].flags=Type th_=(th_) and th_+1 or 1 else t[#t+1]={} t[#t].address=data[i]+offset t[#t].flags=w[3] or Type t[#t].value=w[1] tg_=(tg_) and tg_+1 or 1 if (w[4]==true) then local item={} item[#item+1]=t[#t] item[#item].freeze=w[4] gg.addListItems(item) end end end end tg=(tg_) and "\n已修改"..tg_.."条数据" or "" th=(th_) and "\n已获取"..th_.."条数据" or "" gg.setValues(t) t_=gg.getValues(t_) gg.loadResults(t_) gg.alert("\n"..Name.."搜索成功!\n偏移到"..#data.."条数据"..tg..th) tg_,th_=nil,nil else gg.alert("\n"..Name.."开启失败",false) return false end else gg.alert(Name.."开启失败") return 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 readPointer(name, offset, i) local re = gg.getRangesList(name) local x64 = gg.getTargetInfo().x64 local va = {[true] = 32, [false] = 4} if re[i or 1] then local addr = re[i or 1].start + offset[1] for i = 2, #offset do addr = gg.getValues({{address = addr, flags = va[x64]}}) if not x64 then addr[1].value = addr[1].value & 0xFFFFFFFF end addr = addr[1].value + offset[i] end return addr end end function gg.edits(addr, Table, name) local Table1 = {{}, {}} for k, v in ipairs(Table) do local value = {address = addr + v[3], value = v[1], flags = v[2], freeze = v[4]} if v[4] then Table1[2][#Table1[2] + 1] = value else Table1[1][#Table1[1] + 1] = value end end gg.addListItems(Table1[2]) gg.setValues(Table1[1]) gg.toast((name or "") .. "开启成功, 共修改" .. #Table .. "个值") end ----搜索且冻结模块 function Searssjc(FUNCTIONADD,VALUE,SETRANGES) local SOMOD=gg.getRangesList("il2cpp.so") if SOMOD[2]==nil then gg.toast("开启失败") else gg.setRanges(SETRANGES) gg.searchNumber(FUNCTIONADD, gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber(FUNCTIONADD, gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) local jg=gg.getResults(100) local sl=gg.getResultCount() for i=1, sl do dzy=jg[i].address gg.clearResults() gg.addListItems({[1]={address=dzy,flags=gg.TYPE_DWORD,freeze=true,value=VALUE}}) end gg.toast("开启成功") end end ----秒开SO模块 YX={} function YX.SOMODMK(Name,Address,Modify) if Address==nil then gg.alert("开启失败\n━━━━━━━━━━━━━━━\n错误原因:未找到相关内存模块\n解决方法:请重新选择游戏进程\n━━━━━━━━━━━━━━━") else time=os.clock() local address=0 for index,offset in ipairs(Address)do if index==1 then address=offset else address=gg.getValues({{address=address+offset,flags=4}})[1].value end end local Value,Freeze={},{} for index,value in ipairs(Modify)do local VALUE={address=address+value[3],flags=value[2],value=value[1],freeze=true} if value[4]then Freeze[#Freeze+1]=VALUE else Value[#Value+1]=VALUE end end gg.setValues(Value) gg.addListItems(Freeze) Comodifiedvalues=#Freeze+#Value local time=string.sub(os.clock()-time,0,5) gg.toast(Name..'️开启成功\n当前进程名称:'..gg.getTargetInfo().label..'\n当前进程包名:'..gg.getTargetPackage()..'\n共修改'..Comodifiedvalues..'个值\n总共耗时:'..time..'秒') gg.toast(Name..'️开启成功\n当前进程名称:'..gg.getTargetInfo().label..'\n当前进程包名:'..gg.getTargetPackage()..'\n总共耗时:'..time..'秒') end end ----秒开基址模块 function YX_MkPointer(SONC,NCFW,PYL,TYPE,VALUE,NAME,DJ) local Somod=gg.getRangesList(SONC)[1] if Somod==nil then gg.alert(NAME..'开启失败\n━━━━━━━━━━━━━━━\n错误原因:未找到相关内存\n解决方法:请重新选择游戏进程\n━━━━━━━━━━━━━━━') else 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 time=os.clock() local DZT = S_Pointer({SONC, NCFW},{0x0}) local PY_offsets = PYL for _,YX in pairs(PY_offsets) do gg.addListItems({{address = DZT+YX, flags = TYPE, value = VALUE, freeze = DJ}}) end local time=string.sub(os.clock()-time,0,5) gg.toast(NAME..'️开启成功\n当前进程名称:'..gg.getTargetInfo().label..'\n当前进程包名:'..gg.getTargetPackage()..'\n总共耗时:'..time..'秒') end end Q弹动画速度=450 gg.alert('欢迎使用哦屁开启时间有点慢请稍等') local answer = gg.alert('你要的模板颜色', '灰色', '橙色', '紫色') -- 假设这是选择对话框 if answer == 1 then 控件颜色="#808080" 插件颜色=0xffdA9B7C6 Q版小人="Q版小人1" 大图标="Q版小人1" 开关控件="开关控件3" 模板颜色="灰色" gg.alert("您选择了灰色模板") elseif answer == 2 then 控件颜色="#EF8A5C" 插件颜色=0xffEF8A5C Q版小人="Q版小人2" 大图标="Q版小人2" 开关控件="开关控件1" 模板颜色="橙色" gg.alert("您选择了橙色模板") else 控件颜色="#846DCA" 插件颜色=0xff846DCA Q版小人="Q版小人3" 大图标="Q版小人3" 开关控件="开关控件2" 模板颜色="紫色" gg.alert("您选择了紫色模板") end wenan = { "看不见的伤疤最疼 流不出的泪最崩溃", "什么都在涨价 只有人心越来越廉价", "男儿志在四方 心中有苦不声张.", "能把青春困在遗憾里 要永远自由潇洒.", "遇见的都是天意 拥有的都是幸运", "去拥抱陌生,期待惊喜,所有的不期而遇都在路上", "后来玫瑰泛滥成灾,街道布满了廉价的爱", "树高千尺不忘根 人若辉煌莫忘本", "生活不止眼前的苟且,还有诗和远方", "星光不问赶路人,时光不负有心人", "愿你出走半生,归来仍是少年", "人生没有白走的路,每一步都算数", "愿你有盔甲也有软肋,善良得有锋芒", "你若盛开,清风自来", "生活就像海洋,只有意志坚强的人,才能到达彼岸", "不要等待机会,而要创造机会", "命运负责洗牌,但是玩牌的是我们自己", "你若光明,这世界就不会黑暗", "愿你走出半生,归来仍是少年", "不乱于心,不困于情,不畏将来,不念过往", "你若安好,便是晴天", "时光会回答成长,成长会回答梦想。", "愿你我在岁月里不被辜负,不畏将来,不念过往。", "生活不止眼前的苟且,还有诗和远方。", "你是我一生最爱的宝物。", "愿你有盔甲也有软肋,善良得有锋芒。", "你若盛开,清风自来。", "生活就像海洋,只有意志坚强的人,才能到达彼岸。", "不要等待机会,而要创造机会。", "命运负责洗牌,但是玩牌的是我们自己。", "你若光明,这世界就不会黑暗。", "愿你走出半生,归来仍是少年。", "不乱于心,不困于情,不畏将来,不念过往。", "你若安好,便是晴天。", "星光不问赶路人,时光不负有心人。", "树高千尺不忘根,人若辉煌莫忘本。", "生活不止眼前的苟且,还有诗和远方。", "你能翻山越岭,只为与我相见。", "你是我一生最爱的宝物。" } index = math.random(1, #wenan) gg.alert('每日文案今天的是: '..wenan[index]) if tonumber(device.width)==nil then dwidth=1340 dheight=2300 else dwidth=device.width dheight=device.height end vibra = context:getSystemService(Context.VIBRATOR_SERVICE) changan = {} colorvs={} local changan = changan local android = import('android.*') write=file.write function panduan(rec) fille,err = io.open(rec) if fille == nil then return false else return true end end read=file.read function getRes(x) return 获取图片("/sdcard/iosPro/图片/"..x) end function 获取图片(txt) ntxt=string.sub(string.gsub(txt,"/","."),-10,-1) if string.find(tostring(txt),"http")~=nil then if panduan("/sdcard/iosPro/图片/"..ntxt)==false then download(txt,"/sdcard/iosPro/图片/"..ntxt) end txt="/sdcard/iosPro/图片/"..ntxt end return luajava.getBitmapDrawable(txt) end ckimg = { "Q版小人1", "Q版小人2", "Q版小人3", "blackx", "软糖.ttf", } links = { "https://postimage.me/images/2024/09/04/xiaomai1.png", "https://postimage.me/images/2024/09/04/xiaomai2.png", "https://postimage.me/images/2024/09/04/xiaomai3.png", "https://postimage.me/images/2024/09/04/retouch_2024090407071361.png", "https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1729603136617/%E8%BD%AF%E7%B3%96.ttf", } for i, filename in ipairs(ckimg) do if panduan("/sdcard/iosPro/图片/"..filename) ~= true then local downloadUrl = links[i] -- 获取对应的下载链接 local savePath = "/sdcard/iosPro/图片/"..filename -- 保存路径 gg.toast("正在下载: " .. filename) -- 显示正在下载的文件名 download(downloadUrl, savePath) -- 执行下载操作 end end if not io.open ( "/storage/emulated/0/卡片.zip" ) then local f = io.open ( "/storage/emulated/0/卡片.zip" , 'a' ) f : write ( gg.makeRequest ( 'https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1730896983736/opo.zip' ).content )---下载zip资源 end file.mkdir("/storage/emulated/0/iosPro")----创文件夹 file.mkdir("/storage/emulated/0/iosPro/图片") file.mkdir("/storage/emulated/0/iosPro/图片") unzip("/storage/emulated/0/卡片.zip","/storage/emulated/0/iosPro/图片/")---解压 context = app.context window = context:getSystemService("window") -- 获取窗口管理器 function getLayoutParams() LayoutParams = WindowManager.LayoutParams 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 -- 焦点设置Finish layoutParams.gravity = Gravity.TOP|Gravity.LEFT -- 重力设置 layoutParams.width = LayoutParams.WRAP_CONTENT -- 布局宽度 layoutParams.height = LayoutParams.WRAP_CONTENT -- 布局高度 return layoutParams end local typeface=import("android.graphics.Typeface") local FontPath="/storage/emulated/0/iosPro/图片/软糖.ttf"--字体路径 local font=typeface:createFromFile(FontPath) --字体 function getCorner(gtvb1,gtvb3,gtvb4,gtvb5,g1,g2,g3,g4) if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end local jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(gtvb3) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors(gtvb1) jianbians:setStroke(gtvb4,gtvb5)--边框宽度和颜色 jianbians:setCornerRadii({g1,g1,g2,g2,g3,g3,g4,g4}) return jianbians end function getVerticalBG(gtvb1,gtvb3,gtvb4,gtvb5) if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end local jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(gtvb3) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors(gtvb1) jianbians:setStroke(gtvb4,gtvb5) return jianbians end function newbg2(gtvb1,gtvb3,gtvb4,gtvb5) if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end local jianbians = luajava.loadlayout({ GradientDrawable, color = {gtvb1}, cornerRadius=gtvb3, gradientType = GradientDrawable.LINEAR_GRADIENT, orientation = GradientDrawable.Orientation.TOP_BOTTOM , strokeWidth = 10, strokeColor = gtvb5 }) return jianbians end function searchmenu() luajava.runUiThread (function () local searchUI = luajava.getIdValue("tosearch") if tonumber(tostring(searchUI: getVisibility ())) == 8.0 then searchUI:setVisibility(View.VISIBLE) ggscro:setVisibility(View.GONE) else searchUI:setVisibility(View.GONE) ggscro:setVisibility(View.VISIBLE) end end) end function searchStart() luajava.runUiThread(function() local toSearch=tostring(luajava.getIdValue("tosearch"):getText()) if toSearch~="" and toSearch~=nil then searchInSview(toSearch) searchmenu() --searchInTz(toSearch) else searchmenu() end end) end function searchInSview(besearch) changan.setedit("tosearch","") if besearch=="退出" then adtext("
确定要退出?请输入“确认退出”","#C5053C") luajava.newThread(function() gg.sleep(200) luajava.post(function() ggscro:fullScroll(View.FOCUS_DOWN) end) end):start() return 0 end if besearch=="确认退出" then tuichu=1 return 0 end local tobesearch=besearch local result={} --print(forsview) for i=1,#forsview do for k=1,#forsview[i] do if type(forsview[i][k])=="table" then if forsview[i][k].name~=nil then if string.find(forsview[i][k].name,tobesearch)~=nil then result[#result+1]={i,k} end if forsview[i][k].type=="BOX" or forsview[i][k].type=="BOX2" then --print(forsview[i][k]) for key,v in pairs(forsview[i][k].vs) do if v.name~=nil then if string.find(v.name,tobesearch)~=nil then result[#result+1]={i,k,key} end if v.type=="BOX" or v.type=="BOX2" then --print(forsview[i][k]) for kk,vv in pairs(v.vs) do if vv.name~=nil then if string.find(vv.name,tobesearch)~=nil then result[#result+1]={i,k,kk,vv} end end end end end end end end end end end if #result>=1990 then adtext("关于“"..besearch.."”的功能超过10个!请输入更详细的关键词.","#262626") elseif #result==0 then adtext("
未搜索到包含“"..besearch.."”的功能","#262626") else adtext("
你是否在找:","#191B26") for i=1,#result do if #result[i]==2 then adtext("第"..result[i][1].."页的“"..forsview[result[i][1]][result[i][2]].name.."”".."("..forsview[result[i][1]][result[i][2]].type..")","#262626") elseif #result[i]==3 then adtext("第"..result[i][1].."页的BOX:“"..forsview[result[i][1]][result[i][2]].name.."”".."中第"..result[i][3].."项:"..forsview[result[i][1]][result[i][2]].vs[result[i][3]].name.."("..forsview[result[i][1]][result[i][2]].vs[result[i][3]].type..")","#262626") elseif #result[i]==4 then --print(result[i]) --print(forsview[result[i][1]][result[i][2]].vs[1].vs[result[i][3]]) adtext("第"..result[i][1].. "页的BOX:“" ..forsview[result[i][1]][result[i][2]].name.. "”".."中第"..result[i][3].. "项:" ..result[i][4].name .."("..result[i][4].type..")","#262626") end end 切换(result[1][1]) end luajava.newThread(function() gg.sleep(200) luajava.post(function() ggscro:fullScroll(View.FOCUS_DOWN) end) end):start() end function uiadtext(txt,color,size) if not txt then txt = "" end if not color then color = "#ffffff" end if not size then size = "13sp" end local tmp=luajava.loadlayout( { TextView, Typeface=font, text = string.fromHtml(" "..getTimeStamp(os.time()).." "..txt..""), textSize = size, Typeface=font, --textColor = color, gravity="left", layout_width = "wrap_content", }) luajava.runUiThread(function() local searchUI = luajava.getIdValue("tosearch") if tonumber(tostring(searchUI: getVisibility ())) == 8.0 then else searchUI:setVisibility(View.GONE) ggscro:setVisibility(View.VISIBLE) end YoYoImpl:with("FadeOut"):duration(200):playOn(gggscro) end) gg.sleep(200) luajava.post(function() gggscro:addView(tmp) end) luajava.runUiThread(function() YoYoImpl:with("FadeIn"):duration(300):playOn(gggscro) end) luajava.newThread(function() gg.sleep(200) luajava.post(function() ggscro:fullScroll(View.FOCUS_DOWN) end) end):start() end function adtext(txt,color,size) if not txt then txt = "" end if not color then color = "#ffffff" end if not size then size = "10sp" end local tmp=luajava.loadlayout( { TextView, Typeface=font, text = string.fromHtml(" "..txt..""), textSize = size, --textColor = color, gravity="left", layout_width = "wrap_content", }) luajava.post(function() gggscro:addView(tmp) end) end function newbg(gtvb1,gtvb3,gtvb4,gtvb5) if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end local jianbians = luajava.loadlayout({ GradientDrawable, color = {gtvb1}, cornerRadius=45, gradientType = GradientDrawable.LINEAR_GRADIENT, orientation = GradientDrawable.Orientation.TOP_BOTTOM , strokeWidth = 10, strokeColor = gtvb5 }) return jianbians end function getj6() jianbian6 = luajava.new(GradientDrawable) jianbian6:setCornerRadius(20) jianbian6:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbian6:setColors({0xffffffff,0xffffffff}) jianbian6:setStroke(0,"0xdd000000")--边框宽度和颜色 return jianbian6 end hanshu = function(v, event) local Action = event:getAction() if Action == MotionEvent.ACTION_DOWN then isMove = false RawX = event:getRawX() RawY = event:getRawY() x = mainLayoutParams.x y = mainLayoutParams.y elseif Action == MotionEvent.ACTION_MOVE then isMove = true mainLayoutParams.x = tonumber(x) + (event:getRawX() - RawX) mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY) window:updateViewLayout(floatWindow, mainLayoutParams) end end slctb1 = luajava.loadlayout({ GradientDrawable, color = "#661E1C27", cornerRadius = 20 }) function topSelect() local selector = luajava.getStateListDrawable() selector:addState({ android.R.attr.state_pressed }, getVerticalBG({0x22161616,0x22161616},30)) selector:addState({ -android.R.attr.state_pressed }, empty) return selector end slcta1 = luajava.loadlayout({ GradientDrawable, color = "#331E1C27", cornerRadius = 20 }) function getSelector3() return getButtonBG() end slctb = luajava.loadlayout({ GradientDrawable, color = "#001E1C27", cornerRadius = 0 }) slcta = luajava.loadlayout({ GradientDrawable, color = 插件颜色, cornerRadius = 4 }) slctc = luajava.loadlayout { GradientDrawable, color = "#ffffffff", cornerRadius = 16 } slctd = luajava.loadlayout { GradientDrawable, color = "#ddE0E0E0", cornerRadius = 16 } slcte = luajava.loadlayout { GradientDrawable, color = "#11ffffff", cornerRadius = 12 } slctf = luajava.loadlayout { GradientDrawable, color = "#aa1E1C27", cornerRadius = 12 } changan.controlFlip = function(control,time) luajava.runUiThread(function() import "android.view.animation.Animation" import "android.animation.ObjectAnimator" xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotationY", {0, 361}) xuanzhuandonghua:setRepeatCount(0) xuanzhuandonghua:setRepeatMode(Animation.REVERSE) xuanzhuandonghua:setDuration(time) xuanzhuandonghua:start() end) end changan.controlSmall = function(control,time) luajava.runUiThread(function() import "android.animation.ObjectAnimator" ObjectAnimator():ofFloat(control,"scaleX", { 1, 0.7, 0.4, 0 }):setDuration(time):start() ObjectAnimator():ofFloat(control,"scaleY", { 1, 0.7, 0.4, 0 }):setDuration(time):start() end) end OP={ } OP.controlWater = function(control,time) luajava.runUiThread(function() import "android.animation.ObjectAnimator" ObjectAnimator():ofFloat(control,"scaleX",{1, 0.8, 0.9, 1}):setDuration(time):start() ObjectAnimator():ofFloat(control,"scaleY",{1,0.8,0.9,1}):setDuration(time):start() end) end OP.controlWater2 = function(control,time) luajava.runUiThread (function() import "android.animation.ObjectAnimator" ObjectAnimator():ofFloat (control , "scaleX" ,{1,1.1,0.9,1}) : setDuration (time):start() ObjectAnimator():ofFloat (control , "scaleY" , {1,0.9,1.1,1}) : setDuration (time):start() end) end function getSelector() selector = luajava.getStateListDrawable() selector:addState({ android.R.attr.state_pressed }, slcta) -- 点击时候的背景 selector:addState({ -android.R.attr.state_pressed }, slctb) -- 没点击的背景 return selector end function getSelector2() selector = luajava.getStateListDrawable() selector:addState({ android.R.attr.state_pressed }, slctd) -- 点击时候的背景 selector:addState({ -android.R.attr.state_pressed }, slctc) -- 没点击的背景 return selector end jianbian = luajava.new(GradientDrawable) jianbian:setCornerRadius(30) jianbian:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbian2 = luajava.new(GradientDrawable) jianbian2:setCornerRadius(30) jianbian2:setGradientType(GradientDrawable.LINEAR_GRADIENT) local isswitch YoYoImpl = luajava.getYoYoImpl() changan.menu = function(sview) forsview = sview if isswitch then return false end for i=1,#stab do _ENV["jmb"..i]=getSelector() end isswitch = true cebian = { LinearLayout, id = "侧边", gravity = "center", padding={"8dp","3dp","8dp","3dp"}, layout_height = "wrap_content", layout_width = "match_parent", } gund = { LinearLayout, background=getblue(), gravity = "center", orientation = "horizontal", layout_height = "wrap_content", layout_width = "wrap_content", } for i = 1,#stab do _ENV["jm"..i]=luajava.loadlayout({ LinearLayout, id = "jm"..i, layout_height = "28dp", layout_width = "68dp", gravity = "center", layout_marginTop = "2dp", layout_marginBottom = "2dp", background = _ENV["jmb"..i], onClick=function() changan.controlFlip(_ENV["jm"..i],500) gg.playMusic("/storage/emulated/0/iosPro/图片/切换音效.mp3") --OP.controlWater(floatWindow,Q弹动画速度) OP.controlWater2(floatWindow,Q弹动画速度) 切换(i) end, { TextView, Typeface=font, id="jm"..i.."t", gravity = "center", textColor=控件颜色, text = stab[i], --onClick = function() 切换(i) end }}) gund[#gund+1] = _ENV["jm"..i] if i< #stab then gund[#gund+1] = luajava.loadlayout({ LinearLayout, layout_height="match_parent", layout_width="1.3dp", background=控件颜色 }) end end cebian[#cebian+1] = { HorizontalScrollView, gravity = "center", fillViewport = "true", layout_height = "wrap_content", layout_width = "wrap_content", gund, } cebian = luajava.loadlayout(cebian) for i = 1,#stab do local tmp={ LinearLayout, --background = getj6(), id = "layoutm"..i, gravity = "top", layout_width = "250dp", orientation = "vertical", gravity = "center_horizontal", } for k = 1,#sview[i] do if type(sview[i][k]) == "userdata" then tmp[#tmp+1] = sview[i][k] else tmp[#tmp+1] = sview[i][k]["view"] end end _ENV["layout"..i] = luajava.loadlayout( { ScrollView, --background = getj6(), fillViewport = true, padding = "3dp", id = "layout"..i, visibility = "gone", padding={"8dp","3dp","8dp","10dp"}, layout_width = "wrap_content", layout_height = "match", orientation = "vertical", {FrameLayout, {LinearLayout, layout_height="250dp", }, tmp}, }) end changan.controlWater = function(control,time) luajava.runUiThread(function() import "android.animation.ObjectAnimator" ObjectAnimator():ofFloat(control,"scaleX", { 1, 0.8, 0.9, 1 }):setDuration(time):start() ObjectAnimator():ofFloat(control,"scaleY", { 1,0.8,0.9,1 }):setDuration(time):start() end) end gggscro=luajava.loadlayout({LinearLayout, id="gggscro", layout_width = "match_parent", orientation="vertical", padding="1dp", layout_marginRight="50dp", }) xiaomai=luajava.loadlayout({ImageView, layout_height = "40dp", layout_width = "40dp", layout_marginTop="0dp", layout_marginLeft="0dp", padding="7dp", src=getRes(Q版小人), onClick=function() searchStart() changan.controlWater(xiaomai,200) vibra:vibrate(10) end, onTouch=hanshu, background = getVerticalBG({ 0x22262626,0x22262626 },360,5,0x33ffffff), }) ckou = { LinearLayout, id = "chuangk", visibility = "gone", layout_width = "wrap_content", layout_height = "wrap_content", orientation = "vertical", { LinearLayout, layout_width="match_parent", layout_height="35dp", background=getCorner({0xffffffff,0xffffffff},15,0,0xff232323,45,45,0,0), {LinearLayout, layout_width="35dp", layout_height="match_parent", gravity="center", {LinearLayout, gravity="center", background=getVerticalBG({0xffE6E6E6,0xffE6E6E6},90), layout_width = "20dp", layout_height = "20dp", layout_marginLeft = "5dp", onClick = 隐藏, onTouch = hanshu, {LinearLayout, layout_height="2dp", layout_width="10dp", background=getVerticalBG({0xff2c2c2c,0xff2c2c2c},45), } } }, {LinearLayout, layout_width="35dp", layout_height="match_parent", gravity="center", }, {LinearLayout, layout_width="fill_parent", layout_weight=1, layout_height="match_parent", gravity="center", {LinearLayout, layout_height="match_parent", layout_width="80dp", background=topSelect(), onClick=function() end, gravity="center", onTouch=hanshu, {LinearLayout, layout_height="5dp", layout_width="60dp", background=getVerticalBG({插件颜色,插件颜色},20) } } }, {LinearLayout, layout_width="35dp", layout_height="match_parent", gravity="center", }, {LinearLayout, layout_width="35dp", layout_height="match_parent", gravity="center", { ImageView, padding = "5dp", src = getRes("xmtg"), background=getVerticalBG({0xffE6E6E6,0xffE6E6E6},90), layout_width = "20dp", layout_height = "20dp", layout_marginRight = "5dp", onClick = 隐藏, onTouch = hanshu, } } }, {LinearLayout, layout_height="wrap_content", layout_width="match_parent", padding="4dp", {FrameLayout, layout_marginTop = "4dp" , layout_marginBottom = "4dp" , layout_marginLeft="4dp", layout_marginRight="4dp", layout_height="50dp", layout_width="match_parent", elevation="3dp", padding="2dp", background=newbg2(插件颜色,25), {LinearLayout, gravity="center_vertical", layout_height="match_parent", layout_width = "match_parent", { ScrollView, id="ggscro", visibility="gone", layout_weight=1, layout_gravity="center", layout_height = "match_parent", layout_width = "match_parent", gggscro }, { EditText, visibility="visible", layout_weight=1, layout_marginTop="0dp", id=luajava.newId("tosearch"), orientation = "vertical", layout_width = "match_parent", layout_height="match_parent", hint = "请输入需要搜索的功能关键词", textColor = "#ffffff", gravity = "center", layout_marginLeft="0dp", textSize = "12sp", background = getVerticalBG({ 0x00262626,0x00262626 },15,5,0x00ffffff), }, xiaomai} } }, cebian, } for i = 1,#stab do ckou[#ckou+1] = _ENV["layout"..i] end --luajava.newThread(function() develo(ckou) end):start() ckou = luajava.loadlayout(ckou) title = luajava.loadlayout({ TextView, Typeface=font, id = "title", visibility = "gone", text = stitle, background="#80FF00", textColor="#000000", gravity = "center", textSize = "19sp", layout_marginTop = "20dp", layout_width = "280dp", }) xfcpic=获取图片(xfcpic) floatWindow = { LinearLayout, id = "motion", elevation="4dp", orientation="vertical", {FrameLayout, layout_width="wrap_content", {LinearLayout, gravity = "center", {ImageView, id = "control", background = xfcpic, layout_width = "40dp", layout_height = "40dp", } }, { ImageView, id = "exit", layout_gravity="right", visibility="gone", background = "https://postimage.me/images/2024/09/04/retouch_2024090407071361.png", layout_width = "20dp", layout_height = "20dp", layout_marginTop = "10dp", layout_marginRight = "20dp", }}, ckou } local function invoke() local ok local RawX, RawY, x, y mainLayoutParams = getLayoutParams() mainLayoutParams.x = 100 mainLayoutParams.y = dheight/4 floatWindow = luajava.loadlayout(floatWindow) local function invoke2() block('start') window:addView(floatWindow, mainLayoutParams) block('end') end local runnable = luajava.getRunnable(invoke2) local handler = luajava.getHandler() handler:post(runnable) block('join') control.onClick = 隐藏 exit.onClick = 隐藏 local isMove motion.onTouch = hanshu control.onTouch = hanshu exit.onTouch = hanshu end invoke(swib1,swib2) gg.setVisible(false) luajava.setFloatingWindowHide(true) 切换(1) import("android.media.AudioManager") audi = context:getSystemService("audio") audiotype = { AudioManager.STREAM_ALARM, --手机闹铃的声音 AudioManager.STREAM_MUSIC, --手机音乐的声音 AudioManager.STREAM_NOTIFICATION, --系统提示的通知 AudioManager.STREAM_RING, --电话铃声的声音 AudioManager.STREAM_SYSTEM, --手机系统的声音 AudioManager.STREAM_VOICE_CALL, --语音电话的声音 AudioManager.STREAM_DTMF, --DTMF音调的声音 --AudioManager.STREAM_BLUETOOTH_SCO, } yinl = {} for i = 1,#audiotype do yinl[i] = {} yinl[i].type = audiotype[i] yinl[i].min = audi:getStreamMinVolume(audiotype[i]) yinl[i].max = audi:getStreamMaxVolume(audiotype[i]) yinl[i].now = audi:getStreamVolume(audiotype[i]) end yltype = 0 function jianting3(func) yinln = {} for i = 1,#audiotype do yinln[i] = {} yinln[i].type = audiotype[i] yinln[i].now = audi:getStreamVolume(audiotype[i]) if yinln[i].now > yinl[i].now then yinl[i].now = yinln[i].now if yltype == 1 then yltype = 0 func() end elseif yinln[i].now < yinl[i].now then yinl[i].now = yinln[i].now if yltype == 0 then yltype = 1 func() end end end end qhkai = 0 qiehuan = function() if qhkai == 0 then qhkai = 1 draw.remove() luajava.runUiThread(function() changan.controlSmall(floatWindow,400) end) gg.sleep(400) luajava.runUiThread(function() floatWindow:setVisibility(View.GONE) end) else qhkai = 0 huiz() luajava.runUiThread(function() floatWindow:setVisibility(View.VISIBLE) end) luajava.runUiThread(function() changan.controlBig(floatWindow,400) end) end end huiz() while true do if tuichu == 1 then break end jianting3(qiehuan) gg.sleep(300) end luajava.setFloatingWindowHide(false) end function changan.line() rest = luajava.loadlayout({LinearLayout, layout_width = 'fill_parent', { LinearLayout, layout_width = 'fill_parent', layout_height = "1dp", background = "#88C2CAD7", layout_marginLeft="20dp", layout_marginRight="20dp" }}) return rest end function changan.line2() rest = luajava.loadlayout({ LinearLayout, layout_width = '180dp', layout_height = "5dp", layout_marginLeft="35dp", background = "#0087FF", layout_marginTop="10dp", }) return rest end function getblue() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(6) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({0xffffffff,0xffffffff}) jianbians:setStroke(4,插件颜色)--边框宽度和颜色 return jianbians end function getShape3() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(10) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({0xffffffff,0xffffffff}) jianbians:setStroke(4,"0x77000000")--边框宽度和颜色 return jianbians end function getShape5() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(4) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({0xffffffff,插件颜色}) jianbians:setOrientation(GradientDrawable.Orientation.TL_BR) jianbians:setStroke(2,"0x77000000")--边框宽度和颜色 return jianbians end function getShape() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(90) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({0xff49C263,0xff49C263}) jianbians:setStroke(0,"0xffffffff")--边框宽度和颜色 return jianbians end function getShape2() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(10) jianbians:setShape(GradientDrawable.RECTANGLE) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({0xffffffff,0xffffffff}) jianbians:setStroke(8,"0xff000000")--边框宽度和颜色 return jianbians end corbk = true 当前ui = 1 显示 = 0 beij = newbg(0xffeeeeee,nil) --beijw beij2 = luajava.loadlayout({ GradientDrawable, color = "#001E1C27", cornerRadius = 10 }) changan.controlRotation9 = function(control, time,t) luajava.runUiThread(function() import "android.view.animation.Animation" import "android.animation.ObjectAnimator" xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", { time,t }) xuanzhuandonghua:setRepeatCount(0) xuanzhuandonghua:setRepeatMode(Animation.RESTART) xuanzhuandonghua:setDuration(4) xuanzhuandonghua:start() end) end function visi (tid , ttid) vibra:vibrate(4) local tview = luajava.getIdValue (tid) local ttview = luajava.getIdValue (ttid) if not tview then return 0 end if tonumber (tostring (tview : getVisibility ())) == 8.0 then tview : setVisibility (View.VISIBLE) YoYoImpl:with("FadeIn"):duration(200):playOn(boxes[tid]) changan.controlRotation9(boxpic[tid],90,-90) else tview : setVisibility (View.GONE) changan.controlRotation9(boxpic[tid],-90,90) end end boxes = {} boxpic = {} function changan.box2 (views) local tid = "box"..guid () boxpic[tid] = luajava.loadlayout { ImageView , src = getRes("opoback"), layout_width = "24dp" , layout_height = "24dp" , } local ttid = tid.."6" local t1id = guid () firadio = { LinearLayout , layout_width = 'fill_parent' , layout_height = "wrap_content" , layout_marginTop = "2dp" , layout_marginBottom = "2dp" , orientation = "vertical" , } if type (views [1]) == "string" or type (views [1]) == "number" then firadio [# firadio + 1] = { LinearLayout , layout_width = 'fill_parent' , layout_height = "40dp" , gravity = "center_vertical" , layout_marginTop = "4dp" , layout_marginBottom = "4dp" , layout_marginLeft="4dp", layout_marginRight="4dp", onClick = function () gg.playMusic("/storage/emulated/0/iosPro/图片/box2音效.mp3") visi (tid , ttid) end , background = getButtonBG(), elevation="2dp", { TextView , text = views [1] , Typeface=font, textSize = "13sp" , layout_marginLeft = "15dp" , layout_width = "match_parent" , layout_weight=1, textColor = "#000000" , gravity = "left" , },{ LinearLayout , padding={"0dp","0dp","10dp","0dp"}, layout_width = "30dp" , layout_height = "30dp" , gravity = "center", boxpic[tid], } } else gg.alert ("changan.box的table内第一个元素必须是string") os.exit () end radios = { LinearLayout , layout_marginLeft = "0dp" , layout_marginRight = "0dp" , orientation = "vertical" , visibility = "gone" , id = luajava.newId (tid) , padding = "0dp" , layout_width = 'fill_parent' , } local vs={} for i = 2,#views do if type(views[i]) == "userdata" then radios[#radios+1] = views[i] else radios[#radios+1] = views[i].view vs[#vs+1]=views[i] end end boxes[tid] = luajava.loadlayout(radios) firadio [# firadio + 1] = boxes[tid] _ENV [t1id] = luajava.loadlayout (firadio) return {["view"] = _ENV[t1id], ["name"] = views[1], ["type"] = "BOX2", ["vs"]=vs } end function getButtonBG() local selector = luajava.getStateListDrawable() selector:addState({ android.R.attr.state_pressed }, getVerticalBG({0x55d7d7d7,0x55d7d7d7},35)) selector:addState({ -android.R.attr.state_pressed }, newbg(0xffffffff,35)) return selector end function changan.box(views) local tid = "box"..guid() local ttid = tid.."6" firadio = { LinearLayout, gravity = "center", layout_width = 'fill_parent', layout_height = "wrap_content", orientation = "vertical", } if type(views[1]) == "string" or type(views[1]) == "number" then if views[1]~="" then tsiz="14sp" else tsiz="0sp"end firadio[#firadio+1] = { LinearLayout, layout_height = "wrap_content", layout_width = "fill_parent", { TextView, Typeface=font, text = views[1], textSize = tsiz, layout_width = "match_parent", textColor = "#000000", gravity = "center", }} else end radios = { LinearLayout, layout_marginLeft = "4dp", layout_marginRight = "4dp", layout_marginTop="4dp", layout_marginBottom="4dp", orientation = "vertical", padding = "0dp", elevation="2dp", background = getButtonBG(), layout_width = 'fill_parent', } local vs={} for i = 2,#views do if type(views[i]) == "userdata" then radios[#radios+1] = views[i] else radios[#radios+1] = views[i].view vs[#vs+1]=views[i] end if i~=#views then radios[#radios+1] = changan.line() end end firadio[#firadio+1] = radios if views[1]=="" then bxn="BOX" else bxn=views[1] end return {["view"] = luajava.loadlayout(firadio), ["name"] = bxn, ["type"] = "BOX", ["vs"]=vs } end 当前ui = 1 function 切换(x) 当前ui = x luajava.runUiThread(function() for i = 1,#stab do _ENV["jm"..i]:setBackground(_ENV["jmb"..i]) _ENV["jm"..i.."t"]:setTextColor(插件颜色) _ENV["layout"..i]:setVisibility(View.GONE) end _ENV["layout"..当前ui]:setVisibility(View.VISIBLE) _ENV["jm"..当前ui]:setBackground(slcta) _ENV["jm"..当前ui.."t"]:setTextColor(0xffffffff) --YoYoImpl:with("FadeIn"):duration(200):playOn(_ENV["layout"..当前ui]) end) end changan.controlBig = function(control,time) luajava.runUiThread(function() import "android.animation.ObjectAnimator" ObjectAnimator():ofFloat(control,"scaleX", { 0, 0.4, 0.7, 1 }):setDuration(time):start() ObjectAnimator():ofFloat(control,"scaleY", { 0, 0.4, 0.7, 1 }):setDuration(time):start() end) end function 隐藏() luajava.runUiThread(function() if tonumber(tostring(ckou:getVisibility())) == 8.0 then control:setVisibility(View.GONE) ckou:setVisibility(View.VISIBLE) mainLayoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL window:updateViewLayout(floatWindow, mainLayoutParams) --YoYoImpl:with("FadeIn"):duration(300):playOn(title) _ENV["layout"..当前ui]:setVisibility(View.VISIBLE) changan.controlBig(floatWindow,300) floatWindow:setBackground(beij) else control:setVisibility(View.VISIBLE) mainLayoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE window:updateViewLayout(floatWindow, mainLayoutParams) floatWindow:setBackground(beij2) ckou:setVisibility(View.GONE) YoYoImpl:with("FadeIn"):duration(200):playOn(floatWindow) _ENV["layout"..当前ui]:setVisibility(View.GONE) end end) end function 退出UI() window:removeView(floatWindow) luajava.setFloatingWindowHide(false) tuichu=1 end function guid() seed = { 'e','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' } tb = {} for i = 1,32 do table.insert(tb,seed[math.random(1,16)]) end sid = table.concat(tb) return string.format('%s%s%s%s%s', string.sub(sid,1,8), string.sub(sid,10,12), string.sub(sid,21,22)) ..string.format('%s%s%s%s%s', string.sub(sid,1,6), string.sub(sid,21,25) ) end chazhi={} chajv={} function changan.seek(name,bian,smin,smax,nows) _ENV[bian] =nows local thum= getVerticalBG({0xffffffff,0xffffffff},5,5,控件颜色) thum:setSize(40, 40) smin=tonumber(smin) smax=tonumber(smax) chajv[bian]=smax-smin chazhi[bian]=1-smin if smin==nil then smin=1 smax=10 end truesmin=1 truesmax=truesmin+chajv[bian] if not nows then nows = smin tnows=(smin-nows) else tnows=(nows-smin)+1 end if _ENV[bian] == nil then _ENV[bian] = 1.0 end if not name then name = "未设置" end local names = name..guid() rest = luajava.loadlayout({ LinearLayout, layout_width = 'fill_parent', layout_hight = "fill_parent", { LinearLayout, layout_width = 'fill_parent', layout_hight = "fill_parent", layout_marginTop = "5dp", layout_marginBottom = "5dp", gravity = "center_vertical", background = getButtonBG(), elevation="2dp", layout_marginLeft = "5dp", layout_marginRight = "5dp", id=luajava.newId(name.."seekbg"), { TextView, Typeface=font, padding={"5dp","10dp","0dp","10dp",}, gravity = "top", textColor="#212121", text = name..":"..nows, id = luajava.newId(names), layout_width = '100dp', --layout_marginLeft = "5dp", textSize='13sp', layout_marginRight = "0dp", }, { SeekBar, layout_width = 'fill_parent', layout_weight=1, id=luajava.newId(name.."seekbar"), min = truesmin, max = truesmax, progress=tnows, maxHeight="10dp", maxWidth="fill_parent", minHeight="10dp", minWidth="fill_parent", --paddingStart="0dp", --paddingEnd="0dp", progressDrawable={ getVerticalBG({控件颜色,控件颜色},45)}, thumb=thum, progressHeight="10dp", onSeekBarChange = { onProgressChanged = function(SeekBar, var2, var3) if not var3 then return end local resultvar=tonumber(string.sub(var2,0,-3))-chazhi[bian] luajava.runUiThread(function() luajava.getIdValue(names):setText(name..":".. resultvar) end) _ENV[bian] = resultvar end }} }}) return {["view"] = rest, ["name"] = name, ["type"] = "拉条", } end function getShape(tmp0,tmp1,tmp2,tmp3) jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(tmp0) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors(tmp1) jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT) jianbians:setStroke(4,tmp3)--边框宽度和颜色 return jianbians end function getShape2(tmp0,tmp1,tmp2,tmp3) jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(tmp0) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors(tmp1) jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT) jianbians:setStroke(8,tmp3)--边框宽度和颜色 return jianbians end checkbg=getShape( 45, {0xffB8B8B8,0xffB8B8B8}, 4,0xffB8B8B8) checkbga=getShape( 45, {插件颜色,插件颜色}, 4,插件颜色) checkbg1=getShape2( 45, {0xffffffff,0xffffffff}, 4,0xffffffff) checkbg2=getShape2( 45, {0xffffffff,0xffffffff}, 4,0xffffffff) function 开关3(name,func1,func2,nid) local gnname=name name=name..guid() _ENV[name] = "关" if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1) == "function" then return function() namers = _ENV[name] if namers ~= "开" then luajava.runUiThread(function() luajava.getIdValue(nid.."k"):setVisibility(View.GONE) luajava.getIdValue(nid.."g"):setVisibility(View.VISIBLE) luajava.getIdValue(nid):setBackground(checkbga) end) _ENV[name] = "开" vibra:vibrate(10) pcall(func1) uiadtext(gnname.." 已开启.","#ffffff") else luajava.runUiThread(function() luajava.getIdValue(nid.."g"):setVisibility(View.GONE) luajava.getIdValue(nid.."k"):setVisibility(View.VISIBLE) luajava.getIdValue(nid):setBackground(checkbg) end) _ENV[name] = "关" vibra:vibrate(10) pcall(func2) uiadtext(gnname.." 已关闭.","#545454") end end end end function changan.switch(name,func1,func2,yans) nid = name..guid() if not yans then yans=控件颜色 end local func = 开关3(name,func1,func2,nid) if not name then name = "未设置" end rest = luajava.loadlayout({ LinearLayout , layout_width = 'fill_parent' , layout_height = "36dp", gravity = "center_vertical", { LinearLayout, layout_width = 'fill_parent', layout_height = "35dp", gravity = "center_vertical", { TextView, Typeface=font, gravity = "top", text = name, textColor=yans, textSize="16sp", layout_width = '170dp', layout_marginLeft = "10dp", layout_marginRight = "10dp", }, { FrameLayout, id = luajava.newId(nid), background = checkbg, onClick = function() luajava.newThread(function() func() end):start() end, layout_width = '43dp', layout_height = 'wrap_content', padding="1dp", { LinearLayout, layout_gravity="left", id = luajava.newId(nid.."k"), background = checkbg1, onClick = function() luajava.newThread(function() func() end):start() end, layout_width = '21dp', layout_height = '21dp', },{ LinearLayout, visibility="gone", layout_gravity="right", id = luajava.newId(nid.."g"), background = checkbg2, onClick = function() luajava.newThread(function() func() end):start() end, layout_width = '21dp', layout_height = '21dp', } }} }) return {["view"] = rest, ["name"] = name, ["func1"] = func1, ["func2"] = func2, ["type"] = "开关", } end function changan.edit(name) _ENV[name] = name..guid() if not name then name = "点击输入文字" end rest = luajava.loadlayout({ LinearLayout, layout_width = 'fill_parent', layout_height = "40dp", { FrameLayout, layout_width = 'fill_parent', layout_hight = "fill_parent", gravity = "center", --orientation="vertical", { EditText, Typeface=font, gravity = "top", background = getShape(), hint = name, textColor="#383C3F", gravity="center", textSize="15sp", --layout_marginBottom="-20dp", id = luajava.newId(_ENV[name]), layout_width = 'fill_parent', }, { LinearLayout, layout_width = '220dp', layout_height = "2dp", layout_gravity="center", background = 控件颜色, layout_marginTop="10dp", } } }) luajava.getIdValue(_ENV[name]):setHintTextColor(0xff787878) return {["view"] = rest, ["name"] = name, ["type"] = "输入框", } end function box(views) local mbox={ LinearLayout, layout_height="wrap_content", layout_width="match_parent", orientation="vertical", padding="8dp", layout_marginTop="15dp", layout_marginLeft="7dp", layout_marginRight="7dp", layout_marginBottom="15dp", elevation="3dp", background=newbg(0xffffffff,35), } for i=1,#views do mbox[#mbox+1]=views[i] end return mbox end function changan.radio(radio) firadio = { LinearLayout, layout_width = 'fill_parent', layout_hight = "fill_parent", padding="10dp", orientation = "vertical" } if type(radio[1]) == "string" or type(radio[1]) == "number" then firadio[#firadio+1] = { TextView, Typeface=font, text = radio[1]} end radios = { RadioGroup,background = getShape(), layout_width = 'fill_parent', } for i = 2,#radio do radios[#radios+1] = { RadioButton, layout_width = 'fill_parent', text = radio[i][1], onClick = function() luajava.newThread(function() pcall(radio[i][2]) end):start() end, } end firadio[#firadio+1] = radios return {["view"] = luajava.loadlayout(firadio), ["name"] = radio[1], ["type"] = "单选", }end function getTimeStamp(t) local str = os.date("%Y/%m/%d-%H:%M:%S",t) return str end function changan.button(txt,func,yans) if not yans then yans=控件颜色 end if not txt then txt = "未设置" end return {["view"]=luajava.loadlayout( {LinearLayout, layout_width = 'fill_parent', layout_hight = "30dp", background=getButtonBG(), onClick=function() luajava.newThread(function() uiadtext("执行:"..txt.."","#ffffff") func() end):start() end, { LinearLayout, layout_width = "fill_parent", layout_hight="wrap_content", gravity="center_horizontal", layout_marginTop = "6dp", layout_marginBottom = "6dp", { TextView, Typeface=font, textStyle="bold", textColor=yans, --id = luajava.newId(tid), text = txt, textSize="15sp", layout_width = "wrap_content", }, }}), ["name"] = txt, ["func1"] = func, ["type"] = "按钮", } end function changan.text(txt,color,size) if not txt then txt = "未设置文字" end if not color then color = "#ffffff" end if not size then size = "18sp" end return {["view"] = luajava.loadlayout( { TextView, Typeface=font, text = txt, textSize = size, textColor = color, layout_width = "wrap_content", }), ["name"] = txt, ["type"] = "文本", } end corb = true _ENV["tosearch"]="tosearch" function changan.setedit(name,txt) txt = tostring(txt) luajava.runUiThread(function() luajava.getIdValue(_ENV[name]):setText(txt) end) end function changan.getedit(name) edit = tostring(luajava.getIdValue(_ENV[name]):getText()) return edit end function 开关(name,func1,func2) if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1) == "function" then return function() namers = _ENV[name] if namers ~= "开" then _ENV[name] = "开" pcall(func1) else _ENV[name] = "关" pcall(func2) end end end end gifp={ ["view"]=luajava.loadlayout({ 'ui.GifImageView', src =getRes(大图标), }), } function changan.card(txt,info,tg,qqun) local tmp={ LinearLayout, layout_width="match_parent", padding="10dp", {TextView, Typeface=font, layout_height="wrap_content", layout_width="match_parent", layout_weight=1, text=txt, layout_marginLeft="1dp", textColor=控件颜色, textSize="12sp", } } local bx= box({ tmp, changan.text(info,"#000000","12sp").view, luajava.loadlayout{LinearLayout, layout_width="match_parent", {LinearLayout, gravity="center_horizontal", layout_width="match_parent", layout_weight=1, orientation="vertical", padding="10dp", background=getButtonBG(), onClick=function() luajava.newThread(function() app.openUrl(tg) gg.copyText(tg) gg.alert("TG链接:"..tg.."\n已为你复制到剪切板") 隐藏() end):start() end, { ImageView, layout_height="20dp", layout_width="20dp", src=getRes("xmtg"), } }, {LinearLayout, gravity="center_horizontal", layout_width="match_parent", layout_weight=1, orientation="vertical", padding="10dp", background=getButtonBG(), onClick=function() luajava.newThread(function() gg.QQgroup(qqun) gg.copyText(qqun) gg.alert("Q群:"..qqun.."\n已为你复制到剪切板") 隐藏() end):start() end, { ImageView, layout_height="24dp", layout_width="24dp", src=getRes("xmq"), } }, } }) return { ["view"]=bx } end function getShape22(tmp0,tmp1,tmp2,tmp3) jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(tmp0) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({ tmp1,tmp2 }) jianbians:setStroke(3,tmp3)--边框宽度和颜色 return jianbians end function getShape00(tmp0,tmp1,tmp2,tmp3) jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(tmp0) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({ tmp1,tmp2 }) return jianbians end function launch(appstart) local loadBox = getLoadingBox('正在启动游戏\n'..appstart) loadBox['显示']() if appstart ~= nil then gg.setProcess(appstart) gg.sleep(500) if tostring(gg.getTargetPackage()) == appstart then gg.toast("正在启动游戏") gg.processKill() tuichu=true luajava.setFloatingWindowHide(false) os.exit() end gg.toast("正在启动游戏...") app.startActivity(appstart) jci=0 --gg.sleep(5000) while true do gg.setProcess(appstart) gg.sleep(400) if tostring(gg.getTargetPackage()) == appstart then loadBox['关闭']() gg.alert("启动成功") else jci=jci+1 if jci==14 then loadBox['关闭']() gg.alert("自动获取进程失败\n请手动选择游戏进程") gg.setProcessX() break end end gg.sleep(100) end end end function card(cdv) logo=cdv[1] name=cdv[2] tags=cdv[3] func=cdv[4] if not x then x = 2 end tag = { LinearLayout, } for i = 1,#tags do tag[#tag+1] = { TextView, Typeface=font, background = getShape22(45,0x00FF9700,0x00FF9700,0xffFF9700), layout_height = "20dp", padding = "2dp", textColor = 0xffFF9700, layout_marginLeft = "10dp", gravity = "center_vertical", text = " "..tags[i].." ", textSize = "9sp", } end tags = tag tmp = luajava.loadlayout( { FrameLayout, layout_height = "wrap_content", layout_width = "fill_parent", { LinearLayout, orientation = "vertical", layout_height = "100dp", layout_marginLeft = "14dp", layout_marginRight = "14dp", layout_marginTop = "10dp", layout_marginBottom = "10dp", layout_width = "match_parent", { LinearLayout, layout_marginLeft = "10dp", layout_marginRight = "10dp", layout_marginTop = "10dp", layout_marginBottom = "10dp", layout_width = "match_parent", layout_height = "40dp", { ImageView, layout_width = "40dp", layout_height = "40dp", background = 获取图片(logo), }, { TextView, Typeface=font, layout_height = "40dp", layout_marginLeft = "10dp", gravity = "center_vertical", text = name, textColor="#161616", textSize = "13sp", } }, tags }, { LinearLayout, onClick = function() luajava.newThread(function() 隐藏() func() end):start() end, background = getShape00(90,0xff28FEB9,0xff28FEB9,0xff28FEB9), layout_height = "25dp", layout_width = "55dp", layout_gravity = "right", layout_marginRight = "30dp", layout_marginTop = "70dp", gravity = "center", { ImageView, layout_height = "20dp", layout_width = "15dp", background = getRes("rw1"), }, { TextView, Typeface=font, textColor = "#000000", text = "启动", textSize = "10sp", layout_height = "20dp", gravity = "center", layout_width = "30dp", } } }) return { ["view"]=tmp } end wyyget="http://120.24.160.246:3000/" function huoqu(txt) return table.json(gg.makeRequest(wyyget.."song/url/v1?id="..txt.."&level=standard").content) end function souyy(txt) return table.json(gg.makeRequest("http://music.163.com/api/search/get?s="..txt.."&type=1&offset=0&total=true&limit=10").content) end function develo(tabb) gg.alert(tostring(tabb)) end function develo2(tabb) gg.copyText(tostring(tabb)) end function tablekIn(tbl, key) if tbl == nil then return false end for k, v in pairs(tbl) do if k == key then return true end end return false end function getbg() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(15) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({0x11000000,0x11000000}) jianbians:setStroke(4,"0x33000000")--边框宽度和颜色 selector = luajava.getStateListDrawable() selector:addState({ android.R.attr.state_pressed }, luajava.loadlayout { GradientDrawable, color = "#88000000", cornerRadius = 12 }) -- 点击时候的背景 selector:addState({ -android.R.attr.state_pressed }, jianbians) -- 没点击的背景 return selector end function searchmusic() if not lasttm then lasttm = os.time() else if os.time() - lasttm <= 5 then gg.alert("请在" .. (5 - (os.time() - lasttm)) .. "秒冷却后搜索") return 0 end end if not wryt then else runnable = luajava.getRunnable(function() luajava.getIdView("搜索列表"):removeView(wyr) end) handler = luajava.getHandler() handler:post(runnable) end mustxt = luajava.getIdView("搜索"):getText() if string.len(tostring(mustxt)) <= 2 or tostring(mustxt) == nil then gg.alert("至少输入2个字符") return 0 end mustxt = tostring(mustxt) luajava.runUiThread(function() luajava.getIdView("jzz"):setVisibility(View.VISIBLE) luajava.getIdView("stxt"):setVisibility(View.GONE) end) lasttm = os.time() mustable = souyy(mustxt) mustable = mustable.result.songs -- print(mustable) musnames = {} musids = {} musarts = {} musictable = {} for k, v in pairs(mustable) do musictable[#musictable + 1] = v end -- gg.alert(tostring(mustable)) -- gg.alert(tostring(musictable)) -- gg.copyText(tostring(mustable)) -- gg.alert(#musictable) wrfun = {} wryt = { LinearLayout, id = luajava.newId("搜索结果"), layout_marginTop = "5dp", layout_marginBottom = "5dp", orientation = "vertical" } for i = 1, #musictable do musid = musictable[i].id -- print('musid',musid) -- musid = musictable[i].album.id -- print('musid',musid) musids[#musids + 1] = musid musname = musictable[i].name if tablekIn(musictable[i], "transNames") ~= false then musname = musname .. "\n(" .. musictable[i].transNames[0] .. ")" end musnames[#musnames + 1] = musname musart = musictable[i].artists[0].name musarts[#musarts + 1] = musart wryt[#wryt + 1] = { LinearLayout, orientation = "vertical", layout_marginTop = "2dp", layout_marginBottom = "2dp", background = getbg(), id = luajava.newId("音" .. musid), onClick = function() thread = luajava.getThread(function() bofang(musname, musid) end) thread:start() end, { TextView, Typeface=font, layout_marginTop = "5dp", textSize = "16sp", textColor = 控件颜色, layout_marginBottom = "0dp", text = musname, layout_hight = "10dp", layout_width = "228dp", gravity = "center" }, { TextView, Typeface=font, layout_marginTop = "0dp", textColor = "#535353", textSize = "12sp", layout_marginBottom = "5dp", text = musart, layout_hight = "10dp", layout_width = "200dp", gravity = "center" } } -- gg.sleep(50) wryt[#wryt].onClick = function() -- (function() -- bofang(musnames[i] .. musarts[i], musids[i]) -- end):start() luajava.startThread(function() bofang(musnames[i] .. musarts[i], musids[i]) end) end end wyr = luajava.loadlayout(wryt) runnable = luajava.getRunnable(function() luajava.getIdView("搜索列表"):addView(wyr) end) handler = luajava.getHandler() handler:post(runnable) luajava.runUiThread(function() luajava.getIdView("jzz"):setVisibility(View.GONE) luajava.getIdView("stxt"):setVisibility(View.VISIBLE) end) -- gg.alert(tostring(wrfun)) end function bofang(gqmz, gdmn) luajava.runUiThread(function() luajava.getIdView("搜索结果"):setVisibility(View.GONE) luajava.getIdView("加载"):setVisibility(View.VISIBLE) end) gg.playMusic("http://music.163.com/song/media/outer/url?id="..gdmn..".mp3" or huoqu(gdmn).data[0].url) -- gg.sleep(2000) luajava.runUiThread(function() luajava.getIdView("加载"):setVisibility(View.GONE) luajava.getIdView("搜索结果"):setVisibility(View.VISIBLE) end) end stxt = { TextView, Typeface=font, text = "搜索", textColor="#000000", background=getbg(), layout_height="match_parent", visibility = "visible", gravity="center", id = luajava.newId("stxt"), layout_marginLeft = "3dp", textSize = "16sp", padding={"13.5dp","0dp","13.5dp","0dp"}, onClick = function() thread = luajava.getThread(function() searchmusic() end) thread:start() end } jzz = { TextView, Typeface=font, text = "加载中", visibility = "gone", id = luajava.newId("jzz"), layout_marginLeft = "10dp", textSize = "20sp", textColor="#000000", } jiaz = { TextView, Typeface=font, text = "正在加载歌曲资源", visibility = "gone", id = luajava.newId("加载"), textSize = "20sp", gravity = "center", textColor="#000000", } wyylog = luajava.loadlayout({ LinearLayout, orientation="vertical", layout_width = "match_parent", { ScrollView, layout_hight = "220dp", gravity="center_horizontal", layout_width = "match_parent", { LinearLayout, layout_width = "match_parent", {LinearLayout, padding="4dp", gravity="center", orientation="vertical", id=luajava.newId("固定音乐"), }, id = luajava.newId("搜索列表"), layout_hight = "200dp", orientation = "vertical", layout_width = "match_parent", gravity="center_horizontal", { LinearLayout, orientation = "horizontal", layout_width = "match_parent", padding={"10dp","0dp","10dp","0dp"}, { EditText, Typeface=font, hint = "搜索歌曲名称", textColor="#000000", id = luajava.newId("搜索"), background = getbg(), focusableInTouch = "true", focusable = "true", selectAllOnFocus = "true", singleLine = "true", layout_weight=1, gravity="center", layout_width = "match_parent" }, stxt, jzz }, jiaz } } }) spics={ } for i=1,55 do spics[i]="opo"..i end switchs={} tcheck=10 function changan.int卡片(name,func1,func2,ii,gid,pic) if pic~=nil then tocheck=获取图片(pic) else if tcheck==56 then tcheck=1 else tcheck=tcheck+1 end tocheck=getRes(spics[tcheck]) end local func = 卡片开关1(name,func1,func2,gid..ii) if not name then name = "未设置" end if pic~=nil then switchs[gid..ii] = luajava.loadlayout{ LinearLayout, id = luajava.newId(gid..ii), layout_width = ( (tonumber(string.replace(界面宽度,"dp","")) -16)/3).."dp", layout_height = "wrap_content", layout_marginTop = "1dp", layout_marginBottom = "1dp", padding = "1dp", { LinearLayout, padding="3dp", onClick = function() luajava.newThread(function() func() end):start() end, layout_width = 'fill_parent', layout_height = "wrap_content", gravity = "center_horizontal", orientation="vertical", --background=getVerticalBG({0xffFFFDF2,0xddffffff,0xffFFFDF2},15,8,0xffFFDA71), { ImageView, id = luajava.newId(gid..ii.."p"), background=tocheck, setColorFilter=0xffFF8C8C8C, gravity="center", layout_width = '30dp', layout_height = '30dp', padding = "8dp", },{ TextView, Typeface=font, id=luajava.newId(gid..ii.."t"), gravity = "center", text = name, textColor="#FF8C8C8C", textSize = "9sp", layout_marginLeft="8dp", layout_width = 'match_parent', layout_weight=1, }, } } colorvs[gid..ii.."p"]={false,"img"} colorvs[gid..ii.."t"]={gid..ii.."t",false,"txt"} else switchs[gid..ii] = luajava.loadlayout{ LinearLayout, id = luajava.newId(gid..ii), layout_width = ( (tonumber(string.replace(界面宽度,"dp","")) -16)/3).."dp", layout_height = "wrap_content", layout_marginTop = "1dp", layout_marginBottom = "1dp", padding = "1dp", { LinearLayout, padding="3dp", onClick = function() luajava.newThread(function() func() end):start() end, layout_width = 'fill_parent', layout_height = "wrap_content", gravity = "center_horizontal", orientation="vertical", --background=getVerticalBG({0xffFFFDF2,0xddffffff,0xffFFFDF2},15,8,0xffFFDA71), { ImageView, id = luajava.newId(gid..ii.."p"), src = tocheck, background=ckbg, setColorFilter=0xff00000, gravity="center", layout_width = '30dp', layout_height = '30dp', padding = "2dp", },{ TextView, Typeface=font, id=luajava.newId(gid..ii.."t"), gravity = "center", text = name, textColor="#FF8C8C8C", textSize = "9sp", --layout_marginLeft="8dp", layout_width = 'match_parent', layout_weight=1, }, } } colorvs[gid..ii.."p"]={false,"img"} colorvs[gid..ii.."t"]={gid..ii.."t",false,"txt"} end return switchs[gid..ii] end function changan.intcard(name,name2,func1,func2,ii,gid) if tcheck==56 then tcheck=1 else tcheck=tcheck+1 end tocheck=spics[tcheck] local func = 开关6(name,func1,func2,gid..ii) if not name then name = "未设置" end if not name2 then name2="" end switchs[gid..ii] = { LinearLayout, id = luajava.newId(gid..ii), layout_width = 'wrap_content', layout_height = "wrap_content", layout_marginTop="5dp", layout_marginBottom="5dp", layout_marginLeft="3dp", layout_marginRight="3dp", { LinearLayout, padding="3dp", onClick = function() luajava.newThread(function() func() end):start() end, layout_width = ( (tonumber(string.replace(界面宽度,"dp","")) -30)/2).."dp", layout_height = "wrap_content", gravity = "left", background=getShape3(), orientation="vertical", padding="5dp", --background=getVerticalBG({0xffFFFDF2,0xddffffff,0xffFFFDF2},15,8,0xffFFDA71), { ImageView, id = luajava.newId(gid..ii.."p"), src = getRes(tocheck), setColorFilter=0xffFF8C8C8C, gravity="left", layout_width = '30dp', layout_height = '30dp', padding = "3dp", },{ TextView, Typeface=font, id=luajava.newId(gid..ii.."t"), gravity = "left", text = name, textColor="#FF8C8C8C", textSize = "12sp", layout_width = 'match_parent', layout_weight=1, },{ TextView, Typeface=font, id=luajava.newId(gid..ii.."t2"), gravity = "left", text = name2, textColor="#FF8C8C8C", textSize = "9sp", layout_width = 'match_parent', layout_weight=1, } } } colorvs[gid..ii.."p"]={false,"img"} colorvs[gid..ii.."t"]={false,"txt"} return switchs[gid..ii] end shous={} function 收起ck(gid,ii) if shous[gid] ==false then shous[gid]=true luajava.getIdView(gid..ii.."p"):setRotation(0) for i=1,ii-1 do if i>=9 then luajava.post(function() luajava.getIdView(gid):removeView(luajava.getIdView(gid..i)) end) end end else shous[gid]=false luajava.post(function() luajava.getIdView(gid):removeView(luajava.getIdView(gid..ii)) for i=1,ii-1 do if i>=9 then luajava.getIdView(gid):addView(luajava.getIdView(gid..i)) end end luajava.getIdView(gid):addView(luajava.getIdView(gid..ii)) end) luajava.getIdView(gid..ii.."p"):setRotation(180) end end opou=getRes("opou") function changan.groupboxbox(gid,ii) local func = function() 收起ck(gid,ii) end if not name then name = "未设置" end switchs[gid..ii] = { LinearLayout, id=luajava.newId(gid..ii), layout_width = '70dp', layout_height = "wrap_content", layout_marginTop = "1dp", layout_marginBottom = "1dp", padding = "1dp", { LinearLayout, padding="3dp", onClick = func, layout_width = 'fill_parent', layout_height = "wrap_content", gravity = "center_horizontal", orientation="vertical", --background=getVerticalBG({0xffFFFDF2,0xddffffff,0xffFFFDF2},15,8,0xffFFDA71), { ImageView, id = luajava.newId(gid..ii.."p"), src = opou, background=ckbg, gravity="center", layout_width = '30dp', layout_height = '30dp', padding = "8dp", },{ TextView, Typeface=font, id=luajava.newId(gid..ii.."t"), gravity = "center", text = "展开", textColor="#FF8C8C8C", textSize = "9sp", --layout_marginLeft="8dp", layout_width = 'match_parent', layout_weight=1, }, } } return switchs[gid..ii] end function 开关6(name,func1,func2,nid) local sname = nid local localname=name name = name..guid() _ENV[name] = "关" if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1) == "function" then return function() namers = _ENV[name] if namers ~= "开" then vibra:vibrate(9) luajava.runUiThread(function() luajava.getIdValue(nid.."t"):setTextColor(插件颜色) luajava.getIdValue(nid.."t2"):setTextColor(插件颜色) luajava.getIdValue(nid.."p"):setColorFilter(插件颜色) colorvs[nid.."p"]={true,"img"} colorvs[nid.."t"]={true,"txt"} colorvs[nid.."t2"]={true,"txt"} OP.controlWater(switchs[nid],300) end) _ENV[name] = "开" pcall(func1) uiadtext(localname.." 已开启.","#ffffff") else vibra:vibrate(9) luajava.runUiThread(function() luajava.getIdValue(nid.."t"):setTextColor(0xffFF8C8C8C) luajava.getIdValue(nid.."p"):setColorFilter(0xffFF8C8C8C) luajava.getIdValue(nid.."t2"):setTextColor(0xffFF8C8C8C) colorvs[nid.."p"]={false,"img"} colorvs[nid.."t"]={false,"txt"} colorvs[nid.."t2"]={false,"txt"} OP.controlWater(switchs[nid],300) end) _ENV[name] = "关" pcall(func2) uiadtext(localname.." 已关闭.","#545454") end end end end function 卡片开关1(name,func1,func2,nid) local sname = nid local localname=name name = name..guid() _ENV[name] = "关" if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1) == "function" then return function() namers = _ENV[name] if namers ~= "开" then vibra:vibrate(9) luajava.runUiThread(function() luajava.getIdValue(nid.."t"):setTextColor(插件颜色) luajava.getIdValue(nid.."p"):setColorFilter(插件颜色) colorvs[nid.."p"]={true,"img"} colorvs[nid.."t"]={true,"txt"} OP.controlWater(switchs[nid],300) end) _ENV[name] = "开" pcall(func1) uiadtext(localname.." 已开启.","#ffffff") else vibra:vibrate(9) luajava.runUiThread(function() luajava.getIdValue(nid.."t"):setTextColor(0xffFF8C8C8C) luajava.getIdValue(nid.."p"):setColorFilter(0xffFF8C8C8C) colorvs[nid.."p"]={false,"img"} colorvs[nid.."t"]={false,"txt"} OP.controlWater(switchs[nid],300) end) _ENV[name] = "关" pcall(func2) uiadtext(localname.." 已关闭.","#545454") end end end end function changan.card(卡片) if #卡片==0 then return nil end local rest = { LinearLayout, layout_width = 'fill_parent', layout_height = "wrap_content", gravity = "center", orientation="vertical", layout_marginTop="5dp", layout_marginBottom="5dp", } for i = 1, #卡片,2 do local tempTable = {LinearLayout, layout_width = 'fill_parent', layout_height = "wrap_content", gravity = "left", orientation="horizontal" } for j = 0, 1 do if 卡片[i + j] ~= nil then local name = 卡片[i + j][1] local func1 = 卡片[i + j][2] local func2 = 卡片[i + j][3] local name2 = 卡片[i + j][4] if not name then name = "未设置" end local gid=guid() rstt = changan.intcard(name,name2,func1,func2,1,gid) table.insert(tempTable, rstt) else table.insert(tempTable, {LinearLayout, layout_width = 'match_parent', layout_weight=1,}) end end table.insert(rest, tempTable) end return luajava.loadlayout(rest) end function changan.groupbox(卡片) local gid=guid() local rest = { GridLayout, id=luajava.newId(gid), columnCount = '3', layout_width = ( tonumber(string.replace(界面宽度,"dp","")) -16).."dp", layout_height = "wrap_content", gravity = "center", background = getShape3() } for i = 1,#卡片 do local name = 卡片[i][1] local func1 = 卡片[i][2] local func2 = 卡片[i][3] local pic = 卡片[i][4] if not name then name = "未设置" end rstt = changan.int卡片(name,func1,func2,i,gid,pic) if i<9 then rest[#rest+1] = rstt end end if #卡片>=9 then rstt = changan.groupboxbox(gid,#卡片+1) rest[#rest+1] = rstt end return luajava.loadlayout({ LinearLayout,rest }) end 界面宽度="260dp" 界面长度="170dp" ---↓↓↓你的脚本放在这里,结尾菜单调用 local SO = {} SO['新手'] = 0x22ecf94 SO['封号'] = 0x3204a68 SO['行为1'] = 0x334c09c SO['行为2'] = 0x334c134 SO['行为3'] = 0x334bed4 SO['行为4'] = 0x3345364 SO['行为5'] = 0x334bda4 SO['行为6'] = 0x334bda4 SO['行为7'] = 0x29a0258 SO['行为8'] = 0x27b0e58 SO['行为9'] = 0x232fe60 SO['行为10'] = 0x232fd74 SO['行为11'] = 0x333f2a8 SO['行为12'] = 0x2e99500 SO['行为13'] = 0x232fc38 SO['行为14'] = 0x232f708 SO['行为15'] = 0x299faa4 SO['行为16'] = 0x299ff54 SO['行为17'] = 0x29a019c SO['行为18'] = 0x2aa6cd4 SO['行为19'] = 0x2361378 SO['行为20'] = 0x29a76b0 SO['行为21'] = 0x29a9550 SO['行为22'] = 0x23c3fc0 SO['行为23'] = 0x29ab2c8 SO['行为24'] = 0x17ccfa4 SO['行为25'] = 0x17cd048 SO['行为26'] = 0x20659d0 SO['行为27'] = 0x3343f70 SO['行为28'] = 0x334be3c SO['行为29'] = 0x334bf6c SO['行为30'] = 0x334c004 SO['行为31'] = 0x17ccc4c SO['行为32'] = 0x17cccf0 SO['行为33'] = 0x17ccd94 SO['行为34'] = 0x17cce30 SO['行为35'] = 0x17cd048 SO['行为36'] = 0x17ccc4c SO['货币检测'] = 0x23fd204 SO['防举报1'] = 0x3587418 SO['防举报2'] = 0x35872d0 SO['防举报3'] = 0x3020860 SO['防举报4'] = 0x2967390 SO['人物'] = 0x22e4a2c SO['滑板'] = 0x22e5738 SO['背饰'] = 0x230aab0 SO['背饰保存'] = 0x22e5d30 SO['像框'] = 0x254504c SO['装扮'] = 0x22d8e60 SO['技能'] = 0x2c27f88 SO['技能勾选'] = 0x2c281f8 SO['名称'] = 0x28062b8 SO['获取十倍'] = 0x3344880 SO['解锁十倍'] = 0x2eddfbc SO['内购'] = 0x29f899c SO['内购成功'] = 0x29f70e4 SO['领奖'] = 0x2341c48 SO['十抽'] = 0x27fa25c SO['宝物备份'] = 0x27f8408 SO['奖励替换'] = 0x2532454 SO['人物奖励'] = 0x2544bf0 SO['滑板奖励'] = 0x2544db0 SO['背饰奖励'] = 0x2544f70 SO['像框奖励'] = 0x254504c SO['赛事'] = 0x239d59c SO['备份1'] = 0x333bd64 SO['备份2'] = 0x2319b10 SO['备份3'] = 0x333bd64 SO['备份4'] = 0x37475d0 SO['双倍'] = 0x22c06c4 SO['微博'] = 0x2d449e4 SO['金币'] = 0x22d2338 SO['钥匙'] = 0x22d2650 SO['紫币'] = 0x2319788 SO['宝物钥匙'] = 0x23122dc SO['开发者'] = 0x3340ebc SO['抓娃娃'] = 0x3344fa4 SO['重生'] = 0x2670670 SO['邮箱'] = 0x25aa81c SO['炫跑卡'] = 0x230c444 SO['历史分数1'] = 0x22d2ba4 SO['历史分数2'] = 0x22d2dbc SO['历史排名'] = 0x23032c8 SO['等级'] = 0x22d5c54 SO['全服'] = 0x24770c0 SO['省标'] = 0x2477158 SO['地区'] = 0x24771f0 SO['断网1'] = 0x2074a84 SO['断网2'] = 0x2074a84 SO['隐藏1'] = 0x2cbbde4 SO['隐藏2'] = 0x333f2a8 SO['隐藏3'] = 0x2cbcd24 SO['隐藏4'] = 0x22ff0a4 SO['隐藏5'] = 0x3583660 SO['防止卡屏1'] = 0x2aa6bb0 SO['防止卡屏2'] = 0x2aa6a88 SO['受到攻击'] = 0x2732208 SO['攻击拾取'] = 0x2734700 SO['局内金币'] = 0x2766674 SO['获取能量'] = 0x2733c40 SO['跳跃'] = 0x276f640 SO['下滑'] = 0x276fc40 SO['滑板跳高'] = 0x26405d8 SO['滑板滑翔'] = 0x26409b8 SO['滑板瞬移'] = 0x2640b20 SO['无尽装死'] = 0x237bbd0 SO['无限跳跃'] = 0x3024ab4 SO['金币消失'] = 0x2ec5da4 SO['无尽死亡'] = 0x237badc SO['道具图标'] = 0x2732b0c SO['道具图标2'] = 0x2732bac SO['反弹道具1'] = 0x34f8f3c SO['反弹道具2'] = 0x34f9028 SO['释放能量'] = 0x2733dcc SO['释放'] = 0x2733dcc SO['无视道具1'] = 0x34fa1b0 SO['无视道具2'] = 0x34fa720 SO['无视障碍'] = 0x2606e04 SO['无视侧撞'] = 0x26079a4 SO['无视香蕉'] = 0x2737d4c SO['开局道具'] = 0x22d1af8 SO['能量穿透'] = 0x272f0b8 SO['忙碌状态'] = 0x27330c0 SO['无限能量'] = 0x2732988 SO['Buff模式'] = 0x2739048 SO['派对聚能'] = 0x296f764 SO['得到分数'] = 0x276afc8 SO['结束游戏'] = 0x2aa6a88 SO['锁定人机'] = 0x2aa959c SO['派对新手'] = 0x3341aa4 SO['派对省份'] = 0x2d0d824 SO['派对省排'] = 0x2d0d790 SO['派对全服'] = 0x2d0d6fc SO['滑板消失'] = 0x260a77c SO['三倍金币'] = 0x2934d74 SO['得分倍增'] = 0x22d7058 SO['宝物等级'] = 0x2d05d80 SO['段位'] = 0x2c98da0 SO['星数'] = 0x247c6c8 SO['道具满级'] = 0x2ffaad8 SO['道具等级'] = 0x2ffa944 SO['退出登录'] = 0x33487cc SO['超级跑者'] = 0x233f820 SO['使用技能'] = 0x2bd5198 SO['观战对手'] = 0x309ead4 SO['替换人物'] = 0x2bd3b00 SO['替换滑板'] = 0x2bd4804 SO['替换背饰'] = 0x2bd5b3c SO['替换装扮'] = 0x2bd4190 SO['点击表情'] = 0x341de3c SO['宝抽次数'] = 0x2313240 SO['铁轨金币'] = 0x2ec5da4 SO['房间防踢'] = 0x31e4688 SO['时间'] = 0x3020ef8 SO['异常弹窗'] = 0x2e99244 SO['HFX目标'] = 0x34eb854 SO['HP目标'] = 0x34f9028 SO['HP使用人'] = 0x34f8f3c SO['PVP定人'] = 0x2aa959c SO['分数全服'] = 0x27e4e5c SO['全宝'] = 0x27fb9c4 SO['半宝'] = 0x27fb9c4 SO['三满'] = 0x22e5138 SO['半满'] = 0x22e5138 SO['强制下线'] = 0x2a42ebc SO['屏蔽时间检测1'] = 0x334bd0c SO['屏蔽时间检测2'] = 0x2c99aac SO['屏蔽时间检测3'] = 0x2c99a10 SO['屏蔽时间检测4'] = 0x2c9977c SO['屏蔽时间检测5'] = 0x2c96b24 SO['屏蔽时间检测6'] = 0x2c99658 SO['行为弹窗'] = 0x2e99500 SO['升级金币'] = 0x2d05fdc SO['升级材料'] = 0x2d011a8 SO['道具无限时长'] = 0x16d6790 SO['人物购买按钮'] = 0x26e99b8 SO['人物购买成功'] = 0x26eed44 SO['滑板购买按钮'] = 0x2bd907c SO['滑板购买成功'] = 0x2bddd48 SO['十抽分数赛'] = 0x27d8a64 SO['点击道具'] = 0x2734b60 SO['新时刻'] = 0x2c96b24 SO['离线模式'] = 0x3583660 SO['获取服务器'] = 0x3343ba4 SO['最佳时间'] = 0x247ceb0 SO['作弊时间'] = 0x334bd0c SO['十抽内购页面']=0x3F1418 local TOTAL = {} function TOTAL_ARM64Int(js) return js end local TOTAL = {} TOTAL['作弊1']=0x29a0258 TOTAL['作弊2']=0x29a019c TOTAL['作弊3']=0x3343f70 TOTAL['作弊4']=0x334400c TOTAL['作弊5']=0x3345364 TOTAL['作弊6']=0x334bd0c TOTAL['作弊7']=0x334b7a2 TOTAL['作弊8']=0x334be3c TOTAL['作弊9']=0x334bed4 TOTAL['作弊10']=0x334bf6c TOTAL['作弊11']=0x334c004 TOTAL['作弊12']=0x334c09c TOTAL['作弊13']=0x334c134 TOTAL['作弊14']=0x232fc38 TOTAL['作弊15']=0x232fd74 TOTAL['作弊16']=0x232fe60 TOTAL['作弊17']=0x23fd204 TOTAL['作弊18']=0x29a8824 TOTAL['作弊19']=0x29a76b0 TOTAL['作弊20']=0x29ac1d8 TOTAL['作弊21']=0x17ccc4c TOTAL['作弊22']=0x17cccf0 TOTAL['作弊23']=0x17ccd94 TOTAL['作弊24']=0x17cce30 TOTAL['作弊25']=0x17cced4 TOTAL['作弊26']=0x17ccfa4 TOTAL['作弊27']=0x17cd048 TOTAL['下滑左']=0x276f910 TOTAL['下滑中']=0x276f998 TOTAL['下滑右']=0x276fa20 TOTAL['能量倍增1']=0x2739048 TOTAL['跳跃']=0x276f640 TOTAL['下滑']=0x276f830 TOTAL['加能量']=0x272f768 TOTAL['acc门']=0x272d908 TOTAL['过新手教程']=0x22ecf94 TOTAL['应用里购买']=0x29f899c TOTAL['备份数据']=0x333bd64 TOTAL['备份数据2']=0x37475d0 TOTAL['十抽']=0x27fa6bc TOTAL['十倍得分调出']=0x3344880 TOTAL['奖励替换']=0x2532454 TOTAL['人物解锁']=0x22e4a2c TOTAL['滑板解锁']=0x22e5738 TOTAL['背饰斛锁']=0x230aab0 TOTAL['头像框解锁']=0x2a6b3b0 TOTAL['人物皮肤解锁']=0x22d8e60 TOTAL['滑板技能']=0x2c27f88 TOTAL['微博获取']=0x2d449e4 TOTAL['等级修改']=0x22d5c54 TOTAL['跑卡等级']=0x230c444 TOTAL['人物全显']=0x33a41d0 TOTAL['滑板全显']=0x33a45f0 TOTAL['奖励替换人物']=0x2544bf0 TOTAL['奖励替换滑板']=0x2544db0 TOTAL['奖励替换背饰']=0x2544f70 TOTAL['奖励替换像框']=0x254504c TOTAL['金币数量']=0x22d2338 TOTAL['钥匙数量']=0x22d2650 TOTAL['宝物钥匙数量']=0x23122dc TOTAL['赛季币数量']=0x2343698 TOTAL['开局道具']=0x22d1af8 TOTAL['碰撞检查']=0x2606e04 TOTAL['观战资格']=0x239d59c TOTAL['道具图标']=0x2732bac TOTAL['排名星数']=0x247c6c8 TOTAL['PVP段位']=0x2c98da0 TOTAL['设置宝物等级']=0x2d05cb4 TOTAL['二段跳']=0x26406d0 TOTAL['人物高跳']=0x3022244 TOTAL['人物瞬移']=0x30223b0 TOTAL['无限跳跃']=0x3024ab4 TOTAL['滑板瞬移']=0x2640b20 TOTAL['滑板高跳']=0x26405d8 TOTAL['滑板滑翔']=0x26409b8 TOTAL['死']=0x237bbd0 TOTAL['铁路相机']=0x30229e4 TOTAL['铁轨金币数量']=0x2ec5da4 TOTAL['三倍金币']=0x2934d74 TOTAL['得分倍增']=0x22d7058 TOTAL['定人机']=0x2968f2c TOTAL['点击表情']=0x341de3c TOTAL['退出登录']=0x33487cc TOTAL['直接替换人物']=0x2bd3b00 TOTAL['直接替换滑板']=0x2bd4804 TOTAL['直接替换背饰']=0x2bd5b3c TOTAL['直接替换装扮']=0x2bd4190 TOTAL['使用技能']=0x2bd5198 TOTAL['道具等级']=0x2ffa944 TOTAL['派对在那个省']=0x2d0d824 TOTAL['派对省服排名']=0x2d0d790 TOTAL['派对全服排名']=0x2d0d6fc TOTAL['滑板消失']=0x260a77c TOTAL['观战对手']=0x309ead4 TOTAL['结束游戏']=0x2aa6a88 TOTAL['奖励替换']=0x2532454 TOTAL['观战资格']=0x239d59c TOTAL['备份1']=0x333bd64 TOTAL['备份2']=0x2319b10 TOTAL['历史分数']=0x22d2ba4 TOTAL['历史排名']=0x23032c8 TOTAL['全服名次']=0x24770c0 TOTAL['省标名次']=0x2477158 TOTAL['在那个省']=0x24771f0 TOTAL['升级金币']=0x2d05fdc TOTAL['升级材料']=0x2d011a8 TOTAL['道具图标']=0x2732b0c TOTAL['锁道具']=0x2732bac TOTAL['可以使用能量']=0x2733dcc TOTAL['检查道具']=0x34fa1b0 TOTAL['开局道具']=0x22d1af8 TOTAL['能量消失']=0x2730260 TOTAL['轨道位置']=0x3021d90 TOTAL['对抗赛']=0x16ef004 TOTAL['得到能量']=0x2732988 TOTAL['修改名字']=0x28062b8 TOTAL['删除复活结算']=0x2aa4d60 TOTAL['派对指南1']=0x3341aa4 TOTAL['派对指南2']=0x3341b48 TOTAL['反弹道具1']=0x34f8f3c TOTAL['反弹道具2']=0x34f9028 TOTAL['无视道具']=0x35838a4 TOTAL['我是怪物']=0x272a774 TOTAL['怪物装扮']=0x2729fd4 TOTAL['发言']=0x2470510 TOTAL['加好友']=0x2e8f290 TOTAL['关于人物购买点击事件']=0x26e99b8 TOTAL['关于滑板购买点击事件']=0x2bd907c TOTAL['使用道具']=0x2734b60 TOTAL['队友健康']=0x16ec760 TOTAL['收集道具']=0x2734408 TOTAL['好友发言']=0x316a750 TOTAL['好友发送消息']=0x316a8ec TOTAL['发送消息']=0x341e220 TOTAL['内购b']=0xD370 TOTAL['十抽解锁全宝物b']=0x1308 TOTAL['十抽备份全宝物b']=0x22B4 TOTAL['十抽解锁全饰b']=0x515584 TOTAL['十抽解锁半饰b']=0x514618 TOTAL['十抽分数赛']=0x21E48 TOTAL['滑板无限能量b']=0x12B8 TOTAL['名字修改成功b']=0x100 TOTAL['十抽内购页面']=0x3F1418 TOTAL['发言无视敏感词语b']=0x510 TOTAL['加好友改踢人b']=0x204 TOTAL['人物购买成功b']=0x538C TOTAL['滑板购买成功b']=0x4CCC TOTAL['局内分数']=0x276bfe0 TOTAL['可乐不减速']=0x2c92b80 TOTAL['对抗赛好友匹配']=0x2e80bdc TOTAL['分数全服排名']=0x27e4e5c TOTAL['分数省服排名']=0x27e4f80