sjxnb = function ( Ad , Value , IF ) local Ret = "~A8 RET" local So = gg.getRangesList ( 'libil2cpp.so' ) if not ( Ad or Value ) then return else if not So then gg.alert ( "请重新选择游戏进程" ) else for key , value in pairs ( So ) do if value.state ~= "Xa" then return else local Soad = value.start local Add = Soad + Ad gg.setValues ( { { address = Add , flags = 4 , value = Value } } ) if IF == true then gg.setValues ( { { address = Add + 4 , flags = 4 , value = Ret } } ) elseif IF == nil then gg.setValues ( { { address = Add + 4 , flags = 4 , value = Ret } } ) elseif IF == false then break end 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 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('欢迎使用CG开启时间有点慢请稍等') 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"