do
if type(getrlyunyz) ~= 'function' then
gg.alert('请使用RLGG执行')
os.exit()
return
end
local info = {
example_version = '1.0.3',
name = '赤音',
appid = '100328',
appkey = 'a5M8cf57f7DF8uzd',
rc4key = 'jRve71ppRT8epVTe',
version = '1.0',
mi_type = '3'
}
local rlyunyz = getrlyunyz(info)
local ret = rlyunyz.start()
if not ret or not isTable(ret) or ret.sign ~= '893cb8e0deb16a7f5d5eab5f8d75fffa' then
os.exit()
return
end
end
-- 把以上代码复制到你脚本最前面即可
gg.alert('赤音')
gg.toast('正在启动中请耐心等')
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 SOSD(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" } })
gg.setValues({ { address = SOMOD[2].start + FUNCTIONADD + 8, flags = 16, value = "1740" } })
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解决方法:请重新选择游戏进程\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 OP(libName, offsets, dataType, value, freeze, name)
local startTime = os.clock()
local somod = gg.getRangesList(libName)
if not somod or #somod == 0 then
gg.alert("操作失败\n━━━━━━━━━━━━━━━\n错误原因:未找到相关内存\n解决方法:请重新选择游戏进程\n━━━━━━━━━━━━━━━\nfailure")
return
end
local baseAddress = somod[1].start
local targetAddresses = {}
for _, offset in ipairs(offsets) do
table.insert(targetAddresses, baseAddress + offset)
end
local t = {}
for _, address in ipairs(targetAddresses) do
table.insert(t, {address = address, flags = dataType, value = value})
end
gg.setValues(t)
if freeze then
local freezeTable = {}
for _, address in ipairs(targetAddresses) do
table.insert(freezeTable, {
address = address,
flags = dataType,
value = value,
freeze = true
})
end
gg.addListItems(freezeTable)
end
local elapsedTime = os.clock() - startTime
local modifiedCount = #offsets
gg.toast(name.."操作完成!\n当前进程名称:" .. gg.getTargetInfo().label .. "\n当前进程包名:" .. gg.getTargetPackage() .. "\n总共耗时:" .. string.format("%.2f", elapsedTime) .. "秒\n修改了 " .. modifiedCount .. " 条值")
gg.toast(name.."操作完成!\n当前进程名称:" .. gg.getTargetInfo().label .. "\n当前进程包名:" .. gg.getTargetPackage() .. "\n总共耗时:" .. string.format("%.2f", elapsedTime) .. "秒\n修改了 " .. modifiedCount .. " 条值\nsuccess✅")
end
function SearchWrite(Search,Modification)
gg.clearResults()
gg.searchNumber(Search[1][1],Search[1][2],false,536870912,0,-1)
if gg.getResultCount()==0 then
gg.toast(Name..'开启失败')
return
end
local Result=gg.getResults(gg.getResultCount())
local sum=0
for i=2,#Search do
for index=1,#Result do
if gg.getValues({{address=Result[index].address+Search[i][3],flags=Search[i][2]}})[1].value~=Search[i][1]then
Result[index].Usable=true
sum=sum+1
end
end
end
if sum==#Result then
gg.toast(Name..'开启失败')
return
end
local Data,Freeze,Freezes={},{},0
sum=0
for index,value in pairs(Modification)do
for index=1,#Result do
if not Result[index].Usable then
local Value={address=Result[index].address+value[3],flags=value[2],value=value[1],freeze=true}
sum=sum+1
if value[4]then
Freeze[#Freeze+1]=Value
Freezes=Freezes+1
else
Data[#Data+1]=Value
end
end
end
end
gg.setValues(Data)
gg.addListItems(Freeze)
if Freeze==0 then
gg.toast(Name..'开启成功,共修改'..sum..'条数据.')
else
gg.toast(Name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据.')
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 TL_TL(a,b,c,d,e)
local time = os.clock()
kv = {}
ks={}
if a == "libil2cpp.so" then
local aa = gg.getRangesList(a)[2].start
if aa == nil then
gg.alert("模块未加载\n或选错游戏进程")
return
end
for i, k in ipairs(b) do
local v = aa + k
kv[#kv+1] = {address = v, flags = c, value = d, freeze = true}
ks[#ks+1] = {address = v+4, flags = c, value = -698416192, freeze = true}
end
else
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
end
gg.addListItems(kv)
gg.addListItems(ks)
gg.toast(e.."开启成功\n共耗时"..os.clock() - time.."秒\n共修改"..#b.."条值")
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
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 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
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 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
else
-- addr[1].value = addr[1].value & 0xFFFFFFFFFF
end
addr = addr[1].value + offset[i]
end
return addr
end
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] }
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 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
function SO_FPT(FUNCTIONADD,TYPE,VALUE)
local SOMOD=gg.getRangesList("il2cpp.so")
if SOMOD[2]==nil then gg.alert([[开启失败
━━━━━━━━━━━━━━━
错误原因:未找到相关内存
解决方法:请重新选择游戏进程
━━━━━━━━━━━━━━━]])
else
gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+0x8,flags=16,value=VALUE}})
gg.setValues({{address=SOMOD[2].start+FUNCTIONADD,flags=TYPE,value="~A8 LDR S0, [PC,#0x8]"}})
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 SOSD(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" } })
gg.setValues({ { address = SOMOD[2].start + FUNCTIONADD + 8, flags = 16, value = "1740" } })
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 OP(libName, offsets, dataType, value, freeze, name)
local startTime = os.clock()
local somod = gg.getRangesList(libName)
if not somod or #somod == 0 then
gg.alert("操作失败\n━━━━━━━━━━━━━━━\n错误原因:未找到相关内存\n解决方法:请重新选择游戏进程\n━━━━━━━━━━━━━━━\nfailure")
return
end
local baseAddress = somod[1].start
local targetAddresses = {}
for _, offset in ipairs(offsets) do
table.insert(targetAddresses, baseAddress + offset)
end
local t = {}
for _, address in ipairs(targetAddresses) do
table.insert(t, {address = address, flags = dataType, value = value})
end
gg.setValues(t)
if freeze then
local freezeTable = {}
for _, address in ipairs(targetAddresses) do
table.insert(freezeTable, {
address = address,
flags = dataType,
value = value,
freeze = true
})
end
gg.addListItems(freezeTable)
end
local elapsedTime = os.clock() - startTime
local modifiedCount = #offsets
gg.toast(name.."操作完成!\n当前进程名称:" .. gg.getTargetInfo().label .. "\n当前进程包名:" .. gg.getTargetPackage() .. "\n总共耗时:" .. string.format("%.2f", elapsedTime) .. "秒\n修改了 " .. modifiedCount .. " 条值")
gg.toast(name.."操作完成!\n当前进程名称:" .. gg.getTargetInfo().label .. "\n当前进程包名:" .. gg.getTargetPackage() .. "\n总共耗时:" .. string.format("%.2f", elapsedTime) .. "秒\n修改了 " .. modifiedCount .. " 条值\nsuccess✅")
end
function SearchWrite(Search,Modification)
gg.clearResults()
gg.searchNumber(Search[1][1],Search[1][2],false,536870912,0,-1)
if gg.getResultCount()==0 then
gg.toast(Name..'开启失败')
return
end
local Result=gg.getResults(gg.getResultCount())
local sum=0
for i=2,#Search do
for index=1,#Result do
if gg.getValues({{address=Result[index].address+Search[i][3],flags=Search[i][2]}})[1].value~=Search[i][1]then
Result[index].Usable=true
sum=sum+1
end
end
end
if sum==#Result then
gg.toast(Name..'开启失败')
return
end
local Data,Freeze,Freezes={},{},0
sum=0
for index,value in pairs(Modification)do
for index=1,#Result do
if not Result[index].Usable then
local Value={address=Result[index].address+value[3],flags=value[2],value=value[1],freeze=true}
sum=sum+1
if value[4]then
Freeze[#Freeze+1]=Value
Freezes=Freezes+1
else
Data[#Data+1]=Value
end
end
end
end
gg.setValues(Data)
gg.addListItems(Freeze)
if Freeze==0 then
gg.toast(Name..'开启成功,共修改'..sum..'条数据.')
else
gg.toast(Name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据.')
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 TL_TL(a,b,c,d,e)
local time = os.clock()
kv = {}
ks={}
if a == "libil2cpp.so" then
local aa = gg.getRangesList(a)[2].start
if aa == nil then
gg.alert("模块未加载\n或选错游戏进程")
return
end
for i, k in ipairs(b) do
local v = aa + k
kv[#kv+1] = {address = v, flags = c, value = d, freeze = true}
ks[#ks+1] = {address = v+4, flags = c, value = -698416192, freeze = true}
end
else
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
end
gg.addListItems(kv)
gg.addListItems(ks)
gg.toast(e.."开启成功\n共耗时"..os.clock() - time.."秒\n共修改"..#b.."条值")
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
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 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
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 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
else
-- addr[1].value = addr[1].value & 0xFFFFFFFFFF
end
addr = addr[1].value + offset[i]
end
return addr
end
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] }
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 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
function SO_FPT(FUNCTIONADD,TYPE,VALUE)
local SOMOD=gg.getRangesList("il2cpp.so")
if SOMOD[2]==nil then gg.alert([[开启失败
━━━━━━━━━━━━━━━
错误原因:未找到相关内存
解决方法:请重新选择游戏进程
━━━━━━━━━━━━━━━]])
else
gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+0x8,flags=16,value=VALUE}})
gg.setValues({{address=SOMOD[2].start+FUNCTIONADD,flags=TYPE,value="~A8 LDR S0, [PC,#0x8]"}})
gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+4,flags=TYPE,value="~A8 RET"}})
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" } })
gg.setValues({ { address = SOMOD[2].start + FUNCTIONADD + 8, flags = 16, value = "1740" } })
end
end
function SO_GT(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 SO_LU(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" } })
gg.setValues({ { address = SOMOD[2].start + functionADD + 8, flags = 16, value = sz } })
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
local SO = {}
SO['新手'] = 0x25a024c
SO['封号'] = 0x22a7a88
SO['行为1'] = 0x256a4e8
SO['行为2'] = 0x256a57c
SO['行为3'] = 0x256a32c
SO['行为4'] = 0x25637b0
SO['行为5'] = 0x256a204
SO['行为6'] = 0x256a204
SO['行为7'] = 0x233155c
SO['行为8'] = 0x22045cc
SO['行为9'] = 0x25df3a4
SO['行为10'] = 0x25df2c4
SO['行为11'] = 0x255d15c
SO['行为12'] = 0x24b26d0
SO['行为13'] = 0x25df1c0
SO['行为14'] = 0x25dec10
SO['行为15'] = 0x2330e18
SO['行为16'] = 0x2331338
SO['行为17'] = 0x23314b0
SO['行为18'] = 0x27b7c80
SO['行为19'] = 0x1358880
SO['行为20'] = 0x1f23498
SO['行为21'] = 0x1f25430
SO['行为22'] = 0x1376b04
SO['行为23'] = 0x1f27188
SO['行为24'] = 0x1f2dfb4
SO['行为25'] = 0x1f2e060
SO['行为26'] = 0x3b79740
SO['行为27'] = 0x25623d4
SO['行为28'] = 0x256a298
SO['行为29'] = 0x256a3c0
SO['行为30'] = 0x256a454
SO['行为31'] = 0x1f2dc34
SO['行为32'] = 0x1f2dce0
SO['行为33'] = 0x1f2dd8c
SO['行为34'] = 0x1f2de30
SO['行为35'] = 0x1f2e060
SO['行为36'] = 0x1f2dc34
SO['行为37'] = 0x22062f4
SO['行为38'] = 0x1b59edc
SO['行为39'] = 0x2331120
SO['行为40'] = 0x256246c
SO['行为41'] = 0x1f246b8
SO['行为42'] = 0x1f28098
SO['行为43'] = 0x1f2dedc
SO['行为44'] = 0xe42bcc
SO['行为45'] = 0xe42bc0
SO['货币检测'] = 0x13450c4
SO['速度检测'] = 0x222c1f0
SO['防举报1'] = 0x1b59f6c
SO['防举报2'] = 0x1b59e54
SO['防举报3'] = 0x207b868
SO['防举报4'] = 0x27bb774
SO['人物'] = 0x2598dd8
SO['滑板'] = 0x259ab50
SO['背饰'] = 0x25bd044
SO['背饰保存'] = 0x25bd124
SO['像框'] = 0x2608654
SO['相框1'] = 0x227b7f4
SO['装扮'] = 0x258d460
SO['技能'] = 0x254b150
SO['技能勾选'] = 0x254b414
SO['名称'] = 0x13da8d0
SO['获取十倍'] = 0x2562cf0
SO['解锁十倍'] = 0x1082504
SO['内购'] = 0x24e7c58
SO['内购成功'] = 0x24f4040
SO['领奖'] = 0x25f1800
SO['十抽'] = 0x26af8d4
SO['宝物备份'] = 0x26ad4ac
SO['奖励替换'] = 0x2607ec4
SO['人物奖励'] = 0x2608074
SO['滑板奖励'] = 0x2608224
SO['背饰奖励'] = 0x2608584
SO['像框奖励'] = 0x2608654
SO['赛事'] = 0x283df0c
SO['备份1'] = 0x2559fec
SO['备份2'] = 0x25c99c8
SO['备份3'] = 0x2559fec
SO['备份4'] = 0x1f75208
SO['双倍'] = 0x25a6d28
SO['微博'] = 0x15ed684
SO['金币'] = 0x2586bb8
SO['钥匙'] = 0x2586ef8
SO['紫币'] = 0x25f37a0
SO['宝物钥匙'] = 0x25c26bc
SO['开发者'] = 0x255ebdc
SO['抓娃娃'] = 0x25633e4
SO['重生'] = 0x23235b0
SO['邮箱'] = 0x2666304
SO['炫跑卡'] = 0x25be8e4
SO['历史分数1'] = 0x2587404
SO['历史分数2'] = 0x258761c
SO['历史排名'] = 0x25b5c94
SO['等级'] = 0x258a3e8
SO['隐藏1'] = 0x23cfd98
SO['隐藏2'] = 0x255d15c
SO['隐藏3'] = 0x23d0c2c
SO['隐藏4'] = 0x25b1ba0
SO['隐藏5'] = 0x1b564ac
SO['防止卡屏1'] = 0x27b7b9c
SO['防止卡屏2'] = 0x27b7ab4
SO['受到攻击'] = 0x2461580
SO['攻击拾取'] = 0x245bc4c
SO['局内金币'] = 0x253c944
SO['获取能量'] = 0x245b1ec
SO['获取能量1'] = 0x2456ac8
SO['获取能量2'] = 0x2456ac8
SO['跳跃'] = 0x2541b74
SO['下滑'] = 0x25420d8
SO['下滑1'] = 0x2541d38
SO['下滑左'] = 0x2541e08
SO['下滑中'] = 0x2541e80
SO['下滑右'] = 0x2541ef8
SO['滑板跳高'] = 0x1053d90
SO['滑板滑翔'] = 0x105413c
SO['滑板瞬移'] = 0x105428c
SO['无尽装死'] = 0x105d3b4
SO['无限跳跃'] = 0x207ebe8
SO['金币消失'] = 0x20c2924
SO['无尽死亡'] = 0x1066100
SO['道具图标'] = 0x245a0d8
SO['道具图标2'] = 0x245a168
SO['道具图标3'] = 0x245c064
SO['修改道具'] = 0x245b9c0
SO['战绩消失'] = 0x27a76dc
SO['购买界面'] = 0x1350618
SO['反弹道具1'] = 0x2491630
SO['反弹道具2'] = 0x2491718
SO['释放能量'] = 0x245b368
SO['释放'] = 0x245b474
SO['无视道具1'] = 0x24928f4
SO['无视道具2'] = 0x2492e0c
SO['无视道具3'] = 0x1b56830
SO['无视障碍'] = 0x243f4ac
SO['无视侧撞'] = 0x243ffc0
SO['开局道具'] = 0x2586458
SO['能量穿透'] = 0x24564f4
SO['忙碌状态'] = 0x245a660
SO['无限能量'] = 0x2459f6c
SO['Buff模式'] = 0x2460994
SO['派对聚能'] = 0x27c41d8
SO['得到分数'] = 0x253e598
SO['结束游戏'] = 0x27b7ab4
SO['锁定人机'] = 0x27baafc
SO['派对新手'] = 0x255ffcc
SO['派对省份'] = 0x26f3c0c
SO['派对省排'] = 0x26f3b98
SO['派对全服'] = 0x26f3b24
SO['滑板消失'] = 0x2441e38
SO['三倍金币'] = 0x2412498
SO['得分倍增'] = 0x258b640
SO['宝物等级'] = 0x26a9398
SO['段位'] = 0x27f8058
SO['历史段位'] = 0x25b63b4
SO['道具满级'] = 0x1eaaecc
SO['道具等级'] = 0x1eaad2c
SO['退出登录'] = 0x2566c54
SO['超级跑者'] = 0x25ee7cc
SO['使用技能'] = 0x1dcc034
SO['观战对手'] = 0x208a3d4
SO['替换人物'] = 0x1dca508
SO['替换滑板'] = 0x1dcb5dc
SO['替换背饰'] = 0x1dccac8
SO['替换装扮'] = 0x1dcad94
SO['点击表情'] = 0x1edb1e8
SO['宝抽次数'] = 0x25c3560
SO['铁轨金币'] = 0x20c2924
SO['房间防踢'] = 0x244c570
SO['匹配人机'] = 0x27bc008
SO['道具聚能'] = 0x2460a28
SO['道具备份1'] = 0x25c99c8
SO['道具备份2'] = 0x2559fec
SO['好友'] = 0x282c7e0
SO['踢人'] = 0x282ca38
SO['修改对抗赛'] = 0x222a668
SO['对抗赛好友匹配'] = 0x2483018
SO['观察者室'] = 0x127a02c
SO['自救'] = 0x2227c08
SO['复活结算'] = 0x27a76dc
SO['调出名称'] = 0x25a036c
SO['派对新手1'] = 0x255ffcc
SO['派对新手2'] = 0x256006c
SO['改变角色'] = 0x222dedc
SO['自变保安'] = 0x2226854
SO['时间'] = 0x207c054
SO['异常弹窗'] = 0x24b2408
SO['HFX目标'] = 0x243b988
SO['HP目标'] = 0x2491718
SO['HP使用人'] = 0x2491630
SO['PVP定人'] = 0x27baafc
SO['全宝'] = 0x26b1028
SO['半宝'] = 0x26b1ab0
SO['强制下线'] = 0x23bbb84
SO['时间检测'] = 0x256a170
SO['行为弹窗'] = 0x24b26d0
SO['升级金币'] = 0x26a9874
SO['升级材料'] = 0x26a96e4
SO['道具无限时长'] = 0x25fd794
SO['人物购买按钮'] = 0x1db8cf4
SO['人物购买成功'] = 0x1dbde64
SO['滑板购买按钮'] = 0x1dd5ec8
SO['滑板购买成功'] = 0x1ddaafc
SO['竞赛模式1'] = 0x28688ac
SO['竞赛模式2'] = 0x2797d68
SO['竞赛模式3'] = 0x1bac8b8
SO['匹配机制1'] = 0x1edb5d0
SO['匹配机制2'] = 0x283df0c
SO['匹配机制3'] = 0x127a02c
SO['屏蔽时间检1'] = 0x27f8eb8
SO['屏蔽时间检2'] = 0x27f8e3c
SO['屏蔽时间检4'] = 0x27f896c
SO['屏蔽时间检5'] = 0x27f881c
SO['屏蔽时间检6'] = 0x27f8738
SO['屏蔽时间检8'] = 0x256a170
SO['屏蔽时间检9'] = 0x27f83e8
SO['屏蔽时间检10'] = 0xe42be0
SO['一分40秒1'] = 0x1b564ac
SO['一分40秒2'] = 0x27f8eb8
SO['一分40秒3'] = 0x27f8e3c
SO['一分40秒4'] = 0x27f881c
SO['一分40秒6'] = 0x27f8738
SO['一分40秒7'] = 0x256a170
SO['一分40秒8'] = 0x1b59f6c
SO['一分40秒9'] = 0x1b59e54
SO['一分40秒10'] = 0x27bb774
SO['一分40秒11'] = 0x27bb7dc
SO['轨道位置'] = 0x207cf80
SO['铁轨金币'] = 0x20c2924
SO['表情退出'] = 0x284e8cc
SO['按钮复制房间'] = 0x1eaa564
SO['无视敏感词'] = 0x27ffd6c
SO['房间防踢1'] = 0x2483864
SO['分数全服'] = 0x2779ca8
SO['分数全省'] = 0x2779dac
SO['改字复活'] = 0x284e9f0
SO['好友踢人'] = 0x282ca38
SO['派对房间1'] = 0x1b059c8
SO['派对房间2'] = 0x2730b64
SO['人物速度'] = 0x207b9e0
SO['滑板时长'] = 0x2442390
SO['宝藏等级'] = 0x26a9398
SO['目标地图1'] = 0x20284a8
SO['目标地图2'] = 0x2029428
SO['目标路线'] = 0x1b05a50
SO['结算检测1'] = 0x27f881c
SO['结算检测2'] = 0x256201c
SO['结算检测3'] = 0x256a170
SO['结算检测4'] = 0x1b564ac
SO['结算退出'] = 0x13f4328
SO['退出界面'] = 0x13f2570
SO['灵魂出窍'] = 0x13e3e90
SO['玩家离线'] = 0x1b58df0
SO['断开连接1'] = 0x277d7b0
SO['断开连接2'] = 0x1a29c54
SO['服务器1'] = 0x256201c
SO['服务器2'] = 0x2569a50
SO['服务器3'] = 0x2569b00
SO['服务器4'] = 0xf8fd0c
SO['人物全显'] = 0x1cd3ad4
SO['滑板全显'] = 0x1cd3fcc
SO['API检值'] = 0xf52588
SO['拖尾'] = 0x207d858
SO['弹窗'] = 0x1413208
SO['PVP获胜者'] = 0x26f6f4c
SO['离线形式'] = 0x1b564ac
SO['胜利时间'] = 0x27f8450
SO['能量吸附'] = 0x24564f4
SO['能量吸附2'] = 0x24574b4
SO['撑杆'] = 0x106400c
SO['能量消失'] = 0x2457700
SO['更新时刻'] = 0x3a123e8
SO['更新程序'] = 0x1be4424
SO['获取奖励'] = 0x14a0080
SO['滑板提速'] = 0x2440d20
SO['翻滚动作'] = 0x207f3e0
SO['翻滚更新'] = 0x208afc0
SO['触发事件'] = 0x24546cc
SO['速度不变'] = 0x26ff658
SO['发送信息'] = 0x1030b28
SO['发送成功'] = 0x1030cb4
SO['金币分数'] = 0x2587ae8
local DH = {}
DH.controlFlip = function(control,time)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotationY", {0, 360})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.REVERSE)
xuanzhuandonghua:setDuration(time)
xuanzhuandonghua:start()
end)
end
function ftz(xgzs,czmzs)
tzzmm = 0
gg.clearResults()
gg.setRanges(16384)--设置Xa内存
il2cpp = gg.getRangesList("il2cpp.so")[1]--获取il2cpp.so模块
gg.searchNumber("-1", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, il2cpp['start'], il2cpp['end'], 0)--搜索值
for k , v in pairs(gg.getResults(xgzs)) do
tzzmm = tzzmm+1
random = math.random(1,6)
if random == 1 then
gg.setValues({{address=v.address , flags = 4 , value = czmzs}})
gg.setValues({{address=v.address + 4 , flags = 4 , value = '-516,948,194'}})
end
if random == 2 then
gg.setValues({{address=v.address , flags = 4 , value = '~A B +0x'..math.random(0,1000000)}})
gg.setValues({{address=v.address + 4 , flags = 4 , value = '-516,948,194'}})
end
if random == 3 then
gg.setValues({{address=v.address , flags = 4 , value = '~A B -0x'..math.random(0,1000000)}})
gg.setValues({{address=v.address + 4 , flags = 4 , value = '-516,948,194'}})
end
if random == 4 then
gg.setValues({{address=v.address , flags = 4 , value = '~A8 MOV W0, #1'}})
gg.setValues({{address=v.address + 4 , flags = 4 , value = '-516,948,194'}})
end
if random == 5 then
gg.setValues({{address=v.address , flags = 4 , value = '~A8 MOV W0, WZR'}})
gg.setValues({{address=v.address + 4 , flags = 4 , value = '-516,948,194'}})
end
if random == 6 then
gg.setValues({{address=v.address , flags = 4 , value = '~A8 MOV W0, #'..math.random(1,50)}})
gg.setValues({{address=v.address + 4 , flags = 4 , value = '-516,948,194'}})
end
if tzzmm == 19 then gg.alert("开启成功") end
end
end
function HX_value(hxvalue)
gg.setRanges(gg.REGION_CODE_APP)--设置xa
gg.searchNumber(0, gg.TYPE_DWORD,false, gg.SIGN_EQUAL, 0, -1, 0)
local t = gg.getResults(hxvalue)
for i,v in pairs(t) do
gg.setValues({{address=v.address,flags=4,value=i*-9000000*i+10000}})
gg.clearResults()
end
end
项目名字='赤音project'
控件颜色='9349E8'
分页颜色=0xffa090ee
rs=context:getResources():getDisplayMetrics()
rs=tostring(rs)
rs=string.gsub(rs,',',';')
rs=string.gsub(rs,'DisplayMetrics','')
load('rs='..rs)()
dheight=rs.height
dwidth=rs.width
if tonumber(dheight)==nil then
dwidth=1340
dheight=2300
end
if dheight>dwidth then dheight,dwidth=dwidth,dheight end
if not UI宽度 then UI宽度='280dp' end
if not UI高度 then UI高度='320dp' end
if not 项目名字 then 项目名字='赤音project' end
import('android.content.res.ColorStateList')
gg.setVisible(false)
luajava.setFloatingWindowHide(true)
local material3 = require 'material3'
local context=material3:getContext()
import 'android.graphics.Bitmap'
import 'android.renderscript.Allocation'
import 'android.renderscript.Element'
import 'android.renderscript.RenderScript'
import 'android.renderscript.ScriptIntrinsicBlur'
import 'android.graphics.Canvas'
import 'android.graphics.Rect'
import "android.animation.ObjectAnimator"
import "android.view.animation.Animation"
import "android.animation.ArgbEvaluator"
import "android.animation.ValueAnimator"
import "android.graphics.Color"
import'com.google.android.material.divider.MaterialDivider'
import'com.google.android.material.progressindicator.*'
import'com.google.android.material.dialog.MaterialAlertDialogBuilder'
import'com.google.android.material.tabs.TabLayout'
import'com.google.android.material.tabs.TabItem'
import'androidx.coordinatorlayout.widget.CoordinatorLayout'
import'com.google.android.material.button.MaterialButton'
import'androidx.appcompat.widget.LinearLayoutCompat'
import'com.google.android.material.slider.Slider'
import'com.google.android.material.materialswitch.MaterialSwitch'
import'com.google.android.material.card.MaterialCardView'
import'androidx.transition.Transition'
import'androidx.transition.Scene'
import'androidx.transition.TransitionManager'
import'androidx.transition.TransitionSet'
import'androidx.transition.ChangeBounds'
import'androidx.transition.Fade'
import'androidx.constraintlayout.motion.widget.MotionLayout'
import"android.view.animation.AccelerateInterpolator"
import"android.view.animation.DecelerateInterpolator"
import"androidx.interpolator.view.animation.FastOutLinearInInterpolator"
import"androidx.interpolator.view.animation.LinearOutSlowInInterpolator"
import 'android.animation.ValueAnimator$AnimatorUpdateListener'
import 'android.animation.TypeEvaluator'
import 'android.graphics.PorterDuff'
import 'android.graphics.PorterDuffColorFilter'
changan = {}
local LayoutParams = luajava.bindClass('android.view.WindowManager$LayoutParams')
context:setTheme(0x7f090069)
function rgb_to_hex(r,g,b)
r = math.min(math.max(r, 0), 255)
g = math.min(math.max(g, 0), 255)
b = math.min(math.max(b, 0), 255)
local hex_r = string.format("%02X", r)
local hex_g = string.format("%02X", g)
local hex_b = string.format("%02X", b)
return hex_r .. hex_g .. hex_b
end
function hexToRgb(hex)
hex = hex:sub(-6,-1)
local r = tonumber(hex:sub(1, 2), 16)
local g = tonumber(hex:sub(3, 4), 16)
local b = tonumber(hex:sub(5, 6), 16)
return {r, g, b}
end
local rgbt=hexToRgb(控件颜色)
switchs={}
function 获取图片(txt)
txt = string.url(txt,"de")
if string.find(tostring(txt),"http") ~= nil then
ntxt = string.sub(string.gsub(txt,"/","-"),-10,-1)
if file.length("/sdcard/长安/图片/"..ntxt,false)<200 then
file.download(txt,"/sdcard/长安/图片/"..ntxt)
end
txt = "/sdcard/长安/图片/"..ntxt
end
return luajava.getBitmapDrawable(txt)
end
window = context:getSystemService("window") -- 获取窗口管理器
function getLayoutParams2()
local prm = luajava.new(WindowManager.LayoutParams)
layoutParams1 = prm
if (Build.VERSION.SDK_INT >= 26) then -- 设置悬浮窗方式
layoutParams1.type = prm.TYPE_APPLICATION_OVERLAY
else
layoutParams1.type = prm.TYPE_PHONE
end
layoutParams1.format = PixelFormat.RGBA_8888 -- 设置背景
layoutParams1.flags = prm.FLAG_NOT_FOCUSABLE -- 焦点设置Finish
layoutParams1.gravity = Gravity.CENTER -- 重力设置
layoutParams1.width = prm.MATCH_PARENT -- 布局宽度
layoutParams1.height = prm.MATCH_PARENT -- 布局高度
return layoutParams1
end
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_TOUCH_MODAL -- 焦点设置Finish
layoutParams.gravity = Gravity.TOP|Gravity.LEFT -- 重力设置
layoutParams.width = LayoutParams.WRAP_CONTENT -- 布局宽度
layoutParams.height = LayoutParams.WRAP_CONTENT -- 布局高度
return layoutParams
end
mainLayoutParams=getLayoutParams()
xfcParams = getLayoutParams()
local rs=RenderScript:create(app.context)
local blur=ScriptIntrinsicBlur:create(rs, Element:U8_4(rs))
blur:setRadius(25)
function getBlur(bit)
local input=Allocation:createFromBitmap(rs,bit)
blur:setInput(input)
local output=Allocation:createTyped(rs, input:getType())
blur:forEach(output)
output:copyTo(bit)
return bit
end
function View2Bitmap(view,isblur)
local width = view:getMeasuredWidth()
local height = view:getMeasuredHeight()
if width==0 then width=1 height=1 end
local bitmap = Bitmap:createBitmap(width, height, Bitmap.Config.ARGB_8888);
local canvas = Canvas(bitmap)
canvas:translate(-view:getScrollX(), -view:getScrollY())
view:draw(canvas)
if isblur then
return getBlur(bitmap)
else
return bitmap
end
end
changan.controlBig = function(control,time)
luajava.runUiThread(function()
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
local dpi=context:getResources():getDisplayMetrics().densityDpi
function getpx(x)
if type(x)=='string' then
if string.find(x,'dp') then
x=string.gsub(x,'dp','')
x=tonumber(x)
end
return x*(dpi/160)
else
return x
end
end
function getdp(x)
if type(x)=='number' then
return x/(dpi/160)..'dp'
else
return x
end
end
function getdp(x)
if type(x)=='number' then
return x/(dpi/160)..'dp'
else
return x
end
end
hanshu = function(v, event)
local view
if control2==nil then view=floatWindow else
if control2:isAttachedToWindow() then view=control2 else view=floatWindow end
end
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)
if mainLayoutParams.x<=0 then
mainLayoutParams.x=0
end
mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY)
window:updateViewLayout(view, mainLayoutParams)
elseif Action == MotionEvent.ACTION_UP then
mainLayoutParams.x = tonumber(x) + (event:getRawX() - RawX)
if mainLayoutParams.x<=0 then
mainLayoutParams.x=0
end
mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY)
window:updateViewLayout(view, mainLayoutParams)
if math.abs(mainLayoutParams.x-x)>=10 or math.abs(mainLayoutParams.y-y)>=10 then
return true
else
end
end
end
local UI宽度=getpx(UI宽度)
local UI高度=getpx(UI高度)
function checkimg(tmp,ii)
if file.length("/sdcard/长安/图片/"..tmp[1],false)<200 then
gg.toast("正在下载图片"..ii.."/"..#ckimg.."\n请耐心等待")
file.download(tmp[2],"/sdcard/长安/图片/"..tmp[1])
end
end
ckimg = {
{'hei_right','https://image.rlyun.fun/down.php/dfcc155180c66711a66a1c6540db5e03.'},
{'heir','https://image.rlyun.fun/down.php/1f8c38a24d8adda4f8f4f897ab2abfbd.'},
{'heix','https://image.rlyun.fun/down.php/1631f943c3cad4fd0aee9e611638198e.'},
{'classes3.dex','https://image.rlyun.fun/down.php/29e1a4722ddf781d8f8d95a68f4e07ad.dex'},
{'JCTTF.ttf','https://pan.jl8.top/down.php/971ef23ed96102a5bc5a032328331ec7.ttf'},
}
luajava.post(function()
floatWindow = {
MaterialCardView,
layout_height='match_parent',
layout_width='match_parent',
useCompatPadding=false,
cardElevation='5dp',
cardBackgroundColor=0xffffffff,
strokeColor=0x00ffffff,
onClick=function() end,
onTouch=hanshu,
__onCreate=function(v)
v:setRadius(30)
local c=ColorStateList({
{android.R.attr.state_pressed},
{-android.R.attr.state_pressed}
}, {
0x00ffffff,
0x00ffffff
})
v:setRippleColor(c)
end,
-- strokeWidth='0dp',
{
LinearLayout,
__onFinish=function(v)
_ENV['beforejz']=v
end,
layout_height='match_parent',
layout_width='match_parent',
orientation='vertical',
gravity='center',
{
LinearProgressIndicator,
indicatorTrackGapSize='0dp',
trackStopIndicatorSize='0dp',
id = luajava.ids['下载进度条'],
layout_width = 'match_parent',
layout_height = 'wrap_content',
min = 0,
max = #ckimg,
progress=0,
trackColor=0xffefefef,
__onFinish=function(v)
v:setIndicatorColor({0xfff8c8e0, 0xfff5a8d0, 0xfff290c0})
end,
},
{TextView,
layout_marginTop='4dp',
text='首次运行,正在下载图片...',
textSize='13sp',
Typeface=font,
id=luajava.ids['jzzy'],
textColor='#000000',
},
{
LinearProgressIndicator,
layout_marginTop='30dp',
id = luajava.ids['加载进度条'],
layout_width = 'match_parent',
layout_height = 'wrap_content',
indeterminate = true,
__onFinish=function(v)
v:setIndicatorColor({'0xFFFF4F4F', '0xFFF8BD46', '0xff1D8FFF'})
v:setIndeterminateAnimationType(0)
end,
},
{TextView,
layout_marginTop='4dp',
text=项目名字..' 启动中...',
textSize='13sp',
Typeface=font,
textColor='#000000',
}
}
}
mainLayoutParams.x = dwidth/4-150
mainLayoutParams.y = dheight/8
mainLayoutParams.height = UI高度
mainLayoutParams.width = UI宽度
floatWindow=luajava.loadlayout(floatWindow)
changan.controlBig(floatWindow,800)
window:addView(floatWindow,mainLayoutParams)
end)
local cpIndicator1 = luajava.getIdView('下载进度条')
for i = 1,#ckimg do
checkimg(ckimg[i],i)
cpIndicator1:setProgress(i, true)
end
luajava.runUiThread(function()
luajava.getIdView('jzzy'):setText('图片检查完毕')
end)
local UIMAXY=getpx('154dp')
local UIMAXX=getpx('280dp')
animY=getpx('12dp')
local ui = require('ui')
local ljson = require('ljson')
local shuaxin
huiz = function() end
function panduan(rec) fille,err = io.open(rec) if fille == nil then return false else return true end end
摇一摇=true
YoYoImpl = luajava.getYoYoImpl()
vibra = context:getSystemService(Context.VIBRATOR_SERVICE)
import'android.hardware.*';
---@type android.hardware.SensorEventListener
local sensor = luajava.createProxy('android.hardware.SensorEventListener', {
onSensorChanged = functions.debounce(function()
if 摇一摇==false then return 0 end
if qhkai~=0 then
qhkai=0
luajava.runUiThread(function()
floatWindow:setVisibility(View.VISIBLE)
YoYoImpl:with("FadeIn"):duration(300):playOn(floatWindow)
end)
huiz()
else
qhkai=1
luajava.newThread(function()
luajava.runUiThread(function()
YoYoImpl:with("FadeOut"):duration(300):playOn(floatWindow)
end)
gg.sleep(400)
luajava.runUiThread(function()
floatWindow:setVisibility(View.GONE)
end)
draw.remove()
end):start()
gg.toast("HIDE")
end
end,500)
})
dexloader=dex.loadfile('/sdcard/长安/图片/classes3.dex')
MySensorManager = dexloader:loadClass('yaocn.rlyun.yaoyiyao.MySensorManager')
luajava.runOnUiThread(function()
MySensorManager(context, sensor)
end)
dex.loadfile('/sdcard/长安/图片/Lottie.dex')
import'com.airbnb.lottie.*'
function getTimeStamp(t)
local str = os.date("%Y年%m月%d日%H:%M:%S",t)
return str
end
function panduan(rec) fille,err = io.open(rec) if fille == nil then return false else return true end end
function 获取图片2(txt)
txt = string.url(txt,"de")
ntxt = string.sub(string.gsub(txt,"/","-"),-10,-1)
if string.find(tostring(txt),"http") ~= nil then
if panduan("/sdcard/长安/图片/"..ntxt) == false then
file.download(txt,"/sdcard/长安/图片/"..ntxt)
else
if file.length("/sdcard/长安/图片/"..ntxt) <= 1 then
file.download(txt,"/sdcard/长安/图片/"..ntxt)
end
end
txt = "/sdcard/长安/图片/"..ntxt
end
return luajava.getBitmapDrawable(txt)
end
function getRes(x)
return 获取图片("/sdcard/长安/图片/"..x)
end
function getCorner(gtvb1,gtvb3,gtvb4,gtvb5,g1,g2,g3,g4)
if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end
local jianbians = luajava.loadlayout({GradientDrawable})
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 getBG(DrawableColor,Radius,StrokeWidth,StrokeColor)
if type(DrawableColor)~='table' then
DrawableColor={DrawableColor,DrawableColor}
end
local jianbians = luajava.loadlayout({
GradientDrawable,
color = 0xff000000,
gradientType = GradientDrawable.LINEAR_GRADIENT,
orientation = GradientDrawable.Orientation.TOP_BOTTOM ,
})
jianbians:setColors(DrawableColor)
jianbians:setStroke(StrokeWidth or 0,StrokeColor or 0xffffffff)
if type(Radius)=='table' then
jianbians:setCornerRadii({Radius[1],Radius[1],Radius[2],Radius[2],Radius[3],Radius[3],Radius[4],Radius[4]})
else
jianbians:setCornerRadius(Radius or 0)
end
return jianbians
end
function getVerticalBG(gtvb1,gtvb3,gtvb4,gtvb5)
if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end
local jianbians = luajava.loadlayout({GradientDrawable})
jianbians:setCornerRadius(gtvb3)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors(gtvb1)
jianbians:setStroke(gtvb4,gtvb5)--边框宽度和颜色
return jianbians
end
function getHorizontalBG(gtvb1,gtvb3,gtvb4,gtvb5)
if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end
local jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(gtvb3)
jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors(gtvb1)
jianbians:setStroke(gtvb4,gtvb5)--边框宽度和颜色
return jianbians
end
changan.controlFlip = function(control,time)
luajava.runUiThread(function()
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotationY", {
0, 360
})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.REVERSE)
xuanzhuandonghua:setDuration(time)
xuanzhuandonghua:start()
end) end
changan.controlWater = function(control,time)
luajava.runUiThread(function()
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
changan.controlSmall = function(control,time)
luajava.runUiThread(function()
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
changan.controlBig2 = function(control,time)
luajava.runUiThread(function()
control:setPivotX(control:getWidth()/2)
control:setPivotY(0)
ObjectAnimator():ofFloat(control,"scaleX", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
0, 0.1, 0.4, 1
}):setDuration(time):start()
end) end
changan.controlSmall2 = function(control,time)
luajava.runUiThread(function()
control:setPivotX(control:getWidth()/2)
control:setPivotY(0)
ObjectAnimator():ofFloat(control,"scaleX", {
1, 0.7, 0.4, 0
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
1, 0.4, 0.1, 0
}):setDuration(time):start()
end) end
gg.setVisible(false)
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',
string.sub(sid,1,8),
string.sub(sid,10,12),
string.sub(sid,21,22))
end
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
local screenD=false
function defaultP(x)
if not screenD then screenD=x return end
if x==screenD then return end
screenD=x
if UI高度 <= UIMAXX then UI高度 = UIMAXX end
mainLayoutParams.height = UI宽度
mainLayoutParams.width = UI高度
UI高度, UI宽度 = UI宽度, UI高度
window:updateViewLayout(floatWindow, mainLayoutParams)
hx = mainLayoutParams.height
hy = mainLayoutParams.width
if IsLandStatus == 1 then return end
end
suofang = function(v, event)
if isLocked then hanshu(v,event) return 0 end
local Action = event:getAction()
if Action == MotionEvent.ACTION_DOWN then
print(View2Bitmap(floatWindow,true))
isMove = false
RawX = event:getRawX()
RawY = event:getRawY()
hx = mainLayoutParams.height
hy = mainLayoutParams.width
if hx == 0 or hx==-2 then hx = UIMAXX hy = UIMAXY end
elseif Action == MotionEvent.ACTION_MOVE then
isMove = true
UI高度 = tonumber(hx) + (event:getRawY() - RawY)
if UI高度 > UIMAXY then
mainLayoutParams.height = UI高度
else
UI高度=UIMAXY
end
UI宽度 = tonumber(hy) + (event:getRawX() - RawX)
if UI宽度 > UIMAXX then
mainLayoutParams.width = UI宽度
else
UI宽度=UIMAXX
end
--隐藏()
window:updateViewLayout(floatWindow, mainLayoutParams)
elseif Action == MotionEvent.ACTION_UP then
end
end
setOnExitListener(function()
luajava.post(function()
window:removeView(floatWindow)
if verB~=nil then
window:removeView(verB)
window:removeView(horiB)
end
end)
luajava.setFloatingWindowHide(false)
luajava.setFloatingWindowHide(false)
gg.setVisible(true)
tuichu=1
end)
pic_heir=获取图片("/sdcard/长安/图片/heir")
pic_heiright=获取图片('/sdcard/长安/图片/hei_right')
function changan.menu(sview)
Gsview=sview
if #sview~=#分页名字 then
gg.alert('分页名字数量与菜单配置数量不对应\n请检查你是否写错了')
os.exit()
end
sview[#sview+1]=sview[#sview]
PageNum=#分页名字
sview=sview
huiz()
local mainView2 = luajava.post(function()
return luajava.loadlayout({
LinearProgressIndicator,
id = luajava.ids['loading'],
layout_width = 'match_parent',
layout_height = '10dp',
indeterminate = true,
__onFinish=function(v)
v:hide()
v:setIndicatorColor({0xff3455FF, 0xff672AFF, 0xff1D8FFF})
v:setIndeterminateAnimationType(0)
end,
})
end)
local dp20=getpx('20dp')
local dp60=getpx('dp60')
local dp130=getpx('130dp')
local fdp20= -dp20
menus = {
LinearLayout,
layout_height='match_parent',
layout_width='match_parent',
}
for i=1,PageNum do
local tmp={
LinearLayout,
id=luajava.newId("layoutm"..i),
orientation="vertical",
layout_width="match_parent",
layout_height="wrap_content",
padding={'0dp','10dp','0dp','37dp'},
}
table.insert(menus,{
ScrollView,
__onFinish=function(v)
_ENV['layout'..i]=v
v:setVerticalScrollBarEnabled(false)
end,
padding={'90dp','0dp','10dp','0dp'},
layout_width="match_parent",
layout_height="wrap_content",
tmp
})
end
local bottombar={
LinearLayout,
layout_width="wrap_content",
layout_height="match_parent",
layout_gravity='right',
orientation='vertical',
elevation='3dp',
{
LinearLayout,
orientation='horizontal',
gravity='left',
layout_height='match_parent',
layout_weight=1,
layout_width='match_parent',
},
{
ImageView,
padding = "2dp",
src ="/storage/emulated/0/Pictures/WeiXin/mmexport1749287937877.png",
layout_width = "40dp",
layout_height = "40dp",
onClick = function() end,
onTouch = suofang,
},
}
changan.colorf = function(control,colors,t)
control:post(function()
colorAnim = ObjectAnimator:ofInt(control,"colorFilter", colors)
colorAnim:setDuration(t)
colorAnim:setEvaluator(ArgbEvaluator())
colorAnim:setRepeatCount(ValueAnimator.INFINITE)
colorAnim:setRepeatMode(ValueAnimator.REVERSE)
end)
end
local cebian={
LinearLayout,
orientation='vertical',
layout_height='match_parent',
layout_width='match_parent',
gravity='center_horizontal',
}
slctb=getVerticalBG({分页颜色,分页颜色},20,2,0xff7a68e5)
function getTimeStamp(t)
local str = os.date("%H:%M:%S ",t)
return str
end
jms={
"https://pan.jl8.top/view.php/56486407cf0a1c2f9279775137a5d72a.png",
"https://pan.jl8.top/view.php/daa0ad700a8264be45ca98a4ef17d0d3.png",
"https://pan.jl8.top/view.php/012fd1bb0f95382cfc09b8a325f45501.png",
"https://pan.jl8.top/view.php/0d7874422016705b1ea4f7d85b926e9d.png",
"https://pan.jl8.top/view.php/65aab7187b5fc97d5589488c5bdaa87b.png",
"https://pan.jl8.top/view.php/3026c90159223d9af3d449689c93e4e2.png",
}
for i = 1,#分页名字 do
table.insert(cebian,{
LinearLayout,
id="fymzqh"..i,
layout_height = "wrap_content",
layout_width = "match_parent",
layout_marginTop = "1dp",
layout_marginBottom = "1dp",
onClick = function()
切换(i)
DH.controlFlip("fymzqh"..i,800)
end,
{
LinearLayout,
id='jmp'..i,
background=slctb,
gravity = "center_vertical",
elevation='2dp',
layout_margin='3dp',
layout_height = "24dp",
layout_width = "24dp",
layout_weight=1,
{
TextView,
text = 分页名字[i],
gravity = "center",
elevation='2dp',
textSize = "10sp",
Typeface=font,
id = "jmt" .. i,
textColor = "#000000",
layout_height = "match_parent",
layout_width = "match_parent",
layout_weight=1,
},
{
ImageView,
layout_height = "29dp",
layout_width = "29dp",
src =jms[i],
layout_gravity="center|right",
},
}
})
end
local cebian={
ScrollView,
layout_width='match_parent',
layout_height='match_parent',
orientation='horizontal',
gravity='left',
cebian
}
local cebian={
LinearLayout,
layout_width='match_parent',
layout_weight=1,
layout_height='match_parent',
orientation='vertical',
gravity='center_horizontal',
cebian
}
local menui=luajava.loadlayout({
FrameLayout,--菜单
layout_height = "match_parent",
layout_width = "match_parent",
gravity = "center_horizontal",
onClick = function() end,
onTouch = hanshu,
{LinearLayout,
layout_height='match_parent',
layout_width='match_parent',
{FrameLayout,
layout_height='match_parent',
layout_width='match_parent',
menus,
}},
{
LinearLayout,
layout_width='80dp',
layout_height='match_parent',
orientation='vertical',
gravity='center',
background='#ffffff',
onClick=function(v)
end,
onTouch=hanshu,
{
LinearLayout,
layout_width='match_parent',
layout_height='match_parent',
orientation='vertical',
gravity='center_horizontal',
layout_margin='5dp',
elevation='4dp',
background=getBG(0xffffffff,20),
{
MaterialCardView,
layout_width='50dp',
layout_height='50dp',
useCompatPadding=false,
layout_margin='5dp',
cardElevation='5dp',
cardBackgroundColor=0xffffffff,
strokeColor=0x00ffffff,
onClick=隐藏,
onTouch=hanshu,
__onCreate=function(v)
v:setRadius(20)
local c=ColorStateList({{android.R.attr.state_pressed},{-android.R.attr.state_pressed}}, {0x00ffffff,0x00ffffff})
v:setRippleColor(c)
end,
{
ImageView,
layout_width='match_parent',
layout_height='match_parent',
gravity='center',
background=获取图片(左上角头像),
},
},
{
LinearLayout,
layout_width='match_parent',
layout_height='wrap_content',
orientation='horizontal',
gravity='center_vertical',
{
TextView,
layout_width='match_parent',
gravity='center',
textSize='10sp',
Typeface=font,
layout_marginBottom='4dp',
layout_marginTop='4dp',
textColor='#000000',
__onFinish=function(v)
timet=v
luajava.startThread(function()
while true do
luajava.runUiThread(function()
timet:setText(getTimeStamp(os.date()))
end)
gg.sleep(1000)
end
end)
end,
},
},
cebian,
},
},
{
LinearLayout,
layout_gravity='center_horizontal|bottom',
background='#dd27272A',
layout_width='match_parent',
--layout_height='20dp',
onClick=function() end,
onTouch=hanshu
},
bottombar
})
transManager=TransitionManager()
playingjson=file.read('/sdcard/Download/Animation - 1723566050310.json')
dp35=getpx('39dp')
local ckou=luajava.loadlayout({
FrameLayout,
id = "ckou",
layout_height = "match_parent",
layout_width = "match_parent",
menui,
})
changan.loadViews(PageNum,sview)
control2=luajava.loadlayout{LinearLayout,
{
MaterialCardView,
layout_width = "40dp",
layout_height = "40dp",
useCompatPadding=false,
cardBackgroundColor=0xffffffff,
strokeColor=0x00ffffff,
onClick=function() end,
__onCreate=function(v)
v:setRadius(25)
local c=ColorStateList({{android.R.attr.state_pressed},{-android.R.attr.state_pressed}}, {0x00ffffff,0x00ffffff})
v:setRippleColor(c)
end,
{
ImageView,
background = 获取图片2(悬浮窗图标),
layout_width = "40dp",
layout_height = "40dp",
onTouch = hanshu,
onClick = 隐藏,
}
},
}
floatmain={
FrameLayout,
id='floatmain',
fillViewPort=true,
layout_height='match_parent',
layout_width='match_parent',
onClick = function()
end,
onTouch = hanshu,
ckou,
}
function checkSize()
end
luajava.post(function()
floatmain=luajava.loadlayout(floatmain)
luajava.runUiThread(function()
floatWindow:setPivotY(25)
floatWindow:setPivotX(25)
control2:setPivotY(25)
control2:setPivotX(25)
YoYoImpl:with("FadeIn"):duration(800):playOn(floatmain)
end)
local vertiParam=getLayoutParams2()
vertiParam.width=0
local horiParam=getLayoutParams2()
horiParam.height=0
window:addView(luajava.loadlayout({
LinearLayout,
__onFinish=function(v)
verB=v
切换(1)
end
}),vertiParam)
window:addView(luajava.loadlayout({
LinearLayout,
__onFinish=function(v)
isVertical=true
defaultP(1)
horiB=v
luajava.startThread(function ()
while true do
gg.sleep(200)
luajava.runUiThread(function ()
local Vheight=verB:getMeasuredHeight()
local Vwidth=horiB:getMeasuredWidth()
if Vheight>Vwidth then defaultP(1) else defaultP(0) end
end)
end
end)
end
}),horiParam)
floatWindow:addView(floatmain)
floatWindow:removeView(beforejz)
luajava.startThread(function()
gg.sleep(500)
luajava.runUiThread(function()
floatWindow:requestFocus()
mainLayoutParams.x=mainLayoutParams.x+1
window:updateViewLayout(floatWindow, mainLayoutParams)
end)
end)
beforejz=nil
end)
qhkai = 0
显示 = 1
qiehuan = function()
if qhkai == 0 then
yinll = 0
qhkai = 1
draw.remove()
gg.toast("HIDE")
luajava.runUiThread(function()
nowxfc2=floatWindow:isAttachedToWindow()
if nowxfc2 then
YoYoImpl:with("FadeOut"):duration(300):playOn(floatWindow)
else
YoYoImpl:with("FadeOut"):duration(300):playOn(control2)
end
end)
gg.sleep(400)
luajava.runUiThread(function()
if nowxfc2 then
floatWindow:setVisibility(View.GONE)
else
control2:setVisibility(View.GONE)
end
end)
else
qhkai = 0
yinll = 1
huiz()
luajava.runUiThread(function()
nowxfc2=floatWindow:isAttachedToWindow()
if nowxfc2 then
floatWindow:setVisibility(View.VISIBLE)
YoYoImpl:with("FadeIn"):duration(300):playOn(floatWindow)
else
control2:setVisibility(View.VISIBLE)
YoYoImpl:with("FadeIn"):duration(300):playOn(control2)
end
end)
end
end
if yyfunc~=nil then yyfunc() end
if ylfunc~=nil then ylfunc() end
while true do
if tuichu==1 then os.exit() end
if 音量键 then
jianting3(qiehuan)
gg.sleep(300)
end
if isPlaying and isReady and #musiclist ~= 0 then
luajava.runOnUiThread(function()
ntime:setText(ctime(math.floor(mediaPlayer:getCurrentPosition()/1000)))
hkuai:setValue(math.floor(mediaPlayer:getCurrentPosition()/1000))
end) end
gg.sleep(60)
end
end
function 切换(x)
luajava.runUiThread(function()
当前ui=x
for i = 1,#分页名字 do
_ENV['jmp'..i]:setBackground(slctb)
_ENV["jmt" ..i]:setTextColor(0xff6b5cd9) --选中的字体颜色
_ENV['layout'..i]:setVisibility(View.GONE)
end
_ENV["jmt" .. 当前ui]:setTextColor(0xfff5e0eb) --选中的字体颜色
_ENV['layout'..当前ui]:setVisibility(View.VISIBLE)
end)
end
function 隐藏()
vibra:vibrate(6)
luajava.runUiThread (function ()
if 显示== 0 then
显示 = 1
mainLayoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
mainLayoutParams.height = UI高度
mainLayoutParams.width = UI宽度
if control2:isAttachedToWindow() and not floatWindow:isAttachedToWindow() then
luajava.startThread(function()
luajava.runUiThread(function()
changan.controlSmall(control2,600)
changan.controlBig(floatWindow,600)
mainLayoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
mainLayoutParams.width = UI宽度 -- 布局宽度
mainLayoutParams.height = UI高度 -- 布局高度
if not floatWindow:isAttachedToWindow() then
window : addView (floatWindow , mainLayoutParams)
end
end)
gg.sleep(600)
luajava.runUiThread(function()
window:removeView(control2)
end)
zzdh=false
end)
end
else
显示=0
zzdh=true
if floatWindow:isAttachedToWindow() and not control2:isAttachedToWindow() then
luajava.startThread(function()
luajava.runUiThread(function()
changan.controlSmall(floatWindow,600)
changan.controlBig(control2,600)
mainLayoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE
mainLayoutParams.width = LayoutParams.WRAP_CONTENT -- 布局宽度
mainLayoutParams.height = LayoutParams.WRAP_CONTENT -- 布局高度
if not control2:isAttachedToWindow() then
window : addView (control2 , mainLayoutParams)
end
end)
gg.sleep(600)
luajava.runUiThread(function()
window:removeView(floatWindow)
end)
zzdh=false
end)
end
end
end)
end
local RadTint=ColorStateList({
{android.R.attr.state_checked},
{-android.R.attr.state_checked},
{},
}, {
'0xff'..控件颜色,
'0x55161616',
0xffffffff
})
function changan.intcheck(name,func1,func2)
local nid = name..guid()
local func = 开关(name,func1,func2,nid)
if not name then name = "未设置" end
return {
LinearLayout,
layout_width = 'match_parent',
layout_weight=1,
layout_height = "42dp",
layout_marginTop = "1dp",
layout_marginBottom = "1dp",
padding = "1dp",
{
LinearLayout,
padding="3dp",
layout_width = 'match_parent',
layout_height = "wrap_content",
gravity = "center_vertical",
--background=getVerticalBG({0xffFFFDF2,0xddffffff,0xffFFFDF2},15,8,0xffFFDA71),
{
CheckBox,
id=luajava.newId(nid.."t"),
layout_width = '32dp',
layout_height = '32dp',
padding = "0dp",
__onFinish=function(v)
v:setButtonTintList(RadTint)
end,
onClick = function() luajava.newThread(function() func() end):start() end,
},{
TextView,
gravity = "left",
text = name,
textColor=0xff000000,
textSize = "14sp",
Typeface=font,
layout_width = 'match_parent',
layout_weight=1,
onClick = function()
local v=luajava.getIdView(nid..'t')
if v:isChecked() then
v:setChecked(false)
else
v:setChecked(true)
end
luajava.newThread(function() func() end):start()
end,
},
}
}
end
changan.controlRotation9 = function(control, time,t)
luajava.runUiThread(function()
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", {
time,t
})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.RESTART)
xuanzhuandonghua:setDuration(400)
xuanzhuandonghua:start()
end)
end
function visi (tid)
vibra:vibrate(4)
if boxes[tid][5] then
boxes[tid][5]=false
transManager:go(boxes[tid][1],boxes[tid][4])
changan.controlRotation9(boxes[tid][3],90,0)
boxes[tid][3]:setColorFilter(0xff161616)
else
boxes[tid][5]=true
transManager:go(boxes[tid][2],boxes[tid][4])
changan.controlRotation9(boxes[tid][6],0,90)
boxes[tid][6]:setColorFilter('0xffFEEEF5')
end
end
function 开关(name , func1 , func2 )
local localname=name
local tname=name..guid()
if func1 == nil then
func1 = ""
end
if func2 == nil then
func2 = ""
end
if type(func1 ) == "function" then
return function()
namers = _ENV [ tname ]
if namers ~= "开" then
_ENV [ tname ] = "开"
pcall(func1 )
else
_ENV [ tname ] = "关"
pcall(func2 )
end
end
end
end
swfuncs,buts,sliders,boxes,textvs={},{},{},{},{}
local swcDraw=ColorStateList({
{android.R.attr.state_checked},
{-android.R.attr.state_checked},
},
{
0xFFF8C8E0,
0x33d7d7d7,
})
local swcThumb=ColorStateList({
{android.R.attr.state_checked},
{android.R.attr.state_pressed},
{-android.R.attr.state_pressed},
},
{
0xfffef5fa,
'0x88'..控件颜色,
0x55161616
})
function changan.getedit (name)
edit = tostring (luajava.getIdValue (_ENV [name]) : getText ())
return edit
end
function changan.setedit (name , txt)
txt = tostring (txt)
luajava.runUiThread (function ()
luajava.getIdValue (_ENV [name]) : setText (txt)
end
)
end
function getButtonBG()
local selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, getVerticalBG({0xffd7d7d7,0xffd7d7d7},20))
selector:addState({
-android.R.attr.state_pressed
}, getVerticalBG({0xffffffff,0xffffffff},20))
return selector
end
function changan.text(text,color,size,isjz)
if not color then color="#161616" end
if color=='跟随主题' then color='#7F5EFF' end
if isjz then jzjz='center' else jzjz='left' end
return {
TextView,
text=text,
textColor=color,
textSize=size,
Typeface=font,
gravity=jzjz,
layout_height="wrap_content",
layout_width="match_parent",
autoSizeTextType="uniform",
}
end
function changan.button(txt,func,txtc)
if not txt then txt = "未设置" end
if not txtc then txtc="#000000" end
if txtc=='跟随主题' then txtc='#190335' end
local tid="Cbutton".. guid()
return {
LinearLayout,
layout_width = "match_parent",
gravity = "center_vertical",
layout_margin = "4dp",
background = getButtonBG(),
elevation='2dp',
padding="10dp",
onClick = function(v)
changan.controlWater(v,300)
luajava.newThread(func):start() end,
{
TextView,
--id = luajava.newId(tid),
textColor = txtc,
text = txt,
textSize = "13sp",
Typeface=font,
layout_height = "wrap_content",
layout_width = "match_parent",
layout_weight=1,
},{ImageView,
src=pic_heir,
layout_height="14dp",
layout_width="14dp",
}
}
end
function changan.switch(name,func1,func2,miaoshu)
local nid = name..guid()
swfuncs[nid]= {func1,func2}
if not name then name = "未设置" end
local rest ={
LinearLayout,
layout_width = 'match_parent',
layout_height = "48dp",
gravity = "center_vertical",
{
LinearLayout,
layout_width = 'match_parent',
layout_height = "40dp",
layout_margin="4dp",
gravity = "center_vertical",
background = luajava.loadlayout {
GradientDrawable ,
color = 0xffffffff ,
cornerRadius = 20},
elevation="2dp",
padding = {
"0dp","0dp","6dp","0dp"
},
{
TextView,
gravity = "top",
text = name,
textColor = '#000000',
textSize = "13sp",
Typeface=font,
layout_weight = 1,
layout_width = '80dp',
layout_marginLeft = "10dp",
layout_marginRight = "20dp",
},
{
TextView,
gravity = "center",
layout_height = "match_parent",
text = miaoshu,
textSize = "11sp",
Typeface=font,
layout_width = "wrap_content",
layout_marginLeft = "-50dp",
layout_weight = 1,
textColor = "#A5A5A5",
},
{
MaterialSwitch,
id=luajava.newId(nid),
__onFinish=function(v)
table.insert(switchs,v)
v:setTrackTintList(swcDraw)
v:setThumbTintList(swcThumb)
luajava.setInterface(v, 'setOnCheckedChangeListener',
{onCheckedChanged=function(view,isc)
if isc then
local func=swfuncs[nid][1] or function() end
if func~=nil then
luajava.startThread(func)
end
else
local func=swfuncs[nid][2] or function() end
if func~=nil then
luajava.startThread(func)
end
end
end})
end,
layout_width = 'wrap_content',
layout_height = 'wrap_content',
}}
}
return rest
end
function changan.check(cklist)
if #cklist==0 then return nil end
local rest = {
LinearLayout,
layout_width = 'match_parent',
layout_height = "wrap_content",
gravity = "center",
orientation="vertical",
}
for i = 1, #cklist,3 do
local tempTable = {LinearLayout,
layout_width = 'match_parent',
layout_height = "wrap_content",
gravity = "left",
orientation="horizontal"
}
for j = 0, 2 do
if cklist[i + j] ~= nil then
local name = cklist[i + j][1]
local func1 = cklist[i + j][2]
local func2 = cklist[i + j][3]
if not name then name = "未设置" end
rstt = changan.intcheck(name,func1,func2)
table.insert(tempTable, rstt)
else
table.insert(tempTable, {LinearLayout,
layout_width = 'match_parent',
layout_weight=1,})
end
end
table.insert(rest, tempTable)
end
return rest
end
function changan.box(views)
local tid = "box".. guid ()
boxes[tid]={}
local firadio = {
LinearLayout ,
layout_width = 'match_parent' ,
layout_height = "wrap_content" ,
layout_margin = "4dp" ,
orientation = "vertical" ,
background=luajava.loadlayout {
GradientDrawable ,
color = 0xffffffff ,
cornerRadius = 20
},
elevation='2dp',
__onFinish=function(v)
boxes[tid][2]=Scene(v,boxes[tid][2])
boxes[tid][1]=Scene(v,boxes[tid][1])
boxes[tid][4]=luajava.new(TransitionSet)
local bds=luajava.new(ChangeBounds)
bds:setDuration(500)
boxes[tid][4]:addTransition(bds)
boxes[tid][4]:setDuration(500)
end,
}
if type (views [1]) == "string" or type (views [1]) == "number" then
else
gg.alert ("changan.box的table内第一个元素必须是string") os.exit ()
end
local but={
LinearLayout ,
layout_width = 'match_parent' ,
layout_height = "40dp" ,
gravity = "center_vertical" ,
layout_margin = "3dp" ,
background = getButtonBG(),
onClick = function ()
visi (tid)
end,
{
TextView , text = views [1] ,
textSize = "13sp" ,
Typeface=font,
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",
{
ImageView ,
src = pic_heiright,
layout_width = "24dp" ,
layout_height = "24dp" ,
colorFilter=0xff161616
}
}
}
boxes[tid][1]=luajava.loadlayout{
LinearLayout,
layout_width='match_parent',
{
LinearLayout ,
layout_width = 'match_parent' ,
layout_height = "40dp" ,
gravity = "center_vertical" ,
layout_margin = "3dp" ,
background = getButtonBG(),
onClick = function ()
visi (tid)
end,
{
TextView , text = views [1] ,
textSize = "13sp" ,
Typeface=font,
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",
{
ImageView ,
src = pic_heiright,
layout_width = "24dp" ,
layout_height = "24dp" ,
colorFilter=0xff161616,
__onFinish=function(v) boxes[tid][3]=v end,
}
}
}
}
table.insert(firadio,but)
local radios = {
LinearLayout,
orientation = "vertical",
layout_width = 'match_parent',
}
for i = 2 , # views do
radios [# radios + 1] = views [i]
end
boxes[tid][2]=luajava.loadlayout{
LinearLayout,
layout_width='match_parent',
orientation = "vertical" ,
{
LinearLayout ,
layout_width = 'match_parent' ,
layout_height = "40dp" ,
gravity = "center_vertical" ,
layout_margin = "3dp" ,
background = getButtonBG(),
onClick = function ()
visi (tid)
end,
{
TextView , text = views [1] ,
textSize = "13sp" ,
Typeface=font,
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",
{
ImageView ,
src = pic_heiright,
layout_width = "24dp" ,
layout_height = "24dp" ,
colorFilter='0xff'..控件颜色,
__onFinish=function(v) boxes[tid][6]=v end,
}
}
},
radios
}
return firadio
end
function changan.edit(name , hint)
_ENV [name] = name..guid ()
if not hint then
hint = "点击输入文字"
end
return {
LinearLayout ,
layout_width = 'match_parent' ,
layout_height = "40dp" ,
layout_marginTop = "5dp" ,
layout_marginBottom = "5dp" ,
layout_marginLeft = "0dp" ,
layout_marginRight = "0dp" ,
gravity = "center_vertical" ,
{
EditText ,
background = getButtonBG(),
__onFinish=function(v)
v:setHintTextColor(0xff545454)
end,
gravity = "center" ,
hint = hint ,
textColor='#000000',
textSize = "13sp",
Typeface=font,
layout_height = "40dp" ,
layout_marginBottom = "-2dp",
id=luajava.newId(_ENV [name]),
layout_width = 'match_parent' ,
}
}
end
function changan.seek(name,bian,smin,smax,nows)
_ENV[bian] =nows
local smin=tonumber(smin)
local smax=tonumber(smax)
if _ENV[bian] == nil then _ENV[bian] = 1.0 end
if not name then name = "未设置" end
local names = name..guid()
kid=guid().."sk"
return {
LinearLayout,
id=luajava.newId(kid),
layout_width = 'match_parent',
layout_hight = "match_parent",
layout_marginTop = "5dp",
layout_marginBottom = "5dp",
gravity = "center_vertical",
{
TextView,
padding={"5dp","10dp","0dp","10dp",},
gravity = "top",
textColor='#000000',
text = name,
id = luajava.newId(names),
layout_width = '100dp',
--layout_marginLeft = "5dp",
layout_marginRight = "0dp",
},
{
Slider,
thumbHeight='23dp',
trackHeight='15dp',
trackStopIndicatorSize='0dp',
tickVisible=false,
__onFinish=function(v)
table.insert(sliders,v)
v:setTrackActiveTintList(ColorStateList({{},},{'0xff'..控件颜色}))
v:setTrackInactiveTintList(ColorStateList({{},},{'0x55'..控件颜色}))
v:setThumbTintList(ColorStateList({{},},{'0xff'..控件颜色}))
luajava.setInterface(v, 'addOnChangeListener',
function(SeekBar, var2, var3)
_ENV[bian] = var2
end)
end,
layout_width = 'match_parent',
id=luajava.newId(name.."seekbar"),
valueFrom=smin,
valueTo=smax,
value=nows,
stepSize=1.0,
}
}
end
function changan.radio(cklist)
local rest = {
LinearLayout ,
layout_width = 'match_parent' ,
layout_height = "wrap_content" ,
gravity = "top" ,
orientation = "vertical" ,
}
if type (cklist [1]) == "string" then
rds=2
rest [# rest + 1] = {
TextView ,
gravity = "left" ,
padding="5dp",
text = cklist [1] ,
textSize = "13sp" ,
Typeface=font,
textColor = '#000000' ,
layout_width = 'match_parent' ,
layout_height = 'wrap_content' ,
layout_marginLeft = "10dp" ,
layout_marginRight = "5dp" ,
layout_marginTop = "0dp" ,
layout_marginBottom = "0dp" ,
}
else
rds=1
end
local restt={
RadioGroup ,
layout_width = 'match_parent' ,
layout_height = "wrap_content" ,
layout_margin = "4dp" ,
gravity = "top" ,
orientation = "vertical" ,
elevation='2dp',
background=luajava.loadlayout {
GradientDrawable ,
color = 0xffffffff ,
cornerRadius = 20
},
}
for i = rds , # cklist do
local name = cklist [i] [1]
local func = cklist [i] [2]
if not name then
name = "未设置"
end
local nid = name..guid ()
restt [# restt + 1] = {
RadioButton ,
gravity = "top" ,
text = name ,
textSize="13sp",
Typeface=font,
gravity='center_vertical',
textColor = '#000000' ,
layout_width = 'match_parent' ,
layout_height = 'wrap_content' ,
layout_marginLeft = "2dp" ,
layout_marginRight = "2dp" ,
__onFinish=function(v)
v:setButtonTintList(RadTint)
end,
onClick=function()
luajava.startThread(func)
end
}
end
rest [# rest + 1] = restt
return rest
end
function changan.image(img,height,width,pad,func)
if not func then func=function() end end
if not pad then pad="0dp" end
if not height then height="80dp" end
if not width then width="80dp" end
return {
LinearLayout,
layout_height="wrap_content",
layout_width="match_parent",
gravity="center",
{
ImageView,
layout_height=height,
layout_width=width,
padding=pad,
src=获取图片(img),
onClick=function() luajava.newThread(func):start() end,
}}
end
function changan.loadViews(PageNum)
local i=1
local gsi=Gsview[i]
for j=1,#gsi do
if type(gsi[j])=='table' then
local CreatedView
CreatedView=gsi[j]
local ParentV=luajava.loadlayout({LinearLayout,CreatedView})
CreatedView=ParentV:getChildAt(0)
ParentV:removeView(CreatedView)
local layoutm=luajava.getIdView('layoutm'..i)
luajava.runUiThread(function()
layoutm:addView(CreatedView)
end)
elseif type(gsi[j])=='userdata' then
luajava.getIdView('layoutm'..i):addView(gsi[j])
end
end
for i=2,PageNum do
local gsi=Gsview[i]
luajava.startThread(function()
for j=1,#gsi do
if type(gsi[j])=='table' then
local CreatedView
CreatedView=gsi[j]
local ParentV=luajava.loadlayout({LinearLayout,CreatedView})
CreatedView=ParentV:getChildAt(0)
ParentV:removeView(CreatedView)
local layoutm=luajava.getIdView('layoutm'..i)
luajava.runUiThread(function()
layoutm:addView(CreatedView)
end)
elseif type(gsi[j])=='userdata' then
luajava.getIdView('layoutm'..i):addView(gsi[j])
end
end
end)
end
end
function huiz()
--绘制内容必须写在这里否则会消失
draw3 = require("draw3")
draw.setStyle("填充")
draw.setColor('#F8E8F0')
end
左上角头像='http://vip.okig.top/view.php/9ca6fa77335cf75b298fb991d25980a4.png'
悬浮窗图标='http://vip.okig.top/view.php/9ca6fa77335cf75b298fb991d25980a4.png'
分页名字={
"公告",
"防封",
"刷号",
"竞赛",
"音乐",
"设置",
}
changan.menu({
{---第一页
changan.button("选择进程",
function()
gg.setProcessX()
string.toMusic("请选择地铁跑酷进程,选第一个")
end),
changan.button("了解此项目",
function()
gg.toast(' AR ')
gg.alert('作者Crève.')
gg.alert('作者QQ166498536')
end),
changan.button("欢迎使用赤音",
function()
end),
changan.button("已适配爱丁堡版本",
function()
end),
changan.switch("过新手教程",
function()
SO_PT(SO['新手'],4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic("新手教程已跳过,直接结算即可")
end,
function()
end),
}, {---第二页
changan.button("点击锁定进程",
function()
gg.setProcess('com.kiloo.subwaysurf')
string.toMusic("已锁定成功")
end),
changan.box({"登录",
changan.switch("闪退",
function()
function setvalue(address, flags, value)
local tt = {}
tt[1] = {}
tt[1].address = address
tt[1].flags = flags
tt[1].value = value
gg.setValues(tt)
end
so=gg.getRangesList('libtersafe2.so')[1].start
py=0x4FD6AC
setvalue(so+py,4,"~A8 RET")
py=0x4FD6BC
setvalue(so+py,4,"~A8 RET")
py=0x4FD6DC
setvalue(so+py,4,"~A8 RET")
py=0x4FD6FC
setvalue(so+py,4,"~A8 RET")
gg.toast("防闪退:开启")
string.toMusic('防闪已加载')
end),
changan.switch("环境",
function()
function setvalue(address, flags, value)
local tt = {}
tt[1] = {}
tt[1].address = address
tt[1].flags = flags
tt[1].value = value
gg.setValues(tt)
end
so=gg.getRangesList('libtersafe2.so')[1].start
py=0x4FD6A0
setvalue(so+py,4,"~A8 RET")
py=0x4FD6B0
setvalue(so+py,4,"~A8 RET")
py=0x4FD6D0
setvalue(so+py,4,"~A8 RET")
py=0x4FD80C
setvalue(so+py,4,"~A8 RET")
py=0x4FD78C
setvalue(so+py,4,"~A8 RET")
py=0x4FD68C
setvalue(so+py,4,"~A8 RET")
py=0x4FD69C
setvalue(so+py,4,"~A8 RET")
py=0x4FD72C
setvalue(so+py,4,"~A8 RET")
py=0x4FD73C
setvalue(so+py,4,"~A8 RET")
py=0x4FD74C
setvalue(so+py,4,"~A8 RET")
py=0x4FD75C
setvalue(so+py,4,"~A8 RET")
py=0x4FD76C
setvalue(so+py,4,"~A8 RET")
py=0x4FD77C
setvalue(so+py,4,"~A8 RET")
py=0x4FD78C
setvalue(so+py,4,"~A8 RET")
py=0x4FD79C
setvalue(so+py,4,"~A8 RET")
gg.toast("防环境:开启")
string.toMusic('防环境已注入')
end),
changan.switch("SO-RET",
function()
local gg=gg
SO_PT(SO['登录1'] ,4,"~A8 RET")
SO_PT(SO['登录2'] ,4,"~A8 RET")
SO_PT(SO['登录3'] ,4,"~A8 RET")
gg.toast("独家登录SO开启成功")
string.toMusic('登录SO已注入')
end),
}),
changan.box({"大厅",
changan.switch("防行为",
function()
local gg=gg
for i = 1, 2 do
if SO['act'..i] then
SO_PT(SO['act'..i], 4, "~A8 MOV W0, WZR")
end
end
local gg=gg
for i = 1, 42 do
if SO['行为'..i] then
SO_PT(SO['行为'..i], 4, "~A8 MOV X0, XZR")
end
end
local gg=gg
local so=gg.getRangesList('libil2cpp.so')[2].start
bj={
{address = so+0x37418f8, flags = 4, value = "~A8 RET"},
}
gg.setValues(bj)
gg.alert('防行为成功')
string.toMusic('防行为已注入')
end),
changan.switch("全过",
function()
SO_PT(SO['速度检测1'],4,"~A8 MOV W0, WZR")
SO_PT(SO['速度检测2'],4,"~A8 MOV W0, WZR")
SO_PT(SO['速度检测3'],4,"~A8 MOV W0, WZR")
SO_PT(SO['速度检测4'],4,"~A8 MOV W0, WZR")
SO_PT(SO['速度检测5'],4,"~A8 MOV W0, WZR")--滑板速度检测
string.toMusic('注入成功')
end),
}),
},{---第三页
changan.box({"数据更改",
changan.button("修改金币",
function()
a = gg.prompt({"请输入你想要的金币数量\n[改多会封号]"},{"0"},{"text"})[1]
if not a then return end
SO_PT(SO['金币'],4,"~A8 MOV W0, #"..a.."","~A8 RET")
gg.toast("更改成功")
string.toMusic("游戏金币开启成功")
end),
changan.button("修改钥匙",
function()
local OP = gg.prompt({'请输入修改的钥匙\n[改多会封号]'},{"0"},{"text"})
SO_PT(SO['钥匙'] ,4,"~A8 MOV W0, #"..OP[1])
gg.toast("更改成功")
string.toMusic("游戏蓝色钥匙修改成功")
end),
changan.button("宝物钥匙",
function()
local OP = gg.prompt({'请输入修改的宝物钥匙\n[改多会封号]'},{"0"},{"text"})
SO_PT(SO['宝物钥匙'] ,4,"~A8 MOV W0, #"..OP[1])
gg.toast("更改成功")
string.toMusic("宝物钥匙修改成功")
end),
changan.button("改赛季币",
function()
SO_Deposit(SO['紫币'],4,gg.prompt({"请输入修改的赛季币数量"},{"0"},{"text"})[1])
gg.toast("更改成功")
string.toMusic("赛季币数量修改成功")
end),
changan.button("蓝色扳手",
function()
SO_Deposit(SO['蓝扳手'],4,gg.prompt({"请输入蓝扳手数量\n可能不是实体"},{"91"},{"text"})[1])
gg.toast("更改成功")
string.toMusic("蓝色扳手修改成功")
end),
changan.button("金色扳手",
function()
SO_Deposit(SO['金扳手'],4,gg.prompt({"请输入金扳手数量\n可能不是实体"},{"78"},{"text"})[1])
gg.toast("更改成功")
string.toMusic("金色扳手修改成功")
end),
changan.button('自改跑卡',
function()
local OP = gg.prompt({'炫跑卡\n输入1~6'},{"6"},{"text"})
SO_PT(SO['炫跑卡'] ,4,"~A8 MOV W0, #"..OP[1])
gg.toast("更改成功")
string.toMusic("炫跑卡修改成功")
end),
changan.button("修改段位",
function()
BL=gg.prompt({"请输入你要修改的段位\n伪实体\n1=青铜\n2=白银\n3=黄金\n4=铂金\n5=钻石\n6=王者"},{"6"},{"text"})[1]
SO_PT(SO['段位'],4,"~A8 MOV W0, #"..BL.."")
gg.toast("更改成功")
string.toMusic("修改成功")
end),
changan.button("修改阶段",
function()
BL=gg.prompt({"段位阶段\n1-6"},{"6"},{"text"})[1]
SO_PT(SO['阶段'],4,"~A8 MOV W0, #"..BL.."")
string.toMusic("修改成功")
gg.toast("更改成功")
end),
changan.button("修改星数",
function()
BL=gg.prompt({"段位星星数量\n最多9999星\n伪实体"},{"520"},{"text"})[1]
SO_PT(SO['星数'],4,"~A8 MOV W0, #"..BL.."")
string.toMusic("修改成功")
gg.toast("更改成功")
end),
changan.button("全服排名",
function()
SO_PT(SO['国标'],4,"~A8 MOV W0, #"..gg.prompt({"输入你想要的排名\n1-100"},{"78"},{"text"})[1])
gg.toast("更改成功")
string.toMusic("修改成功")
end),
changan.button("派队赛全服",
function()
a = gg.prompt({"派对赛全服显示"},{""},{"text"})[1]
if not a then return end
SO_PT(SO['派对全服'],4,"~A8 MOV W0, #"..a.."")
gg.toast("更改成功")
string.toMusic("修改成功")
end),
changan.button("派队赛省份",
function()
a = gg.prompt({"0=其他地区\n1=北京\n2=上海\n3=天津\n4=重庆\n5=河北\n6=山西\n7=河南\n8=辽宁\n9=吉林\n10=黑龙江\n11=内蒙古\n12=江苏\n13=山东\n14=安徽\n15=浙江\n16=福建\n17=湖北\n18=湖南\n19=广东\n20=广西\n21=江西\n22=四川\n23=海南\n24=贵州\n25=云南\n26=西藏\n27=陕西\n28=甘肃\n29=青海\n30=宁夏\n31=新疆\n32=香港\n33=澳门\n34=台湾"},{""},{"text"})[1]
if not a then return end
SO_PT(SO['派对省份'],4,"~A8 MOV W0, #"..a.."")
string.toMusic("修改成功")
end),
changan.button("派队赛省服",
function()
a = gg.prompt({"派队赛"},{""},{"text"})[1]
if not a then return end
SO_PT(SO['派对省排'],4,"~A8 MOV W0, #"..a.."")
gg.toast("更改成功")
string.toMusic("修改成功")
end),
}),
changan.box({"人物自定义选择",
changan.text("↑上方分区可以向左/右滑动↑","#000000","12sp"),
changan.button("调查人物滑板背饰代码",
function()
local gg=gg
local list = {
"点击此处搜索你需要的代码",
"人物代码",
"杰克0",
"琪琪1",
"小黑2",
"钉子3",
"青青4",
"弗兰克5",
"卷卷6",
"小胖7",
"露西8",
"忍者9",
"机器人10",
"莎莎11",
"祖伊12",
"波迪13",
"K王子14",
"僵尸杰克15",
"精灵琪琪16",
"17托尼",
"卡门18",
"罗伯特19",
"金20",
"浅浅21",
"尼克22",
"可可23",
"孙悟空24",
"阿丽25",
"艾迪26",
"杰米27",
"跑跑28",
"美美29",
"福喜杰克30",
"米娜31",
"罗莎32",
"奥莉薇亚33",
"爱迪生34",
"洛奇35",
"韦恩36",
"欢欢37",
"茉莉38",
"鬼鬼39",
"宝拉40",
"小牙仔41",
"邦邦42",
"雷克斯43",
"小武哥44",
"伊奇45",
"艾美46",
"哪吒47",
"马可48",
"希腊-尼科斯49",
"哈库50",
"科罗娜51",
"麦克52",
"白小嫦53",
"旧金山-詹妮54",
"春节-小春55",
"雅罗56",
"玉依57",
"马达加斯加-爱娜58",
"秘鲁-卡洛斯59",
"新加坡-佳佳60",
"龙宝宝61",
"小宁62",
"嫦娥63",
"亚奇64",
"拉蒙娜65",
"劳伦66",
"马利克67",
"吕小布68",
"左利尔69",
"菲利普70",
"芙蕾雅71",
"小李72",
"邬童73",
"班小松74",
"伊柯75",
"陶西76",
"萨尔玛77",
"安谧78",
"嘟嘟79",
"曼尼80",
"少年嬴政81",
"小乔82",
"尼古拉83",
"十三妹84",
"貂蝉85",
"杨戬86",
"伊泽87",
"刘三姐88",
"索菲亚89 ",
"威尼斯-迪伦90",
"三亚-海音91",
"街舞机器人92",
"阿一93",
"阿龙94",
"安琪95",
"斯嘉丽96",
"冰冰97",
"小虎98",
"艾丽西娅99",
"麦娅100",
"鸿仔101",
"阿莹102",
"苏黎世-雨果103",
"哇! 兔子机器人104",
"卡里姆105",
"素贞106",
"糖心107",
"梅108",
"淮安109",
"飞天110",
"迪戈111",
"圣诞小黑112",
"铁甲武僧113",
"鼠小易114",
"阿尔巴115",
"未来杰克116",
"时光少年117",
"蓝骑士118",
"艾波索119",
"甜心少女120",
"卡勒姆121",
"小石城-洛克122",
"太空人123",
"冰雪杰克124",
"冰雪弗兰克125",
"冰雪钉子126",
"冰雪琪琪127",
"冰雪青青128",
"许愿神龙129",
"穿越华夏-小雅130",
"穿越华夏-牛犇犇131",
"穿越华夏-鼠萌萌132",
"开学季-元气少年133",
"柏林-妮娜134",
"柏林-泽恩135",
"纽约-达瑞尔136",
"纽约-拉娜137",
"小狐狸138",
"牛津-邦妮139",
"哥本哈根版本-维京人140",
"空间站版本-机械弗兰克141",
"空间站版本-电音机器人142",
"艾嘉桦143",
"柠檬妹妹144",
"米娅145",
"武田146",
"环儿147",
"科拉尔148",
"杰森149",
"塔哈150",
"菲尼克斯151",
"艾斯152",
"福气琪琪153",
"克莱门汀154",
"姜博155",
"克莱奥156",
"哈西娜157",
"查理158",
"雅美159",
"假面机器人160",
"夜莺161",
"玛雅162",
"超级琪琪163",
"超级小黑164",
"超级杰克165",
"喵千金166",
"幻觉167",
"番薯仔168",
"鹿少爷169",
"超级青青170",
"精灵杰克171",
"精灵小黑172",
"精灵琪琪173",
"虎冲冲174",
"妲己175",
"迪迦杰克176",
"巴尔坦杰克177",
"超级费尔南多178",
"宋毅179",
"奥斯汀180",
"大眼仔181",
"乔治182",
"骑士183",
"兔跳跳184",
"隐秘小子185",
"机械兔186",
"假面机器人187",
"乌兰188",
"巴兹189",
"FB]恭喜190",
"欧布小黑191",
"哥莫拉青青192",
"电玩番薯仔193",
"隐秘女孩194",
"喷雾机器人195",
"兔小萌196",
"诺艾尔197",
"卡特琳198",
"比格蒙199",
"赛罗弗兰克200",
"水母妹妹201",
"魔法兔小萌202",
"章鱼水手203",
"章鱼船长204",
"泽塔杰森205",
"赛文加琪琪206",
"阿尔菲207",
"跑神番薯仔208",
"侦探多戈209",
"绅士多戈210",
"路障僵尸青青211",
"豌豆射手弗兰克212",
"燃跑杰克213",
"燃跑琪琪214",
"燃跑弗兰克215",
"江户川柯南216",
"怪盗基德217",
"超级番薯仔218",
"少女雅典娜219",
"神圣雅典娜220",
"燃跑青青221",
"燃跑小黑222",
"列车小胖223",
"方圆224",
"灵素225",
"墨韵226",
"塔伊纳227",
"布鲁诺228",
"柳兰229",
"寻梦柳兰230",
"米拉231",
"魔术杰克232",
"安室透233",
"赤井秀一234",
"灰原哀235",
"楼恒236",
"战神楼恒237",
"阿莉亚238",
"燃跑兔239",
"燃跑番薯仔240",
"摇滚维维妮241",
"摇滚扎克242",
"燃跑杰森243",
"莱卡244",
"雨林青青245",
"冰灵246",
"冰蓝247",
"摩蝎座卡普248",
"工藤新一249",
"毛利兰250",
"小黑251",
"龙焱252",
"小龙女253",
"汤圆圆254",
"春阳255",
"雷256",
"糖雪球257",
"劳伦斯258",
"发条约翰尼259",
"魔王吕布260",
"火舞貂蝉261",
"曹植262",
"龙达达263",
"织樱264",
"圣剑机甲265",
"猪猪侠266",
"菲菲公主267",
"薇薇安268",
"闪电队长269",
"FBL16245",
"滑板代码",
"默认滑板0",
"大跳板1",
"卧板2",
"街头滑板3",
"滑浪板4",
"超级英雄5",
"星星6",
"迈阿密7",
"怪兽8",
"火焰9",
"自由女神10",
"风之子11",
"犀鸟12",
"木板13",
"小鸡14",
"机车15",
"足球16",
"腹地17",
"大白鲨18",
"樱花19",
"猫咪20",
"狂热21",
"弗拉明戈22",
"玫瑰23",
"熊猫24",
"龙25",
"泰迪26",
"南瓜27",
"铃铛28",
"雪花29",
"孟加拉30",
"泡泡糖31",
"仙人掌32",
"麋鹿33",
"香蕉34",
"逐风35",
"传送器36",
"巡逻车37",
"鳄鱼38",
"乌龟39",
"红鼻子40",
"劳莱斯41",
"狮王42",
"提基43",
"飞毯44",
"龙舟45",
"贡多拉46",
"风火轮47",
"飞羽48",
"浪花49",
"雷电50",
"筋斗云51",
"玛塔塔52",
"影子53",
"圣诞火车54",
"花朵55",
"独角兽56",
"变色龙57",
"魔鬼鱼58",
"图米59",
"超级跑车60",
"狮子61",
"金牌62",
"奥尼63",
"鲸鱼64",
"合金跑车65",
"灵符66",
"雄鹰67",
"冰川68",
"赤兔69",
"踏板70",
"秘宝71",
"疯狂赛车72",
"尤克里里73",
"纪念日74",
"音槌75",
"黄包车76",
"眼镜蛇77",
"太空飞船78",
"桂花扇79",
"骷髅80",
"招魂幡81",
"南瓜扫帚82",
"竹简83",
"风韵84",
"水晶雪橇85",
"海盗船86",
"圣甲虫87",
"羊88",
"羞花89",
"哮天犬90",
"热狗91",
"浪漫甜心92",
"竹筏93",
"琉璃94",
"喷射飞行器95",
"多彩云96",
"蓝莓滑板97",
"低音炮98",
"冲浪滑板99",
"平底锅100",
"黄色的士101",
"帆船滑板102",
"音符103",
"魔毯104",
"锦鲤105",
"龙王炮106",
"金猪107",
"烟花火箭108",
"唱片109",
"像素爱心110",
"黄色闪电111",
"发条112",
"蓝色风暴113",
"油纸伞114",
"梦幻蝴蝶115",
"海蛇116",
"青铜战马117",
"莲台118",
"落叶119",
"皇家战马120",
"七色彩虹121",
"极速光轮122",
"电音风暴123",
"TapTAp滑板124",
"小米滑板125",
"星际巡洋舰126",
"时光涡轮127",
"无人机128",
"飞影129",
"朋克滑板130",
"老爷车131",
"旅行者一号132",
"马头琴133",
"电音熊134",
"自由涂鸦135",
"迷你兔136",
"维京战船137",
"旋风138",
"秘密139",
"开拓者140",
"幻影141",
"调色板142",
"樱之花143",
"神龙144",
"海浪145",
"骆驼146",
"海滩板147",
"冰雪奥义148",
"姜饼149",
"红桃皇后150",
"原子瓦151",
"星盘152",
"向阳153",
"测速仪154",
"括普155",
"月羽156",
"浮夸157",
"萌妹飞车158",
"液体159",
"番薯电动车160",
"小鹿板161",
"磁铁162",
"超级冲浪板163",
"高音号滑板164",
"雪云滑板165",
"寅虎滑板166",
"狐狸滑板167",
"胜利飞燕168",
"电测仪169",
"夜琵琶170",
"彩虹炸弹171",
"微博滑板172",
"兔兔气垫船173",
"盾牌飞行器174",
"年年有余175",
"赛博摩托176",
"枫叶177",
"战斗机178",
"鸡动机179",
"欧布圣剑180",
"蓝牙手柄181",
"粉色冰淇凌182",
"追随者183",
"绝不迟到滑板鞋184",
"蝰鱼185",
"缓冲器186",
"赛罗之剑187",
"233滑板188",
"鹤189",
"水草190",
"卷轴191",
"贝壳192",
"藏宝图193",
"极速黄昏194",
"火种195",
"大老板196",
"真相放大镜197",
"玉米加农炮198",
"小推车199",
"燃跑冲锋板200",
"燃跑气垫板201",
"燃跑影子202",
"滑板203",
"侦探小子204",
"四叶草205",
"时空滑板206",
"燃跑火箭207",
"燃跑飞行器208",
"小胖专车210",
"机关鸟211",
"虫詹宫折桂212",
"水墨山河213",
"蝠鲼214",
"科技浪潮215",
"幽谷兰香216",
"塔尔琴217",
"帽子戏法218",
"RX-7-219",
"GT500-220",
"缩小药舟221",
"失落方舟222",
"飞鱼223",
"萝卜基尼224",
"蓝鳍金枪鱼225",
"键盘乐器226",
"电吉他227",
"燃跑青春228",
"泰酷辣229",
"极速飞板230",
"幻雪星梦-心231",
"幻雪星梦-毅232",
"推进器-摩蝎233",
"帝丹234",
"海参男235",
"火灵兽罗盘236",
"蓝梦云鲸237",
"食神奖牌238",
"闪电239",
"雪林240",
"上上签241",
"超级齿轮242",
"发条火箭243",
"村日滑板244",
"至黯赤兔245",
"绯月246",
"飞鸢247",
"月光卷轴248",
"霓虹灯牌249",
"复古灯牌250",
"ATX-1飞行器251",
"卟卟机车252",
"超级棒棒糖253",
"死人定制254",
"闪电加速器255",
"背饰代码",
"幸运星背包1",
"圣诞雪人2",
"机械之翼3",
"天使之翼4",
"绿野风车5",
"愚乐气球6",
"迷蝶之翼7",
"甜心花环8",
"时光之翼9",
"玲珑秋月10",
"星辰11",
"圣诞树12",
"许愿神龙背饰13",
"元气书包14",
"帆布克15",
"琵琶16",
"神光棒17",
"狗狗背饰18",
"大眼泡泡19",
"超能氧气瓶20",
"闪电篮球21",
"吸铁石22",
"欧布之光23",
"游戏机24",
"小兔书包25",
",赛罗之翼26",
"乐园喷射器27",
"河马28",
"迷失的船舵29",
"贝利亚黄昏30",
"跑神杯31",
"绅士的礼仪32",
"磁力菇33",
"向日葵34",
"少年侦探35",
"魔术鸽子36",
"时空守恒器37",
"机关罗盘38",
"月上枝头39",
"绣韵天青40",
"可爱小快41",
"兰花灯42",
"燃跑之翼43",
"波本44",
"狙击45",
"APTXC4869-46",
"莲花橛47",
"兔百德48",
"猫猫守护49",
"幻月迷音50",
"冰晶碎羽-星51",
"冰晶碎羽-棱52",
"布布53",
"危险距离54",
"小兰名牌55",
"麻辣小龙虾56",
"珠玉绮螺57",
"糖葫芦58",
"团元圆59",
"咸鱼不闲60",
"雪怪冰淇淋61",
"保安的大磁铁62",
"魔王之翼63",
"青团叽64",
"圣剑之翼65",
"极光之翼66",
"银河之翼67",
"开天宝剑68",
"猪猪背包69",
"宝物代码",
"1小丑面具",
"2露西耳环",
"3紫色花球",
"4金属发条",
"5火焰纹章",
"6星星项链",
"7机械手表",
"8金色耳环",
"9黄金皇冠",
"10摩托头盔",
"11狼牙项链",
"12纯金手表",
"13金箍",
"14乾坤圈",
"15水手猫",
"16积木",
"17灵符",
"18黄金盔甲",
"19令牌",
"20龙蛋",
"21南瓜",
"22月兔",
"23舞狮头",
"24甜心项链",
"25圣诞帽",
"26夹克",
"27红色战衣",
"28火红灯笼",
"29美人折扇",
"30卫衣",
"31校服",
"32相机",
"33耳机",
"34眼镜",
"道具代码",
"1导弹",
"2蓝色魔鬼炸弹",
"4护盾",
"8香蕉皮",
"16颜料炸弹",
"32恶魔",
"64粘液罐子",
"128小狗",
"256滑板",
"272减速乌龟",
"288云雾",
"320净化饮料",
"384磁铁",
"512群体护盾",
"544超级导弹",
"560滑板",
"563羽毛",
"564砝码",
"头像框代码",
"2019年春节限定头像框1",
"情人节限定头像框2",
"角色达人头像框3",
"滑板达人头像框4",
"愚人节限定头像框5",
"毅力达人限定头像框6",
"劳动节限定头像框7",
"端午节限定头像框8",
"夏日清凉头像框9",
"钻石璀璨头像框10",
"七夕限定头像框11",
"中秋节限定头像框12",
"飞天头像框13",
"万圣节头像框14",
"万圣霓虹头像框15",
"秋日头像框代码16",
"6周年头像框代码17",
"冰雪节头像框代码18",
"2020春节限定头像框代码19",
"我爱饺子头像框代码20",
"我爱汤圆头像框代码21",
"去春游吧头像框代码22",
"中国加油头像框代码23",
"愚乐一下头像框代码24",
"纯真记忆头像框代码25",
"爱心传递头像框代码26",
"7周年头像框代码27",
"圣诞迎新头像框代码28",
"许愿神龙头像框代码29",
"2021年春节限定头像框代码30",
"春日芳华头像框代码31",
"愚人节恶搞头像框代码32",
"2021劳动节头像框代码33",
"牛津头像框代码34",
"2021端午头像框代码35",
"2021暑假头像框代码36",
"2021巴厘岛像框代码37",
"2021中秋头像框代码38",
"长安限定头像框代码39",
"一起来捣蛋头像框代码40",
"8周年限定头像框代码41",
"创作达人头像框代码42",
"大神头像框代码43",
"双旦快乐头像框代码44",
"2022春节头像框代码45",
"春意盎然头像框代码46",
"愚你同乐头像框代码47",
"劳动快乐头像框代码48",
"端午快乐头像框代码49",
"摩纳哥限定头像框代码50",
"暑假快乐头像框代码51",
"冰岛限定头像框代码52",
"武汉限定头像框代码53",
"社团S1赛季冠军头像框代码54",
"社团S1赛季亚军头像框代码55",
"社团S1赛季季军头像框代码56",
"社团S1赛季精英头像框代码57",
"社团S1赛季勇者头像框代码58",
"万圣节限定头像框59",
"9周年限定头像框60",
"深圳限定头像框61",
"社团S2赛季冠军头像框代码62",
"社团S2赛季亚军头像框代码63",
"社团S2赛季季军头像框代码64",
"社团S2赛季精英头像框代码65",
"社团S2赛季勇者头像框代码66",
"新城洛阳头像框67",
"奥特曼限定68",
"微博专属头像框69",
"Fanbook头像框70",
"哥本哈根专属头像框71",
"社团S3赛季冠军头像框代码72",
"社团S3赛季亚军头像框代码73",
"社团S3赛季季军头像框代码74",
"社团S3赛季精英头像框代码75",
"社团S3赛季勇者头像框代码76",
"跑神杯S3冠军社团头像框77",
"跑神杯S3亚军社团头像框78",
"跑神杯S3季军社团头像框79",
"跑神杯S3纪念头像框80",
"呼和浩特版本头像框81",
"劳动最光荣头像框82",
"大神作者头像框83",
"人气作者头像框84",
"新秀作者头像框85",
"欧布头像框86",
"大朋友头像框87",
"小朋友头像框88",
"电玩番薯仔头像框89",
"校园时光头像框90",
"233乐园头像框91",
"赛罗头像框92",
"2023年端午节头像框93",
"航海日记94",
"暑假来袭头像框95",
"社团S4赛季王者头像框96",
"社团S4赛季大师头像框97",
"社团S4赛季钻石头像框98",
"社团S4赛季白金头像框99",
"社团S4赛季黄金头像框100",
"泽塔头像框101",
"欢乐暑假头像框102",
"跑神番薯仔103",
"时光回溯头像框104",
"燃跑弗兰克头像框105",
"燃跑杰克头像框106",
"燃跑琪琪头像框107",
"植物大战僵尸头像框108",
"江户川柯南头像框109",
"怪盗基德头像框110",
"燃跑青青头像框111",
"超级番薯仔头像框112",
"圣殿之下头像框113",
"社团S5赛季王者头像框114",
"社团S5赛季大师头像框115",
"社团S5赛季钻石头像框116",
"社团S5赛季白金头像框117",
"社团S5赛季黄金头像框118",
"社团联赛S6赛季头像框119",
"苏州版本头像框120",
"秋辞诗赋头像框121",
"幽兰头像框122",
"社团联赛S7赛季头像框124",
"安室透头像框125",
"赤井秀一头像框126",
"灰原衰头像框127",
"楼兰版本头像框128",
"社团联赛S8赛季头像框129",
"忆往昔头像框130",
"社团联赛S9赛季头像框131",
"燃跑番薯仔头像框132",
"燃跑杰森头像框133",
"十周年头像框134",
"社团联赛S10赛季头像框135",
"工藤新一头像框136",
"毛利兰头像框137",
"小黑头像框138",
"社团联赛S11赛季头像框139",
"中国城限定头像框140",
"2024新春限定头像框141",
"2024元宵限定头像框142",
"龙族太子限定头像框143",
"食神头像框144",
"专属包限定头像框145",
"社团联赛S12赛季头像框146",
"社团联赛S13赛季头像框147",
"跑神杯S6纪念头像框148",
"进步之星头像框149",
"幻想城头像框150",
"雪国头像框151",
"上上签头像框152",
"社团联赛S14赛季头像框153",
"社团联赛S15赛季头像框154",
"跑神杯S6冠军头像框155",
"跑神杯S6亚军头像框156",
"跑神杯S6季军头像框157",
"灵山秀水限定头像框158",
"魔王头像框159",
"火舞头像框160",
"草长莺飞头像框161",
"社团联赛S16赛季头像框162",
"社团联赛S17赛季头像框163",
"猪猪侠头像框164",
"菲菲公主头像框165",
"圣剑机甲头像框166",
"社团联赛S18赛季头像框167",
"物品代码",
"0金币",
"1钥匙",
"2滑板",
"3得分倍增",
"4喷射起跑",
"5迷你宝箱",
"6宝箱",
"7超级宝箱",
"8收集物宝箱",
"9头像框",
"10人物",
"11杰克",
"12滑板",
"13未知",
"14背饰",
"15秘典宝箱",
"16高级秘典宝箱",
"17杰克的喷雾器",
"18抽奖券",
"19秘典收集物",
"20空白千万不要领取",
"21宝物",
"22宝物钥匙",
"23鲜花",
"24社团贡献",
"25荣耀之路奖杯",
"26跑酷币",
"27金钥匙",
}
local name = {} --- 功能函数表
local UI = gg.choice(list, nil, '查询')
if UI then
if UI == 1 then
local prompt = gg.prompt({ '请输入关键词进行搜索' }, { '' }, { 'text' })
if prompt then
local str = prompt[1] local t = {} local t1 = {}
for i = 2, #list - 1 do if string.find(list[i], str) then table.insert(t, list[i]) table.insert(t1, name[i - 1]) end end
if #t == 0 then
gg.toast('无搜索结果') else
local c = gg.choice(t, nil, '关键词:['.. str .. '],共搜索到' .. #t .. '条结果')
if c then end end end else end if UI == 2 then os.exit()end end FX1=0
end),
changan.button("替换人物",
function()
a = gg.prompt({"代码人物\n保安代码190"},{"190"},{"text"})[1]
if not a then return end
SO_PT(SO['替换人物'],4,"~A8 MOV X0, #" .. a .. "")
gg.toast("人物替换成功")
string.toMusic('人物替换成功')
end),
changan.button("替换滑板",
function()
a = gg.prompt({"代码滑板\n跑车代码60"},{"60"},{"text"})[1]
if not a then return end
SO_PT(SO['替换滑板'],4,"~A8 MOV X0, #" .. a .. "")
gg.toast("滑板替换成功")
string.toMusic('滑板替换成功')
end),
changan.button("替换背饰",
function()
a = gg.prompt({"代码背饰\n磁铁代码22"},{"22"},{"text"})[1]
if not a then return end
SO_PT(SO['替换背饰'],4,"~A8 MOV X0, #" .. a .. "")
gg.toast("背饰替换成功")
string.toMusic('背饰替换成功')
end),
}),
changan.box({"全解区域",
changan.switch('人物全解',
function()
SO_PT(SO['人物'] ,4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch('滑板全解',
function()
SO_PT(SO['滑板'] ,4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch('背饰全解',
function()
SO_PT(SO['背饰'] ,4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("人物装扮",
function()
SO_PT(SO['装扮'] ,4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("直购人物",
function()
SO_PT(SO['人物购买按钮'] ,4, "~A8 B [PC,#"..SOGSPY_ST(SO['人物购买按钮'] ,SO['人物购买成功'] ).."]")
gg.toast("开启成功")
string.toMusic('开启成功')
end),
changan.switch("直购滑板",
function()
SO_PT(SO['滑板购买按钮'],4,"~A8 B [PC,#"..SOGSPY_ST(SO['滑板购买按钮'],SO['滑板购买成功']).."]")
gg.toast("开启成功")
string.toMusic('开启成功')
end),
}),
changan.box({"特殊区域",
changan.switch('满级跑卡',
function()
SO_PT(SO['炫跑卡'],4,"~A8 MOV W0, #6")
gg.toast("开启成功")
string.toMusic('开启成功')
end),
changan.switch("十倍得分",
function()
SO_PT(SO['获取十倍'] ,4,"~A8 MOV W0, #1")
SO_PT(SO['解锁十倍'] ,4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic('开启成功')
end),
changan.switch("双倍金币",
function()
SO_PT(SO['双倍'] ,4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic('开启成功')
end),
changan.switch("一键领奖",
function()
SO_PT(SO['领奖'] ,4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic('开启成功')
end),
changan.switch("破解内购",
function()
SO_PT(SO['内购'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['内购'] ,SO['内购成功']).."]")
gg.toast("开启成功")
string.toMusic("开启成功,搭配宝物十抽购买")
end),
changan.switch("超长名称",
function()
SO_PT(SO['名称'] ,4,"~A8 B [PC,#0x100]")
gg.toast("开启成功")
string.toMusic('超长名称开启成功')
end),
changan.switch("粉色名称",
function()
SO_PT(SO['高级秘典昵称'],4,"~A8 MOV X0, #1")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("金色名称",
function()
SO_PT(SO['炫跑卡'],4,"~A8 MOV W0, #6")
SO_PT(SO['高级秘典昵称'],4,"~A8 MOV X0, #1")
gg.toast("秘典调用成功")
string.toMusic("开启成功")
end),
}),
changan.box({"修改宝物",
changan.switch("十抽全宝",
function()
SO_PT(SO['十抽'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['十抽'] ,SO['全宝']).."]")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("十抽购买",
function()
SO_PT(SO['十抽'], 4, "~A8 B [PC,#" .. SOGSPY_ST(SO['十抽'], SO['购买界面']) .. "]")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("十抽保存",
function()
SO_PT(SO['十抽'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['十抽'] ,SO['宝物备份']).."]")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
}),
changan.box({"兑换码",
changan.button("调查人物滑板背饰代码",
function()
local gg=gg
local list = {
"点击此处搜索你需要的代码",
"人物代码",
"杰克0",
"琪琪1",
"小黑2",
"钉子3",
"青青4",
"弗兰克5",
"卷卷6",
"小胖7",
"露西8",
"忍者9",
"机器人10",
"莎莎11",
"祖伊12",
"波迪13",
"K王子14",
"僵尸杰克15",
"精灵琪琪16",
"17托尼",
"卡门18",
"罗伯特19",
"金20",
"浅浅21",
"尼克22",
"可可23",
"孙悟空24",
"阿丽25",
"艾迪26",
"杰米27",
"跑跑28",
"美美29",
"福喜杰克30",
"米娜31",
"罗莎32",
"奥莉薇亚33",
"爱迪生34",
"洛奇35",
"韦恩36",
"欢欢37",
"茉莉38",
"鬼鬼39",
"宝拉40",
"小牙仔41",
"邦邦42",
"雷克斯43",
"小武哥44",
"伊奇45",
"艾美46",
"哪吒47",
"马可48",
"希腊-尼科斯49",
"哈库50",
"科罗娜51",
"麦克52",
"白小嫦53",
"旧金山-詹妮54",
"春节-小春55",
"雅罗56",
"玉依57",
"马达加斯加-爱娜58",
"秘鲁-卡洛斯59",
"新加坡-佳佳60",
"龙宝宝61",
"小宁62",
"嫦娥63",
"亚奇64",
"拉蒙娜65",
"劳伦66",
"马利克67",
"吕小布68",
"左利尔69",
"菲利普70",
"芙蕾雅71",
"小李72",
"邬童73",
"班小松74",
"伊柯75",
"陶西76",
"萨尔玛77",
"安谧78",
"嘟嘟79",
"曼尼80",
"少年嬴政81",
"小乔82",
"尼古拉83",
"十三妹84",
"貂蝉85",
"杨戬86",
"伊泽87",
"刘三姐88",
"索菲亚89 ",
"威尼斯-迪伦90",
"三亚-海音91",
"街舞机器人92",
"阿一93",
"阿龙94",
"安琪95",
"斯嘉丽96",
"冰冰97",
"小虎98",
"艾丽西娅99",
"麦娅100",
"鸿仔101",
"阿莹102",
"苏黎世-雨果103",
"哇! 兔子机器人104",
"卡里姆105",
"素贞106",
"糖心107",
"梅108",
"淮安109",
"飞天110",
"迪戈111",
"圣诞小黑112",
"铁甲武僧113",
"鼠小易114",
"阿尔巴115",
"未来杰克116",
"时光少年117",
"蓝骑士118",
"艾波索119",
"甜心少女120",
"卡勒姆121",
"小石城-洛克122",
"太空人123",
"冰雪杰克124",
"冰雪弗兰克125",
"冰雪钉子126",
"冰雪琪琪127",
"冰雪青青128",
"许愿神龙129",
"穿越华夏-小雅130",
"穿越华夏-牛犇犇131",
"穿越华夏-鼠萌萌132",
"开学季-元气少年133",
"柏林-妮娜134",
"柏林-泽恩135",
"纽约-达瑞尔136",
"纽约-拉娜137",
"小狐狸138",
"牛津-邦妮139",
"哥本哈根版本-维京人140",
"空间站版本-机械弗兰克141",
"空间站版本-电音机器人142",
"艾嘉桦143",
"柠檬妹妹144",
"米娅145",
"武田146",
"环儿147",
"科拉尔148",
"杰森149",
"塔哈150",
"菲尼克斯151",
"艾斯152",
"福气琪琪153",
"克莱门汀154",
"姜博155",
"克莱奥156",
"哈西娜157",
"查理158",
"雅美159",
"假面机器人160",
"夜莺161",
"玛雅162",
"超级琪琪163",
"超级小黑164",
"超级杰克165",
"喵千金166",
"幻觉167",
"番薯仔168",
"鹿少爷169",
"超级青青170",
"精灵杰克171",
"精灵小黑172",
"精灵琪琪173",
"虎冲冲174",
"妲己175",
"迪迦杰克176",
"巴尔坦杰克177",
"超级费尔南多178",
"宋毅179",
"奥斯汀180",
"大眼仔181",
"乔治182",
"骑士183",
"兔跳跳184",
"隐秘小子185",
"机械兔186",
"假面机器人187",
"乌兰188",
"巴兹189",
"FB]恭喜190",
"欧布小黑191",
"哥莫拉青青192",
"电玩番薯仔193",
"隐秘女孩194",
"喷雾机器人195",
"兔小萌196",
"诺艾尔197",
"卡特琳198",
"比格蒙199",
"赛罗弗兰克200",
"水母妹妹201",
"魔法兔小萌202",
"章鱼水手203",
"章鱼船长204",
"泽塔杰森205",
"赛文加琪琪206",
"阿尔菲207",
"跑神番薯仔208",
"侦探多戈209",
"绅士多戈210",
"路障僵尸青青211",
"豌豆射手弗兰克212",
"燃跑杰克213",
"燃跑琪琪214",
"燃跑弗兰克215",
"江户川柯南216",
"怪盗基德217",
"超级番薯仔218",
"少女雅典娜219",
"神圣雅典娜220",
"燃跑青青221",
"燃跑小黑222",
"列车小胖223",
"方圆224",
"灵素225",
"墨韵226",
"塔伊纳227",
"布鲁诺228",
"柳兰229",
"寻梦柳兰230",
"米拉231",
"魔术杰克232",
"安室透233",
"赤井秀一234",
"灰原哀235",
"楼恒236",
"战神楼恒237",
"阿莉亚238",
"燃跑兔239",
"燃跑番薯仔240",
"摇滚维维妮241",
"摇滚扎克242",
"燃跑杰森243",
"莱卡244",
"雨林青青245",
"冰灵246",
"冰蓝247",
"摩蝎座卡普248",
"工藤新一249",
"毛利兰250",
"小黑251",
"龙焱252",
"小龙女253",
"汤圆圆254",
"春阳255",
"雷256",
"糖雪球257",
"劳伦斯258",
"发条约翰尼259",
"魔王吕布260",
"火舞貂蝉261",
"曹植262",
"龙达达263",
"织樱264",
"圣剑机甲265",
"猪猪侠266",
"菲菲公主267",
"薇薇安268",
"闪电队长269",
"FBL16245",
"滑板代码",
"默认滑板0",
"大跳板1",
"卧板2",
"街头滑板3",
"滑浪板4",
"超级英雄5",
"星星6",
"迈阿密7",
"怪兽8",
"火焰9",
"自由女神10",
"风之子11",
"犀鸟12",
"木板13",
"小鸡14",
"机车15",
"足球16",
"腹地17",
"大白鲨18",
"樱花19",
"猫咪20",
"狂热21",
"弗拉明戈22",
"玫瑰23",
"熊猫24",
"龙25",
"泰迪26",
"南瓜27",
"铃铛28",
"雪花29",
"孟加拉30",
"泡泡糖31",
"仙人掌32",
"麋鹿33",
"香蕉34",
"逐风35",
"传送器36",
"巡逻车37",
"鳄鱼38",
"乌龟39",
"红鼻子40",
"劳莱斯41",
"狮王42",
"提基43",
"飞毯44",
"龙舟45",
"贡多拉46",
"风火轮47",
"飞羽48",
"浪花49",
"雷电50",
"筋斗云51",
"玛塔塔52",
"影子53",
"圣诞火车54",
"花朵55",
"独角兽56",
"变色龙57",
"魔鬼鱼58",
"图米59",
"超级跑车60",
"狮子61",
"金牌62",
"奥尼63",
"鲸鱼64",
"合金跑车65",
"灵符66",
"雄鹰67",
"冰川68",
"赤兔69",
"踏板70",
"秘宝71",
"疯狂赛车72",
"尤克里里73",
"纪念日74",
"音槌75",
"黄包车76",
"眼镜蛇77",
"太空飞船78",
"桂花扇79",
"骷髅80",
"招魂幡81",
"南瓜扫帚82",
"竹简83",
"风韵84",
"水晶雪橇85",
"海盗船86",
"圣甲虫87",
"羊88",
"羞花89",
"哮天犬90",
"热狗91",
"浪漫甜心92",
"竹筏93",
"琉璃94",
"喷射飞行器95",
"多彩云96",
"蓝莓滑板97",
"低音炮98",
"冲浪滑板99",
"平底锅100",
"黄色的士101",
"帆船滑板102",
"音符103",
"魔毯104",
"锦鲤105",
"龙王炮106",
"金猪107",
"烟花火箭108",
"唱片109",
"像素爱心110",
"黄色闪电111",
"发条112",
"蓝色风暴113",
"油纸伞114",
"梦幻蝴蝶115",
"海蛇116",
"青铜战马117",
"莲台118",
"落叶119",
"皇家战马120",
"七色彩虹121",
"极速光轮122",
"电音风暴123",
"TapTAp滑板124",
"小米滑板125",
"星际巡洋舰126",
"时光涡轮127",
"无人机128",
"飞影129",
"朋克滑板130",
"老爷车131",
"旅行者一号132",
"马头琴133",
"电音熊134",
"自由涂鸦135",
"迷你兔136",
"维京战船137",
"旋风138",
"秘密139",
"开拓者140",
"幻影141",
"调色板142",
"樱之花143",
"神龙144",
"海浪145",
"骆驼146",
"海滩板147",
"冰雪奥义148",
"姜饼149",
"红桃皇后150",
"原子瓦151",
"星盘152",
"向阳153",
"测速仪154",
"括普155",
"月羽156",
"浮夸157",
"萌妹飞车158",
"液体159",
"番薯电动车160",
"小鹿板161",
"磁铁162",
"超级冲浪板163",
"高音号滑板164",
"雪云滑板165",
"寅虎滑板166",
"狐狸滑板167",
"胜利飞燕168",
"电测仪169",
"夜琵琶170",
"彩虹炸弹171",
"微博滑板172",
"兔兔气垫船173",
"盾牌飞行器174",
"年年有余175",
"赛博摩托176",
"枫叶177",
"战斗机178",
"鸡动机179",
"欧布圣剑180",
"蓝牙手柄181",
"粉色冰淇凌182",
"追随者183",
"绝不迟到滑板鞋184",
"蝰鱼185",
"缓冲器186",
"赛罗之剑187",
"233滑板188",
"鹤189",
"水草190",
"卷轴191",
"贝壳192",
"藏宝图193",
"极速黄昏194",
"火种195",
"大老板196",
"真相放大镜197",
"玉米加农炮198",
"小推车199",
"燃跑冲锋板200",
"燃跑气垫板201",
"燃跑影子202",
"滑板203",
"侦探小子204",
"四叶草205",
"时空滑板206",
"燃跑火箭207",
"燃跑飞行器208",
"小胖专车210",
"机关鸟211",
"虫詹宫折桂212",
"水墨山河213",
"蝠鲼214",
"科技浪潮215",
"幽谷兰香216",
"塔尔琴217",
"帽子戏法218",
"RX-7-219",
"GT500-220",
"缩小药舟221",
"失落方舟222",
"飞鱼223",
"萝卜基尼224",
"蓝鳍金枪鱼225",
"键盘乐器226",
"电吉他227",
"燃跑青春228",
"泰酷辣229",
"极速飞板230",
"幻雪星梦-心231",
"幻雪星梦-毅232",
"推进器-摩蝎233",
"帝丹234",
"海参男235",
"火灵兽罗盘236",
"蓝梦云鲸237",
"食神奖牌238",
"闪电239",
"雪林240",
"上上签241",
"超级齿轮242",
"发条火箭243",
"村日滑板244",
"至黯赤兔245",
"绯月246",
"飞鸢247",
"月光卷轴248",
"霓虹灯牌249",
"复古灯牌250",
"ATX-1飞行器251",
"卟卟机车252",
"超级棒棒糖253",
"死人定制254",
"闪电加速器255",
"背饰代码",
"幸运星背包1",
"圣诞雪人2",
"机械之翼3",
"天使之翼4",
"绿野风车5",
"愚乐气球6",
"迷蝶之翼7",
"甜心花环8",
"时光之翼9",
"玲珑秋月10",
"星辰11",
"圣诞树12",
"许愿神龙背饰13",
"元气书包14",
"帆布克15",
"琵琶16",
"神光棒17",
"狗狗背饰18",
"大眼泡泡19",
"超能氧气瓶20",
"闪电篮球21",
"吸铁石22",
"欧布之光23",
"游戏机24",
"小兔书包25",
",赛罗之翼26",
"乐园喷射器27",
"河马28",
"迷失的船舵29",
"贝利亚黄昏30",
"跑神杯31",
"绅士的礼仪32",
"磁力菇33",
"向日葵34",
"少年侦探35",
"魔术鸽子36",
"时空守恒器37",
"机关罗盘38",
"月上枝头39",
"绣韵天青40",
"可爱小快41",
"兰花灯42",
"燃跑之翼43",
"波本44",
"狙击45",
"APTXC4869-46",
"莲花橛47",
"兔百德48",
"猫猫守护49",
"幻月迷音50",
"冰晶碎羽-星51",
"冰晶碎羽-棱52",
"布布53",
"危险距离54",
"小兰名牌55",
"麻辣小龙虾56",
"珠玉绮螺57",
"糖葫芦58",
"团元圆59",
"咸鱼不闲60",
"雪怪冰淇淋61",
"保安的大磁铁62",
"魔王之翼63",
"青团叽64",
"圣剑之翼65",
"极光之翼66",
"银河之翼67",
"开天宝剑68",
"猪猪背包69",
"宝物代码",
"1小丑面具",
"2露西耳环",
"3紫色花球",
"4金属发条",
"5火焰纹章",
"6星星项链",
"7机械手表",
"8金色耳环",
"9黄金皇冠",
"10摩托头盔",
"11狼牙项链",
"12纯金手表",
"13金箍",
"14乾坤圈",
"15水手猫",
"16积木",
"17灵符",
"18黄金盔甲",
"19令牌",
"20龙蛋",
"21南瓜",
"22月兔",
"23舞狮头",
"24甜心项链",
"25圣诞帽",
"26夹克",
"27红色战衣",
"28火红灯笼",
"29美人折扇",
"30卫衣",
"31校服",
"32相机",
"33耳机",
"34眼镜",
"道具代码",
"1导弹",
"2蓝色魔鬼炸弹",
"4护盾",
"8香蕉皮",
"16颜料炸弹",
"32恶魔",
"64粘液罐子",
"128小狗",
"256滑板",
"272减速乌龟",
"288云雾",
"320净化饮料",
"384磁铁",
"512群体护盾",
"544超级导弹",
"560滑板",
"563羽毛",
"564砝码",
"头像框代码",
"2019年春节限定头像框1",
"情人节限定头像框2",
"角色达人头像框3",
"滑板达人头像框4",
"愚人节限定头像框5",
"毅力达人限定头像框6",
"劳动节限定头像框7",
"端午节限定头像框8",
"夏日清凉头像框9",
"钻石璀璨头像框10",
"七夕限定头像框11",
"中秋节限定头像框12",
"飞天头像框13",
"万圣节头像框14",
"万圣霓虹头像框15",
"秋日头像框代码16",
"6周年头像框代码17",
"冰雪节头像框代码18",
"2020春节限定头像框代码19",
"我爱饺子头像框代码20",
"我爱汤圆头像框代码21",
"去春游吧头像框代码22",
"中国加油头像框代码23",
"愚乐一下头像框代码24",
"纯真记忆头像框代码25",
"爱心传递头像框代码26",
"7周年头像框代码27",
"圣诞迎新头像框代码28",
"许愿神龙头像框代码29",
"2021年春节限定头像框代码30",
"春日芳华头像框代码31",
"愚人节恶搞头像框代码32",
"2021劳动节头像框代码33",
"牛津头像框代码34",
"2021端午头像框代码35",
"2021暑假头像框代码36",
"2021巴厘岛像框代码37",
"2021中秋头像框代码38",
"长安限定头像框代码39",
"一起来捣蛋头像框代码40",
"8周年限定头像框代码41",
"创作达人头像框代码42",
"大神头像框代码43",
"双旦快乐头像框代码44",
"2022春节头像框代码45",
"春意盎然头像框代码46",
"愚你同乐头像框代码47",
"劳动快乐头像框代码48",
"端午快乐头像框代码49",
"摩纳哥限定头像框代码50",
"暑假快乐头像框代码51",
"冰岛限定头像框代码52",
"武汉限定头像框代码53",
"社团S1赛季冠军头像框代码54",
"社团S1赛季亚军头像框代码55",
"社团S1赛季季军头像框代码56",
"社团S1赛季精英头像框代码57",
"社团S1赛季勇者头像框代码58",
"万圣节限定头像框59",
"9周年限定头像框60",
"深圳限定头像框61",
"社团S2赛季冠军头像框代码62",
"社团S2赛季亚军头像框代码63",
"社团S2赛季季军头像框代码64",
"社团S2赛季精英头像框代码65",
"社团S2赛季勇者头像框代码66",
"新城洛阳头像框67",
"奥特曼限定68",
"微博专属头像框69",
"Fanbook头像框70",
"哥本哈根专属头像框71",
"社团S3赛季冠军头像框代码72",
"社团S3赛季亚军头像框代码73",
"社团S3赛季季军头像框代码74",
"社团S3赛季精英头像框代码75",
"社团S3赛季勇者头像框代码76",
"跑神杯S3冠军社团头像框77",
"跑神杯S3亚军社团头像框78",
"跑神杯S3季军社团头像框79",
"跑神杯S3纪念头像框80",
"呼和浩特版本头像框81",
"劳动最光荣头像框82",
"大神作者头像框83",
"人气作者头像框84",
"新秀作者头像框85",
"欧布头像框86",
"大朋友头像框87",
"小朋友头像框88",
"电玩番薯仔头像框89",
"校园时光头像框90",
"233乐园头像框91",
"赛罗头像框92",
"2023年端午节头像框93",
"航海日记94",
"暑假来袭头像框95",
"社团S4赛季王者头像框96",
"社团S4赛季大师头像框97",
"社团S4赛季钻石头像框98",
"社团S4赛季白金头像框99",
"社团S4赛季黄金头像框100",
"泽塔头像框101",
"欢乐暑假头像框102",
"跑神番薯仔103",
"时光回溯头像框104",
"燃跑弗兰克头像框105",
"燃跑杰克头像框106",
"燃跑琪琪头像框107",
"植物大战僵尸头像框108",
"江户川柯南头像框109",
"怪盗基德头像框110",
"燃跑青青头像框111",
"超级番薯仔头像框112",
"圣殿之下头像框113",
"社团S5赛季王者头像框114",
"社团S5赛季大师头像框115",
"社团S5赛季钻石头像框116",
"社团S5赛季白金头像框117",
"社团S5赛季黄金头像框118",
"社团联赛S6赛季头像框119",
"苏州版本头像框120",
"秋辞诗赋头像框121",
"幽兰头像框122",
"社团联赛S7赛季头像框124",
"安室透头像框125",
"赤井秀一头像框126",
"灰原衰头像框127",
"楼兰版本头像框128",
"社团联赛S8赛季头像框129",
"忆往昔头像框130",
"社团联赛S9赛季头像框131",
"燃跑番薯仔头像框132",
"燃跑杰森头像框133",
"十周年头像框134",
"社团联赛S10赛季头像框135",
"工藤新一头像框136",
"毛利兰头像框137",
"小黑头像框138",
"社团联赛S11赛季头像框139",
"中国城限定头像框140",
"2024新春限定头像框141",
"2024元宵限定头像框142",
"龙族太子限定头像框143",
"食神头像框144",
"专属包限定头像框145",
"社团联赛S12赛季头像框146",
"社团联赛S13赛季头像框147",
"跑神杯S6纪念头像框148",
"进步之星头像框149",
"幻想城头像框150",
"雪国头像框151",
"上上签头像框152",
"社团联赛S14赛季头像框153",
"社团联赛S15赛季头像框154",
"跑神杯S6冠军头像框155",
"跑神杯S6亚军头像框156",
"跑神杯S6季军头像框157",
"灵山秀水限定头像框158",
"魔王头像框159",
"火舞头像框160",
"草长莺飞头像框161",
"社团联赛S16赛季头像框162",
"社团联赛S17赛季头像框163",
"猪猪侠头像框164",
"菲菲公主头像框165",
"圣剑机甲头像框166",
"社团联赛S18赛季头像框167",
"物品代码",
"0金币",
"1钥匙",
"2滑板",
"3得分倍增",
"4喷射起跑",
"5迷你宝箱",
"6宝箱",
"7超级宝箱",
"8收集物宝箱",
"9头像框",
"10人物",
"11杰克",
"12滑板",
"13未知",
"14背饰",
"15秘典宝箱",
"16高级秘典宝箱",
"17杰克的喷雾器",
"18抽奖券",
"19秘典收集物",
"20空白千万不要领取",
"21宝物",
"22宝物钥匙",
"23鲜花",
"24社团贡献",
"25荣耀之路奖杯",
"26跑酷币",
"27金钥匙",
}
local name = {} --- 功能函数表
local UI = gg.choice(list, nil, '查询')
if UI then
if UI == 1 then
local prompt = gg.prompt({ '请输入关键词进行搜索' }, { '' }, { 'text' })
if prompt then
local str = prompt[1] local t = {} local t1 = {}
for i = 2, #list - 1 do if string.find(list[i], str) then table.insert(t, list[i]) table.insert(t1, name[i - 1]) end end
if #t == 0 then
gg.toast('无搜索结果') else
local c = gg.choice(t, nil, '关键词:['.. str .. '],共搜索到' .. #t .. '条结果')
if c then end end end else end if UI == 2 then os.exit()end end FX1=0
end),
changan.button("兑换码-人物",
function()
local code = gg.prompt({'输入人物代码id'},{[1] = ""}, {[1] = 'number'})
if not code then return end
local addr = gg.getRangesList("libil2cpp.so")[2].start + 0x329623c
gg.setValues({
{address = addr, flags = 4, value = '~A8 LDR X0, [PC,#0x80000]'},
{address = addr + 0x4, flags = 4, value = '~A8 B [PC,#'..string.format("0x%X", 0x56B60)..']'},
{address = addr + 0x80000, flags = 4, value = tonumber ( code [ 1 ] ) },
})
gg.toast("开启成功")
string.toMusic("开启成功,去兑换码输入兑换")
end),
changan.button("兑换码-滑板",
function()
local code = gg.prompt({'输入滑板代码id'},{[1] = ""}, {[1] = 'number'})
if not code then return end
local addr = gg.getRangesList("libil2cpp.so")[2].start + 0x329623c
gg.setValues({
{address = addr, flags = 4, value = '~A8 LDR X0, [PC,#0x80000]'},
{address = addr + 0x4, flags = 4, value = '~A8 B [PC,#'..string.format("0x%X", 0x56EBC)..']'},
{address = addr + 0x80000, flags = 4, value = tonumber ( code [ 1 ] ) },
})
gg.toast("开启成功")
string.toMusic("开启成功,请去兑换码输入兑换")
end),
changan.button("奖励替换人物",
function()
SO_PT(SO['奖励替换'],4,"~A8 MOV W0, #10")
a = gg.prompt({"输入奖励替换的人物代码\n可改保安可以保存"},{""},{"text"})[1]
if not a then return end
SO_PT(SO['人物奖励'],4,"~A8 MOV W0, #"..a.."")
gg.toast("开启成功")
local json = json
title = "脚本:"
message = "奖励替换人物开启成功"
gg.htmlAlert(title, message, "确定")
end),
changan.button("奖励替换滑板",
function()
SO_PT(SO['奖励替换'],4,"~A8 MOV W0, #12")
a = gg.prompt({"输入奖励替换的滑板代码\n可以保存"},{""},{"text"})[1]
if not a then return end
SO_PT(SO['滑板奖励'],4,"~A8 MOV W0, #"..a.."")
gg.toast("开启成功")
local json = json
title = "脚本:"
message = "奖励替换滑板开启成功"
gg.htmlAlert(title, message, "确定")
end),
changan.button("奖励替换背饰",
function()
SO_PT(SO['奖励替换'],4,"~A8 MOV W0, #14")
a = gg.prompt({"输入奖励替换的背饰代码\n可以保存"},{""},{"text"})[1]
if not a then return end
SO_PT(SO['背饰奖励'],4,"~A8 MOV W0, #"..a.."")
gg.toast("开启成功")
local json = json
title = "脚本:"
message = "奖励替换背饰开启成功"
gg.htmlAlert(title, message, "确定")
end),
}),
},{--第四页
changan.button("查询榜名单",
function()
loadYunLua("http://vip.okig.top/down.php/1e4cd5dca6855a28a9cee39ef5ace3ae.lua")
打印道具赛()--调用
打印派对赛()--调用
打印分数赛()--调用
打印跑号(10086)--10086是跑号
end),
changan.box({"道具赛区",
changan.switch("去除断网弹窗",
function()
so=gg.getRangesList('libil2cpp.so')[2].start
L={
{address = so+SO['弹窗'], flags = 4, value = "~A8 MOV W0, #0x1"},
{address = so+SO['弹窗']+4, flags = 4, value = "~A8 RET"},
}
gg.setValues(L)
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.button("退出游戏",
function()
local gg=gg
local lib = gg.getRangesList()
do
do
for _FORV_4_ in ipairs(lib) do
if string.find(lib[_FORV_4_].name, "libil2cpp.so") and lib[_FORV_4_].state == "Xa" and lib[_FORV_4_].type == "r-xp" then
module = lib[_FORV_4_].start
break
end
end
end
end
hook = {StaticUpdater = SO['更新时刻']}
function HookCall(set)
local action = module + set.hook
local recover = gg.getValues({
{address = action, flags = 4}
})[1].value
local offset = function(a, b)
if b <= a then
return string.format("-0x%X", a - b)
else
return string.format("0x%X", b - a)
end
return 0
end
local original = {}
do
do
for _FORV_8_, _FORV_9_ in pairs(set.method) do
original[#original + 1] = {
address = action,
flags = 4,
value = "~A8 B [PC,#" .. offset(action, module + _FORV_9_) .. "]"
}
end
end
end
original[#original + 1] = {
address = action,
flags = 4,
value = recover
}
do
do
for _FORV_8_ in ipairs(original) do
gg.setValues({
original[_FORV_8_]
})
gg.sleep(math.random(28, 35))
end
end
end
return true
end
HookCall({
method = {SO['弹窗']}, -- RealPVPDisconnectPopup,Open
hook = hook.StaticUpdater
})
gg.toast("成功")
end),
changan.button("匹配人机",
function()
local gg=gg
function huitiao(a , b)
pyl = b - a
if string.find(pyl, "-") then
gsub = string.gsub(pyl, "-", "")
format = string.format("-0x%X", gsub)
else
format = string.format("0x%X", pyl)
end
format = '~A8 B [PC,#'..format..']'
return format
end
_ENV['获取玩家ID_1'] = 0x27997fc
_ENV['获取玩家ID_2'] = 0x2796f4c
_ENV['获取玩家ID_3'] = 0x2798ad4
_ENV['获取玩家ID_4'] = 0x26eea3c
il2cpp = gg.getRangesList('il2cpp.so')[2].start
Values = {
{address = il2cpp + _ENV['获取玩家ID_1'] , flags = 4 , value = huitiao(_ENV['获取玩家ID_1'],_ENV['获取玩家ID_4'])},
{address = il2cpp + _ENV['获取玩家ID_2'] , flags = 4 , value = '~A8 MOV X0, XZR'},
{address = il2cpp + _ENV['获取玩家ID_2'] + 4, flags = 4 , value = '~A8 RET'},
{address = il2cpp + _ENV['获取玩家ID_3'] , flags = 4 , value = '~A8 MOV X0, XZR'},
{address = il2cpp + _ENV['获取玩家ID_3'] + 4, flags = 4 , value = '~A8 RET'},
}
gg.setValues(Values)
_ENV['刷新函数_2'] = 0x19cf2f0
_ENV['游戏刷新函数'] = 0x3c0cee8
function HookCall(set)
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
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
HookCall{
method = {0x30e6158},
hook = _ENV['游戏刷新函数'],
}
gg.toast("调用成功")
gg.alert('调用成功!\n铂金以下有效果\n进游戏直接退出即可加星')
end),
changan.button("自改滑板速度",
function()
local gg=gg
local sz = gg.prompt({"请输入滑板速度"}, {"16384"}, {"text"})[1]
function SO_LU(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" } })
gg.setValues({ { address = SOMOD[2].start + functionADD + 8, flags = 16, value = sz } })
end
end
SO_LU(0x391dbbc,4,"~A8 LDR S0, [PC,#0x8]")
gg.toast("更改成功")
string.toMusic("滑板速度已更新")
end),
changan.button("自改滑板时长",
function()
local gg=gg
function setfloat(method, value, ufo)
local so = gg.getRangesList("il2cpp.so")[2].start
local mmap
if ufo == nil then
mmap = gg.allocatePage(gg.PROT_READ | gg.PROT_WRITE | gg.PROT_EXEC)
else
mmap = ufo
end
gg.setValues({
{ address = mmap, flags = 4, value = "~A8 LDR S0, [PC,#0xFC]" },
{ address = mmap + 0x4, flags = 4, value = "~A8 BR X30" },
{ address = mmap + 0xFC, flags = 16, value = value },
{ address = so + method, flags = 4, value = "~A8 LDR X0, [PC,#0x8]" },
{ address = so + method + 0x4, flags = 4, value = "~A8 BR X0" },
{ address = so + method + 0x8, flags = 32, value = mmap },
})
return mmap
end
local a = gg.prompt({"输入局内滑板持续时长\n推荐14250.5"},{"14250.5"},{"text"})
if not a then return end
setfloat(SO['滑板时长'], tonumber ( a [1] ) )
gg.toast("更改成功")
string.toMusic("滑板持续时间已更新")
end),
changan.switch("冲榜配置",
function()
local gg=gg
SO_PT(SO['跳跃'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['跳跃'] ,SO['获取能量2']).."]")
SO_PT(SO['下滑'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑'] ,SO['获取能量2']).."]")
SO_PT(SO['无视障碍'],4,"~A8 MOV W0, #1")
gg.toast("开启成功")
gg.alert('开启成功 不要搭配任何功能')
end),
changan.switch("作者配置",
function()
local gg=gg
SO_PT(SO['无视道具1'] ,4,"~A8 MOV W0, #1")
SO_PT(SO['无视道具2'] ,4,"~A8 MOV W0, #1")
SO_PT(SO['跳跃'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['跳跃'] ,SO['获取能量2']).."]")
SO_PT(SO['下滑'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑'] ,SO['获取能量2']).."]")
SO_PT(SO['Buff模式'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['Buff模式'] ,SO['获取能量1']).."]")
SO_PT(SO['无视障碍'],4,"~A8 MOV W0, #1")
SO_PT(SO['无视侧撞'] ,4,"~A8 MOV W0, #1")
SO_PT(SO['减速带'],4,"~A8 MOV W0, WZR")
gg.toast("开启成功")
string.toMusic('开启成功')
end),
changan.switch("半自动上分",
function()
local gg=gg
SO_FPT(SO['人物全局速度'],4,"1745")
SO_PT(SO['能量穿透'] ,4,"~A8 MOV W0, #1")
SO_PT(SO['无视障碍'],4,"~A8 MOV W0, #1")
SO_PT(SO['无视侧撞'] ,4,"~A8 MOV W0, #1")
SO_PT(SO['减速带'],4,"~A8 MOV W0, WZR")
SO_PT(SO['反弹道具1'] ,4,"~A8 MOV W0, #1")
SO_PT(SO['反弹道具2'] ,4,"~A8 MOV W0, WZR")
gg.toast("开启成功")
gg.alert('开启成功\n挂连点器即可')
end),
changan.switch("慢能量倍增",
function()
SO_PT(SO['跳跃'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['跳跃'] ,SO['获取能量1']).."]")
SO_PT(SO['下滑'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑'] ,SO['获取能量1']).."]")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("快能量倍增" ,
function()
SO_PT(SO['跳跃'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['跳跃'] ,SO['获取能量1']).."]")
SO_PT(SO['下滑1'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑1'] ,SO['获取能量1']).."]")
SO_PT(SO['下滑左'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑左'] ,SO['获取能量1']).."]")
SO_PT(SO['下滑中'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑中'] ,SO['获取能量1']).."]")
SO_PT(SO['下滑右'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑右'] ,SO['获取能量1']).."]")
gg.toast("开启成功")
string.toMusic('开启成功')
end),
changan.switch("新量倍增",
function()
SO_PT(SO['跳跃'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['跳跃'] ,SO['获取能量2']).."]")
SO_PT(SO['下滑'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑'] ,SO['获取能量2']).."]")
SO_PT(SO['Buff模式'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['Buff模式'] ,SO['获取能量1']).."]")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("Buff聚能",
function()
SO_PT(SO['Buff模式'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['Buff模式'] ,SO['获取能量1']).."]")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("图标聚能",
function()
SO_PT(SO['使用道具'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['使用道具'] ,SO['加能量']).."]")
SO_PT(SO['点击道具图标'],4,"~A8 B [PC,#"..SOGSPY_ST(SO['点击道具图标'],SO['点击道具图标获取能量回调']).."]")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("过滤十秒",
function()
SO_PT(SO['过滤十秒'],4, "~A8 MOV X0, WZR")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("概率敌人进不去",
function()
il2cpp = gg.getRangesList('il2cpp.so')[2].start
Values = {
{address = il2cpp + SO['获取玩家ID_1'] , flags = 4 , value = huitiao(SO['获取玩家ID_1'],SO['获取玩家ID_4'])},
{address = il2cpp + SO['获取玩家ID_2'] , flags = 4 , value = '~A8 MOV X0, XZR'},
{address = il2cpp + SO['获取玩家ID_2'] + 4, flags = 4 , value = '~A8 RET'},
{address = il2cpp + SO['获取玩家ID_3'] , flags = 4 , value = '~A8 MOV X0, XZR'},
{address = il2cpp + SO['获取玩家ID_3'] + 4, flags = 4 , value = '~A8 RET'},
{address = il2cpp + 0x1c5feac , flags = 4 , value = '~A8 MOV X0, XZR'},
{address = il2cpp + 0x1c5d5fc + 4, flags = 4 , value = '~A8 RET'},
{address = il2cpp + 0x1c5f184, flags = 4 , value = '~A8 MOV X0, XZR'},
{address = il2cpp + 0x1b9b0a4 + 4, flags = 4 , value = '~A8 RET'},
}
gg.setValues(Values)
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("定住人机",
function()
SO_PT(SO['PVP定人'],4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic('开启成功')
end,
function ()
SO_PT(SO['PVP定人'],4,"~A8 MOV W0, WZR")
gg.toast("关闭成功")
string.toMusic('定住人机关闭成功')
end),
changan.switch("人机匹配机制",
function()
SO_PT(SO['匹配机制3'],4,"~A8 B [PC,#"..SOGSPY_ST(SO['匹配机制3'],SO['竞赛模式1']).."]")
SO_PT(SO['匹配机制2'],4,"~A8 MOV W0, #1")
gg.toast("匹配机制开启成功")
function huitiao(a , b)
pyl = b - a
if string.find(pyl, "-") then
gsub = string.gsub(pyl, "-", "")
format = string.format("-0x%X", gsub)
else
format = string.format("0x%X", pyl)
end
format = '~A8 B [PC,#'..format..']'
return format
end
_ENV['获取玩家ID_1'] = 0x1c5feac
_ENV['获取玩家ID_2'] = 0x1c5d5fc
_ENV['获取玩家ID_3'] = 0x1c5f184
_ENV['获取玩家ID_4'] = 0x1b9b0a4
il2cpp = gg.getRangesList('il2cpp.so')[2].start
Values = {
{address = il2cpp + _ENV['获取玩家ID_1'] , flags = 4 , value = huitiao(_ENV['获取玩家ID_1'],_ENV['获取玩家ID_4'])},
{address = il2cpp + _ENV['获取玩家ID_2'] , flags = 4 , value = '~A8 MOV X0, XZR'},
{address = il2cpp + _ENV['获取玩家ID_2'] + 4, flags = 4 , value = '~A8 RET'},
{address = il2cpp + _ENV['获取玩家ID_3'] , flags = 4 , value = '~A8 MOV X0, XZR'},
{address = il2cpp + _ENV['获取玩家ID_3'] + 4, flags = 4 , value = '~A8 RET'},
}
gg.setValues(Values)
_ENV['刷新函数_2'] = 0x19cf2f0
_ENV['游戏刷新函数'] = 0x3c0cee8
function HookCall(set)
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
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
HookCall{
method = {0x30e6158},
hook = _ENV['游戏刷新函数'],
}
gg.toast("游戏函数刷新成功")
gg.alert('开启成功\n已调出创建观战房间按钮\n点击创建观战房间匹配人机\n局内直接退即可加星')
end),
changan.switch("ACC状态[无法开滑板]" ,
function()
local SO = {}
SO['改状态'] = 0x299554c
so=gg.getRangesList('libil2cpp.so')[2].start
py=SO['改状态']
bj={
{address = so+py+0xDC, flags = 4, value = "~A8 MOV W1, #0x2"},
}
gg.setValues(bj)
gg.toast("ACC状态开启成功")
string.toMusic("开启成功")
end),
changan.switch("开关加速",
function()
SO_FPT(SO['人物全局速度'],4,"0")
gg.toast("开启成功")
string.toMusic("人物速度修改为零,局内一分四十五秒手动关闭")
end,
function()
SO_FPT(SO['人物全局速度'],4,"99999")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("自动上分",
function()
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 = Get_Address(t_So, t_Offset, _bit)
return _A
end
function setvalue(address, flags, value)
local tt = {}
tt[1] = {}
tt[1].address = address
tt[1].flags = flags
tt[1].value = value
gg.setValues(tt)
end
setvalue(gg.getRangesList('libil2cpp.so')[2].start+SO['速度检测'] ,4,-698416192)
setvalue(gg.getRangesList('libil2cpp.so')[2].start+SO['速度检测2'] ,4,-698416192)
local t = {"libunity.so:bss", "Cb"}
local tt = {0xF83B8,0x698,0x668,0x688,0x218,0x3F4}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 9191, freeze = true}})
local t = {"libunity.so:bss", "Cb"}
local tt = {0xF83B8,0x698,0x668,0x688,0x218,0x3F4+0x10}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 9191, freeze = true}})
-- 下滑穿透
local mk=gg.getRangesList('libil2cpp.so')[2].start
local pyl=SO['自动速度']
local xg={
{address = mk+pyl, flags = 4, value = "~A8 RET"},
{address = mk+pyl+4, flags = 4, value = "~A8 LDR S17, [PC,#0x90000]"},
{address = mk+pyl+4+0x90000, flags = 16, value = 104.0},
{address = mk+pyl+8, flags = 4, value = "~A8 FCMP S16, S17"},
{address = mk+pyl+12, flags = 4, value = "~A8 B.GT [PC,#0xC]"},
{address = mk+pyl+12+0xC, flags = 4, value = "~A8 LDR S0, [PC,#0x90000]"},
{address = mk+pyl+12+0xC+4, flags = 4, value = "~A8 RET"},
{address = mk+pyl+12+0xC+0x90000, flags = 16, value = 50000.0},
{address = mk+pyl+16, flags = 4, value = "~A8 LDR S0, [PC,#0x90000]"},
{address = mk+pyl+16+0x90000, flags = 16, value = 0.0},
{address = mk+pyl+20, flags = 4, value = "~A8 RET"},
{address = mk+pyl, flags = 4, value = "~A8 LDR S16, [X0,#0xF4]"},
}
gg.setValues(xg)
gg.toast("开启成功")
gg.alert('开启成功\n局内下滑一次')
end),
changan.switch("无视道具",
function()
SO_PT(SO['无视道具1'] ,4,"~A8 MOV W0, #1")
SO_PT(SO['无视道具2'] ,4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic('开启成功')
end),
changan.switch("能量穿透" ,
function()
SO_PT(SO['能量穿透'] ,4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic('开启成功')
end),
changan.switch("无视障碍" ,
function()
SO_PT(SO['无视障碍'],4,"~A8 MOV W0, #1")
SO_PT(SO['无视侧撞'] ,4,"~A8 MOV W0, #1")
SO_PT(SO['减速带'],4,"~A8 MOV W0, WZR")
gg.toast("开启成功")
string.toMusic('开启成功')
end),
changan.switch("反弹道具",
function()
SO_PT(SO['反弹道具1'] ,4,"~A8 MOV W0, #1")
SO_PT(SO['反弹道具2'] ,4,"~A8 MOV W0, WZR")
gg.toast("开启成功")
string.toMusic("开启成功")
end,
function ()
SO_PT(SO['反弹道具2'] ,4,"~A8 MOV W0, WZR")
SO_PT(SO['反弹道具1'] ,4,"~A8 MOV W0, #1")
gg.toast("关闭成功")
string.toMusic('关闭成功')
end),
changan.switch("隐藏敌人",
function()
il2cpp = gg.getRangesList('il2cpp.so')[2].start
Values = {
{address = il2cpp + SO['隐藏敌人'] , flags = 4 , value = '~A8 MOV X0, XZR'},
{address = il2cpp + SO['隐藏敌人'] + 4, flags = 4 , value = '~A8 RET'},
}
gg.setValues(Values)
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("间隔满板",
function()
SO_PT(SO['无限能量'] ,4,"~A8 MOV W0, WZR")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("受击道具",
function()
SO_PT(SO['受到攻击'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['受到攻击'] ,SO['攻击拾取']).."]")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("无限滑板",
function()
function _lib(libs, state)
local lib = gg.getRangesList(libs)
for seed in ipairs(lib) do
if lib[seed].state == state then
return lib[seed].start
end
end
end
function zhix()
local il2cpp_start = _lib('il2cpp', 'Xa')
local targetOffset = il2cpp_start +SO['点击']
local getClass = il2cpp_start +SO['结尾']
local destinationOffset = il2cpp_start +SO['状态']
local ReleaseEnergyOffset = il2cpp_start +SO['释放能量']
local CollectPropOffset = il2cpp_start +SO['攻击拾取']
local register = {
[0] = {0xB8, 32, 0};
[1] = {0x208, 4, 5};
[2] = {0x20C, 16, 80};
[3] = {0x210, 4, 0};
[4] = {0x214, 4, 1};
[5] = {0x218, 32, destinationOffset};
}
local mmap = gg.allocatePage(1 | 2 | 4) + 8
local table_correct = {
{
address = mmap + ( #register + 1) * 4,
flags = 4,
value = '~A8 BR X5'
},
{address = ReleaseEnergyOffset, flags = 4, value = '~A8 MOV W0, #1'},
{address = ReleaseEnergyOffset + 4, flags = 4, value = '~A8 RET'},
{address = CollectPropOffset, flags = 4, value = '~A8 RET'},
{address = targetOffset, flags = 4, value = '~A8 LDR X1, [PC,#0x8]'},
{address = targetOffset + 4, flags = 4, value = '~A8 BR X1'},
{address = targetOffset + 8, flags = 32, value = mmap},
{address = getClass, flags = 4, value = '~A8 LDR X2, [PC,#0x8]'},
{address = getClass + 4, flags = 4, value = '~A8 BR X2'},
{
address = getClass + 8,
flags = 32,
value = (mmap - 8)
},
{
address = (mmap - 8),
flags = 4,
value = '~A8 STR X0, [X2,#0xC0]'
},
{
address = (mmap - 4),
flags = 4,
value = '~A8 RET'
},
}
for search = 0,#register do
table_correct[ #table_correct + 1], table_correct[ #table_correct + 2] = {
address = mmap + search * 4,
flags = 4,
value = '~A8 LDR X' .. search .. ', [PC,#' .. string.format('0x%X', register[search][1]) .. ']'
}, {
address = mmap + (search * 4) + register[search][1],
flags = register[search][2],
value = register[search][3]
}
end
return gg.setValues(table_correct)
end
zhix()
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("开局道具",
function()
local gg=gg
a = gg.prompt({'道具代码:\n1=恶魔 2=乌龟 3=颜料 4=能量10%[1;4]'},{[1]=2},{[1]='number'})[1]
if not a then return end
SO_PT(SO['开局道具'],4,"~A8 MOV W0, #"..a.."")
gg.toast("更改成功")
string.toMusic("修改成功")
end),
}),
changan.box({"娱乐区",
changan.switch("滑板瞬移",
function()
SO_PT(SO['滑板瞬移'],4,"~A8 MOV W0, #1")
SO_PT(SO['滑板技能'],4,"~A8 MOV W0, #1")
SO_PT(SO['滑板技能勾选'],4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic('开启成功')
end,
function()
SO_PT(SO['滑板瞬移'],"~A8 MOV W0, WZR")
gg.toast("关闭成功")
string.toMusic('关闭成功')
end),
changan.switch("人物瞬移",
function()
SO_PT(SO['人物瞬移'],4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic('开启成功')
end,
function()
SO_PT(SO['人物瞬移'],4,"~A8 MOV W0, WZR")
gg.toast("关闭成功")
string.toMusic('关闭成功')
end),
changan.switch("人物无敌",
function()
SO_PT(SO['人物无敌'],4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic('开启成功')
end),
changan.switch("无限跳跃",
function()
SO_PT(SO['无限跳跃'],4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic('开启成功')
end,
function()
SO_PT(SO['无限跳跃'],4,"~A8 MOV W0, WZR")
gg.toast("关闭成功")
string.toMusic("关闭成功")
end),
changan.switch("滑板滑翔",
function()
SO_PT(SO['滑板滑翔'],4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic('开启成功')
end,
function()
SO_PT(SO['滑板滑翔'],4,"~A8 MOV W0, #1")
gg.toast("关闭成功")
string.toMusic('关闭成功')
end),
changan.switch("滑板跳高",
function()
SO_PT(SO['滑板跳高'],4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic('开启成功')
end,
function()
SO_PT(SO['滑板跳高'],4,"~A8 MOV W0, #1")
gg.toast("关闭成功")
string.toMusic('关闭成功')
end),
changan.switch("滑板消失" ,
function()
SO_PT(SO['滑板消失'],4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic("开启成功")
end,
function()
SO_PT(SO['滑板消失'],4,"~A8 MOV W0, WZR")
gg.toast("关闭成功")
string.toMusic("关闭成功")
end),
changan.switch("下滑穿透",
function()
function getMmap() --获取游戏自己分配的内存页
local AddrList = {}
local RangesList = gg.getRangesList()
for _, __ in pairs(RangesList) do
if __["state"] == "A" and __["type"] == "rwxp" then
for ___=0, 4096, 8 do
table.insert(AddrList, {address = __["start"]+___, flags = 32, value = 0})
end
gg.setValues(AddrList)
return __["start"]
end
end
end
function getMmap_1()
il2cpp = gg.getRangesList('il2cpp.so')
for k , v in ipairs (il2cpp) do
if v.state == 'Xa' then
il2cpp = v.start
break
end
end
TargetOffset_ByMmap = il2cpp + _ENV['刷新函数_2']
mmap = getMmap()
local hook = {
{address=TargetOffset_ByMmap,value="~A8 LDR X16, [PC,#0x8]",flags=4},
{address=TargetOffset_ByMmap+0x4,value="~A8 BR X16",flags=4},
{address=TargetOffset_ByMmap+0x8, value=mmap,flags=32},
{value="~A8 LDR X16, [PC,#0x54]",flags=4,address=mmap},
{value="~A8 STP X29, X30, [SP,#-0x20]!",flags=4,address=mmap+0x4},
{value="~A8 MOV X0, XZR",flags=4,address=mmap+0x8},
{value="~A8 MOV X1, #4096",flags=4,address=mmap+0xC},
{value="~A8 MOV X2, #7",flags=4,address=mmap+0x10},
{value="~A8 MOV X3, #0x22",flags=4,address=mmap+0x14},
{value="~A8 MOV X4, XZR",flags=4,address=mmap+0x18},
{value="~A8 MOV X5, XZR",flags=4,address=mmap+0x1C},
{value="~A8 MOV X8, #222",flags=4,address=mmap+0x20},
{value="~A8 B [PC,#0x200]",flags=4,address=mmap+0x24},
{value=mmap+0x5C,flags=32,address=mmap+0x54},
{address = mmap + 0x224 , flags = 4 , value = '~A8 LDR X11, [X16,#0x100]'},
{address = mmap + 0x224 + 4, flags = 4 , value = '~A8 ADD X11, X11, #1'},
{address = mmap + 0x224 + 8, flags = 4 , value = '~A8 STR X11, [X16,#0x100]'},
{address = mmap + 0x224 + 12, flags = 4 , value = '~A8 CMP X11, #1'},
{address = mmap + 0x224 + 16, flags = 4 , value = '~A8 B.EQ [PC,#0x8]'},
{address = mmap + 0x224 + 20, flags = 4 , value = '~A8 RET'},
{address = mmap + 0x224 + 24, flags = 4 , value = '~A8 SVC #0'},
{address = mmap + 0x224 + 28, flags = 4 , value = '~A8 STR X0, [X16]'},
{address = mmap + 0x224 + 32, flags = 4 , value = '~A8 LDP X29, X30, [SP], #0x20'},
{address = mmap + 0x224 + 36, flags = 4 , value = '~A8 RET'},
}
gg.setValues(hook)
getMmap_Addr = mmap + 0x5C
return getMmap_Addr
end
function GetMmap()
mmap = gg.allocatePage(gg.PROT_READ | gg.PROT_WRITE | gg.PROT_EXEC)
if mmap ~= '无法分配内存页。错误 0' then
return mmap
else
if not getMmap_Addr then
gg.processPause()
getMmap_Addr = getMmap_1()
gg.processResume()
end
gg.setValues({{address = getMmap_Addr + 0x100 , flags = 4 , value = 0}})
while true do
Value_Addr = gg.getValues({{address=getMmap_Addr,flags=32}})[1].value
gg.sleep(20)
if Value_Addr ~= 0 then
return Value_Addr
end
end
end
end
function getPointer(Address)
return gg.getValues({{address=Address,flags=32}})[1].value
end
function getString(a)
local utf, u16 = {}, {}
for i = 1, 64, 1 do
utf[i] = {address = a + i * 2, flags = 2}
end
utf = gg.getValues(utf)
for k, v in ipairs(utf) do
if v.value == 0 then
break
end
u16[k] = v.value & 0xFFFF
end
return utf8.char(table.unpack(u16))
end
function zl_table(a, b, c)
return not a[c] and b or a[c]
end
_ENV['获取Character实例'] = 0x3506d70
_ENV['游戏刷新函数'] = 0x3c0cee8
il2cpp = gg.getRangesList('il2cpp.so')[2].start
TargetOffset = il2cpp + _ENV['游戏刷新函数']
if not Character_1 then
mmap = GetMmap()
SetValues_1 = {
{address = TargetOffset , flags = 4 , value = '~A8 LDR X16, [PC,#0x8]'},
{address = TargetOffset + 4, flags = 4 , value = '~A8 BR X16'},
{address = TargetOffset + 8, flags = 32 , value = mmap},
{address = mmap , flags = 4 , value = '~A8 STP X29, X30, [SP,#-0x20]!'},
{address = mmap + 4, flags = 4 , value = '~A8 MOV X29, SP'},
{address = mmap + 8, flags = 4 , value = '~A8 LDR X17, [X16,#0x200]'},
{address = mmap + 12, flags = 4 , value = '~A8 BLR X17'},
{address = mmap + 16, flags = 4 , value = '~A8 STR X0, [X16,#0x210]'},
{address = mmap + 20, flags = 4 , value = '~A8 LDR X16, [PC,#0x20]'},
{address = mmap + 24, flags = 4 , value = '~A8 LDP X29, X30, [SP], #0x20'},
{address = mmap + 28, flags = 4 , value = '~A8 RET'},
{address = mmap + 32, flags = 32 , value = mmap},
{address = mmap + 0x200, flags = 32 , value = il2cpp + _ENV['获取Character实例']},
}
gg.setValues(SetValues_1)
while true do
gg.sleep(20)
Value = gg.getValues({{address = mmap + 0x210 , flags = 32}})[1].value
if Value ~= 0 then
Character_1 = Value
break
end
end
end
mmap = GetMmap()
gg.setValues({
{address = TargetOffset , flags = 4 , value = '~A8 LDR X16, [PC,#0x8]'},
{address = TargetOffset + 4, flags = 4 , value = '~A8 BR X16'},
{address = TargetOffset + 8, flags = 32 , value = mmap},
{address = mmap , flags = 4 , value = '~A8 LDR X0, [X16,#0x200]'},
{address = mmap + 4, flags = 4 , value = '~A8 LDR W1, [X16,#0x210]'},
{address = mmap + 8, flags = 4 , value = '~A8 STR W1, [X0,#0x3F4]'},
{address = mmap + 12, flags = 4 , value = '~A8 STR W1, [X0,#0x404]'},
{address = mmap + 16, flags = 4 , value = '~A8 RET'},
{address = mmap + 0x200, flags = 32 , value = Character_1},
{address = mmap + 0x210, flags = 16 , value = 9999},
})
gg.toast("开启成功")
string.toMusic('开启成功')
end),
}),
changan.box({"调出观战区",
changan.switch("调出观战",
function()
SO_PT(SO['观战资格'],4,"~A8 MOV W0, #1","~A8 RET")
SO_PT(SO['对抗赛好友匹配'],4,"~A8 MOV W0, #1","~A8 RET")
gg.toast("调用成功")
string.toMusic('开启成功')
end,
function()
SO_PT(SO['观战资格'],4,"~A8 RET")
gg.toast("关闭成功")
string.toMusic('关闭成功')
end),
changan.switch("房间踢人",
function()
SO_PT(SO['好友'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['好友'] ,SO['踢人']).."]")
gg.toast("更改成功")
string.toMusic('开启成功')
end),
changan.switch("房间防踢",
function()
SO_PT(SO['房间防踢1'],4,"~A8 MOV W0, WZR")
SO_PT(SO['房间防踢'],4,"~A8 MOV W0, WZR")
gg.toast("更改成功")
string.toMusic('开启成功')
end),
}),
changan.box({"派对赛区",
changan.switch("防止卡屏",
function()
SO_PT(SO['防止卡屏1'],4,"~A8 MOV W0, #1","~A8 RET")
SO_PT(SO['防止卡屏2'],4,"~A8 MOV W0, WZR","~A8 RET")
gg.toast("更改成功")
string.toMusic('开启成功')
end),
changan.switch("过结算检测",
function()
SO_PT(SO['新时刻'],4,"~A8 MOV W0, #1")
SO_PT(SO['作弊时间'],4,"~A8 MOV W0, WZR")
gg.toast("更改成功")
string.toMusic('开启成功')
end),
changan.switch("结算得分",
function()
local nc={}
local so=gg.getRangesList("il2cpp.so")
for i=1,#so do nc[i]=so[i].state
if nc[i]=="Xa" then nc=i break end end
local so=so[nc].start
local py=SO['结束游戏']
gg.setValues({{address=so+py,flags=4,value="~A8 MOV W0, #1"}})
gg.setValues({{address=so+py+4,flags=4,value="~A8 RET"}})
gg.toast("开启成功")
string.toMusic("结算成功")
end,
function()
SO_PT(SO['结束游戏'],"~A8 MOV W0, WZR","~A8 RET")
gg.toast("关闭成功")
string.toMusic("关闭成功")
end),
changan.switch("一分钟结算",
function()
SO_PT(SO['结算作弊状态'],4,"~A8 MOV W0, WZR")--结算作弊状态
SO_PT(SO['结算异常'],4,"~A8 MOV W0, #1")--结算异常
SO_PT(SO['结算恢复'],4,"~A8 MOV W0, WZR")--结算恢复
SO_PT(SO['屏蔽人机'],4,"~A8 MOV W0, #1")--屏蔽人机
SO_PT(SO['进入结算屏蔽'],4,"~A8 MOV W0, #1")--进入结算屏蔽
gg.toast("开启成功")
string.toMusic('开启成功')
end),
changan.switch("发表情退出",
function()
SO_PT(SO['发表情退出'],4,"~A8 B [PC,#"..SOGSPY_ST(SO['发表情退出'],SO['发表情退出回调']).."]")
SO_PT(SO['终点自动退出'],4,"~A8 B [PC,#"..SOGSPY_ST(SO['终点自动退出'],SO['终点自动退出回调']).."]")
gg.toast("开启成功")
string.toMusic('开启成功')
end),
changan.switch("表情退出",
function()
SO_PT(SO['表情退出'],4,"~A8 B [PC,#-0x67BF4]")
gg.toast("开启成功")
string.toMusic('开启成功')
end),
changan.switch("自动上分",
function()
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 = Get_Address(t_So, t_Offset, _bit)
return _A
end
function setvalue(address, flags, value)
local tt = {}
tt[1] = {}
tt[1].address = address
tt[1].flags = flags
tt[1].value = value
gg.setValues(tt)
end
setvalue(gg.getRangesList('libil2cpp.so')[2].start+SO['速度检测'] ,4,-698416192)
setvalue(gg.getRangesList('libil2cpp.so')[2].start+SO['速度检测2'] ,4,-698416192)
local t = {"libunity.so:bss", "Cb"}
local tt = {0xF83B8,0x698,0x668,0x688,0x218,0x3F4}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 9191, freeze = true}})
local t = {"libunity.so:bss", "Cb"}
local tt = {0xF83B8,0x698,0x668,0x688,0x218,0x3F4+0x10}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 9191, freeze = true}})
-- 下滑穿透
local mk=gg.getRangesList('libil2cpp.so')[2].start
local pyl=SO['自动速度']
local xg={
{address = mk+pyl, flags = 4, value = "~A8 RET"},
{address = mk+pyl+4, flags = 4, value = "~A8 LDR S17, [PC,#0x90000]"},
{address = mk+pyl+4+0x90000, flags = 16, value = 136.0},
{address = mk+pyl+8, flags = 4, value = "~A8 FCMP S16, S17"},
{address = mk+pyl+12, flags = 4, value = "~A8 B.GT [PC,#0xC]"},
{address = mk+pyl+12+0xC, flags = 4, value = "~A8 LDR S0, [PC,#0x90000]"},
{address = mk+pyl+12+0xC+4, flags = 4, value = "~A8 RET"},
{address = mk+pyl+12+0xC+0x90000, flags = 16, value = 11100.0},
{address = mk+pyl+16, flags = 4, value = "~A8 LDR S0, [PC,#0x90000]"},
{address = mk+pyl+16+0x90000, flags = 16, value = 0.0},
{address = mk+pyl+20, flags = 4, value = "~A8 RET"},
{address = mk+pyl, flags = 4, value = "~A8 LDR S16, [X0,#0xF4]"},
}
gg.setValues(xg)
gg.toast("开启成功")
gg.alert('开启成功\n局内下滑一次')
end),
changan.switch("受击道具",
function()
SO_PT(SO['受到攻击'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['受到攻击'] ,SO['攻击拾取']).."]")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("无限滑板",
function()
function _lib(libs, state)
local lib = gg.getRangesList(libs)
for seed in ipairs(lib) do
if lib[seed].state == state then
return lib[seed].start
end
end
end
function zhix()
local il2cpp_start = _lib('il2cpp', 'Xa')
local targetOffset = il2cpp_start +SO['点击']
local getClass = il2cpp_start +SO['结尾']
local destinationOffset = il2cpp_start +SO['状态']
local ReleaseEnergyOffset = il2cpp_start +SO['释放能量']
local CollectPropOffset = il2cpp_start +SO['攻击拾取']
local register = {
[0] = {0xB8, 32, 0};
[1] = {0x208, 4, 5};
[2] = {0x20C, 16, 80};
[3] = {0x210, 4, 0};
[4] = {0x214, 4, 1};
[5] = {0x218, 32, destinationOffset};
}
local mmap = gg.allocatePage(1 | 2 | 4) + 8
local table_correct = {
{
address = mmap + ( #register + 1) * 4,
flags = 4,
value = '~A8 BR X5'
},
{address = ReleaseEnergyOffset, flags = 4, value = '~A8 MOV W0, #1'},
{address = ReleaseEnergyOffset + 4, flags = 4, value = '~A8 RET'},
{address = CollectPropOffset, flags = 4, value = '~A8 RET'},
{address = targetOffset, flags = 4, value = '~A8 LDR X1, [PC,#0x8]'},
{address = targetOffset + 4, flags = 4, value = '~A8 BR X1'},
{address = targetOffset + 8, flags = 32, value = mmap},
{address = getClass, flags = 4, value = '~A8 LDR X2, [PC,#0x8]'},
{address = getClass + 4, flags = 4, value = '~A8 BR X2'},
{
address = getClass + 8,
flags = 32,
value = (mmap - 8)
},
{
address = (mmap - 8),
flags = 4,
value = '~A8 STR X0, [X2,#0xC0]'
},
{
address = (mmap - 4),
flags = 4,
value = '~A8 RET'
},
}
for search = 0,#register do
table_correct[ #table_correct + 1], table_correct[ #table_correct + 2] = {
address = mmap + search * 4,
flags = 4,
value = '~A8 LDR X' .. search .. ', [PC,#' .. string.format('0x%X', register[search][1]) .. ']'
}, {
address = mmap + (search * 4) + register[search][1],
flags = register[search][2],
value = register[search][3]
}
end
return gg.setValues(table_correct)
end
zhix()
string.toMusic("开启成功")
gg.toast("开启成功")
end),
changan.switch("无视道具",
function()
SO_PT(SO['无视道具1'] ,4,"~A8 MOV W0, #1")
SO_PT(SO['无视道具2'] ,4,"~A8 MOV W0, #1")
gg.toast("开启成功")
string.toMusic('开启成功')
end),
changan.switch("无视障碍" ,
function()
SO_PT(SO['无视障碍'],4,"~A8 MOV W0, #1")
SO_PT(SO['无视侧撞'] ,4,"~A8 MOV W0, #1")
SO_PT(SO['减速带'],4,"~A8 MOV W0, WZR")
gg.toast("开启成功")
string.toMusic('开启成功')
end),
changan.switch("反弹道具",
function()
SO_PT(SO['反弹道具1'] ,4,"~A8 MOV W0, #1")
SO_PT(SO['反弹道具2'] ,4,"~A8 MOV W0, WZR")
gg.toast("开启成功")
string.toMusic("开启成功")
end,
function ()
SO_PT(SO['反弹道具2'] ,4,"~A8 MOV W0, WZR")
SO_PT(SO['反弹道具1'] ,4,"~A8 MOV W0, #1")
gg.toast("关闭成功")
string.toMusic('反弹道具关闭成功')
end),
changan.text("能量倍增自定义区域\n开启后每执行一次此操作则获取一次能量","0xffE20C30","13dp"),
changan.check({
{"跳跃",
function()
SO_PT({SO['跳跃']},4,"~A8 B [PC,#"..SOGSPY_ST(SO['跳跃'],SO['获取能量1']).."]")
end,
function()
SO_PT({SO['跳跃']},4,"~A8 MOV W0, #1")
end},
{"下滑",
function()
SO_PT({SO['下滑']},4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑'],SO['获取能量1']).."]")
SO_PT({SO['下滑1']},4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑1'],SO['获取能量1']).."]")
end,
function()
SO_PT({SO['下滑']},4,"~A8 MOV W0, #1")
SO_PT({SO['下滑1']},4,"~A8 MOV W0, #1")
end},
{"下滑左",
function()
SO_PT({SO['下滑左']},4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑左'],SO['获取能量1']).."]")
end,
function()
SO_PT({SO['下滑左']},4,"~A8 MOV W0, #1")
end},
{"下滑中",
function()
SO_PT({SO['下滑中']},4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑中'],SO['获取能量1']).."]")
end,
function()
SO_PT({SO['下滑中']},4,"~A8 MOV W0, #1")
end},
{"下滑右",
function()
SO_PT({SO['下滑右']},4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑右'],SO['获取能量1']).."]")
end,
function()
SO_PT({SO['下滑右']},4,"~A8 MOV W0, #1")
end},
{"Buff增益",
function()
SO_PT({SO['Buff模式']},4,"~A8 B [PC,#"..SOGSPY_ST(SO['Buff模式'],SO['获取能量1']).."]")
end,
function()
SO_PT({SO['Buff模式']},4,"~A8 MOV W0, #1")
end},
}),
changan.switch("快速收集能量",
function()
gg.alert("使用说明:\n踩加减速带,撞墙,被攻击,跳跃翻滚后/拾取能量.踩加减速带/增加能量\n最好隔一秒再开下一次的滑板否则容易被踢出\n如果因多次行为被踢出,会封号。例如开滑板太快被踢出,包括所有提示行为被踢出")
SO_PT({SO['Buff模式']},4,"~A8 B [PC,#"..SOGSPY_ST(SO['Buff模式'],SO['获取能量1']).."]")
SO_PT({SO['跳跃']},4,"~A8 B [PC,#"..SOGSPY_ST(SO['跳跃'],SO['获取能量1']).."]")
SO_PT({SO['下滑1']},4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑1'],SO['获取能量1']).."]")
SO_PT({SO['下滑左']},4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑左'],SO['获取能量1']).."]")
SO_PT({SO['下滑中']},4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑中'],SO['获取能量1']).."]")
SO_PT({SO['下滑右']},4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑右'],SO['获取能量1']).."]")
gg.toast("快速收集能量开启成功")
end,
function()
SO_PT({SO['Buff模式']},4,"~A8 MOV W0, #1")
SO_PT({SO['跳跃']},4,"~A8 MOV W0, #1")
SO_PT({SO['下滑1']},4,"~A8 MOV W0, #1")
SO_PT({SO['下滑左']},4,"~A8 MOV W0, #1")
SO_PT({SO['下滑中']},4,"~A8 MOV W0, #1")
SO_PT({SO['下滑右']},4,"~A8 MOV W0, #1")
gg.toast("快速收集能量关闭成功")
end),
}),
changan.box({"分数赛区",
changan.text("分数赛"),
changan.switch("屏蔽分数检测",
function()
BJ_SO(SO['分数赛过检'],4,"~A8 MOV W0, #1")
gg.toast("开启成功")
end),
changan.switch("局内分数",
function()
a = gg.prompt({"输入要修改的分数"},{""},{"text"})[1]
a= tonumber(a)
BJ_D(SO['得到分数'],4,a,"~A8 RET")
end),
changan.switch("修改倍数[30/107]",
function()
BJ_SO(SO['得分倍增'],4,"~A8 MOV W0, #107")
gg.toast("倍数修改107级成功")
end,
function()
BJ_SO(SO['得分倍增'],4,"~A8 MOV W0, #30")
gg.toast("倍数修改30级成功")
end),
changan.switch("修改速度",
function()
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
returnValue{
SO['人物速度'],
0x3BC,
417.5,
gg.allocatePage(gg.PROT_READ | gg.PROT_WRITE | gg.PROT_EXEC),
}
gg.alert("开启成功")
string.toMusic('速度修改成功')
end),
changan.switch("下滑穿透",
function()
gg.alert("开启稍慢")
search(4.5,16)
py1(5.5,16,16)
xg1(9191,16,0,true)
xg1(9192,16,16,true)
gg.alert("开启成功")
end),
changan.switch("修改倍数[30/107]",
function()
SO_PT(SO['得分倍增'] ,4,"~A8 MOV W0, #107","~A8 RET")
gg.toast("倍数修改107级成功")
end,
function()
SO_PT(SO['得分倍增'] ,4,"~A8 MOV W0, #30","~A8 RET")
gg.toast("倍数修改30级成功")
gg.alert("分数不能跑太多不然会归零")
end),
changan.switch("无尽装死",
function()
SO_PT(SO['无尽装死'],"~A8 MOV W0, #1")
end),
changan.switch("无限跳跃",
function()
SO_PT(SO['无限跳跃'],"~A8 MOV W0, #1")
end),
changan.switch("滑板飞翔",
function()
SO_PT(SO['滑板滑翔'],"~A8 MOV W0, #1")
end,
function()
SO_PT(SO['滑板滑翔'],"~A8 MOV W0, #1")
end),
changan.switch("滑板跳高",
function()
SO_PT(SO['滑板跳高'],"~A8 MOV W0, #1")
end,
function()
SO_PT(SO['滑板跳高'],"~A8 MOV W0, WZR")
end),
changan.switch("滑板瞬移",
function()
SO_PT(SO['滑板瞬移'],"~A8 MOV W0, #1")
end,
function()
SO_PT(SO['滑板瞬移'],"~A8 MOV W0, WZR")
end),
changan.switch("撞墙撑杆",
function()
SO_PT(SO['无尽死亡'],"~A B -0x0000062C")
end),
changan.switch('金币消失',
function()
SO_PT(SO['金币消失'],'~A8 MOV W0, WZR')
end),
changan.switch('平板视角',function()
search(1.5,16,32)
py1(33,16,0xC)
py1(20,16,0x18)
xg1(45,16,0x1C,true)
gg.alert('平板视角开启成功')
end,
function()
search(1.5,16,32)
py1(33,16,0xC)
py1(20,16,0x18)
xg1(40,16,0x1C,true)
end),
}),
changan.box({"超能无尽区",
changan.switch("修改差额分数",
function()
a = gg.prompt({"输入要修改的分数"},{""},{"text"})[1]
a= tonumber(a)
SO_Deposit(SO["差额分数"],4,a,"~A8 RET")
gg.alert("开启成功")
end),
changan.switch("无限滑板",
function()
SO_PT(SO["无限滑板"],4,"~A8 MOV W0, #1")
gg.alert("开启成功")
end),
}),
},{---第三页
changan.box({'音乐区域',
changan.button("暂停音乐",
function()
gg.playMusic("6")
end),
changan.button("搜索音乐",
function()
menu ={}
name ={}
id = 0
play = false
song = ""
_G_ = {
function()
local searchMusic = gg.prompt({
"歌曲•歌手",
"列表•限制",
},{"","10"},{
"text",
"text",
})
if not searchMusic then gg.setVisible(false) Main() elseif
searchMusic[1] == "" then gg.alert("请输入歌曲/歌手!") _G_[1]()
else
local results = gg.makeRequest("http://music.163.com/api/search/get?s="..searchMusic[1].."&type=1&offset=0&total=true&limit="..searchMusic[2])
if results.code == 200 then
n=1
for v,k in results.content:gmatch('"id":(.-),"name":"(.-)"') do
if n%4 == 1 then
menu[n/4+1] = v..";"..k
end
if n%4 == 2 then
menu[n/4+1] = menu[n/4+1]..";"..k
end
n=n+1
end
_G_[2]()
else
local s = gg.alert("请求异常,请检查网络……","返回","退出")
if not s then gg.setVisible(false) Main() end
if s == 1 then os.exit() end
if s == 2 then _G_[1]() end
end
end
end,
function()
if #menu == 0 then gg.alert("没有搜索记录") Main() else
for n=1,#menu do
name[n] = menu[n]:gsub("[0-9]+;",""):gsub(";","\n歌手:")
end
local mu = gg.choice(name,0,"歌单")
if not mu then _G_[1]() else
song = name[mu]
local sn=gg.choice({"播放","查看歌词"},nil,"歌曲:"..name[mu])
if not sn then _G_[1]() end
if sn == 1 then
id = menu[mu]:match("(.-);")
gg.toast("正在播放音乐:"..name[mu],true)
gg.playMusic("http://music.163.com/song/media/outer/url?id="..id..".mp3")
play = true
end
if sn == 2 then id = menu[mu]:match("(.-);") song = name[mu] _G_[3]() end
end
end
end,
function()
if id == 0 then gg.alert("未有播放记录") Main() else
local results = gg.makeRequest("http://music.163.com/api/song/media?id="..id).content
rs = results:match('"lyric":"(.-)","code'):gsub("\\n","\n"):gsub("[[!-z]+]","")
gg.alert("\n《"..song:gsub("\n","》\n").."\n\n"..rs)
gg.setVisible(false)
end
end,
function()
if play then
play = false
gg.toast("正在停止播放...")
for i=1,100 do
gg.playMusic("stop")
gg.playMusic("stop")
gg.playMusic("stop")
gg.playMusic("stop")
gg.playMusic("stop")
gg.playMusic("stop")
end
gg.toast("播放已停止")
else
gg.toast("无正在播放的音乐")
end
end,
function()
gg.setVisible(false)
if play then _G_[4]() end
LSP()
end
}
local emo = gg.choice({
"搜索歌曲",
"搜索列表",
"显示歌词",
"暂停播放",
},nil,"音乐功能")
if not emo then gg.setVisible(false) end
if emo then
_G_[emo]()
end
end),
changan.button('随机热歌',
function()
A="https://api.uomg.com/api/rand.music?sort=热歌榜&format=json"
Obtain=gg.makeRequest(A).content
muchen=Obtain:match('url":"(.-)","picurl')
name=Obtain:match('name":"(.-)","')
zz=Obtain:match('artistsname":"(.-)"}')
gg.toast('正在播放『'..name..'』')
gg.playMusic(muchen)
gg.alert('歌名:『'..name..'』\n作者:『'..zz..'』')
end),
changan.button('随机旋律',function()
--随机音乐
function sjyy()
gg.toast('正在搜索音乐,请耐心等待')
awnb = 1
random = math.random(1,250)
xlgd = math.random(1,3)
if xlgd == 1 then--歌单1
a = gg.makeRequest('http://music.163.com/api/playlist/detail?id=7686573572').content
end
if xlgd == 2 then--歌单2
a = gg.makeRequest('http://music.163.com/api/playlist/detail?id=2611030296').content
end
if xlgd == 3 then--歌单3
a = gg.makeRequest('http://music.163.com/api/playlist/detail?id=7144194514').content
end
c = a:match ('"code":(.-),')
if c == '-447' then sjyy() return end
for i = 1 , math.huge do
for v , k in a:gmatch('{"name":"(.-)","id":(.-),') do
awnb = awnb + 1
if awnb == random then
if v == '' then sjyy() return end
gg.playMusic('stop')
mz = gg.makeRequest("http://music.163.com/api/search/get?s="..v.."&type=1&offset=0&total=true&limit=1").content
songid = mz:match ('"id":(.-),')
gg.toast('正在播放『'..v..'』') gg.playMusic("http://music.163.com/song/media/outer/url?id="..songid..".mp3") gg.alert('正在播放『'..v..'』') os.exit() end
end
end
end
sjyy()
end),
changan.radio({'推荐音乐',
{"moonlight",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1402622369.mp3")
end},
{"户籍还是道歉",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=2036791477.mp3")
end},
{"会魔法的老人",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1988564487.mp3")
end},
{"予你",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1895330088.mp3")
end},
{"ТАМАДА(Remix)",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=2010247887.mp3")
end},
{"Running Up That Hill",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=2047985543.mp3")
end},
{"Midnight Love",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1954696352.mp3")
end},
{"Castles",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1960985596.mp3")
end},
{"New World",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1988163085.mp3")
end},
{"Dead Inside",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1890128737.mp3")
end},
{"海誓山盟",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=34586275.mp3")
end},
{"孤单心事",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1973864157.mp3")
end},
{"我走后",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1370047789.mp3")
end},
{"可不可以",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=553755659.mp3")
end},
{"Close Eyes ",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1861101583.mp3")
end},
{"The Best Of Me",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1329938686.mp3")
end},
{"Letting Go",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=2015047009.mp3")
end},
{"爱的最终章",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1947671652.mp3")
end},
{"毒药",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=2066654616.mp3")
end},
{"想念是凋谢的云",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=2042403498.mp3")
end},
{"Fool For You",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1817576399.mp3")
end},
{"若生命等候",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=94809.mp3")
end},
{"我知道你",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=41462017.mp3")
end},
{"风驶过的声音是",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=2041974276.mp3")
end},
{"我的美丽",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1979417838.mp3")
end},
{"脚踩魔怔b",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=2027640152.mp3")
end},
{"Differences",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=2001314407.mp3")
end},
{"my whole life has changed",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1918443223.mp3")
end},
{"Apex",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1333144056.mp3")
end},
{"Cold Blood",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1989845851.mp3")
end},
{"悬溺",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1397345903.mp3")
end},
{"我落泪情绪零碎",
function()
gg.playMusic("http://vip.kyun.top/view.php/0e96b9b99063bba78fcd1cbbf41c753b.mp3")
end},
{"蒲公英的约定",
function()
gg.playMusic("http://vip.kyun.top/view.php/d8d17d8e695cc20d184caef5afc65602.mp3")
end},
{"说好的幸福呢",
function()
gg.playMusic("http://vip.kyun.top/view.php/19af5941cb552443dde833b665074dfa.mp3")
end},
{"我撕裂我的身体",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=2021173064.mp3")
end},
{"Opr(Low Speed)",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1902653318.mp3")
end},
{"Criminals",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1450889933.mp3")
end},
{"Morsmordre",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=144186007.mp3")
end},
{"BG",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1399891888.mp3")
end},
{"Shootout",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1964529701.mp3")
end},
{"Shootout (Sped Up)",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1960740829.mp3")
end},
{"不经痛苦何来荣耀",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=2042022213.mp3")
end},
{"印度国歌",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=2024109979.mp3")
end},
{"我选择的路",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=2042022862.mp3")
end},
{"spirited away",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=478731317.mp3")
end},
{"i walk this earth all by myself",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1808235517.mp3")
end},
{"Rain",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1963654951.mp3")
end},
{"哪里都是你",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=488249475.mp3")
end},
{"School Rooftop",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=478049185.mp3")
end},
{"Maybe",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1393412185.mp3")
end},
{"monday",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=494862146.mp3")
end},
{"flower.",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1441250313.mp3")
end},
{"瞬",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=2063864551.mp3")
end},
{"Ein kleines Lied",--
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=17075871.mp3")
end},
{"花海",
function()
gg.playMusic("http://vip.kyun.top/view.php/85853c770c37112d3ed3d99d884374bd.mp3")
end},
{"武家坡2021",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=2066628581.mp3")
end},
{"你听得到",
function()
gg.playMusic("http://www.1314love520.top/view.php/6ea0867eddadeab1876b38977301190e.mp3")
end},
{"不问ciaga",
function()
gg.playMusic("http://www.1314love520.top/view.php/65fd64592982cb202d68ad1d8d23f0fd.mp3")
end},
{"戒烟",
function()
gg.playMusic("http://www.1314love520.top/down.php/a5c16d5dc6d8f03485ef39796074d00b.mp3")
end},
{"Sea Of Problems",
function()
gg.playMusic("http://www.1314love520.top/view.php/f129eebe4f9a0cc657a05aff13a6decd.mp3")
end},
{"心做し",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=478303470.mp3")
end},
{"POOR",
function()
gg.playMusic("http://www.1314love520.top/view.php/2b04f03f83e14b85eaf10369fcea9df6.mp3")
end},
{"面具",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=2054613130.mp3")
end},
{"夏夜最后的烟火",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1482867143.mp3")
end},
{"METAMORPHOSIS",
function()
gg.playMusic("http://www.1314love520.top/view.php/c26f2b940f4ffe26d0469b4732391db9.mp3")
end},
{"晴",
function()
gg.playMusic("http://www.1314love520.top/view.php/a7dbbaad36b3984b357052f3e31c9325.mp3")
end},
{"SHADOW",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1967493421.mp3")
end},
{"与我无关",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1413585838.mp3")
end},
{"Mars",
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=1855856092.mp3")
end},
{"Baby, Don't Cry ",
function()
gg.playMusic("http://www.1314love520.top/view.php/2dd6d39cb5b8ce5a2383bdc75a7263dc.mp3")
end},
{'我想念',
function()
gg.playMusic("http://music.163.com/song/media/outer/url?id=2071935674.mp3")
end},
{'诛心',
function()
gg.playMusic('https://vip.kyun.top/view.php/a85a8f40dd76e964ad85dbd4e08c66aa.mp3')
end},
}),
}),
},{---第五页
changan.switch(
"音量键隐藏UI",
function()
音量键=true
end,
function()
音量键=false
end
),
changan.switch(
"摇一摇隐藏UI",
function()
摇一摇=true
end,
function()
摇一摇=false
end
),
changan.text("风雪压我两三年,我心早已无怨言",'0xff161616',"#ff0000","18sp",true),--第三个是扫光颜色
changan.button(
"退出",
function()
tuichu=1
end),
},
})