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