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
string.toMusic('欢迎使用哦屁修复模板开启时间有点慢请稍等')
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)
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",
"开关控件1",
"开关控件2",
"开关控件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/05/retouch_2024090512182045.png",
"https://postimage.me/images/2024/09/05/retouch_2024090512402633.png",
"https://postimage.me/images/2024/09/05/retouch_2024090512440321.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 = "/sdcard/iosPro/图片/blackx",
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("hei_right"),
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,
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.checkbox(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)
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)
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)
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)
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.checkbox(gid,#卡片+1)
rest[#rest+1] = rstt
end
return luajava.loadlayout({
LinearLayout,rest
})
end
界面宽度="260dp"
界面长度="170dp"
---↓↓↓你的脚本放在这里,结尾菜单调用
local SO = {}
SO['新手'] = 0x22ecf94
SO['封号'] = 0x3204a68
SO['行为1'] = 0x334c09c
SO['行为2'] = 0x334c134
SO['行为3'] = 0x334bed4
SO['行为4'] = 0x3345364
SO['行为5'] = 0x334bda4
SO['行为6'] = 0x334bda4
SO['行为7'] = 0x29a0258
SO['行为8'] = 0x27b0e58
SO['行为9'] = 0x232fe60
SO['行为10'] = 0x232fd74
SO['行为11'] = 0x333f2a8
SO['行为12'] = 0x2e99500
SO['行为13'] = 0x232fc38
SO['行为14'] = 0x232f708
SO['行为15'] = 0x299faa4
SO['行为16'] = 0x299ff54
SO['行为17'] = 0x29a019c
SO['行为18'] = 0x2aa6cd4
SO['行为19'] = 0x2361378
SO['行为20'] = 0x29a76b0
SO['行为21'] = 0x29a9550
SO['行为22'] = 0x23c3fc0
SO['行为23'] = 0x29ab2c8
SO['行为24'] = 0x17ccfa4
SO['行为25'] = 0x17cd048
SO['行为26'] = 0x20659d0
SO['行为27'] = 0x3343f70
SO['行为28'] = 0x334be3c
SO['行为29'] = 0x334bf6c
SO['行为30'] = 0x334c004
SO['行为31'] = 0x17ccc4c
SO['行为32'] = 0x17cccf0
SO['行为33'] = 0x17ccd94
SO['行为34'] = 0x17cce30
SO['行为35'] = 0x17cd048
SO['行为36'] = 0x17ccc4c
SO['货币检测'] = 0x23fd204
SO['防举报1'] = 0x3587418
SO['防举报2'] = 0x35872d0
SO['防举报3'] = 0x3020860
SO['防举报4'] = 0x2967390
SO['人物'] = 0x22e4a2c
SO['滑板'] = 0x22e5738
SO['背饰'] = 0x230aab0
SO['背饰保存'] = 0x22e5d30
SO['像框'] = 0x254504c
SO['装扮'] = 0x22d8e60
SO['技能'] = 0x2c27f88
SO['技能勾选'] = 0x2c281f8
SO['名称'] = 0x28062b8
SO['获取十倍'] = 0x3344880
SO['解锁十倍'] = 0x2eddfbc
SO['内购'] = 0x29f899c
SO['内购成功'] = 0x29f70e4
SO['领奖'] = 0x2341c48
SO['十抽'] = 0x27fa25c
SO['宝物备份'] = 0x27f8408
SO['奖励替换'] = 0x2532454
SO['人物奖励'] = 0x2544bf0
SO['滑板奖励'] = 0x2544db0
SO['背饰奖励'] = 0x2544f70
SO['像框奖励'] = 0x254504c
SO['赛事'] = 0x239d59c
SO['备份1'] = 0x333bd64
SO['备份2'] = 0x2319b10
SO['备份3'] = 0x333bd64
SO['备份4'] = 0x37475d0
SO['双倍'] = 0x22c06c4
SO['微博'] = 0x2d449e4
SO['金币'] = 0x22d2338
SO['钥匙'] = 0x22d2650
SO['紫币'] = 0x2319788
SO['宝物钥匙'] = 0x23122dc
SO['开发者'] = 0x3340ebc
SO['抓娃娃'] = 0x3344fa4
SO['重生'] = 0x2670670
SO['邮箱'] = 0x25aa81c
SO['炫跑卡'] = 0x230c444
SO['历史分数1'] = 0x22d2ba4
SO['历史分数2'] = 0x22d2dbc
SO['历史排名'] = 0x23032c8
SO['等级'] = 0x22d5c54
SO['全服'] = 0x24770c0
SO['省标'] = 0x2477158
SO['地区'] = 0x24771f0
SO['断网1'] = 0x2074a84
SO['断网2'] = 0x2074a84
SO['隐藏1'] = 0x2cbbde4
SO['隐藏2'] = 0x333f2a8
SO['隐藏3'] = 0x2cbcd24
SO['隐藏4'] = 0x22ff0a4
SO['隐藏5'] = 0x3583660
SO['防止卡屏1'] = 0x2aa6bb0
SO['防止卡屏2'] = 0x2aa6a88
SO['受到攻击'] = 0x2732208
SO['攻击拾取'] = 0x2734700
SO['局内金币'] = 0x2766674
SO['获取能量'] = 0x2733c40
SO['跳跃'] = 0x276f640
SO['下滑'] = 0x276fc40
SO['滑板跳高'] = 0x26405d8
SO['滑板滑翔'] = 0x26409b8
SO['滑板瞬移'] = 0x2640b20
SO['无尽装死'] = 0x237bbd0
SO['无限跳跃'] = 0x3024ab4
SO['金币消失'] = 0x2ec5da4
SO['无尽死亡'] = 0x237badc
SO['道具图标'] = 0x2732b0c
SO['道具图标2'] = 0x2732bac
SO['反弹道具1'] = 0x34f8f3c
SO['反弹道具2'] = 0x34f9028
SO['释放能量'] = 0x2733dcc
SO['释放'] = 0x2733dcc
SO['无视道具1'] = 0x34fa1b0
SO['无视道具2'] = 0x34fa720
SO['无视障碍'] = 0x2606e04
SO['无视侧撞'] = 0x26079a4
SO['无视香蕉'] = 0x2737d4c
SO['开局道具'] = 0x22d1af8
SO['能量穿透'] = 0x272f0b8
SO['忙碌状态'] = 0x27330c0
SO['无限能量'] = 0x2732988
SO['Buff模式'] = 0x2739048
SO['派对聚能'] = 0x296f764
SO['得到分数'] = 0x276afc8
SO['结束游戏'] = 0x2aa6a88
SO['锁定人机'] = 0x2aa959c
SO['派对新手'] = 0x3341aa4
SO['派对省份'] = 0x2d0d824
SO['派对省排'] = 0x2d0d790
SO['派对全服'] = 0x2d0d6fc
SO['滑板消失'] = 0x260a77c
SO['三倍金币'] = 0x2934d74
SO['得分倍增'] = 0x22d7058
SO['宝物等级'] = 0x2d05d80
SO['段位'] = 0x2c98da0
SO['星数'] = 0x247c6c8
SO['道具满级'] = 0x2ffaad8
SO['道具等级'] = 0x2ffa944
SO['退出登录'] = 0x33487cc
SO['超级跑者'] = 0x233f820
SO['使用技能'] = 0x2bd5198
SO['观战对手'] = 0x309ead4
SO['替换人物'] = 0x2bd3b00
SO['替换滑板'] = 0x2bd4804
SO['替换背饰'] = 0x2bd5b3c
SO['替换装扮'] = 0x2bd4190
SO['点击表情'] = 0x341de3c
SO['宝抽次数'] = 0x2313240
SO['铁轨金币'] = 0x2ec5da4
SO['房间防踢'] = 0x31e4688
SO['时间'] = 0x3020ef8
SO['异常弹窗'] = 0x2e99244
SO['HFX目标'] = 0x34eb854
SO['HP目标'] = 0x34f9028
SO['HP使用人'] = 0x34f8f3c
SO['PVP定人'] = 0x2aa959c
SO['分数全服'] = 0x27e4e5c
SO['全宝'] = 0x27fb9c4
SO['半宝'] = 0x27fb9c4
SO['三满'] = 0x22e5138
SO['半满'] = 0x22e5138
SO['强制下线'] = 0x2a42ebc
SO['屏蔽时间检测1'] = 0x334bd0c
SO['屏蔽时间检测2'] = 0x2c99aac
SO['屏蔽时间检测3'] = 0x2c99a10
SO['屏蔽时间检测4'] = 0x2c9977c
SO['屏蔽时间检测5'] = 0x2c96b24
SO['屏蔽时间检测6'] = 0x2c99658
SO['行为弹窗'] = 0x2e99500
SO['升级金币'] = 0x2d05fdc
SO['升级材料'] = 0x2d011a8
SO['道具无限时长'] = 0x16d6790
SO['人物购买按钮'] = 0x26e99b8
SO['人物购买成功'] = 0x26eed44
SO['滑板购买按钮'] = 0x2bd907c
SO['滑板购买成功'] = 0x2bddd48
SO['十抽分数赛'] = 0x27d8a64
SO['点击道具'] = 0x2734b60
SO['新时刻'] = 0x2c96b24
SO['离线模式'] = 0x3583660
SO['获取服务器'] = 0x3343ba4
SO['最佳时间'] = 0x247ceb0
SO['作弊时间'] = 0x334bd0c
SO['十抽内购页面']=0x3F1418
local TOTAL = {}
function TOTAL_ARM64Int(js)
return js
end
local TOTAL = {}
TOTAL['作弊1']=0x29a0258
TOTAL['作弊2']=0x29a019c
TOTAL['作弊3']=0x3343f70
TOTAL['作弊4']=0x334400c
TOTAL['作弊5']=0x3345364
TOTAL['作弊6']=0x334bd0c
TOTAL['作弊7']=0x334b7a2
TOTAL['作弊8']=0x334be3c
TOTAL['作弊9']=0x334bed4
TOTAL['作弊10']=0x334bf6c
TOTAL['作弊11']=0x334c004
TOTAL['作弊12']=0x334c09c
TOTAL['作弊13']=0x334c134
TOTAL['作弊14']=0x232fc38
TOTAL['作弊15']=0x232fd74
TOTAL['作弊16']=0x232fe60
TOTAL['作弊17']=0x23fd204
TOTAL['作弊18']=0x29a8824
TOTAL['作弊19']=0x29a76b0
TOTAL['作弊20']=0x29ac1d8
TOTAL['作弊21']=0x17ccc4c
TOTAL['作弊22']=0x17cccf0
TOTAL['作弊23']=0x17ccd94
TOTAL['作弊24']=0x17cce30
TOTAL['作弊25']=0x17cced4
TOTAL['作弊26']=0x17ccfa4
TOTAL['作弊27']=0x17cd048
TOTAL['下滑左']=0x276f910
TOTAL['下滑中']=0x276f998
TOTAL['下滑右']=0x276fa20
TOTAL['能量倍增1']=0x2739048
TOTAL['跳跃']=0x276f640
TOTAL['下滑']=0x276f830
TOTAL['加能量']=0x272f768
TOTAL['acc门']=0x272d908
TOTAL['过新手教程']=0x22ecf94
TOTAL['应用里购买']=0x29f899c
TOTAL['备份数据']=0x333bd64
TOTAL['备份数据2']=0x37475d0
TOTAL['十抽']=0x27fa6bc
TOTAL['十倍得分调出']=0x3344880
TOTAL['奖励替换']=0x2532454
TOTAL['人物解锁']=0x22e4a2c
TOTAL['滑板解锁']=0x22e5738
TOTAL['背饰斛锁']=0x230aab0
TOTAL['头像框解锁']=0x2a6b3b0
TOTAL['人物皮肤解锁']=0x22d8e60
TOTAL['滑板技能']=0x2c27f88
TOTAL['微博获取']=0x2d449e4
TOTAL['等级修改']=0x22d5c54
TOTAL['跑卡等级']=0x230c444
TOTAL['人物全显']=0x33a41d0
TOTAL['滑板全显']=0x33a45f0
TOTAL['奖励替换人物']=0x2544bf0
TOTAL['奖励替换滑板']=0x2544db0
TOTAL['奖励替换背饰']=0x2544f70
TOTAL['奖励替换像框']=0x254504c
TOTAL['金币数量']=0x22d2338
TOTAL['钥匙数量']=0x22d2650
TOTAL['宝物钥匙数量']=0x23122dc
TOTAL['赛季币数量']=0x2343698
TOTAL['开局道具']=0x22d1af8
TOTAL['碰撞检查']=0x2606e04
TOTAL['观战资格']=0x239d59c
TOTAL['道具图标']=0x2732bac
TOTAL['排名星数']=0x247c6c8
TOTAL['PVP段位']=0x2c98da0
TOTAL['设置宝物等级']=0x2d05cb4
TOTAL['二段跳']=0x26406d0
TOTAL['人物高跳']=0x3022244
TOTAL['人物瞬移']=0x30223b0
TOTAL['无限跳跃']=0x3024ab4
TOTAL['滑板瞬移']=0x2640b20
TOTAL['滑板高跳']=0x26405d8
TOTAL['滑板滑翔']=0x26409b8
TOTAL['死']=0x237bbd0
TOTAL['铁路相机']=0x30229e4
TOTAL['铁轨金币数量']=0x2ec5da4
TOTAL['三倍金币']=0x2934d74
TOTAL['得分倍增']=0x22d7058
TOTAL['定人机']=0x2968f2c
TOTAL['点击表情']=0x341de3c
TOTAL['退出登录']=0x33487cc
TOTAL['直接替换人物']=0x2bd3b00
TOTAL['直接替换滑板']=0x2bd4804
TOTAL['直接替换背饰']=0x2bd5b3c
TOTAL['直接替换装扮']=0x2bd4190
TOTAL['使用技能']=0x2bd5198
TOTAL['道具等级']=0x2ffa944
TOTAL['派对在那个省']=0x2d0d824
TOTAL['派对省服排名']=0x2d0d790
TOTAL['派对全服排名']=0x2d0d6fc
TOTAL['滑板消失']=0x260a77c
TOTAL['观战对手']=0x309ead4
TOTAL['结束游戏']=0x2aa6a88
TOTAL['奖励替换']=0x2532454
TOTAL['观战资格']=0x239d59c
TOTAL['备份1']=0x333bd64
TOTAL['备份2']=0x2319b10
TOTAL['历史分数']=0x22d2ba4
TOTAL['历史排名']=0x23032c8
TOTAL['全服名次']=0x24770c0
TOTAL['省标名次']=0x2477158
TOTAL['在那个省']=0x24771f0
TOTAL['升级金币']=0x2d05fdc
TOTAL['升级材料']=0x2d011a8
TOTAL['道具图标']=0x2732b0c
TOTAL['锁道具']=0x2732bac
TOTAL['可以使用能量']=0x2733dcc
TOTAL['检查道具']=0x34fa1b0
TOTAL['开局道具']=0x22d1af8
TOTAL['能量消失']=0x2730260
TOTAL['轨道位置']=0x3021d90
TOTAL['对抗赛']=0x16ef004
TOTAL['得到能量']=0x2732988
TOTAL['修改名字']=0x28062b8
TOTAL['删除复活结算']=0x2aa4d60
TOTAL['派对指南1']=0x3341aa4
TOTAL['派对指南2']=0x3341b48
TOTAL['反弹道具1']=0x34f8f3c
TOTAL['反弹道具2']=0x34f9028
TOTAL['无视道具']=0x35838a4
TOTAL['我是怪物']=0x272a774
TOTAL['怪物装扮']=0x2729fd4
TOTAL['发言']=0x2470510
TOTAL['加好友']=0x2e8f290
TOTAL['关于人物购买点击事件']=0x26e99b8
TOTAL['关于滑板购买点击事件']=0x2bd907c
TOTAL['使用道具']=0x2734b60
TOTAL['队友健康']=0x16ec760
TOTAL['收集道具']=0x2734408
TOTAL['好友发言']=0x316a750
TOTAL['好友发送消息']=0x316a8ec
TOTAL['发送消息']=0x341e220
TOTAL['内购b']=0xD370
TOTAL['十抽解锁全宝物b']=0x1308
TOTAL['十抽备份全宝物b']=0x22B4
TOTAL['十抽解锁全饰b']=0x515584
TOTAL['十抽解锁半饰b']=0x514618
TOTAL['十抽分数赛']=0x21E48
TOTAL['滑板无限能量b']=0x12B8
TOTAL['名字修改成功b']=0x100
TOTAL['十抽内购页面']=0x3F1418
TOTAL['发言无视敏感词语b']=0x510
TOTAL['加好友改踢人b']=0x204
TOTAL['人物购买成功b']=0x538C
TOTAL['滑板购买成功b']=0x4CCC
TOTAL['局内分数']=0x276bfe0
TOTAL['可乐不减速']=0x2c92b80
TOTAL['对抗赛好友匹配']=0x2e80bdc
TOTAL['分数全服排名']=0x27e4e5c
TOTAL['分数省服排名']=0x27e4f80