do
if type(getrlyunyz) ~= 'function' then
gg.alert('请使用RLGG执行')
os.exit()
return
end
local info = {
example_version = '1.0.3',
name = 'ikun',
appid = '100871',
appkey = '1HEtC11cZTT3rTUf',
rc4key = 'nUUUL6m0jZlmm6ij',
version = '1.0',
mi_type = '3'
}
local rlyunyz = getrlyunyz(info)
local ret = rlyunyz.start()
if not ret or not isTable(ret) or ret.sign ~= '1d1e3f0c41cd4860cc288a83f12176f6' then
os.exit()
return
end
end
gg.alert([[
ikun全防更新通知↓
1.优化防御,删除剩余冗值
2.优化自动上分
3.修复重力聚能
4.本次采用RLGG云更新模式
5.总部1076112643
通知人by.R
]],"")-------公告
-------------------修改配置
function SearchWrite(Search, Write, Type)
gg.clearResults()
gg.setVisible(false)
gg.searchNumber(Search[1][1], Type)
local count = gg.getResultCount()
local result = gg.getResults(count)
gg.clearResults()
local data = {}
local base = Search[1][2]
if (count > 0) then
for i, v in ipairs(result) do
v.isUseful = true
end
for k=2, #Search do
local tmp = {}
local offset = Search[k][2] - base
local num = Search[k][1]
for i, v in ipairs(result) do
tmp[#tmp+1] = {}
tmp[#tmp].address = v.address + offset
tmp[#tmp].flags = v.flags
end
tmp = gg.getValues(tmp)
for i, v in ipairs(tmp) do
if ( tostring(v.value) ~= tostring(num) ) then
result[i].isUseful = false
end
end
end
for i, v in ipairs(result) do
if (v.isUseful) then
data[#data+1] = v.address
end
end
if (#data > 0) then
gg.toast("修改"..#data.."条数据.修改成功")
local t = {}
local base = Search[1][2]
for i=1, #data do
for k, w in ipairs(Write) do
offset = w[2] - base
t[#t+1] = {}
t[#t].address = data[i] + offset
t[#t].flags = Type
t[#t].value = w[1]
if (w[3] == true) then
local item = {}
item[#item+1] = t[#t]
item[#item].freeze = true
gg.addListItems(item)
end
end
end
gg.setValues(t)
else
gg.toast(":搜索0条数据.修改失败", false)
return false
end
else gg.toast("搜索0条数据.修改失败")
return false
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
toMusic("模块未加载\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 = "~A8 RET", freeze = true}
end
else
local aa = gg.getRangesList(a)
if aa[1] == nil then
toMusic("模块未加载\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
toMusic ( "开启失败" )
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 toMusic("开启失败\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
--[[
解析成功!
缺少0条值
作者为A
共解析出540条值
以下为解析的内容
]]
--作者QQ:945255514
local SO = {}
SO['新手'] = 0x2777e80
SO['封号'] = 0x242bf8c
SO['行为1'] = 0x27583a8
SO['行为2'] = 0x275843c
SO['行为3'] = 0x27581ec
SO['行为4'] = 0x2751670
SO['行为5'] = 0x27580c4
SO['行为6'] = 0x27580c4
SO['行为7'] = 0x24e8fcc
SO['行为8'] = 0x2384f40
SO['行为9'] = 0x27b70e0
SO['行为10'] = 0x27b7000
SO['行为11'] = 0x274aca8
SO['行为12'] = 0x26581d4
SO['行为13'] = 0x27b6efc
SO['行为14'] = 0x27b694c
SO['行为15'] = 0x24e8888
SO['行为16'] = 0x24e8da8
SO['行为17'] = 0x24e8f20
SO['行为18'] = 0x29a0268
SO['行为19'] = 0x1447d1c
SO['行为20'] = 0x209693c
SO['行为21'] = 0x20988d0
SO['行为22'] = 0x1466690
SO['行为23'] = 0x20b4084
SO['行为24'] = 0x20baed8
SO['行为25'] = 0x20baf84
SO['行为26'] = 0x3ce999c
SO['行为27'] = 0x275003c
SO['行为28'] = 0x2758158
SO['行为29'] = 0x2758280
SO['行为30'] = 0x2758314
SO['行为31'] = 0x20bab58
SO['行为32'] = 0x20bac04
SO['行为33'] = 0x20bacb0
SO['行为34'] = 0x20bad54
SO['行为35'] = 0x20baf84
SO['行为36'] = 0x20bab58
SO['行为37'] = 0x2386c68
SO['行为38'] = 0x1bb6ee0
SO['行为39'] = 0x24e8b90
SO['行为40'] = 0x27500d4
SO['行为41'] = 0x2097b58
SO['行为42'] = 0x20b4fa0
SO['行为43'] = 0x20bae00
SO['行为44'] = 0xe80f10
SO['行为45'] = 0xe80f04
SO['货币检测'] = 0x1434264
SO['防举报1'] = 0x1bb6f70
SO['防举报2'] = 0x1bb6e58
SO['防举报3'] = 0x21ec4c0
SO['防举报4'] = 0x29a3db8
SO['防封号1'] = 0x27a06fc
SO['防封号2'] = 0x274ffa8
SO['防封号3'] = 0x275873c
SO['防封号4'] = 0x146e7bc
SO['防封号5'] = 0x28f30bc
SO['人物'] = 0x2770a00
SO['滑板'] = 0x2772778
SO['背饰'] = 0x2794d80
SO['背饰保存'] = 0x2794e60
SO['像框'] = 0x27e0390
SO['装扮'] = 0x2765088
SO['技能'] = 0x2738928
SO['技能勾选'] = 0x2738bec
SO['名称'] = 0x14cdc84
SO['获取十倍'] = 0x2750960
SO['解锁十倍'] = 0x11770f8
SO['内购'] = 0x26e0974
SO['内购成功'] = 0x26ecd5c
SO['领奖'] = 0x27c953c
SO['十抽'] = 0x289a6ec
SO['宝物备份'] = 0x28982c4
SO['奖励替换'] = 0x27dfc00
SO['人物奖励'] = 0x27dfdb0
SO['滑板奖励'] = 0x27dff60
SO['背饰奖励'] = 0x27e02c0
SO['像框奖励'] = 0x27e0390
SO['赛事'] = 0xf1119c
SO['备份1'] = 0x2747730
SO['备份2'] = 0x27a1704
SO['备份3'] = 0x2747730
SO['备份4'] = 0x20e90ec
SO['双倍'] = 0x277ea64
SO['微博'] = 0x16e0e50
SO['金币'] = 0x275e7e0
SO['钥匙'] = 0x275eb20
SO['紫币'] = 0x27cb4dc
SO['宝物钥匙'] = 0x279a3f8
SO['开发者'] = 0x274c840
SO['抓娃娃'] = 0x27512a4
SO['重生'] = 0x24dc028
SO['邮箱'] = 0x28520e4
SO['炫跑卡'] = 0x2796620
SO['历史分数1'] = 0x275f02c
SO['历史分数2'] = 0x275f244
SO['历史排名'] = 0x278d9d0
SO['等级'] = 0x2762010
SO['全服'] = 0x29c85fc
SO['省标'] = 0x29c8674
SO['地区'] = 0x29c86ec
SO['隐藏1'] = 0x25709c0
SO['隐藏2'] = 0x274aca8
SO['隐藏3'] = 0x2571854
SO['隐藏4'] = 0x27898dc
SO['隐藏5'] = 0x1bb3390
SO['防止卡屏1'] = 0x29a0184
SO['防止卡屏2'] = 0x29a009c
SO['受到攻击'] = 0x261e998
SO['攻击拾取'] = 0x2619060
SO['局内金币'] = 0x2729200
SO['点击'] = 0x291aaf0
SO['结尾'] = 0x25ff6d8
SO['状态'] = 0x25f6ddc
SO['攻击拾取'] = 0x2619060
SO['释放能量'] = 0x261877c
SO['获取能量'] = 0x2618600
SO['获取能量2'] = 0x2613bb8
SO['跳跃'] = 0x272e52c
SO['下滑'] = 0x272ea90
SO['滑板跳高'] = 0x1147048
SO['滑板滑翔'] = 0x11473f4
SO['滑板瞬移'] = 0x1147544
SO['无尽装死'] = 0x1150bd4
SO['无限跳跃'] = 0x21ef990
SO['金币消失'] = 0x22334f4
SO['无尽死亡'] = 0x1159a3c
SO['道具图标'] = 0x26174ec
SO['道具图标2'] = 0x261757c
SO['反弹道具1'] = 0x2636a70
SO['反弹道具2'] = 0x2636b58
SO['释放'] = 0x2618888
SO['无视道具1'] = 0x2637d34
SO['无视道具2'] = 0x263824c
SO['无视障碍'] = 0x25fa684
SO['无视侧撞'] = 0x25fb198
SO['开局道具'] = 0x275e080
SO['能量穿透'] = 0x26135e4
SO['忙碌状态'] = 0x2617a74
SO['无限能量'] = 0x2617380
SO['Buff模式'] = 0x261ddac
SO['派对聚能'] = 0x29ac81c
SO['得到分数'] = 0x272ae94
SO['结束游戏'] = 0x29a009c
SO['锁定人机'] = 0x29a3140
SO['派对新手'] = 0x274dc34
SO['派对省份'] = 0x28c8cf0
SO['派对省排'] = 0x28c8c7c
SO['派对全服'] = 0x28c8c08
SO['滑板消失'] = 0x25fd130
SO['三倍金币'] = 0x25cd590
SO['得分倍增'] = 0x2763268
SO['宝物等级'] = 0x28941b0
SO['段位'] = 0x29cbb98
SO['星数'] = 0x29d6e08
SO['道具满级'] = 0x201d228
SO['道具等级'] = 0x201d088
SO['退出登录'] = 0x2754b14
SO['超级跑者'] = 0x27c6508
SO['使用技能'] = 0x1f173c8
SO['观战对手'] = 0x21fa090
SO['替换人物'] = 0x1f159ec
SO['替换滑板'] = 0x1f16970
SO['替换背饰'] = 0x1f17e5c
SO['替换装扮'] = 0x1f161d0
SO['点击表情'] = 0x204e7e4
SO['宝抽次数'] = 0x279b29c
SO['铁轨金币'] = 0x22334f4
SO['房间防踢'] = 0x2608578
SO['时间'] = 0x21eccac
SO['异常弹窗'] = 0x2657f0c
SO['HFX目标'] = 0x25f6aa4
SO['HP目标'] = 0x2636b58
SO['HP使用人'] = 0x2636a70
SO['PVP定人'] = 0x29a3140
SO['全宝'] = 0x289be40
SO['半宝'] = 0x289be40
SO['强制下线'] = 0x253ac98
SO['时间检测'] = 0x2758030
SO['行为弹窗'] = 0x26581d4
SO['升级金币'] = 0x289468c
SO['升级材料'] = 0x28944fc
SO['道具无限时长'] = 0x27d54d0
SO['人物购买按钮'] = 0x1f047c0
SO['人物购买成功'] = 0x1f09a44
SO['滑板购买按钮'] = 0x1f20e44
SO['滑板购买成功'] = 0x1f25aac
SO['锁地形'] = 0x2109e74
SO['点击道具'] = 0x261947c
SO['新时刻'] = 0x29cc35c
SO['离线模式'] = 0x1bb3390
SO['获取服务器'] = 0x274fc84
SO['最佳时间'] = 0x29d741c
SO['作弊时间'] = 0x2758030
SO['获取能量1'] = 0x2618600
SO['获取能量2'] = 0x2613bb8
SO['获取能量3'] = 0x26184f4
SO['能量增倍1'] = 0x272e838
SO['能量增倍2'] = 0x272e8b0
SO['能量增倍3'] = 0x272e7c0
SO['能量增倍4'] = 0x272e52c
SO['能量增倍5'] = 0x272e6f0
SO['跳跃'] = 0x272e52c
SO['下滑'] = 0x272ea90
SO['下滑1'] = 0x272e6f0
SO['下滑左'] = 0x272e7c0
SO['下滑中'] = 0x272e838
SO['下滑右'] = 0x272e8b0
SO['滑板跳高'] = 0x1147048
SO['滑板滑翔'] = 0x11473f4
SO['滑板瞬移'] = 0x1147544
SO['人物瞬移'] = 0x21ee27c
SO['无尽装死'] = 0x1150bd4
SO['无限跳跃'] = 0x21ef990
SO['金币消失'] = 0x22334f4
SO['无尽死亡'] = 0x1159a3c
SO['道具图标1'] = 0x261947c
SO['道具图标2'] = 0x26174ec
SO['道具图标3'] = 0x261757c
SO['修改道具'] = 0x2618dd4
SO['战绩消失'] = 0x298fc6c
SO['购买界面'] = 0x143f940
SO['反弹道具1'] = 0x2636a70
SO['反弹道具2'] = 0x2636b58
SO['释放能量'] = 0x261877c
SO['释放'] = 0x2618888
SO['无视减速带'] = 0x2604078
SO['无视道具1'] = 0x2637d34
SO['无视道具2'] = 0x263824c
SO['无视香蕉'] = 0x261c97c
SO['无视香蕉'] = 0x261c97c
SO['无视障碍'] = 0x25fa684
SO['无视侧撞'] = 0x25fb198
SO['开局道具'] = 0x275e080
SO['能量穿透'] = 0x26135e4
SO['忙碌状态'] = 0x2617a74
SO['无限能量'] = 0x2617380
SO['踢人'] = 0x29cfe18
SO['恶魔状态'] = 0x28d2e98
SO['磁铁状态'] = 0x28d34c4
SO['乌龟状态'] = 0x28d2fd4
SO['Buff模式'] = 0x261ddac
SO['派对聚能'] = 0x29ac81c
SO['得到分数'] = 0x272ae94
SO['分数赛'] = 0x2980e34
SO['结束游戏'] = 0x29a009c
SO['锁定人机'] = 0x29a3140
SO['派对新手'] = 0x274dc34
SO['派对省份'] = 0x28c8cf0
SO['派对省排'] = 0x28c8c7c
SO['派对全服'] = 0x28c8c08
SO['滑板消失'] = 0x25fd130
SO['三倍金币'] = 0x25cd590
SO['得分倍增'] = 0x2763268
SO['宝物等级'] = 0x28941b0
SO['段位'] = 0x29cbb98
SO['历史段位'] = 0x278e0f0
SO['星数'] = 0x29d6e08
SO['道具满级'] = 0x201d228
SO['道具等级'] = 0x201d088
SO['退出登录'] = 0x2754b14
SO['超级跑者'] = 0x27c6508
SO['使用技能'] = 0x1f173c8
SO['观战对手'] = 0x21fa090
SO['替换人物'] = 0x1f159ec
SO['替换滑板'] = 0x1f16970
SO['替换背饰'] = 0x1f17e5c
SO['替换装扮'] = 0x1f161d0
SO['点击表情'] = 0x204e7e4
SO['宝抽次数'] = 0x279b29c
SO['铁轨金币'] = 0x22334f4
SO['房间防踢'] = 0x2608578
SO['匹配人机'] = 0x29a464c
SO['道具聚能'] = 0x261de40
SO['道具备份1'] = 0x27a1704
SO['道具备份2'] = 0x2747730
SO['好友'] = 0xeffa24
SO['踢人'] = 0xeffc7c
SO['修改对抗赛'] = 0x23aafdc
SO['对抗赛好友匹配'] = 0x2628310
SO['观察者室'] = 0x136bdd0
SO['自救'] = 0x23a857c
SO['复活结算'] = 0x298fc6c
SO['调出名称'] = 0x2777fa0
SO['派对新手1'] = 0x274dc34
SO['派对新手2'] = 0x274dcd4
SO['改变角色'] = 0x23ae850
SO['自变保安'] = 0x23a71c8
SO['时间'] = 0x21eccac
SO['异常弹窗'] = 0x2657f0c
SO['HFX目标'] = 0x25f6aa4
SO['HP目标'] = 0x2636b58
SO['HP使用人'] = 0x2636a70
SO['PVP定人'] = 0x29a3140
SO['全宝'] = 0x289be40
SO['半宝'] = 0x289be40
SO['强制下线'] = 0x253ac98
SO['时间检测'] = 0x2758030
SO['行为弹窗'] = 0x26581d4
SO['升级金币'] = 0x289468c
SO['升级材料'] = 0x28944fc
SO['道具无限时长'] = 0x27d54d0
SO['人物购买按钮'] = 0x1f047c0
SO['人物购买成功'] = 0x1f09a44
SO['滑板购买按钮'] = 0x1f20e44
SO['滑板购买成功'] = 0x1f25aac
SO['竞赛模式1'] = 0xf3cc38
SO['竞赛模式2'] = 0x2980b44
SO['竞赛模式3'] = 0x1cf4638
SO['匹配机制1'] = 0x204ebcc
SO['匹配机制2'] = 0xf1119c
SO['匹配机制3'] = 0x136bdd0
SO['速度检测1'] = 0x29cca00
SO['速度检测2'] = 0x29cc984
SO['速度检测3'] = 0x29d73a8
SO['速度检测4'] = 0x29cc4ac
SO['速度检测5'] = 0x29cc35c
SO['速度检测6'] = 0x29cc278
SO['速度检测7'] = 0x29d741c
SO['速度检测8'] = 0x2758030
SO['速度检测9'] = 0x29cbf28
SO['速度检测10'] = 0xe80f24
SO['一分40秒1'] = 0x1bb3390
SO['一分40秒2'] = 0x29cca00
SO['一分40秒3'] = 0x29cc984
SO['一分40秒4'] = 0x29cc35c
SO['一分40秒5'] = 0x29d741c
SO['一分40秒6'] = 0x29cc278
SO['一分40秒7'] = 0x2758030
SO['一分40秒8'] = 0x1bb6f70
SO['一分40秒9'] = 0x1bb6e58
SO['一分40秒10'] = 0x29a3db8
SO['轨道位置'] = 0x21edbd8
SO['铁轨金币'] = 0x22334f4
SO['表情退出'] = 0xf21c08
SO['按钮复制房间'] = 0x201c8bc
SO['无视敏感词'] = 0x29d38b4
SO['房间防踢1'] = 0x2628b5c
SO['分数全服'] = 0x2962a84
SO['分数全省'] = 0x2962b88
SO['改字复活'] = 0xf21d2c
SO['好友踢人'] = 0xeffc7c
SO['派对房间1'] = 0x1c2e50c
SO['派对房间2'] = 0x29187c8
SO['人物速度'] = 0x21ec638
SO['滑板时长'] = 0x25fd6e0
SO['宝藏等级'] = 0x28941b0
SO['目标地图1'] = 0x21b04f0
SO['目标地图2'] = 0x21b1470
SO['目标路线'] = 0x1c2e594
SO['结算检测1'] = 0x29cc35c
SO['结算检测2'] = 0x274fc84
SO['结算检测3'] = 0x2758030
SO['结算检测4'] = 0x1bb3390
SO['结算退出'] = 0x14e6d4c
SO['退出界面'] = 0x14e4f94
SO['灵魂出窍'] = 0x14d7808
SO['断开连接1'] = 0x296658c
SO['断开连接2'] = 0x1a31dbc
SO['服务器1'] = 0x274fc84
SO['服务器2'] = 0x2757910
SO['服务器3'] = 0x27579c0
SO['服务器4'] = 0x107e308
SO['人物全显'] = 0x1e1cb2c
SO['滑板全显'] = 0x1e1cb2c
SO['皮肤全显'] = 0x2765088
function txl(zhi,lx,xg,dj) if dj == true then gg.addListItems({{address=zhi,flags=lx,value=xg,freeze=true}}) else gg.setValues({{address=zhi,flags=lx,value=xg}}) end end
function SO_PT(FUNCTIONADD,TYPE,VALUE)
local SOMOD=gg.getRangesList("il2cpp.so")
if SOMOD[2]==nil then toMusic("开启失败\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 setvalue(address, flags, value)
local tt = {}
tt[1] = {}
tt[1].address = address
tt[1].flags = flags
tt[1].value = value
gg.setValues(tt)
end
local version = luajava.bindClass("android.os.Build$VERSION").RELEASE
local function isSuAvailable()
local process = luajava.bindClass("java.lang.Runtime").getRuntime():exec("which su")
local reader = luajava.bindClass("java.io.BufferedReader")(luajava.bindClass("java.io.InputStreamReader")(process:getInputStream()))
local line = reader:readLine()
if line and line:find("su") then
return true
end
return false
end
if isSuAvailable() then
hj="ROOT"
else
hj="框架"
end
local threshold = 5 -- 设定拖动阈值
local canSwipeUp = false -- 设定第一次上拖动是否触发
local canSwipeDown = true -- 设定第一次下拖动是否触发
local isPlaying = false --设定歌曲播放状态
local isReady = false --歌曲是否准备完毕
local isRotate = false --旋转判断
local ui = require('ui')
file.checkFile("/sdcard/孤行/图片/color") -- 判断文件是否存在
local RGBcolor = file.read("/sdcard/孤行/图片/color") -- 读取文件内容
if RGBcolor ~= "" then -- 判断内容是否为空
else
RGBcolor="E687B4EB"
end
vibra = context:getSystemService(Context.VIBRATOR_SERVICE)
changan = {}
local changan = changan
local android = import('android.*')
function write(fileName, content)
file.write(fileName, content)
end
function panduan(rec) fille,err = io.open(rec) if fille == nil then return false else return true end end
function checkimg(tmp,ii)
if file.length("/sdcard/孤行/图片/"..tmp[1],false)<200 then
gg.toast("正在下载资源"..ii.."/"..#ckimg.."\n请耐心等待")
luajava.download(tmp[2],"/sdcard/孤行/图片/"..tmp[1])
end
end
ckimg = {
{'Lottie.dex','https://yp.xunsy.cn/down.php/962553ebd72772588c447cbde4ddf8e0.dex'},
{'Pause','https://yp.xunsy.cn/down.php/74cf3f3ed14816b3f55445820d066cf1.'},
{'hei_right','https://yp.xunsy.cn/down.php/dfcc155180c66711a66a1c6540db5e03.'},
{'heix','https://yp.xunsy.cn/down.php/1631f943c3cad4fd0aee9e611638198e.'},
{'listloop','https://yp.xunsy.cn/down.php/95c0a82922a7a6a2ae5d12494942521c.'},
{'stoploop','https://yp.xunsy.cn/down.php/d38e8c42f3c661433fe33797e1a46ae0.'},
{'repeatone','https://yp.xunsy.cn/down.php/c8fbb72a8b77a07c54262874988534e9.'},
{'setPlay','https://yp.xunsy.cn/down.php/11843b5be6f1568eda187a8f8ff0ba2c.'},
{'headset','https://yp.xunsy.cn/down.php/7d54e887c30bf89e62c70c3e3e2f7de2.'},
{'next','https://yp.xunsy.cn/down.php/55eaad311b2f86fead7ca636e7321014.'},
{'playlist','https://yp.xunsy.cn/down.php/4750102c379a4a3efd734921a0e026bf.'},
{'last','https://yp.xunsy.cn/down.php/f2b9eb293e35d099b2e0ab210e5f019f.'},
{'unlove','https://yp.xunsy.cn/down.php/361cb58b13cea27c00cfcae5cf33913c.'},
{'love','https://yp.xunsy.cn/down.php/daf454d8153d3234747f281d4f4fb0e1.'},
{'ts','https://yp.xunsy.cn/down.php/ab0d30a20ba2b0e4d4249e3114bdd30e.'},
{'Playing','https://pan.szfx.top/down.php/54941f05e5434d2d2693b2ce9b790f71.'};
{'classes3.dex','https://yp.xunsy.cn/down.php/0eef8aef4c919d66be7c08af2f4d7298.dex'},
{'mqclose','https://yp.xunsy.cn/down.php/ceacb6250dfd87580b7dc7a7e6e0b1eb.'},
{'mqopen','https://yp.xunsy.cn/down.php/6bc5379183a93346a422e629f0372314.'},
{'heir','https://yp.xunsy.cn/down.php/1f8c38a24d8adda4f8f4f897ab2abfbd.'},
{'dbnacho','https://yp.xunsy.cn/view.php/8f2fecc5f6177d8b37a9a846e8700a5f.'},
{'xfcnacho','https://yp.xunsy.cn/view.php/19ed871b40d806c5eeefc9173f8cbdb1.'},
}
for i = 1,#ckimg do
checkimg(ckimg[i],i)
end
if (rlgg.VERSION < 2.09) then
gg.alert('请使用大于等于2.09版本的RLGG')
os.exit()
end
function SwitchDrawable(on,off)
local switchSelector = luajava.getStateListDrawable()
switchSelector:addState({ android.R.attr.state_checked }, luajava.getBitmapDrawable("/storage/emulated/0/孤行/图片/"..on))
switchSelector:addState({ -android.R.attr.state_checked }, luajava.getBitmapDrawable("/storage/emulated/0/孤行/图片/"..off))
return switchSelector
end
local baseWindow = require 'floatingWindowManager2'
if not baseWindow.getContext then
gg.alert('请重启一下RLGG')
app.exit()
end
baseWindow=require('floatingWindowManager2')
import("android.content.res.ColorStateList")
import("com.google.android.material.card.MaterialCardView")
import("com.google.android.material.materialswitch.MaterialSwitch")
import("com.google.android.material.slider.Slider")
import("com.google.android.material.progressindicator.LinearProgressIndicator")
import("android.animation.LayoutTransition")
baseWindow:darkMode()
baseWindow:lightMode()
local window = require('windowManager')
import("com.google.android.material.dialog.MaterialAlertDialogBuilder")
import("com.google.android.material.tabs.TabItem")
import("com.google.android.material.tabs.TabLayout")
local LottieDex=dex.loadfile('/storage/emulated/0/孤行/图片/Lottie.dex')
local LottieAnimationView=LottieDex:loadClass("com.airbnb.lottie.LottieAnimationView")
local AccelerateInterpolator = luajava.bindClass("android.view.animation.AccelerateInterpolator")
local PathInterpolator = luajava.bindClass("android.view.animation.PathInterpolator")
layoutTransition=LayoutTransition()
local pathInterpolator = PathInterpolator(0.25, 0.5, 0.25, 1.0) --贝塞尔曲线
layoutTransition:setInterpolator(LayoutTransition.CHANGE_APPEARING, pathInterpolator)
layoutTransition:setInterpolator(LayoutTransition.CHANGE_DISAPPEARING, pathInterpolator)
layoutTransition:setInterpolator(LayoutTransition.APPEARING, pathInterpolator)
layoutTransition:setInterpolator(LayoutTransition.DISAPPEARING, pathInterpolator)
layoutTransition:setDuration(500)--灵动岛缩放
file.checkFile("/sdcard/孤行/图片/收藏歌单") -- 判断文件是否存在
local musiclist = file.read("/sdcard/孤行/图片/收藏歌单") -- 读取文件内容
if musiclist ~= "" then -- 判断内容是否为空
musiclist = load("return"..musiclist)() -- string转table后赋值
else
musiclist = {} -- 给变量赋值
end
local nowMusic = #musiclist -- 设定当前歌曲序号
import("android.media.MediaPlayer")
mediaPlayer=MediaPlayer() -- 音乐播放器
import("android.view.animation.ScaleAnimation")
import("android.view.animation.Animation")
function 获取图片(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 getRes2(x)
return 获取图片("/sdcard/孤行/图片/"..x)
end
function getVerticalBG(gtvb1,gtvb3,gtvb4,gtvb5)
if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end
local jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(gtvb3)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors(gtvb1)
jianbians:setStroke(gtvb4,gtvb5)
return jianbians
end
function particle2(tx)
local webView = luajava.webView(function(webView)
webView:loadData([[
]], 'text/html', 'UTF-8')
webView:setBackgroundColor(0x0)
end)
return webView
end
function getCorner(gtvb1,gtvb3,gtvb4,gtvb5,g1,g2,g3,g4)
if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end
local jianbians = luajava.new(GradientDrawable)
jianbians: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 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
context = app.context
window = context:getSystemService("window") -- 获取窗口管理器
function getLayoutParams()
LayoutParams = WindowManager.LayoutParams
layoutParams = luajava.new(LayoutParams)
if (Build.VERSION.SDK_INT >= 26) then -- 设置悬浮窗方式
layoutParams.type = LayoutParams.TYPE_APPLICATION_OVERLAY
else
layoutParams.type = LayoutParams.TYPE_PHONE
end
layoutParams.format = PixelFormat.RGBA_8888 -- 设置背景
layoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL -- 焦点设置Finish
layoutParams.gravity = Gravity.TOP|Gravity.LEFT -- 重力设置
layoutParams.width = LayoutParams.WRAP_CONTENT -- 布局宽度
layoutParams.height = LayoutParams.WRAP_CONTENT -- 布局高度
return layoutParams
end
changan.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
changan.controlRotation2 = function(control, time)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", {
0, 360
})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.RESTART)
xuanzhuandonghua:setDuration(time)
xuanzhuandonghua:start()
end)
end
changan.controlRotation1 = function(control, time)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", {
0, -360
})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.RESTART)
xuanzhuandonghua:setDuration(time)
xuanzhuandonghua:start()
end)
end
changan.controlRotation3 = function(control, to1,to2)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", {
to1, to2
})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.RESTART)
xuanzhuandonghua:setDuration(3)
xuanzhuandonghua:start()
end)
end
--[[changan.controlBig = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
end) end--]]
changan.controlSmall = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
1, 0.7, 0.4, 0
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
1, 0.7, 0.4, 0
}):setDuration(time):start()
end) end
changan.controlBig = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX",{0, 0.4, 0.7, 1}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY",{0, 0.4, 0.7, 1}):setDuration(time):start()
end) end
changan.controlSmallX = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
1, 0.7, 0.4, 0
}):setDuration(time):start()
end) end
changan.controlBigX = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
end) end
changan.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
xiaoyi={ }
xiaoyi.controlFlip2 = function(control,time)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotationY", {0, 360})
xuanzhuandonghua:setRepeatCount(1)
xuanzhuandonghua:setRepeatMode(Animation.REVERSE)
xuanzhuandonghua:setDuration(time)
xuanzhuandonghua:start()
end
)
end
local hourStr=os.date("%H")
local hour=tonumber(hourStr) -- 获取当前小时
if hour >=0 and hour < 3 then
timeA="夜深了,早点休息"
elseif hour >=3 and hour < 5 then
timeA="凌晨了,注意身体"
elseif hour >=5 and hour < 12 then
timeA="上午好☁️"
elseif hour >=12 and hour < 14 then
timeA="中午好🌞"
elseif hour >=14 and hour < 19 then
timeA="下午好🍵"
elseif hour >=19 and hour < 24 then
timeA="晚上好🌙"
end
import"android.graphics.Paint"
function souyy(txt)
return table.json(gg.makeRequest("http://music.163.com/api/search/get?s="..txt.."&type=1&offset=0&total=true&limit=100").content)
end
function searchmusic()
mustxt=luajava.getIdView("搜索"):getText()
mustxt=tostring(mustxt)
luajava.runOnUiThread(function()
luajava.getIdView("搜索"):setText("")
luajava.getIdView("musicWindow"):setVisibility(View.GONE)
SearchProgress:setVisibility(View.VISIBLE)
end)
if string.trim(mustxt)~="" then
musictable={}
mustable=souyy(mustxt)
mustable=mustable.result.songs
for k,v in pairs(mustable) do
musictable[#musictable + 1]=v
end
Sortsong(100)
end
luajava.runOnUiThread(function()
luajava.getIdView("musicWindow"):setVisibility(View.VISIBLE)
SearchProgress:setVisibility(View.GONE)
YoYoImpl:with("FadeIn"):duration(500):playOn(luajava.getIdView("musicWindow"))
end)
end
function Sortsong(formath)
musiccheck={}
for i=1,formath do
musid=musictable[#musictable+1-i].id
musname=musictable[#musictable+1-i].name
musart=musictable[#musictable+1-i].artists[0].name
musvip=musictable[#musictable+1-i].fee
musiccheck[#musiccheck+1]={musid,musname,musart,musvip}
end
musicadapter=ui.BaseAdapter({
getCount = function()
return table.getn(musiccheck) -- 使用 table.getn 获取表中元素的数量
end,
getItem = function(position)
return musiccheck[position + 1]
end,
getItemId = function(position)
return position
end,
getView=function(position, convertView, parent)
local SwitchView
local info=musicadapter:getItem(position)
if not convertView then
SwitchView=luajava.loadlayout({
MaterialCardView,
background={GradientDrawable,color=0xFFFFFFFF,cornerRadius=5},
layout_width="match_parent",
strokeWidth=0,
{
LinearLayout,
orientation="vertical",
padding="3dp",
gravity="center",
layout_width="match_parent",
{
TextView,
textSize="14sp",
textColor="#5A6EE7",
layout_hight="10dp",
layout_width="wrap_content",
gravity="center"
},
{
TextView,
textColor="#545454",
textSize="10sp",
layout_hight="10dp",
layout_width="wrap_content",
gravity="center"
}
}
})
else
SwitchView=convertView
end
SwitchView:getChildAt(0):getChildAt(0):setText(info[2])
SwitchView:getChildAt(0):getChildAt(1):setText(info[3])
SwitchView:setOnClickListener(function()
bofang(info[1],info[2],info[3])
if info[4] == 1 then
MaterialAlert("当前为付费VIP歌曲,可能只支持部分试听")
end
end)
return SwitchView
end
})
luajava.runOnUiThread(function()
musiclistview:setAdapter(musicadapter)
end)
end
lastClickTime1=0
function bofang(musicid, musicname, musicstart)
local currentTime1=os.time()
if currentTime1 - lastClickTime1 < 1 then return 0 end lastClickTime1=currentTime1
isExist=false
for i, _ in ipairs(musiclist) do
if musiclist[i][1] == musicid then
nowMusic = i
播放歌曲(musiclist[i][1])
isExist=true
end
end
if not isExist then
table.insert(musiclist, {musicid, musicname, musicstart, false})
nowMusic = #musiclist
播放歌曲(musicid)
end
end
function 写入()
lovemusic = {}
for _, v in pairs(musiclist) do
if v[4] then
table.insert(lovemusic, v)
end
end
file.write("/sdcard/孤行/图片/收藏歌单",lovemusic)
end
function 灵动岛()
luajava.getIdView("Smalldisplay"):setVisibility(View.GONE)
luajava.getIdView("music"):setVisibility(View.INVISIBLE)
if 灵动 then
luajava.startThread(function()
luajava.runOnUiThread(function()
shadow:setVisibility(View.GONE)
luajava.getIdView("SmallIsland"):setVisibility(View.VISIBLE)
Island:setVisibility(View.GONE)
end)
灵动=false
gg.sleep(250)
luajava.runOnUiThread(function()
local Smalldisplay = luajava.getIdView("Smalldisplay")
Smalldisplay:setVisibility(View.VISIBLE)
Smalldisplay:setAlpha(0)
Smalldisplay:animate():alpha(1):setDuration(1200)
end)
end)
else
luajava.startThread(function()
luajava.runOnUiThread(function()
shadow:setVisibility(View.VISIBLE)
luajava.getIdView("SmallIsland"):setVisibility(View.GONE)
Island:setVisibility(View.VISIBLE)
end)
灵动=true
gg.sleep(200)
luajava.runOnUiThread(function()
local music = luajava.getIdView("music")
music:setVisibility(View.VISIBLE)
music:setAlpha(0)
music:animate():alpha(1):setDuration(850)
end)
end)
end
end
function ctime(value)
local minutes=math.floor(value / 60)
local seconds=value % 60
return string.format("%d:%02d",minutes,seconds)
end
function setTime(value)
local minutes=math.floor(value/1000)
luajava.runOnUiThread(function()
hkuai:setValueTo(minutes)
atime:setText(ctime(minutes))
end)
end
function getMusicPictures(id)
local briefIntroduction = table.json(file.read("/sdcard/孤行/音乐缓存/pic".. id))
if briefIntroduction.code == 200 then
picUrl = briefIntroduction.songs[0].album.picUrl
else
picUrl = 'http://s4.music.126.net/style/web2/img/default/default_list.jpg'
end
return picUrl
end
function playMusic(id)
pcall(function()
mediaPlayer:reset()
mediaPlayer:setDataSource("/sdcard/孤行/音乐缓存/"..id)
mediaPlayer:prepare()
IslandPic:setImageDrawable(获取图片("/sdcard/孤行/音乐缓存/Pic2"..id))
if isRotate ~= true then
isRotate = true
luajava.newThread(function()--更新逻辑
while true do
changan.controlRotation2(IslandPicMain,5000)
gg.sleep(5500)
end
end):start()
end
end)
end
function 播放歌曲(id)
isReady=false
if #musiclist == 0 then return end
if isPlaying==false then ztkq:setSpeed(1) ztkq:playAnimation()
musicicon1:setSpeed(1) musicicon1:playAnimation()
musicicon1:loop(true)
musicicon1:setVisibility(View.VISIBLE)
isPlaying=true end
if file.length("/sdcard/孤行/音乐缓存/"..id) ~= 0 or file.length("/sdcard/孤行/音乐缓存/Pic2"..id) ~= 0 then
playMusic(id)
else
luajava.startThread(function()
luajava.runOnUiThread(function() DownloadProgress:setVisibility(View.VISIBLE) end)
local co = coroutine.create(function()
local success = file.download("http://music.163.com/song/media/outer/url?id=".. id.. ".mp3","/sdcard/孤行/音乐缓存/".. id)
file.download('http://music.163.com/api/song/detail/?id='..id..'&ids=['..id..']',"/sdcard/孤行/音乐缓存/pic".. id)
file.download(getMusicPictures(id),"/sdcard/孤行/音乐缓存/Pic2"..id)
return success
end)
local status, result = coroutine.resume(co)
if status and result then
luajava.runOnUiThread(function() DownloadProgress:setVisibility(View.GONE) end)
playMusic(id)
else
print("下载出现问题,无法播放音乐")
end
end)
end
end
luajava.setInterface(mediaPlayer, 'setOnPreparedListener',--资源准备完毕监听
{onPrepared=function(media)
isReady=true
mediaTime=media:getDuration()
media:start()
setTime(mediaTime)
luajava.runOnUiThread(function()
hkuai:setValue(1)
IslandText:setText(musiclist[nowMusic][2])
Mname:setText(musiclist[nowMusic][2])
GSname:setText(musiclist[nowMusic][3])
if musiclist[nowMusic][4] then
sc=false
souc:setImageDrawable(getRes2("love"))
souc:setColorFilter(0xffEC2937)
else
sc=true
souc:setImageDrawable(getRes2("unlove"))
souc:setColorFilter(0xffFAFAFA)
end
end)
end})
luajava.setInterface(mediaPlayer, 'setOnCompletionListener',--播放完毕监听
{onCompletion=function(media)
换一首()--问题
end})
function MaterialAlert(text)
MaterialAlertDialog=MaterialAlertDialogBuilder(baseWindow:getContext())
:setTitle(项目名字) -- 设置标题
:setMessage(text)
:setPositiveButton('确定')
luajava.showAlert(MaterialAlertDialog)
end
BSZ=0
function 换一首()
if BSZ==0 then--列表循环
下一首()
elseif BSZ==1 then--随机播放
local randomnowMusic=math.random(1,#musiclist)
local selectedNumber=musiclist[randomnowMusic]
nowMusic=randomnowMusic
播放歌曲(selectedNumber[1])
elseif BSZ==2 then--单曲循环
播放歌曲(musiclist[nowMusic][1])
elseif BSZ==3 then--停止循环
luajava.newThread(function()
播放歌曲(musiclist[nowMusic][1])
gg.sleep(110)
isPlaying=false
mediaPlayer:pause()
luajava.runOnUiThread(function()
ztkq:setSpeed(-1)
ztkq:playAnimation()
end)
end):start()
end
end
function 播放设置()
changan.controlWater(luajava.getIdView("LoopSetting"),200)
if BSZ==0 then--随机播放
BSZ=BSZ+1
bfsz:setImageDrawable(getRes2("repeatone"))
elseif BSZ==1 then--单曲循环
BSZ=BSZ+1
bfsz:setImageDrawable(getRes2("stoploop"))
elseif BSZ==2 then--停止循环
BSZ=BSZ+1
bfsz:setImageDrawable(getRes2("listloop"))
elseif BSZ==3 then--列表循环
BSZ=0
bfsz:setImageDrawable(getRes2("setPlay"))
end
end
function 暂停()
if #musiclist == 0 then MaterialAlert("您还没有收藏歌曲\n请搜索想听的歌曲添加到播放列表\n点击左侧爱心可以收藏,每次重新启动时只会保留收藏的歌曲")
luajava.runOnUiThread(function()
-- Page:setCurrentItem(切换(2))
切换(2)
end) return end
if isPlaying then
ztkq:setSpeed(-1)--暂停
ztkq:playAnimation()
musicicon1:setVisibility(View.GONE)
IslandText:setVisibility(View.GONE)
IslandPic:setVisibility(View.GONE)
if isReady then
mediaPlayer:pause()
end
isPlaying=false
else
if isReady then
mediaPlayer:start()
else
nowMusic = 1
播放歌曲(musiclist[1][1])
end
ztkq:setSpeed(1)
ztkq:playAnimation()
musicicon1:setVisibility(View.VISIBLE)
IslandText:setVisibility(View.VISIBLE)
IslandPic:setVisibility(View.VISIBLE)
isPlaying=true
end
end
function 下一首()
if #musiclist == 0 then MaterialAlert("您还没有收藏歌曲\n请搜索想听的歌曲添加到播放列表\n点击左侧爱心可以收藏,每次重新启动时只会保留收藏的歌曲")
luajava.runOnUiThread(function()
-- Page:setCurrentItem(切换(2))
切换(2)
end) return end
nowMusic=nowMusic + 1
if nowMusic > #musiclist then
nowMusic=1
end
ztkq:setSpeed(1)
ztkq:playAnimation()
musicInfo=musiclist[nowMusic]
播放歌曲(musicInfo[1])
end
function 上一首()
if #musiclist == 0 then MaterialAlert("您还没有收藏歌曲\n请搜索想听的歌曲添加到播放列表\n点击左侧爱心可以收藏,每次重新启动时只会保留收藏的歌曲")
luajava.runOnUiThread(function()
-- Page:setCurrentItem(切换(2))
切换(2)
end) return end
nowMusic=nowMusic - 1
if nowMusic < 1 then
nowMusic=#musiclist
end
musicInfo=musiclist[nowMusic]
播放歌曲(musicInfo[1])
end
sc=true
sc=true
function 收藏()
if isReady then
if sc then
sc=false
musiclist[nowMusic][4]=true
souc:setImageDrawable(getRes2("love"))
souc:setColorFilter(0xffEC2937)
else
sc=true
musiclist[nowMusic][4]=false
souc:setImageDrawable(getRes2("unlove"))
souc:setColorFilter(0xffFAFAFA)
end
写入()
end
end
function 刷新列表()
playadapter=ui.BaseAdapter({
getCount = function()
return #musiclist
end,
getItem = function(position)
return musiclist[position + 1]
end,
getItemId = function(position)
return position
end,
getView=function(position, convertView, parent)
local SwitchView
local info=playadapter:getItem(position)
if info[4] then
MTP=getRes2("love")
MTPC=0xffEC2937
else
MTP=getRes2("unlove")
MTPC=0xff4B484F
end
if not convertView then
SwitchView=luajava.loadlayout(
{
FrameLayout,
layout_width="match_parent",
layout_height="30dp",
paddingLeft="5dp",
paddingRight="5dp",
{
ImageView,
id="Playlike",
src=MTP,
layout_gravity="center|left",
ColorFilter=MTPC,
layout_width="22dp",
layout_height="22dp",
},
{
TextView,
id="playname",
layout_marginLeft="25dp",
layout_marginRight="25dp",
layout_width="match_parent",
layout_height="wrap_content",
layout_gravity="center",
gravity="center",
textColor="#27253A",
},
{
ImageView,
id="songremove",
src="/sdcard/孤行/图片/heix",
ColorFilter="#4B484F",
layout_gravity="center|right",
layout_width="18dp",
layout_height="18dp",
},
})
else
SwitchView=convertView
end
Playlike:setOnClickListener(function()
if info[4] then
info[4]=false
musiclist[position+1][4]=false
写入()
刷新列表()
luajava.runOnUiThread(function()
if nowMusic==position+1 then sc=true
souc:setImageDrawable(getRes2("unlove"))
souc:setColorFilter(0xffFAFAFA) end
end)
else
info[4]=true
musiclist[position+1][4]=true
写入()
刷新列表()
luajava.runOnUiThread(function()
if nowMusic==position+1 then sc=false
souc:setImageDrawable(getRes2("love"))
souc:setColorFilter(0xffEC2937) end
end)
end
end)
playname:setOnClickListener(function()
播放歌曲(info[1],info[2],info[3],info[4])
nowMusic=position+1
end)
playname:setText(info[2])
songremove:setOnClickListener(function()
luajava.startThread(function()
if gg.alert('确定删除['..info[2]..']吗?','确定','点错了')==1 then
table.remove(musiclist,position+1) 刷新列表() 写入()
if nowMusic==position+1 then 下一首() end end
end)
end)
return SwitchView
end
})
luajava.runOnUiThread(function()
songlistview:setAdapter(playadapter)
end)
end
songlist={
LinearLayout,
orientation="vertical",
layout_width="match_parent",
layout_height="wrap_content",
{
ListView,--列表适配器
id="songlistview",
layout_width='match_parent',
layout_height='match_parent',
dividerHeight=3,
}
}
function 播放列表()
dialogBuilder=MaterialAlertDialogBuilder(baseWindow:getContext()) -- 创建对话框构造器
:setTitle('待播放列表') -- 设置标题
:setView(luajava.loadlayout(songlist))
:setPositiveButton('确定')
luajava.showAlert(dialogBuilder)
刷新列表()
end
function rgb2hex(value)
local hex=''
local prefix=value < 16 and '0' or ''
while value > 0 do
local rgb=math.fmod(value,16) + 1
value=math.floor(value / 16)
hex=prefix.. string.sub('0123456789ABCDEF',rgb,rgb).. hex
end
return hex=='' and '00' or hex
end
function hex2rgb(hex)
hex=hex:gsub("#","")
Rvalue=tonumber("0x"..hex:sub(1,2))
Gvalue=tonumber("0x"..hex:sub(3,4))
Bvalue=tonumber("0x"..hex:sub(5,6))
end
hex2rgb(RGBcolor)
function seeColor()
luajava.startThread(function()
luajava.runUiThread(function()
RGBcolor=(""..Rcolor..Gcolor..Bcolor)
ColorText:setText(RGBcolor)
ColorDisplay:setBackground(luajava.loadlayout{GradientDrawable,color="#"..RGBcolor,cornerRadius=15})
SliderColor(Rslider,RGBcolor,RGBcolor,RGBcolor)
SliderColor(Gslider,RGBcolor,RGBcolor,RGBcolor)
SliderColor(Bslider,RGBcolor,RGBcolor,RGBcolor)
SwitchPreview:setTrackTintList(ColorStateList({{android.R.attr.state_checked}},{"0xff"..RGBcolor}))
luajava.getIdView("tab2"):setTabTextColors(0xff000000,"0xff"..RGBcolor)
luajava.getIdView("tab2"):setSelectedTabIndicatorColor("0xff"..RGBcolor)
end)
end)
end
Custom=luajava.loadlayout{
LinearLayout,
layout_width="match_parent",
layout_height="match_parent",
orientation="vertical",
{
LinearLayout,
layout_width="match_parent",
layout_height="match_parent",
{
LinearLayout,
layout_marginLeft="10dp",
layout_width="wrap_content",
layout_weight=1,
layout_height='wrap_content',
{
LinearLayout,
layout_width="wrap_content",
layout_height='35dp',
{
TextView,
textSize="15sp",
textColor="#161616",
text="R:",
layout_height='33dp',
gravity="right|bottom"
},
{
Slider,
id="Rslider",
stepSize=1,
valueTo=255,
valueFrom=0,
trackHeight="13dp",
ThumbHeight="20dp",
tickVisible=false,
trackStopIndicatorSize="0dp",
thumbWidth="5dp",
layout_width='wrap_content',
layout_height='wrap_content',
addOnChangeListener=function(slider,value,fromUser)
Rvalue=value
Rcolor=rgb2hex(value)
seeColor()
end,
}
},
{
LinearLayout,
layout_width="wrap_content",
layout_height='35dp',
{
TextView,
textSize="15sp",
textColor="#161616",
text="G:",
layout_height='33dp',
gravity="right|bottom"
},
{
Slider,
id="Gslider",
stepSize=1,
valueTo=255,
valueFrom=0,
trackHeight="13dp",
ThumbHeight="20dp",
tickVisible=false,
trackStopIndicatorSize="0dp",
thumbWidth="5dp",
layout_width='wrap_content',
layout_height='wrap_content',
addOnChangeListener=function(slider,value,fromUser)
Gvalue=value
Gcolor=rgb2hex(value)
seeColor()
end,
}
},
{
LinearLayout,
layout_width="wrap_content",
layout_height='35dp',
{
TextView,
textSize="15sp",
textColor="#161616",
text="B:",
layout_height='33dp',
gravity="right|bottom"
},
{
Slider,
id="Bslider",
stepSize=1,
valueTo=255,
valueFrom=0,
trackHeight="13dp",
ThumbHeight="20dp",
tickVisible=false,
thumbWidth="5dp",
trackStopIndicatorSize="0dp",
layout_width='wrap_content',
layout_height='wrap_content',
addOnChangeListener=function(slider,value,fromUser)
Bvalue=value
Bcolor=rgb2hex(value)
seeColor()
end,
}
}
},
{
LinearLayout,
layout_width="match_parent",
layout_weight=2,
layout_gravity="center",
layout_marginTop="5dp",
layout_height="95dp",
orientation="vertical",
{
LinearLayout,
id="ColorDisplay",
layout_marginRight="10dp",
background=luajava.loadlayout{GradientDrawable,color="0xff"..RGBcolor,cornerRadius=15},
layout_height="match_parent",
layout_width="match_parent",
layout_marginBottom="5dp",
layout_weight=1,
},
{
TextView,
id="ColorText",
layout_height="match_parent",
layout_marginRight="10dp",
background=luajava.loadlayout{GradientDrawable,color=0xFFFFFFFF,cornerRadius=15},
layout_width="match_parent",
layout_weight=2,
textColor="0xff161616",
text=""..RGBcolor,
gravity="center",
}
}
},
{
FrameLayout,
layout_height="wrap_content",
layout_marginLeft="10dp",
layout_marginRight="10dp",
layout_width="match_parent",
{
MaterialSwitch,
id="SwitchPreview",
text="预览:",
thumbIconDrawable=SwitchDrawable("mqopen","mqclose"),
setThumbIconSize = "18dp",
checked=true,
layout_width='wrap_content',
layout_height='wrap_content',
},
--[[
{
CheckBox,
id="CheckPreview",
checked=true,
layout_width='wrap_content',
layout_height='wrap_content',
layout_marginLeft="110dp",
layout_marginTop="10dp",
},
--]]
{
TabLayout,
id=luajava.newId("tab2"),
layout_height="wrap_content",
layout_width="150dp",
layout_gravity="center|right",
background=getVerticalBG({0x00000000,0x00000000},15),
}
}
}
for i=1,3 do
luajava.getIdView("tab2"):addTab(luajava.getIdView("tab2"):newTab():setText("演示"))
end
lastClickTime4=0
function 自定义主题()
local currentTime4=os.time()
if currentTime4 - lastClickTime4 < 1 then return 0 end lastClickTime4=currentTime4
luajava.runUiThread(function()
local parent = Custom:getParent()
if parent then
parent:removeView(Custom)
end
Rslider:setValue(Rvalue)
Gslider:setValue(Gvalue)
Bslider:setValue(Bvalue)
end)
CustomTheme=MaterialAlertDialogBuilder(baseWindow:getContext()) -- 创建对话框构造器
:setTitle('控件颜色') -- 设置标题
:setView(Custom)
:setPositiveButton('应用',
function() 修改控件颜色(RGBcolor) local file=io.open("/sdcard/孤行/图片/color","w")
file:write(RGBcolor) end)
luajava.showAlert(CustomTheme)
end
function 修改控件颜色(color)
luajava.runOnUiThread(function()
-- tab:setTabTextColors(0xff000000,"0xff"..RGBcolor)
-- tab:setSelectedTabIndicatorColor("0xff"..color)
for key,value in pairs(colorvs) do
if value[1]=="switch" then
luajava.getIdView(value[2]):setTrackTintList(ColorStateList({{android.R.attr.state_checked}},{"0xff"..RGBcolor}))
-- elseif value[1]=="switch2" then
-- luajava.getIdView(value[2]):setBackColor(ColorStateList({{android.R.attr.state_checked},{-android.R.attr.state_checked}},{"0xff"..RGBcolor,0xffD4D4D4}))
elseif value[1]=="slider" then
luajava.getIdView(value[2]):setTrackActiveTintList(ColorStateList({{}},{"0xff"..color}))
luajava.getIdView(value[2]):setTrackInactiveTintList(ColorStateList({{}},{"0x50"..color}))
luajava.getIdView(value[2]):setThumbTintList(ColorStateList({{}},{"0xff"..color}))
elseif value[1]=="box" then
boxpic[value[2]]:setColorFilter("0xff"..RGBcolor)
elseif value[1]=="check" then
luajava.getIdView(value[2]):setButtonTintList(ColorStateList({{android.R.attr.state_checked},{-android.R.attr.state_checked}},{"0xff"..RGBcolor,0xff49454F}))
elseif value[1]=="snackbar" then
luajava.getIdView(value[2]):setBackgroundTint("0xff"..RGBcolor)
end
end
end)
end
changan.controlWater = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
1, 0.8, 0.9, 1
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
1,0.8,0.9,1
}):setDuration(time):start()
end) end
changan.controlWater2 = function ( control , time )
luajava.runUiThread ( function ( )
import "android.animation.ObjectAnimator"
ObjectAnimator ( ) : ofFloat ( control , "scaleX" , { 1 , 1.1 , 0.9 , 1 } ) : setDuration ( time ) : start ( )
ObjectAnimator ( ) : ofFloat ( control , "scaleY" , { 1 , 0.9 , 1.1 , 1 } ) : setDuration ( time ) : start ( )
end
)
end
slctb = getVerticalBG({0x00000000,0x00000000},15)
slcta = getVerticalBG({0xFF1185FC,0xFF1185FC},15)
function getButtonBG()
local selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, getVerticalBG({0xFF1185FC,0xFF1185FC},15))
selector:addState({
-android.R.attr.state_pressed
}, getVerticalBG({0xffffffff,0xffffffff},15))
return selector
end
function getSelector()
selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, slcta) -- 点击时候的背景
selector:addState({
-android.R.attr.state_pressed
}, slctb) -- 没点击的背景
return selector
end
hanshu = function(v, event)
local Action = event:getAction()
if Action == MotionEvent.ACTION_DOWN then
isMove = false
RawX = event:getRawX()
RawY = event:getRawY()
x = mainLayoutParams.x
y = mainLayoutParams.y
elseif Action == MotionEvent.ACTION_MOVE then
isMove = true
mainLayoutParams.x = tonumber(x) + (event:getRawX() - RawX)
mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY)
window:updateViewLayout(floatWindow, mainLayoutParams)
end
end
function 获取图片(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
YoYoImpl = luajava.getYoYoImpl()
changan.menu = function(sview)
菜单页数=#sview
当前分区={} 分区页数={}
侧边={} 功能区={} 顶边={
LinearLayout,
layout_height='match_parent',
layout_width='match_parent',
}
beij=getVerticalBG({ 0xE687B4EB, 0xE687B4EB }, 25)
侧边ui={
LinearLayout,
layout_width='wrap_content',
layout_height='match_parent',
id='cebians',
gravity='center',
}
jmbg={}
dbback=getVerticalBG({0xE687B4EB, 0xE687B4EB},15)
for i = 1,菜单页数 do
分区页数[i]= #sview[i]
table.insert(顶边,{
LinearLayout,
orientation='vertical',
layout_height='match_parent',
layout_width='wrap_content',
gravity='center_horizontal',
{
TextView,
layout_weight=1,
layout_height='match_parent',
layout_width='wrap_content',
padding={'15dp','2dp','15dp','2dp'},
text=sview[i]['分页名字'],
textColor='0xff000000',
textSize='13sp',
gravity='center',
id='ding'..i,
elevation='2dp',
layout_margin='4dp',
onClick=function() changan.controlFlip(_ENV["ding"..i] , 600 )
切换(i) end,
},
{LinearLayout,
layout_width='25dp',
layout_height='3dp',
layout_marginLeft='10dp',
layout_marginRight='10dp',
__onFinish=function(v)
_ENV['dingbar'..i]=v
end,
}
})
功能区[i]={}
jmbg[i]={}
local cebian = {
LinearLayout,
layout_height = "match_parent",
layout_width = "wrap_content",
orientation = "horizontal",
gravity = "center",
orientation='vertical',
padding={'4dp','0dp','0dp','0dp'},
}
local layoutm={
LinearLayout,
id = "layoutm"..i,
padding='4dp',
layout_width = "match_parent",
orientation = "vertical",
gravity = "center_horizontal",
}
for j = 1,分区页数[i] do
jmbg[i][j]={
getVerticalBG({ 0x00000000,0x00000000 }, 15,2,0xE687B4EB),
getCorner({0xE687B4EB,0xE687B4EB},20,0,0xff000000,20,10,10,10),
}
cebian[#cebian+1] =
{
TextView,
layout_margin='6dp',
id = "jm"..i..j,
background=jmbg[i][j][1],
text = sview[i][j]['分区名字'],
gravity = "center",
textSize = "12sp",
textColor = "0xff000000",
layout_height = "25dp",
layout_width = "60dp",
onClick=function()changan.controlFlip(_ENV["jm"..i..j] , 600 )
分区(j) end
}
local menulayout={
LinearLayout,
layout_width='match_parent',
layout_height='wrap_content',
visibility = "gone",
orientation = "vertical",
id='menu'..i..j,
}
for k,v in pairs(sview[i][j]['功能配置']) do
table.insert(menulayout,v)
end
local menulayout=luajava.loadlayout(menulayout)
功能区[i][j]=menulayout
table.insert(layoutm,menulayout)
end
侧边[i] = luajava.loadlayout(
{
LinearLayout,
layout_height = "wrap_content",
layout_width = "wrap_content",
orientation='vertical',
layout_marginLeft='8dp',
layout_marginRight='dp',
layout_marginBottom='8dp',
{
ScrollView,
layout_height = "match_parent",
layout_width = "wrap_content",
cebian
}})
table.insert(侧边ui,侧边[i])
local menus={
LinearLayout,
layout_width = "270dp",
layout_height = "220dp",
visibility = "gone",
orientation = "vertical",
id=luajava.ids['menus'],
background=菜单背景,
{
ScrollView,
fillViewport = "true",
--padding = "10dp",
gravity = "center",
layout_width = "match_parent",
layout_height = "220dp",
orientation = "horizontal",
layoutm
}}
_ENV["layout"..i] = luajava.loadlayout(menus)
end
顶边={LinearLayout,
layout_width='match_parent',
layout_height='match_parent',
layout_marginLeft='10dp',
layout_marginRight = "60dp",
onClick=function() end,
onTouch=hanshu,
顶边
}
ckou = {
LinearLayout,
layout_width = "wrap_content",
layout_height = "wrap_content",
{ScrollView,
layout_marginLeft='8dp',
layout_height='220dp',
layout_width='70dp',
background=侧边背景,
侧边ui
}
}
_ENV["layout2"]=luajava.loadlayout{
LinearLayout,
layout_hight="wrap_content",
layout_width="260dp",
{
luajava.post(LinearProgressIndicator,baseWindow:getContext()),
id="SearchProgress",
visibility = "gone",
layout_width = '180dp',
layout_height = 'wrap_content',
indeterminate = true,
},
{
LinearLayout,
id=luajava.newId("musicWindow"),
orientation="vertical",
layout_height="match_parent",
layout_width="match_parent",
{
LinearLayout,
layout_hight="wrap_content",
layout_width="255dp",
layout_margin="5dp",
Elevation="3dp",
background={GradientDrawable,color=0xFFFFFFFF,cornerRadius=20},
{
EditText,
id=luajava.newId("搜索"),
background={GradientDrawable,color=0xFFFFFFFF,cornerRadius=20},
gravity="center",
hint="请输入关键词",
textSize="13sp",
layout_weight="1",
HintTextColor="0x40201E1E",
layout_width="match_parent",
textColor="#201E1E",
OnKeyListener={
onKey=function(v,keyCode,event)
if (KeyEvent.KEYCODE_ENTER == keyCode and KeyEvent.ACTION_DOWN == event:getAction()) then
thread=luajava.getThread(function()
searchmusic()
end)
thread:start()
return true;
else
return false;
end
end
}
},
{
LinearLayout,
layout_height="match_parent",
layout_width="1dp",
backgroundColor="0xffdedede",
},
{
TextView,
text="搜索",
gravity="center",
id=luajava.newId("stxt"),
textSize="15sp",
TextColor="#161616",
layout_height="match_parent",
layout_width="50dp",
onClick=function()
thread=luajava.getThread(function()
searchmusic()
end)
thread:start()
end
},
},
{
ListView,
id="musiclistview",
layout_width='match_parent',
layout_height='160dp',
layout_margin="5dp",
--background={GradientDrawable,color=0xFFFFFFFF,cornerRadius=20},
dividerHeight=3,
},
},
}
_ENV["layout3"]=luajava.loadlayout({FrameLayout,
layout_width = "match_parent",
layout_height = "match_parent",
orientation = "vertical",
{
LinearLayout,
layout_height = "wrap_content",
layout_width = "match_parent",
padding={"0dp","0dp","0dp","2dp"},
{
TextView,
background = luajava.loadlayout {
GradientDrawable,
color = "#88000000",
cornerRadius = 20
},
layout_gravity = "center_horizontal",
layout_height = "wrap_content",
id = "onlines",
layout_width = "wrap_content",
text = "🟢在线: 0 人",
padding = "5dp",
textSize = "14sp",
}
},
{ScrollView,
id = "ltslays4",
layout_width = "260dp",
layout_height = "match_parent",
orientation = "vertical",
padding={'0dp','30dp','0dp','40dp'},
{
LinearLayout,
id = "ltslaym4",
gravity = "top",
layout_width = "match_parent",
orientation = "vertical",
gravity = "center_horizontal",
}
},
{LinearLayout,
id="srk",
layout_height="20dp",
layout_width="match_parent",
layout_gravity='bottom',
layout_marginTop="18dp",
padding={"8dp","0dp","8dp","0dp"},
layout_marginBottom='8dp',
gravity="center",
{TextView,
background=getVerticalBG({0xdd161616,0xdd161616},10,2,0xffd7d7d7),
gravity="center",
text="长按录音",
id="recordtext",
textSize="13sp",
layout_height="20dp",
layout_width="80dp",
onTouch = function(view, event)
if event:getAction() == MotionEvent.ACTION_DOWN then
-- 按下时执行的函数
recordtext:setText("正在录音")
luajava.newThread(function()
vibra:vibrate(30)
recorder = MediaRecorder()
-- 设置录音源、输出格式和编码器
recorder:setAudioSource(sourceType)
recorder:setOutputFormat(OutputFormat.THREE_GPP)
recorder:setAudioEncoder(AudioEncoder.AMR_NB)
-- 设置录音文件存储路径
savePath = "/sdcard/孤行/图片/test.mp3"
recorder:setOutputFile(savePath)
recorder:prepare()
recorder:start()
redstart=os.time()
end):start()
elseif event:getAction() == MotionEvent.ACTION_UP then
-- 松开时执行的函数
--
end
end,
onClick=function()
recordtext:setText("长按录音")
luajava.newThread(function()
vibra:vibrate(50)
-- 停止录音
recorder:stop()
-- 释放资源
recorder:release()
if os.time()-redstart<1 then
gg.alert("时间太短\n最少要录制1秒")
return 0
end
if os.time()-redstart>40 then
gg.alert("时间太长\n一条最多录制40秒")
return 0
end
uprec(savePath)
gg.toast("发送成功")
end):start()
end,
},
{ImageView,
background=luajava.loadlayout({
GradientDrawable,
color = "#ddffffff",
cornerRadius = 12
}),
gravity="center",
padding = "2dp",
src=获取图片("http://"..channel2.."/pictures/pic"),
layout_marginLeft="3dp",
layout_height="20dp",
layout_width="30dp",
onClick=function() luajava.newThread(xuantu):start() end
},{EditText,
id = luajava.newId("聊天框"),
background = "#ddffffff",
textSize = "13sp",
inputType = "textMultiLine",
textColor = "#000000",
layout_marginLeft = "3dp",
layout_height = "40dp",
layout_weight = 1,
layout_width = "95dp",
focusable = true,
focusableInTouchMode = true,
},
{TextView,
background=getVerticalBG({0xdd161616,0xdd161616},10,2,0xffd7d7d7),
gravity="center",
text="发送",
textSize="13sp",
layout_marginLeft="3dp",
layout_height="20dp",
layout_width="40dp",
onClick=function() luajava.newThread(function() 发送聊天2(changan.getedit2("聊天框")) end):start() end
},
}})
_ENV["layout4"]= luajava.loadlayout({FrameLayout,
layout_width = "match_parent",
layout_height = "match_parent",
orientation = "vertical",
{ScrollView,
id = "ltslays4ai",
layout_width = "260dp",
layout_height = "match_parent",
orientation = "vertical",
padding={'0dp','30dp','0dp','40dp'},
{
LinearLayout,
id = "ltslaym4ai",
gravity = "top",
layout_width = "match_parent",
orientation = "vertical",
gravity = "center_horizontal",
}
},
{LinearLayout,
id="srkai",
layout_height="20dp",
layout_width="match_parent",
layout_gravity='bottom',
layout_marginTop="18dp",
padding={"8dp","0dp","8dp","0dp"},
layout_marginBottom='8dp',
gravity="center",
{EditText,
id = luajava.newId("聊天框ai"),
background = "#ddffffff",
textSize = "13sp",
inputType = "textMultiLine",
textColor = "#000000",
layout_marginLeft = "3dp",
layout_height = "40dp",
layout_weight = 1,
layout_width = "206dp",
focusable = true,
focusableInTouchMode = true,
},
{TextView,
background=getVerticalBG({0xdd161616,0xdd161616},10,2,0xffd7d7d7),
gravity="center",
text="发送",
textSize="13sp",
layout_marginLeft="3dp",
layout_height="20dp",
layout_width="40dp",
onClick=function() luajava.newThread(function() 发送聊天ai(changan.getedit2("聊天框ai")) end):start() end
},
}})
for i = 1,菜单页数 do
ckou[#ckou+1] = _ENV["layout"..i]
end
function topSelect()
local selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, getVerticalBG({0x22161616,0x22161616},30))
selector:addState({
-android.R.attr.state_pressed
}, empty)
return selector
end
IslandPicMain = luajava.loadlayout ({
ImageView,
id="IslandPic",
src="/sdcard/孤行/图片/headphone",
layout_gravity="right|center",
background={GradientDrawable,color=0xff161616,cornerRadius=90},
layout_width="21dp",
layout_height="21dp",
clipToOutline=true,
})
topbar = luajava.loadlayout({
LinearLayout,
layout_width="wrap_content",
layout_height="35dp",
layout_marginRight = "10dp",
background=getCorner({0x00000000,0x00000000},15,0,0xff232323,20,20,0,0),
onClick=function() end,
onTouch=hanshu,
{LinearLayout,
layout_width="35dp",
layout_height="match_parent",
gravity="center",
{
FrameLayout,
layout_gravity="left|center",
background=getVerticalBG({0xffE6E6E6,0xffE6E6E6},90),
layout_width = "20dp",
layout_height = "20dp",
layout_marginLeft = "5dp",
onClick = 隐藏,
onTouch = hanshu,
{LinearLayout,
layout_height="2dp",
layout_width="10dp",
layout_gravity="center",
background=getVerticalBG({0xff2c2c2c,0xff2c2c2c},45),
}
}
},
{LinearLayout,
layout_width="335dp",
layout_height="match_parent",
gravity="center",
{
LinearLayout,
id='cvv',
layout_width='335dp',
layout_height='match_parent',
gravity="center",
}
}
})
ckou = luajava.loadlayout(ckou)
floatWindow = {
FrameLayout,
id = "motion",
elevation = "10dp",
onTouch = hanshu,
onClick = function() end,
layout_width = "wrap_content",
orientation = "vertical",
gravity = "center_vertical",
layout_height = "wrap_content",
{LinearLayout,
orientation='vertical',
id='chuangk',
visibility='gone',
{--顶部栏
FrameLayout,
orientation = "horizontal",
padding = "2dp",
layout_height='35dp',
layout_width="335dp",
background=getCorner({0x00000000,0x00000000},20,0,0xffFFE543,25,25,25,25),
topbar,
{
FrameLayout,
layout_gravity="right|center",
layout_width = "20dp",
layout_height = "20dp",
layout_marginLeft = "5dp",
onClick = 隐藏,
onTouch = hanshu,
{ImageView,
padding = "5dp",
layout_gravity="center",
src = getRes("heix"),
background = getVerticalBG({ 0xffE6E6E6, 0xffE6E6E6 }, 90),
layout_width = "20dp",
layout_height = "20dp",
layout_marginRight = "5dp",
layout_marginLeft = "5dp",
onClick = 隐藏,
onTouch = hanshu,
}
}
},
ckou,
{
FrameLayout,
orientation = "horizontal",
padding = "2dp",
layout_height='45dp',
layout_width="fill_parent",
background=getCorner({0x00000000,0x00000000},45,0,0xffFFE543,25,25,25,25),
顶边,
},
},
{
FrameLayout,
id = "dprw",
layout_width = "350dp",
layout_height = "300dp",
gravity = "center",
{
ImageView,
layout_gravity = "right|bottom",
layout_width = "60dp",
layout_height = "60dp",
src=获取图片(底部人物),
}
},
{
FrameLayout,
layout_marginTop="5dp",
layout_marginLeft="20dp",
layout_marginRight="20dp",
layout_gravity="center|top",
id="lingdongdaodb",
layout_width="wrap_content",
layout_height='wrap_content',
elevation="8dp",
background={GradientDrawable,color=0xff161616,cornerRadius=90},
LayoutTransition=layoutTransition,
{
LinearLayout,
gravity="center",
id=luajava.newId("SmallIsland"),
layout_height="25dp",
layout_width="105dp",
onTouch=function(view, event)
local action = event:getAction()
if action == MotionEvent.ACTION_DOWN then
initialY = event:getY()
elseif action == MotionEvent.ACTION_MOVE then
local currentY = event:getY()
local deltaY = currentY - initialY
if deltaY < -threshold and canSwipeUp then
灵动岛()
canSwipeUp = false
canSwipeDown = true
elseif deltaY > threshold and canSwipeDown then
灵动岛()
canSwipeDown = false
canSwipeUp = true
end
end
return true
end,
{
LinearLayout,
id=luajava.newId("Smalldisplay"),
layout_height="25dp",
layout_width="100dp",
gravity="center",
IslandPicMain,
{
TextView,
id="IslandText",
layout_weight=1,
gravity="center",
layout_width="match_parent",
layout_height="120dp",
text="",--上下滑动长按双击交互
ellipsize="marquee",
singleLine=true,
selected=true,
textColor="#FAFAFA",
textSize="8dp",
},
{
LottieAnimationView,
id = "musicicon1",
layout_width="21dp",
layout_height="21dp",
},
}
},
{
LinearLayout,
id="Island",
layout_height="150dp",
visibility="gone",
layout_width="300dp",
onClick=function() end,
onTouch=function(view, event)
local action = event:getAction()
if action == MotionEvent.ACTION_DOWN then
initialY = event:getY()
elseif action == MotionEvent.ACTION_MOVE then
local currentY = event:getY()
local deltaY = currentY - initialY
if deltaY < -threshold and canSwipeUp then
灵动岛()
canSwipeUp = false
canSwipeDown = true
elseif deltaY > threshold and canSwipeDown then
灵动岛()
canSwipeDown = false
canSwipeUp = true
end
end
return true
end,
{
LinearLayout,
id=luajava.newId("music"),
layout_height="fill_parent",
layout_width="fill_parent",
orientation="vertical",
{
TextView,
id="Mname",
gravity="center",
layout_width="fill_parent",
layout_height="wrap_control",
layout_marginTop="10dp",
text=timeA,
ellipsize="marquee",
singleLine=true,
selected=true,
textColor="#FAFAFA",
textSize="12dp",
},
{
luajava.post(LinearProgressIndicator,baseWindow:getContext()),
id="DownloadProgress",
visibility = "gone",
layout_width = 'match_parent',
layout_height = 'wrap_content',
indeterminate = true,
},
{
FrameLayout,
layout_marginTop="10dp",
layout_width="fill_parent",
layout_height="wrap_control",
{
ImageView,
src="/sdcard/孤行/图片/ts",
layout_width="20dp",
layout_marginRight="match_parent",
layout_marginLeft="15dp",
layout_gravity="center|left",
layout_height="20dp",
onClick=function() 自定义主题() end,
ColorFilter="#FAFAFA",
},
{
TextView,
id="GSname",
layout_marginLeft="15dp",
layout_gravity="center",
layout_marginRight="15dp",
gravity="center",
layout_width="fill_parent",
layout_height="wrap_control",
text="",
ellipsize="marquee",
singleLine=true,
selected=true,
textColor="#A9B3B4",
textSize="8dp",
},
{
ImageView,
src="/sdcard/孤行/图片/playlist",
layout_width="20dp",
layout_marginLeft="match_parent",
layout_marginRight="15dp",
layout_gravity="center|right",
layout_height="20dp",
onClick=function() 播放列表() end,
ColorFilter="#FAFAFA",
},
},
{
LinearLayout,
gravity="center",
layout_width='match_parent',
layout_height='wrap_content',
{
TextView,
id="ntime",
gravity="center|right",
layout_width="45dp",
layout_height="wrap_control",
text="0:00",
textColor="#FAFAFA",
textSize="12dp",
},
{
Slider,
id="hkuai",
trackStopIndicatorSize="0dp",
layout_weight=1,
stepSize=1,
valueTo=100,
valueFrom=0,
trackHeight="10dp",
ThumbHeight="17dp",
tickVisible=false,
thumbWidth="4dp",
layout_width='match_parent',
layout_height='wrap_content',
labelFormatter=function(seconds)
if isPlaying then return ctime(seconds) else return "0:00" end
end,
addOnChangeListener=function(slider, value, fromUser)
if fromUser and isPlaying and isReady then mediaPlayer:seekTo(value*1000) end
end
},
{
TextView,
id="atime",
gravity="center|left",
layout_width="45dp",
layout_height="wrap_control",
text="0:00",
textColor="#FAFAFA",
textSize="12dp",
},
},
{
LinearLayout,
layout_width='match_parent',
layout_height='wrap_content',
layout_marginLeft="20dp",
layout_marginRight="20dp",
{
LinearLayout,
id=luajava.newId("Collection"),
layout_weight=1,
layout_width="match_parent",
layout_height="match_parent",
gravity="center",
{
ImageView,
id="souc",
src="/sdcard/孤行/图片/unlove",
layout_width="20dp",
layout_height="20dp",
onClick=function() changan.controlWater(luajava.getIdView("Collection"),200) 收藏() end,
ColorFilter="#FAFAFA",
},
},
{
LinearLayout,
id=luajava.newId("PreviousAong"),
layout_weight=1,
layout_width="match_parent",
layout_height="match_parent",
gravity="center",
{
ImageView,
src="/sdcard/孤行/图片/last",
layout_width="25dp",
layout_height="25dp",
onClick=function() changan.controlWater(luajava.getIdView("PreviousAong"),200) 上一首() end,
ColorFilter="#FAFAFA",
},
},
{
LinearLayout,
layout_weight=1,
id=luajava.newId("PauseLayout"),
layout_width="match_parent",
layout_height="match_parent",
gravity="center",
{
LottieAnimationView,
id="ztkq",
layout_width="25dp",
layout_height="25dp",
onClick=function() 暂停() end,
},
},
{
LinearLayout,
id=luajava.newId("NextSong"),
layout_weight=1,
layout_width="match_parent",
layout_height="match_parent",
gravity="center",
{
ImageView,
src="/sdcard/孤行/图片/next",
layout_width="25dp",
layout_height="25dp",
onClick=function() changan.controlWater(luajava.getIdView("NextSong"),200) 下一首() end,
ColorFilter="#FAFAFA",
},
},
{
LinearLayout,
layout_weight=1,
id=luajava.newId("LoopSetting"),
layout_width="match_parent",
layout_height="match_parent",
gravity="center",
{
ImageView,
id="bfsz",
src="/sdcard/孤行/图片/setPlay",
layout_width="20dp",
layout_height="20dp",
onClick=function() 播放设置() end,
ColorFilter="#FAFAFA",
},
},
}
}
},
},
{
LinearLayout,
id="shadow",
layout_width="match_parent",
visibility="gone",
layout_height='match_parent',
onClick=function() 灵动岛() canSwipeUp=false canSwipeDown=true end
},
{
ImageView,
id = "control",
background = 获取图片(悬浮窗图标),
layout_width = "40dp",
layout_height = "40dp",
onTouch = hanshu,
onClick = 隐藏,
}
}
local function invoke()
local ok
local RawX, RawY, x, y
mainLayoutParams = getLayoutParams()
floatWindow = luajava.loadlayout(floatWindow)
local function invoke2()
window:addView(floatWindow, mainLayoutParams)
block('end')
end
SliderColor(hkuai,"E687B4EB","D4D4D4","FFFFFF")
ztkq:setAnimationFromJson(io.open("/storage/emulated/0/孤行/图片/Pause", "r"):read("*all"))
musicicon1:setAnimationFromJson(io.open("/sdcard/孤行/图片/Playing", "r"):read("*all"))
musicicon1:setVisibility(View.GONE)
local runnable = luajava.getRunnable(invoke2)
local handler = luajava.getHandler()
handler:post(runnable)
block('join')
local isMove
end
invoke(swib1,swib2)
if ffui~=nil then ffui() end
切换(1) 分区(1)
隐藏()
gg.setVisible(false)
luajava.setFloatingWindowHide(true)
qhkai = 0
qiehuan = function()
if qhkai == 0 then
qhkai = 1
draw.remove()
luajava.runUiThread(function()
for k,v in pairs(floattable) do
if v==1 then
changan.controlSmall(_ENV[k],400)
end
end
changan.controlSmall(floatWindow,400)
end)
gg.sleep(400)
luajava.runUiThread(function()
floatWindow:setVisibility(View.GONE)
for k,v in pairs(floattable) do
if v==1 then
_ENV[k]:setVisibility(View.GONE)
end
end
end)
else
qhkai = 0
huiz()
draw.text('.', -9200,-9200)
luajava.runUiThread(function()
floatWindow:setVisibility(View.VISIBLE)
changan.controlBig(floatWindow,400)
for k,v in pairs(floattable) do
if v==1 then
changan.controlBig(_ENV[k],400)
_ENV[k]:setVisibility(View.VISIBLE)
end
end
end)
end
end
huiz()
while true do
if tuichu==1 then break end
jianting3(qiehuan)
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
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)
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()
gg.toast("隐藏")
end):start()
end
end,500)
})
dexloader=dex.loadfile('/sdcard/孤行/图片/classes3.dex')
MySensorManager = dexloader:loadClass('yaocn.rlyun.yaoyiyao.MySensorManager')
luajava.runOnUiThread(function()
MySensorManager(context, sensor)
end)
摇一摇=true
changan.controlRotation9 = function(control, time,t)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", {
time,t
})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.RESTART)
xuanzhuandonghua:setDuration(400)
xuanzhuandonghua:start()
end)
end
namelist = {}
param1 = {}
floattable = {}
function 打开页面(name)
if _ENV['fenye'..name]==nil then gg.alert(name..'页面未创建') return 0 end
if floattable['fenye'..name]==1 then 关闭页面(name) return end
floattable['fenye'..name]=1
window = context:getSystemService("window") -- 获取窗口管理器
local function invoke(name,func1,func2)
local function invoke2()
window:addView(_ENV['fenye'..name], param1[name])
end
local runnable = luajava.getRunnable(invoke2)
local handler = luajava.getHandler()
handler:post(runnable)
end
invoke(name,func1,func2)
end
function 关闭页面(name)
if _ENV['fenye'..name]==nil then gg.alert(name..'页面未创建') return 0 end
if floattable['fenye'..name]==0 then return 0 end
floattable['fenye'..name]=0
local function invoke2()
window:removeView(_ENV['fenye'..name])
end
local runnable = luajava.getRunnable(invoke2)
local handler = luajava.getHandler()
handler:post(runnable)
end
function 创建页面(name,vs)
if type(vs)~='table' then gg.alert(name..'创建页面格式错误') os.exit() end
local tmp={LinearLayout,
layout_width='match_parent',
orientation='vertical'
}
for i=1,#vs do
table.insert(tmp,vs[i])
end
param1[name] = getLayoutParams2()
_ENV['fenye'..name] = luajava.loadlayout(
{
LinearLayout,
layout_width = "wrap_content",
layout_height = "wrap_content",
orientation='vertical',
gravity='center_horizontal',
background=luajava.loadlayout({
GradientDrawable ,
color = "0xffeeeeee" ,
cornerRadius = 15
} ),
padding={'10dp','5dp','10dp','5dp'},
{
TextView,
textColor='0xff000000',
text = name,
textSize='14sp',
gravity = "center",
layout_width = "70dp",
layout_height = "wrap_content",
onClick=function()
local vis=luajava.getIdView(name)
if vis:getVisibility()==8.0 then
changan.controlBig(vis,400)
vis:setVisibility(View.VISIBLE)
else
changan.controlSmall(vis,400)
vis:setVisibility(View.GONE)
end
end,
onTouch=function(v, event)
local Action = event:getAction()
if Action == MotionEvent.ACTION_DOWN then
isMove = false
RawX = event:getRawX()
RawY = event:getRawY()
x = param1[name].x
y = param1[name].y
elseif Action == MotionEvent.ACTION_MOVE then
isMove = true
param1[name].x = tonumber(x) + (event:getRawX() - RawX)
param1[name].y = tonumber(y) + (event:getRawY() - RawY)
window:updateViewLayout(_ENV['fenye'..name], param1[name])
end
end,
},
{ScrollView,
visibility='gone',
id=luajava.newId(name),
layout_width='120dp',
layout_height='250dp',
tmp
}
})
if type(_ENV['fenye'..name])~='userdata' then gg.alert(name..'生成失败') os.exit() end
end
paramt = {}
titletable = {}
corb = true
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.WRAP_CONTENT -- 布局宽度
layoutParams1.height = prm.WRAP_CONTENT -- 布局高度
return layoutParams1
end
function getjb()
local jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(15)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors({0xff397EF8,0xff25C4FD})
jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT)
return jianbians
end
function getjb()
local jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(15)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors({0xff397EF8,0xff25C4FD})
jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT)
return jianbians
end
tjb1=getjb()
tjb2=luajava.loadlayout {
GradientDrawable,
color = "#aa0082FF",
cornerRadius = 12
}
function chatbg()
local jb=getVerticalBG({0xaa161616,0xaa161616},17,2,0xffd8d8d8)
return jb
end
function getShape3()
jianbians = luajava.loadlayout({
GradientDrawable,
type = "linear",
angle = "135",
})
jianbians:setCornerRadius(22)
jianbians:setOrientation(GradientDrawable.Orientation.TL_BR)
jianbians:setColors({
0x55ffffff,0x55ffffff
})
jianbians:setStroke(5,0xffffffff)--边框宽度和颜色
return jianbians
end
function chatbg2()
local selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, luajava.loadlayout {
GradientDrawable,
color = "#aa2D8BFF",
cornerRadius = 12
}) -- 点击时候的背景
selector:addState({
-android.R.attr.state_pressed
}, getjb()) -- 没点击的背景
return selector
end
function visi (tid , ttid)
vibra:vibrate(4)
local tview = luajava.getIdValue (tid)
local ttview = luajava.getIdValue (ttid)
if not tview then
return 0
end
if tonumber (tostring (tview : getVisibility ())) == 8.0 then
tview : setVisibility (View.VISIBLE)
--YoYoImpl:with("FadeIn"):duration(200):playOn(boxes[tid])
changan.controlRotation9(boxpic[tid],0,90)
else
tview : setVisibility (View.GONE)
--changan.controlWater (_ENV [tid.."6"] , 200)
changan.controlRotation9(boxpic[tid],90,0)
end
end
function visi2 (tid , ttid)
local tview = luajava.getIdValue (tid)
local ttview = luajava.getIdValue (ttid)
if not tview then
return 0
end
if tonumber (tostring (tview : getVisibility ())) == 8.0 then
tview : setVisibility (View.VISIBLE)
else
tview : setVisibility (View.GONE)
end
end
function jybg(color,jiao)
return luajava.loadlayout{GradientDrawable,color=color,
cornerRadius=jiao}
end
boxes = {} boxpic = {}
function changan.box (views)
local tid = "box"..guid ()
colorvs[#colorvs+1]={"box",tid}
boxpic[tid] = luajava.loadlayout {
ImageView ,
src = getRes("hei_right"),
layout_width = "24dp" ,
layout_height = "24dp" ,
colorFilter=0xff000000
}
local ttid = tid.."6"
local t1id = guid ()
firadio = {
LinearLayout ,
layout_width = 'fill_parent' ,
layout_height = "wrap_content" ,
layout_margin = "2dp" ,
orientation = "vertical" ,
}
if type (views [1]) == "string" or type (views [1]) == "number" then
firadio [# firadio + 1] = {
LinearLayout ,
layout_width = 'fill_parent' ,
layout_height = "35dp" ,
gravity = "center_vertical" ,
layout_margin = "5dp" ,
onClick = function ()
visi (tid , ttid)
end
,
elevation='2dp',
background = getButtonBG(),
{
TextView ,
Typeface=font,
text = views [1] ,
textSize = "12sp" ,
layout_marginLeft = "15dp" ,
layout_width = "match_parent" ,
layout_weight=1,
textColor = "#000000" ,
gravity = "left" ,
},{
LinearLayout ,
padding={"0dp","0dp","10dp","0dp"},
layout_width = "30dp" ,
layout_height = "30dp" ,
gravity = "center",
boxpic[tid],
}
} else
gg.alert ("changan.box的table内第一个元素必须是string") os.exit ()
end
radios = {
LinearLayout ,
layout_marginLeft = "0dp" ,
layout_marginRight = "0dp" ,
orientation = "vertical" ,
visibility = "gone" ,
id = luajava.newId (tid) ,
padding = "0dp" ,
layout_width = 'fill_parent' ,
}
for i = 2 , # views do
radios [# radios + 1] = views [i]
end
boxes[tid] = luajava.loadlayout(radios)
firadio [# firadio + 1] = boxes[tid]
_ENV [t1id] = luajava.loadlayout (firadio)
return _ENV [t1id]
end
corbk = true
当前ui = 1
function 分区(x)
当前分区[当前ui]=x
luajava.runUiThread(function()
for i=1,分区页数[当前ui] do
_ENV['menu'..当前ui..i]:setVisibility(View.GONE)
_ENV['jm'..当前ui..i]:setTextColor(0xff000000)
_ENV['jm'..当前ui..i]:setBackground(jmbg[当前ui][i][1])
end
_ENV['menu'..当前ui..当前分区[当前ui]]:setVisibility(View.VISIBLE)
_ENV['jm'..当前ui..当前分区[当前ui]]:setTextColor(0xffffffff)
_ENV['jm'..当前ui..当前分区[当前ui]]:setBackground(getVerticalBG({ 0xE687B4EB, 0xE687B4EB }, 15))
changan.controlBigY(_ENV['jm'..当前ui..当前分区[当前ui]],600)
end)
end
function 切换(x)
当前ui = x
luajava.runUiThread(function()
if 当前分区[当前ui]==nil then
分区(1)
end
for i = 1,菜单页数 do
_ENV["ding"..i]:setTextColor(0xff000000)
_ENV["ding"..i]:setBackground(getVerticalBG({ 0xffffffff, 0xffffffff }, 15))
_ENV['dingbar'..i]:setBackground(empty)
_ENV["layout"..i]:setVisibility(View.GONE)
侧边[i]:setVisibility(View.GONE)
end
_ENV["ding"..当前ui]:setTextColor(0xffffffff)
_ENV["ding"..当前ui]:setBackground(getVerticalBG({ 0xE687B4EB, 0xE687B4EB }, 15))
_ENV["layout"..当前ui]:setVisibility(View.VISIBLE)
_ENV['dingbar'..当前ui]:setBackground(empty)
changan.controlBigY(_ENV['dingbar'..当前ui],600)
侧边[当前ui]:setVisibility(View.VISIBLE)
end)
end
显示 = 0
beij2 = luajava.loadlayout({
GradientDrawable,
color = "#001E1C27",
cornerRadius = 10
})
function changan.text(txt,color,size)
if not txt then txt = "未设置文字" end
if not color then color = "#545454" end
if not size then size = "12sp" end
return luajava.loadlayout(
{
TextView,
text = txt,
textSize = size,
textColor = color,
layout_width = "match_parent",
padding={'10dp','0dp','0dp','0dp'}
})
end
显示 = 0
function 隐藏()
already=true
luajava.runUiThread(function()
if tonumber(tostring(chuangk:getVisibility())) == 8.0 then
control:setVisibility(View.GONE)
显示 = 1
chuangk:setVisibility(View.VISIBLE)
_ENV["layout"..当前ui]:setVisibility(View.VISIBLE)
dprw:setVisibility(View.VISIBLE)
lingdongdaodb:setVisibility(View.VISIBLE)
YoYoImpl:with("FadeIn"):duration(500):playOn(floatWindow)
floatWindow:setBackground(beij)
mainLayoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
window : updateViewLayout (floatWindow , mainLayoutParams)
else
显示 = 0
luajava.startThread(function()
luajava.runUiThread(function()
YoYoImpl:with("FadeOut"):duration(500):playOn(floatWindow)
end)
gg.sleep(500)
luajava.runUiThread(function()
chuangk:setVisibility(View.GONE)
floatWindow:setBackground(beij2)
control:setVisibility(View.VISIBLE)
_ENV["layout"..当前ui]:setVisibility(View.GONE)
dprw:setVisibility(View.GONE)
lingdongdaodb:setVisibility(View.GONE)
mainLayoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE
window : updateViewLayout (floatWindow , mainLayoutParams)
YoYoImpl:with("FadeIn"):duration(400):playOn(floatWindow)
end)
end)
end
end)
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音调的声音
}
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
function jianting2()
yinln = {}
for i = 1,#audiotype do
yinln[i] = {}
yinln[i].type = audiotype[i]
yinln[i].min = audi:getStreamMinVolume(audiotype[i])
yinln[i].max = audi:getStreamMaxVolume(audiotype[i])
yinln[i].now = audi:getStreamVolume(audiotype[i])
if yinln[i].now > yinl[i].now then
audi:adjustStreamVolume(yinln[i].type,AudioManager.ADJUST_LOWER,0)
gg.alert("up")
elseif yinln[i].now < yinl[i].now then
audi:adjustStreamVolume(yinln[i].type,AudioManager.ADJUST_RAISE,0)
gg.alert("down\n"..yinln[i].now.."\n"..yinl[i].now)
end
end
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
function jianting(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].max then
audi:adjustStreamVolume(yinln[i].type,AudioManager.ADJUST_LOWER,0)
end
if yinln[i].now > yinl[i].now then
audi:setStreamVolume(yinln[i].type,yinl[i].now,0)
func()
end
end
end
function guid()
seed = {
'e','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'
}
tb = {}
for i = 1,32 do
table.insert(tb,seed[math.random(1,16)])
end
sid = table.concat(tb)
return string.format('%s%s%s%s%s',
string.sub(sid,1,8),
string.sub(sid,10,12),
string.sub(sid,21,22))
..string.format('%s%s%s%s%s',
string.sub(sid,1,6),
string.sub(sid,21,25)
)
end
local function exit()
mediaPlayer:reset()
mediaPlayer:release()
window:removeView(floatWindow)
tuichu = 1
luajava.setFloatingWindowHide(false)
luajava.post(function()
window:removeView(floatWindow)
for k,v in pairs(floattable) do
if v==1 then
window:removeView(_ENV[k])
end
end
end)
end
setExitEvent(exit)
changan.controlWater = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
1, 0.8, 0.9, 1
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
1,0.8,0.9,1
}):setDuration(time):start()
end) end
changan.controlSmall = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
1, 0.7, 0.4, 0
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
1, 0.7, 0.4, 0
}):setDuration(time):start()
end) end
changan.controlBig = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
end) end
changan.controlBigY = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
end) end
colorvs = {} -- 初始化 colorvs 表
function changan.switch(name,func1,func2)
ID = name..guid()
colorvs[#colorvs + 1] = {"switch", ID}
Checked = false
if name=="音量键隐藏UI" then
音量键 = true
Checked = true
end
if name=="摇一摇隐藏UI" then
摇一摇 = true
Checked = true
end
rest = luajava.loadlayout({
LinearLayout,
layout_width="fill_parent",
layout_height = "47dp",
gravity = "center",
{
LinearLayout,
layout_width = 'fill_parent',
layout_height = "40dp",
gravity = "center",
elevation = "2dp",
layout_marginRight = "4dp",
layout_marginLeft = "4dp",
background = luajava.loadlayout {
GradientDrawable ,
color = 0xffffffff ,
cornerRadius = 15
} ,padding = {
"0dp","0dp","6dp","0dp"
},
{
TextView,
Typeface=font,
gravity = "top",
text = name,
textColor = "0xff000000",
textSize = "13sp",
layout_weight = 1,
layout_width = 'fill_parent',
layout_marginLeft = "10dp",
layout_marginRight = "20dp",
},
{
MaterialSwitch,
id = luajava.newId(ID),
layout_weight = 1,
layout_width = 'fill_parent',
trackTintList=(ColorStateList({{android.R.attr.state_checked},{}},{"0xff"..RGBcolor,0x28FF8FFFF})),
thumbTintList=(ColorStateList({{android.R.attr.state_checked},{-android.R.attr.state_checked}},{0xFFFFFFFF,0xFF4B484F})),
thumbIconDrawable = SwitchDrawable("mqopen", "mqclose"),
checked = Checked,
layout_width = 'fill_parent',
layout_height = 'wrap_content',
onCheckedChange = function(compoundButton, isChecked)
luajava.newThread(function()
if isChecked then
pcall(func1)
else
pcall(func2)
end
end):start()
end
}
}
})
return rest
end
import "android.graphics.Color"
import "android.content.res.ColorStateList"
function SliderColor(id,color1,color2,color3)
id:setTrackActiveTintList(ColorStateList({{}},{"0xff"..color1}))
id:setTrackInactiveTintList(ColorStateList({{}},{"0x50"..color2}))
id:setThumbTintList(ColorStateList({{}},{"0xff"..color3}))
end
function SwitchColor(id,color)
id:setTrackTintList(ColorStateList({{android.R.attr.state_checked}},{color}))
end
changan.controlRotation9 = function(control, time,t)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", {
time,t
})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.RESTART)
xuanzhuandonghua:setDuration(400)
xuanzhuandonghua:start()
end)
end
buts={}
function changan.button(txt,func,txtc)
if not txt then txt = "未设置" end
if not txtc then txtc="0xff000000" end
local tid="Cbutton"..guid()
buts[tid]=luajava.loadlayout({
LinearLayout,
layout_width = 'match_parent',
layout_height = "40dp",
gravity = "center",
{
LinearLayout,
layout_width = 'match_parent',
layout_height = "35dp",
gravity = "center",
elevation = "2dp",
layout_marginRight = "4dp",
layout_marginLeft = "4dp",
background = getButtonBG(),
padding = {
"0dp","0dp","6dp","0dp"
},
onClick = function()
changan.controlWater(buts[tid],300)
luajava.newThread(func):start() end,
{
TextView,
Typeface=font,
gravity = "top",
text = txt,
textColor = txtc,
textSize = "13sp",
layout_weight = 1,
layout_width = 'fill_parent',
layout_marginLeft = "10dp",
layout_marginRight = "20dp",
},
{
ImageView,
layout_weight = 1,
src=getRes("heir"),
ColorFilter = "0xffeeeeee",
layout_marginRight = "4dp",
layout_height="30dp",
layout_gravity = "center",
layout_width="30dp",
}
}
})
return buts[tid]
end
function getButtonBG()
local selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, getVerticalBG({0x34000400,0x34000400},17))
selector:addState({
-android.R.attr.state_pressed
}, getVerticalBG({0xffffffff,0xffffffff},17))
return selector
end
function changan.intcheck(name,func1,func2)
nid = name..guid()
swits[nid]={
getVerticalBG({0xff0091FF,0xff4F82FF},18),
getVerticalBG({0x88161616,0x88161616},18),
false,
}
local func = 开关5(name,func1,func2,nid)
if not name then name = "未设置" end
_ENV[nid.."k"]=luajava.loadlayout({
TextView,
id = luajava.newId(nid.."k"),
background = swits[nid][2],
layout_width = 'wrap_content',
layout_height = 'wrap_content',
padding={"13dp","3dp","13dp","3dp"},
gravity="center",
text="关",
textColor="#ffffff",
textSize="13sp",
})
_ENV[nid.."g"]=luajava.loadlayout({LinearLayout,
{
TextView,
layout_marginLeft="7dp",
id = luajava.newId(nid.."g"),
background = empty,
layout_width = 'wrap_content',
layout_height = 'wrap_content',
padding={"13dp","3dp","13dp","3dp"},
gravity="center",
text="开",
textColor="#ffffff",
textSize="13sp",
}})
local rest = luajava.loadlayout({
FrameLayout,
layout_width = 'wrap_content',
layout_height = "wrap_content",
layout_marginTop = "1dp",
layout_marginBottom = "1dp",
padding={"0dp","0dp","0dp","0dp"},
{
LinearLayout,
layout_marginLeft="8dp",
layout_marginTop="3dp",
layout_marginBottom="3dp",
layout_marginRight="6dp",
onClick = function() luajava.newThread(function() func() end):start() end,
layout_width = 'fill_parent',
layout_height = "wrap_content",
gravity = "center_vertical",
layout_gravity="center",
--background = randbg2(),
orientation="vertical",
{
TextView,
gravity = "left",
text = name,
textColor="#000000",
textSize = "11sp",
layout_height="wrap_content",
layout_width = '100dp',
},
{
LinearLayout,
id = luajava.newId(nid),
background = getVerticalBG({0xe84B7CFF,0x88974BFF},18,4,0xff69C2FF),
layout_width = 'wrap_content',
layout_height = 'wrap_content',
padding = "5dp",
_ENV[nid.."k"], _ENV[nid.."g"]
}},
{LinearLayout,
layout_height="15dp",
layout_width="15dp",
layout_marginLeft="4dp",
layout_marginTop="14dp",
},{LinearLayout,
layout_height="20dp",
layout_width="30dp",
layout_gravity="right|bottom"
}
})
return rest
end
function 开关5(name,func1,func2,nid)
local sname = nid
local localname=name
name = nid..guid()
_ENV[name] = "关"
if func1 == nil then func1 = "" end
if func2 == nil then func2 = "" end
if type(func1) == "function" then
return function()
namers = _ENV[name]
if namers ~= "开" then
swits[sname][3]=true
vibra:vibrate(14)
luajava.runUiThread(function()
luajava.getIdValue(sname.."k"):setBackground(empty)
luajava.getIdValue(sname.."g"):setBackground(swits[sname][1])
YoYoImpl:with("FadeInLeft"):duration(400):playOn(_ENV[nid.."g"])
end)
_ENV[name] = "开"
pcall(func1)
else
swits[sname][3]=false
vibra:vibrate(14)
luajava.runUiThread(function()
luajava.getIdValue(sname.."k"):setBackground(swits[sname][2])
luajava.getIdValue(sname.."g"):setBackground(empty)
YoYoImpl:with("FadeInRight"):duration(400):playOn(_ENV[nid.."k"])
end)
_ENV[name] = "关"
pcall(func2)
end
end
end
end
import "android.graphics.Color"
import "android.content.res.ColorStateList"
function changan.check(cklist)
if #cklist==0 then return nil end
local rest = {
LinearLayout,
layout_width = 'fill_parent',
layout_height = "wrap_content",
gravity = "center",
orientation="vertical",
}
for i = 1, #cklist,2 do
local tempTable = {LinearLayout,
layout_width = 'fill_parent',
layout_height = "wrap_content",
gravity = "left",
orientation="horizontal"
}
for j = 0, 1 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.intcheck2(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 luajava.loadlayout(rest)
end
function changan.intcheck2(name,func1,func2)
ID = name..guid()
colorvs[#colorvs+1]={"check",ID}
if not name then name="未设置" end
check={
LinearLayout,
layout_width='match_parent',
layout_height="42dp",
layout_weight=1,
layout_marginTop="1dp",
layout_marginBottom="1dp",
{
CheckBox,
id=luajava.newId(ID),
buttonTintList=ColorStateList({{android.R.attr.state_checked},{-android.R.attr.state_checked}},{"0xff"..RGBcolor,0xff49454F}),
layout_gravity="center",
layout_width='match_parent',
layout_height='wrap_content',
text=name,
onCheckedChange=function(compoundButton,isChecked)
if isChecked then
luajava.newThread(function()
pcall(func1)
end):start()
else
luajava.newThread(function()
pcall(func2)
end):start()
end
end
}
}
return check
end
radiog={}
function changan.radio (cklist)
if not radoff then
radon=getVerticalBG({0xffffffff,0xffffffff},360,20,"0xff"..RGBcolor)
radoff=getVerticalBG({0x00ffffff,0x00ffffff},360,8,"0xff"..RGBcolor)
end
local rid=guid()
radiog[rid]={}
rest = {
LinearLayout ,
layout_width = 'match_parent' ,
layout_height = "wrap_content" ,
layout_marginTop = "10dp" ,
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" ,
textColor = "#000000" ,
layout_width = 'fill_parent' ,
layout_height = 'wrap_content' ,
layout_marginLeft = "10dp" ,
layout_marginRight = "5dp" ,
layout_marginTop = "0dp" ,
layout_marginBottom = "0dp" ,
}
else
rds=1
end
local restt={
LinearLayout ,
layout_width = 'match_parent' ,
layout_height = "wrap_content" ,
layout_marginTop = "10dp" ,
gravity = "top" ,
orientation = "vertical" ,
background = getButtonBG(),
padding = {
"0dp","0dp","6dp","0dp"
},}
for i = rds , # cklist do
local name = cklist [i] [1]
local func = cklist [i] [2]
if not name then
name = "未设置"
end
nid = name..guid ()
radiog[rid][nid]=false
local func = radin(rid,nid,func)
local tid = nid..guid ()
_ENV [tid] = luajava.loadlayout ( {
LinearLayout ,
layout_width = '250dp' ,
layout_height = "30dp" ,
layout_marginTop = "5dp" ,
layout_marginBottom = "15dp" ,
layout_marginLeft = "4dp" ,
layout_marginRight = "10dp" ,
gravity = "center_vertical" ,
onClick = function ()
changan.controlWater (_ENV [tid] , 200)
func()
end
,
{
ImageView ,
id = luajava.newId (nid) ,
layout_width = '20dp' ,
layout_height = "20dp" ,
layout_marginLeft = "5dp" ,
layout_marginRight = "0dp" ,
background =radoff ,
} , {
TextView ,
gravity = "top" ,
text = name ,
textSize="13sp",
textColor = "#000000" ,
layout_width = 'wrap_content' ,
layout_height = 'wrap_content' ,
layout_marginLeft = "10dp" ,
layout_marginRight = "5dp" ,
}
})
restt [# restt + 1] = _ENV [tid]
end
rest [# rest + 1] = restt
return luajava.loadlayout (rest)
end
function radin(rid,nid,func)
return function()
for k,v in pairs(radiog[rid]) do
colorvs[k]={false,"rad"}
luajava.getIdValue(k):setBackground(radoff)
if k==nid and v~=true then
luajava.getIdValue(k):setBackground(radon)
colorvs[k]={true,"rad"}
v=true
luajava.newThread(func):start()
end
end
end
end
colorvs={}
当前ui=1
function changeColor(co)
控件颜色=co
luajava.runUiThread(function()
_ENV["jm"..当前ui.."t"]:setTextColor(控件颜色)
_ENV["jm"..当前ui.."p"]:setColorFilter(控件颜色)
luajava.getIdView("backv"):setColorFilter(控件颜色)
checkbg = getShape2(45,{控件颜色,控件颜色},4,控件颜色)
radon=getVerticalBG({0xffffffff,0xffffffff},360,20,控件颜色)
for k,v in pairs(colorvs) do
if v[1]==true then
if v[2]=="switch" then
luajava.getIdValue(k):setBackground(checkbg)
elseif v[2]=="box" then
boxpic[k]:setColorFilter(控件颜色)
elseif v[2]=="txt" then
luajava.getIdValue(k):setTextColor(控件颜色)
elseif v[2]=="img" then
luajava.getIdValue(k):setColorFilter(控件颜色)
elseif v[2]=="rad" then
luajava.getIdValue(k):setBackground(radon)
elseif v[2]=="seek" then
luajava.getIdView(k):setProgressDrawable( getVerticalBG({控件颜色,控件颜色},45))
end
end
end
end)
end
currentIndex = 1
-- 定义一个函数来打印当前遍历到的table项,并更新索引位置
function 预置颜色()
-- 获取当前遍历到的项
local currentItem = 颜色表[currentIndex]
-- 打印当前项
changeColor(currentItem)
-- 更新索引位置
currentIndex = currentIndex + 1
-- 如果索引已经达到最大值,则重置为1,回到第一项
if currentIndex > #颜色表 then
currentIndex = 1
end
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 luajava.loadlayout({
LinearLayout,
layout_height="wrap_content",
layout_width="fill_parent",
gravity="center",
{
ImageView,
layout_height=height,
layout_width=width,
padding=pad,
src=获取图片(img),
onClick=function() luajava.newThread(func):start() end,
}})
end
function changan.edit(name,hint)
_ENV[name]=name..string.randomUUID(true)
if not hint then
hint=name
end
return {
LinearLayout,
layout_width='fill_parent',
layout_height="44dp",
{
EditText,
background=getButtonBG(),
gravity="center",
hint=hint,
textColor="#161616",
textSize="13sp",
elevation="2dp",
layout_height="38dp",
layout_gravity="center",
layout_marginRight="4dp",
layout_marginLeft="4dp",
id=luajava.newId(_ENV[name]),
layout_width='match_parent',
}
}
end
function changan.getedit(name)
edit=tostring(luajava.getIdValue(_ENV[name]):getText())
return edit
end
chazhi={} chajv={}
function changan.seek(name,bian,smin,smax,nows)
_ENV[bian] =nows
smin=tonumber(smin) 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"
rest = luajava.loadlayout({
LinearLayout,
layout_width = 'match_parent',
layout_height = "47dp",
padding = {
"1dp","1dp","1dp","1dp"
},
{
LinearLayout,
id=luajava.newId(kid),
layout_width = 'match_parent',
layout_hight = "match_parent",
layout_marginTop = "3dp",
layout_marginBottom = "3dp",
layout_marginRight = "5dp",
layout_marginLeft = "5dp",
gravity = "center_vertical",
elevation='2dp',
background = luajava.loadlayout {
GradientDrawable ,
color = 0xffffffff ,
cornerRadius = 20
} ,padding = {
"0dp","0dp","6dp","0dp"
},
{
TextView,
padding={"10dp","10dp","0dp","10dp",},
gravity = "top",
textSize = "13sp",
textColor='#000000',
Typeface=font,
text = name,
id = luajava.newId(names),
layout_width = '100dp',
--layout_marginLeft = "5dp",
layout_marginRight = "0dp",
},
{
Slider,
ThumbWidth='23dp',--宽度
thumbHeight='23dp',--高度
ThumbWidth='4dp',--宽度
thumbHeight='23dp',--高度
trackHeight='16dp',
trackStopIndicatorSize='4dp',--后面的小点
ThumbTrackGapSize='6dp',--正中间
TrackInsideCornerSize='2dp',--里面的圆角
ThumbElevation='2dp',--阴影
tickVisible=false,--true
__onFinish=function(v)
v:setTrackActiveTintList(ColorStateList({{},},{'0xff'..RGBcolor}))
v:setCustomThumbDrawable(getRes('shark'))
v:setTrackInactiveTintList(ColorStateList({{},},{'0x55'..RGBcolor}))
v:setThumbTintList(ColorStateList({{},},{'0xff'..RGBcolor}))
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,
onClick = function() luajava.newThread(function() func() end):start() end,
addOnChangeListener = function(slider, value, fromUser) -- 如果执行的功能不是修改器的函数,或者不带阻塞的,可以不用 window:threadWraper 包裹,性能更好(属于UI线程)
-- 如果不是用户触发的,不处理
if not fromUser then
return
end
end
},
}})
return rest
end
levels={}
function changan.seek2(name , bian , smin , smax , nows,level)
local smin=math.ceil(smin* 10)/10
local smax=math.ceil(smax* 10)/10
local nows=math.ceil(nows* 10)/10
local level=math.ceil(level* 10)/10
if bian~='mubx' and bian~='muby' then
if _ENV [bian] == nil then
_ENV [bian] = nows
else
gg.alert("seek控件的变量名称:"..bian.."重复!\n请换一个名称") os.exit()
end
end
if not name then
name = "未设置"
end
local names = name..guid ()
if not level then level=1 end
levels[bian]=math.ceil(level* 10)/10
local shuzhi=luajava.loadlayout({
TextView ,
gravity = "center" ,
text = tostring(nows) ,
textColor=0xff0062FF,
id = luajava.newId (names) ,
layout_width = '50dp' ,
layout_marginLeft = "5dp" ,
layout_marginRight = "0dp" ,
})
local tmp1={TextView,
background=getVerticalBG({0xeeffffff,0xeeffffff},15,2.5,0xff161616),
layout_height="24dp",
layout_width="24dp",
gravity="center",
elevation="2dp",
layout_marginTop = "5dp" ,
layout_marginBottom = "5dp" ,
layout_marginLeft = "5dp" ,
layout_marginRight = "5dp" ,
text="-",
textColor="#000000",
onClick=function()
vibra:vibrate(4)
if _ENV[bian]>smin then
_ENV[bian]=_ENV[bian]-levels[bian]
_ENV[bian]=tonumber(string.format("%.1f", _ENV[bian]))
if _ENV[bian]smax then _ENV[bian]=smax end
_ENV[bian]=math.ceil(_ENV[bian]* 10)/10
luajava.getIdValue(names):setText(tostring(_ENV[bian]))
if bian=='mubx' or bian=='muby' then daxiao() end
end
end,
}
rest = luajava.loadlayout ( {
LinearLayout ,
layout_width = 'fill_parent' ,
gravity = "center" ,
layout_height = "wrap_content" ,
{
LinearLayout,
layout_width = 'fill_parent',
layout_height = "40dp",
gravity = "center_vertical",
layout_marginLeft='2dp',
layout_marginRight='2dp',
layout_marginTop='2dp',
layout_marginBottom='2dp',
elevation='2dp',
background = luajava.loadlayout {
GradientDrawable ,
color = 0xffffffff ,
cornerRadius = 15
} ,padding = {
"0dp","0dp","6dp","0dp"
},
{
TextView ,
gravity = "top" ,
text = name ,
textColor="#000000",
layout_weight=1,
textSize='12sp',
layout_width = 'match_parent' ,
layout_marginLeft = "10dp" ,
layout_marginRight = "0dp" ,
},
tmp1,shuzhi,tmp2
}
})
return rest
end
import('android.content.res.ColorStateList')
local swfuncs={}
swcDraw=ColorStateList({
{android.R.attr.state_checked},
{-android.R.attr.state_checked},
}, {
0xff0062ff,
0x33d7d7d7,
})
swcThumb=ColorStateList({
{android.R.attr.state_checked},
{android.R.attr.state_pressed},
{-android.R.attr.state_pressed},
}, {
0xffffffff,
0xff000000,
0xff000000
})
swfuncs={}
function changan.text(text,color,size,isjz)
if not color then color="#161616" end
if isjz then
return luajava.loadlayout(
{
TextView,
text=text,
textColor=color,
textSize=size,
gravity="center",
layout_height="wrap_content",
layout_width="match_parent",
autoSizeTextType="uniform",
})
else
return luajava.loadlayout({
TextView,
text=text,
textColor=color,
textSize=size,
layout_height="wrap_content",
layout_width="match_parent",
autoSizeTextType="uniform",
})
end
end
function getShape8()
jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(10)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors({
0xff000000,0xffffffff,
})
jianbians:setOrientation(GradientDrawable.Orientation.BL_TR)
return jianbians
end
pe0 = getShape8()
function changan.line()
return luajava.loadlayout({
LinearLayout,
layout_width = "fill_parent",
layout_height = "2dp",
background = pe0,
})
end
do
local path = "/sdcard/.游客信息t.lua" --用户信息
local r = panduan(path)
if r then
qltname = file.read(path)
else
qltname = "游客" .. math.random(1111111, 9999999)
file.write(path,qltname)
end
qltname=string.gsub(qltname,' ','')
qltname=string.gsub(qltname,'\n','')
local path = "/sdcard/.用户头像t.lua" --用户信息
local r = panduan(path)
if r then
qlticon = file.read(path)
else
qlticon = ""
file.write(path,qlticon)
end
end
--[[function chatbg()
local jb=getVerticalBG({0xaa161616,0xaa161616},17,2,0xffd8d8d8)
return jb
end]]
function getShape3()
jianbians = luajava.loadlayout({
GradientDrawable,
type = "linear",
angle = "135",
})
jianbians:setCornerRadius(22)
jianbians:setOrientation(GradientDrawable.Orientation.TL_BR)
jianbians:setColors({0x55ffffff,0x55ffffff})
jianbians:setStroke(5,0xffffffff)--边框宽度和颜色
return jianbians
end
ltaib={}
function getu(name)
fs=gg.makeRequest(httpip.."?name="..name.."&mode=get").content
if fs=="00" then return "获取失败" else return fs end
end
function uplo(name,txt)
fs=gg.makeRequest(httpip.."?txt="..txt.."&name="..name.."&mode=set").content
end
function 修改名字(lttext)
if string.len(lttext) <= 0 then return 0 end
if string.len(lttext) >= 400 then
gg.toast("用户名长度上限20字节") return 0
end
local path = "/sdcard/.游客信息t.lua" --用户信息
qltname = lttext
qltname=string.gsub(qltname,' ','')
qltname=string.gsub(qltname,'\n','')
file.write(path,qltname)
--gg.alert("昵称修改成功\n"..lttext)
end
function 修改头像(txt)
if isUrlSafe(txt) then
else
--gg.alert("头像链接有误 不能使用中文")
return empty
end
local path2 = "/sdcard/.用户头像t.lua"
if string.find(txt,"emulated/0") ~= nil or string.find(txt,"/sdcard") ~= nil then
gg.alert("暂不支持上传本地图片\n请使用QQ号或直链")
return 0
end
if tonumber(txt) ~= nil then txt = "http://q1.qlogo.cn/g?b=qq&nk="..txt.."&s=100" end
if string.find(txt,"http%%") ~= nil or string.find(txt,"https%%") ~= nil then
gg.alert("格式有误,请重新输入") return 0
end
txt = string.url(txt,"en")
qlticon = txt
file.write(path2,qlticon)
--gg.alert("头像修改成功")
end
function xiuxg()
tmp=gg.prompt({"昵称","头像(请输入QQ号码或图片直链,暂不支持本地)"},{qltname,qlticon},{"text","text"})
if tmp~=nil then
if tmp[1]~="" then 修改名字(tmp[1]) end
if tmp[2]~="" then 修改头像(tmp[2]) end
end
end
function uprec(imagePath)
local uploadUrl = "http://"..channel2.."/"..channel.."/cnm.php?name=jb"
local headers = {["Content-Type"] = "multipart/form-data"}
local response = http.upload(uploadUrl,headers,imagePath)
if response.code == 200 then
randompic="☂️语音"..response.content.."☂️"
发送聊天2(randompic)
else
gg.alert("文件上传失败: " .. response.status)
end
end
function uppic(imagePath)
local uploadUrl = "http://"..channel2.."/"..channel.."/shabi.php?name=jb"
local headers = {["Content-Type"] = "multipart/form-data"}
local response = http.upload(uploadUrl,headers,imagePath)
if response.code == 200 then
randompic="☂️资源"..response.content.."☂️"
发送聊天2(randompic)
gg.copyText(randompic)
else
gg.alert("文件上传失败: " .. response.status)
end
end
function changan.setedit2(name,txt)
txt = tostring(txt)
luajava.runUiThread(function()
luajava.getIdValue(name):setText(txt)
end)
end
function changan.getedit2(name)
--gg.alert(edit)
edit = tostring(luajava.getIdValue(name):getText())
return edit
end
lastlttm = os.time()-3
function 发送聊天(lttext)
changan.setedit2("聊天框","")
local server = "http://"..channel2.."/"..channel.."/" --服务器地址
--local chat_log = gg.makeRequest(server .. "zhuabaosima.php?hq=true").content
local uptime = gg.makeRequest(server .. "zhuabaosima.php?updat=true").content
if uptime then
--io.open(path, "w"):write(GT[2])
if string.len(lttext) <= 0 then return 0 end
if string.len(lttext) >= 400 then
gg.toast("文字长度上限400字节")
else
lastlttm = os.time()
lttext = string.gsub(lttext,"·","•")
lttext = string.gsub(lttext,"~","~")
lttext = string.gsub(lttext,"—","-")
lttext = string.gsub(lttext,"…","...")
if not qlticon or qlticon == "" or qlticon == "nil" then qlticon = "http://154.204.177.50/pictures/defaulticon" qlticon=string.url(qlticon,"en") end
local md0=string.deUrl(qlticon..qltname..lttext)
local md6=string.md5l(string.md5l(string.md5l(string.md5l(md0))))
local p = gg.makeRequest(server .. "zhuabaosima.php?lticon="..qlticon.."&nr=" .. lttext .. "&name=" .. qltname.."&zhuabaosima="..md6).content
if p ~= "发送成功" then
--gg.alert(qlticon.."\nerror -149: 消息发送失败")
else
gg.toast("发送成功")
end
end
else
end
shuaxinchat()
end
function 发送聊天2(lttext)
changan.setedit2("聊天框","")
local server = "http://"..channel2.."/"..channel.."/" --服务器地址
--local chat_log = gg.makeRequest(server .. "zhuabaosima.php?hq=true").content
local uptime = gg.makeRequest(server .. "zhuabaosima.php?updat=true").content
if uptime then
--io.open(path, "w"):write(GT[2])
if string.len(lttext) <= 0 then return 0 end
if string.len(lttext) >= 400 then
gg.toast("文字长度上限400字节")
else
lastlttm = os.time()
lttext = string.gsub(lttext,"·","•")
lttext = string.gsub(lttext,"~","~")
lttext = string.gsub(lttext,"—","-")
lttext = string.gsub(lttext,"…","...")
if not qlticon or qlticon == "" or qlticon == "nil" then qlticon = "http://154.204.177.50/pictures/defaulticon" qlticon=string.url(qlticon,"en") end
local md0=string.deUrl(qlticon..qltname..lttext)
local md6=string.md5l(string.md5l(string.md5l(string.md5l(md0))))
local p = gg.makeRequest(server .. "zhuabaosima.php?lticon="..qlticon.."&nr=" .. lttext .. "&name=" .. qltname.."&zhuabaosima="..md6).content
if p ~= "发送成功" then
--gg.alert(qlticon.."\nerror -149: 消息发送失败")
else
gg.toast("发送成功")
end
end
else
end
shuaxinchat()
end
function FGUtilStringSplit(str,split_char)
local sub_str_tab = {}
while (true) do
local pos = string.find(str, split_char);
if (not pos) then
sub_str_tab[#sub_str_tab + 1] = str;
break
end
local sub_str = string.sub(str, 1, pos - 1).."…"
sub_str_tab[#sub_str_tab + 1] = sub_str;
str = string.sub(str, pos + 1, #str);
end
return sub_str_tab
end
nowtime = 0
localres = {}
function shuaxinchat()
if nolts then return 0 end
local server = "http://"..channel2.."/" .. channel .. "/" -- 服务器地址
http.get(server .. "time.txt", nil, function(uptime)
if not isTable(uptime) or uptime.code ~= 200 then
nolts=true
addchat(changan.text("聊天室网络异常,已暂时为你关闭"))
return 0
end
uptime = uptime.content
if tonumber(uptime) <= tonumber(nowtime) then
return 0
else
nowtime = tonumber(uptime)
uptime=tonumber(uptime)
--gg.alert(nowtime..'\n'..uptime)
end
http.get(server .. "zhuabaosima.php?sb=wozaizhuabao_womasile",nil, function(res)
local chat_log = res.content
local newltres = {}
local ltres = FGUtilStringSplit(chat_log, "…")--分析记录拆分为小段
for i = 1, #ltres do
--每段一次:
if string.find(ltres[i], "·") == nil or string.find(ltres[i], "~") == nil then
--跳过不完整小段
else
newltres[#newltres + 1] = {ltname = tostring(ltres[i]:match("·(.-)—")),
lttext = tostring(ltres[i]:match("~(.-)…")),
lttime = tostring(ltres[i]:match("—(.-)~")),
lticon = tostring(ltres[i]:match("㊢(.-)·"))}
--分割小段给newltres新元素
end
end
for i = 1, #newltres do
--新表处理
--新表内每个小段一次:
isnew = true--假设是新的
--gg.alert(#newltres..'\n'..tostring(newltres[i]))
if nowtime~=uptime then tuichu=1 end
for j = 1, #localres do
--当前小段与local表每一段对比:
if newltres[i].ltname == localres[j].ltname and newltres[i].lttime == localres[j].lttime and newltres[i].lttext ==localres[j].lttext then
--判断当前小段i是旧的
isnew = false
end
end
if isnew == true then
--如果当前小段i是新的
isnew = false
xuyaoshuaxin = true
localres[#localres + 1] = newltres[i]
local t=changan.chat(localres[#localres])
if type(t)=="userdata" then
addchat(t)
end
end
end
-- gg.alert(tostring(localres))
if xuyaoshuaxin == true and already == true then
xuyaoshuaxin = false
gundong()
end
end)
end)
end
function addchat(cha)
if cha==nil then return 0 end
local function invoke2()
ltslaym4:addView(cha)
gundong()
end
luajava.post(invoke2)
end
function gundong()
if already then
local function invoke2()
_ENV["ltslays4"]:fullScroll(_ENV["ltslaym4"].FOCUS_DOWN)
end
local runnable = luajava.getRunnable(invoke2)
local handler = luajava.getHandler()
handler:post(runnable)
end
end
function removechat(cha)
local function invoke2()
_ENV["ltslaym4"]:removeView(cha)
end
local runnable = luajava.getRunnable(invoke2)
local handler = luajava.getHandler()
handler:post(runnable)
end
local MediaRecorder = luajava.bindClass("android.media.MediaRecorder")
local AudioSource = luajava.bindClass("android.media.MediaRecorder$AudioSource")
local OutputFormat = luajava.bindClass("android.media.MediaRecorder$OutputFormat")
local AudioEncoder = luajava.bindClass("android.media.MediaRecorder$AudioEncoder")
-- 获取录音管理器实例
local audioManager = context:getSystemService(context.AUDIO_SERVICE)
-- 获取录音源类型常量值
local sourceType = AudioSource.MIC
-- 创建 MediaRecorder 实例
function changan.record(txt)
if not txt then txt = "未设置" end
return luajava.loadlayout(
{
LinearLayout,
layout_width = 'fill_parent',
layout_hight = "wrap_content", {
LinearLayout,
layout_width = "fill_parent",
gravity = "center_horizontal",
layout_marginRight="10dp",
layout_marginLeft="10dp",
layout_marginTop = "5dp",
layout_marginBottom = "5dp",
background = getSelector3(),
onTouch = function(view, event)
if event:getAction() == MotionEvent.ACTION_DOWN then
-- 按下时执行的函数
luajava.newThread(function()
gg.toast("开始录音,松手取消")
recorder = MediaRecorder()
-- 设置录音源、输出格式和编码器
recorder:setAudioSource(sourceType)
recorder:setOutputFormat(OutputFormat.THREE_GPP)
recorder:setAudioEncoder(AudioEncoder.AMR_NB)
-- 设置录音文件存储路径
-- 设置音量增益
recorder:setAudioEncodingParameters(0, 1, 1)
local savePath = "/sdcard/孤行/图片/test.mp3"
recorder:setOutputFile(savePath)
recorder:prepare()
recorder:start()
redstart=os.time()
rocordname="audio"..guid()..guid()
end):start()
elseif event:getAction() == MotionEvent.ACTION_UP then
-- 松开时执行的函数
--
end
end,
onClick=function()
luajava.newThread(function()
gg.toast("正在发送")
-- 停止录音
recorder:stop()
-- 释放资源
recorder:release()
if os.time()-redstart<1 then
gg.alert("时间太短\n最少要录制1秒")
return 0
end
if os.time()-redstart>60 then
gg.alert("时间太长\n一条最多录制60秒")
return 0
end
end):start()
end,
{
TextView,
--id = luajava.newId(tid),
text = tostring(txt),
textSize = "16sp",
layout_width = "wrap_content",
},
}})
end
function imagee(t)
luajava.layoutAlert({
ImageView,
layout_height="wrap_content",
layout_width="match_parent",
src=(t),
})
end
function isUrlSafe(str)
local pattern = "^[a-zA-Z0-9%s%-%._~:/?#%%%[%]@!$&'()*+,;=%@]+$"
local result = string.match(str, pattern)
if result then
return true
else
return false
end
end
function getpic(txt)
txt = string.url(txt,"de")
if isUrlSafe(txt) then
else
print(txt)
return ''
end
return 获取图片(txt)
end
function getpics()
-- 获取ContentResolver对象
local contentResolver = context:getContentResolver()
-- 获取系统的MediaStore对象
local mediaStore = luajava.bindClass("android.provider.MediaStore")
-- 定义查询参数
local uri = mediaStore.Images.Media.EXTERNAL_CONTENT_URI
local projection = { mediaStore.Images.Media.DATA } -- 只查询文件路径
local selection = nil -- 查询所有图片
local selectionArgs = nil
local sortOrder = "date_added DESC" -- 按照添加日期降序排序
-- 执行查询
local cursor = contentResolver:query(uri, projection, selection, selectionArgs, sortOrder)
currpic={}
local counter = 0
if cursor then
local columnIndex = cursor:getColumnIndexOrThrow(mediaStore.Images.Media.DATA)
while cursor:moveToNext() and counter < 14 do
local imagePath = cursor:getString(columnIndex)
-- 处理图片路径,例如展示、保存等操作
currpic[#currpic+1]=(imagePath)
counter = counter + 1
end
cursor:close()
end
return currpic
end
function xuantu()
local lock = luajava.getBlock()
local alert = luajava.new(AlertDialog.Builder, app.context)
luajava.post(function()
-- android.app.AlertDialog
alert = alert:create()
end)
local function exit()
alert:dismiss()
lock('end')
end
grid={LinearLayout,
gravity="center",
orientation="vertical",
layout_width="match_parent",
}
pics=getpics()
for k,v in pairs(pics) do
grid[#grid+1]={
ImageView,
layout_marginTop="3dp",
layout_marginBottom="3dp",
layout_width = 'match_parent',
layout_height = "wrap_content",
src=获取图片(v),
onClick=function() luajava.newThread(function()
isfa=gg.image(v)
if isfa==1 then exit() uppic(v) end
end):start()
end
}
end
alert:setView(luajava.loadlayout({
ScrollView,
grid}))
-- 弹窗被取消
alert:setOnDismissListener(luajava.createProxy('android.content.DialogInterface$OnDismissListener', {
onDismiss = function()
exit()
end
}))
-- 异步显示弹窗
local window = alert:getWindow()
luajava.showAlert(alert)
-- 堵塞,等待异步弹窗结束
lock('join')
end
function isUrlSafe(str)
local pattern = "^[a-zA-Z0-9%s%-%._~:/?#%[%]@!$&'()*+,;=%@]+$"
local result = string.match(str, pattern)
if result then
return true
else
return false
end
end
function getpic(txt)
if isUrlSafe(txt) then
else
return empty
end
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 changan.chat(ltlist)
ltname = ltlist.ltname
lticon = tostring(ltlist.lticon)
lttext = tostring(ltlist.lttext)
lttime = tostring(ltlist.lttime)
if not lticon or lticon == "" or lticon == "nil" then lticon = "http://154.204.177.50/pictures/defaulticon" end
if string.find(lticon,"/")==nil then lticon = "http://154.204.177.50/pictures/defaulticon" end
local bitmap = getpic(lticon)
if not bitmap then bitmap = luajava.getBitmapDrawable("http://154.204.177.50/pictures/defaulticon") end
if not _ENV[lticon] then _ENV[lticon] = bitmap end
if not lttext or lttext == "" then lttext = " " end
if string.find(lticon,"http%%") ~= nil then lticon = "http://154.204.177.50/pictures/defaulticon" end
if string.find(lticon,"/sdcard") == nil and string.find(lticon,"emulated") == nil and string.find(lticon,"http:/") == nil and string.find(lticon,"https:/") == nil then lticon = "http://154.204.177.50/pictures/defaulticon" end
if not lttext then lttext = " " end
if type(_ENV[lticon])~="userdata" then return 0 end
if ltname~=qltname then
if string.find(lttext,"☂️")==nil then
local ctbg=chatbg()
ltresult = luajava.loadlayout(
{
LinearLayout,
padding={"12dp","0dp","0dp","0dp"},
layout_width = "match_parent",
layout_height = "wrap_content",
orientation = "horizontal",
gravity="left",
{
LinearLayout,
layout_height = "40dp",
layout_width = "40dp",
background = _ENV[lticon],
},
{
LinearLayout,
layout_height = "wrap_content",
layout_width = "wrap_content",
layout_marginLeft = "10dp",
orientation = "vertical",
{
TextView,
textColor="#000000",
text = tostring(ltname).."\n"..tostring(lttime),
textSize = "10sp",
layout_width = "wrap_content",
layout_height = "wrap_content",
}, {
TextView,
text = tostring(lttext),
textSize = "14sp",
background = ctbg,
padding = "3dp",
layout_width = "wrap_content",
layout_height = "wrap_content",
}
}})
elseif string.find(lttext,"☂️语音")~=nil then
local ctbg=chatbg2()
local playPath=lttext:match("☂️语音(.-)☂️")
ltresult = luajava.loadlayout(
{
LinearLayout,
padding={"12dp","0dp","0dp","0dp"},
layout_width = "match_parent",
layout_height = "wrap_content",
orientation = "horizontal",
gravity="left",
{
LinearLayout,
layout_height = "40dp",
layout_width = "40dp",
background = _ENV[lticon],
},
{
LinearLayout,
layout_height = "wrap_content",
layout_width = "160dp",
layout_marginLeft = "10dp",
orientation = "vertical",
gravity="left",
{
TextView,
textColor="#000000",
text = tostring(ltname).."\n"..tostring(lttime),
textSize = "10sp",
layout_width = "240dp",
layout_height = "wrap_content",
}, {
TextView,
text = "[ 语音 ]ᵒ",
textSize = "14sp",
background = ctbg,
onClick=function()
playPath=playPath
luajava.newThread(
function()
if panduan("/sdcard/孤行/图片/音频/"..playPath)~=true then
file.download(tostring("http://"..channel2.."/"..channel.."/".."audio/"..playPath),"/sdcard/孤行/图片/音频/"..playPath)
end
gg.playMusic("/sdcard/孤行/图片/音频/"..playPath)
end):start()
end,
padding = "3dp",
layout_width = "wrap_content",
layout_height = "wrap_content",
}
}})
elseif string.find(lttext,"☂️资源")~=nil then
local ctbg=chatbg()
local playPath=lttext:match("☂️资源(.-)☂️")
local tmp=("http://"..channel2.."/"..channel.."/pics/"..playPath)
ltresult = luajava.loadlayout(
{
LinearLayout,
padding={"12dp","0dp","0dp","0dp"},
layout_width = "match_parent",
layout_height = "wrap_content",
orientation = "horizontal",
{
LinearLayout,
layout_height = "40dp",
layout_width = "40dp",
background = _ENV[lticon],
},
{
LinearLayout,
layout_height = "wrap_content",
layout_width = "160dp",
layout_marginLeft = "10dp",
orientation = "vertical",
{
TextView,
textColor="#000000",
text = tostring(ltname).."\n"..tostring(lttime),
textSize = "10sp",
layout_width = "wrap_content",
layout_height = "wrap_content",
}, {
ImageView,
src=tmp,
background = ctbg,
onClick=function()
luajava.newThread(
function()
imagee("http://"..channel2.."/"..channel.."/pics/"..playPath)
end):start()
end,
padding = "0dp",
layout_width = "match_parent",
layout_height = "100dp",
}
}})
end
else
if string.find(lttext,"☂️")==nil then
local ctbg=chatbg()
ltresult = luajava.loadlayout(
{
LinearLayout,
layout_width = "match_parent",
layout_height = "wrap_content",
orientation = "horizontal",
gravity="right",
{
LinearLayout,
layout_height = "wrap_content",
layout_width = "160dp",
layout_marginRight = "10dp",
orientation = "vertical",
gravity="right",
{
TextView,
textColor="#000000",
text = tostring(ltname).."\n"..tostring(lttime),
textSize = "10sp",
gravity="right",
layout_width = "wrap_content",
layout_height = "wrap_content",
}, {
TextView,
text = tostring(lttext),
textSize = "14sp",
background = ctbg,
gravity="right",
padding = "3dp",
layout_width = "wrap_content",
layout_height = "wrap_content",
}
},{
LinearLayout,
layout_marginRight = "10dp",
layout_marginLeft = "10dp",
layout_height = "40dp",
layout_width = "40dp",
background = _ENV[lticon],
onClick = function()
luajava.newThread(function() xiuxg() end):start()
end,
},})
elseif string.find(lttext,"☂️语音")~=nil then
local ctbg=chatbg2()
local playPath=lttext:match("☂️语音(.-)☂️")
ltresult = luajava.loadlayout(
{
LinearLayout,
layout_width = "match_parent",
layout_height = "wrap_content",
orientation = "horizontal",
gravity="right",
{
LinearLayout,
layout_height = "wrap_content",
layout_width = "160dp",
layout_marginLeft = "10dp",
orientation = "vertical",
gravity="right",
{
TextView,
textColor="#000000",
text = tostring(ltname).."\n"..tostring(lttime),
textSize = "10sp",
layout_width = "wrap_content",
layout_height = "wrap_content",
gravity="right",
}, {
TextView,
text = "[ 语音 ]ᵒ",
textSize = "14sp",
background = ctbg,
onClick=function()
playPath=playPath
luajava.newThread(
function()
if panduan("/sdcard/孤行/图片/音频/"..playPath)~=true then
file.download(tostring("http://"..channel2.."/"..channel.."/audio/"..playPath),"/sdcard/孤行/图片/音频/"..playPath)
end
gg.playMusic("/sdcard/孤行/图片/音频/"..playPath)
end):start()
end,
padding = "3dp",
layout_width = "wrap_content",
layout_height = "wrap_content",
}
},{
LinearLayout,
layout_marginRight = "10dp",
layout_marginLeft = "10dp",
layout_height = "40dp",
layout_width = "40dp",
background = _ENV[lticon],
onClick = function()
luajava.newThread(function() xiuxg() end):start()
end,
}})
elseif string.find(lttext,"☂️资源")~=nil then
local ctbg=chatbg()
local playPath=lttext:match("☂️资源(.-)☂️")
local tmp=("http://"..channel2.."/"..channel.."/pics/"..playPath)
--gg.copyText(tostring(tmp))
ltresult = luajava.loadlayout(
{
LinearLayout,
layout_width = "match_parent",
layout_height = "wrap_content",
orientation = "horizontal",
gravity="right",
{
LinearLayout,
layout_height = "wrap_content",
layout_width = "160dp",
layout_marginLeft = "10dp",
orientation = "vertical",
gravity="right",
{
TextView,
textColor="#000000",
text = tostring(ltname).."\n"..tostring(lttime),
textSize = "10sp",
layout_width = "wrap_content",
layout_height = "wrap_content",
}, {
ImageView,
src=tmp,
background = ctbg,
onClick=function()
luajava.newThread(
function()
imagee("http://"..channel2.."/"..channel.."/pics/"..playPath)
end):start()
end,
padding = "2dp",
layout_width = "match_parent",
layout_height = "100dp",
}
},{
LinearLayout,
layout_height = "40dp",
layout_width = "40dp",
layout_marginRight = "10dp",
layout_marginLeft = "10dp",
background = _ENV[lticon],
onClick = function()
luajava.newThread(function() xiuxg() end):start()
end,
},})
end
end
return ltresult
end
ltaib={}
function changan.chatai(ltlist)
ltname = ltlist.ltname
lticon = tostring(ltlist.lticon)
lttext = tostring(ltlist.lttext)
lttime = tostring(ltlist.lttime)
if not lticon or lticon == "" or lticon == "nil" then lticon = "http://111.92.241.174/pictures/defaulticon" end
if string.find(lticon,"/")==nil then lticon = "http://111.92.241.174/pictures/defaulticon" end
local bitmap = getpic(lticon)
if not bitmap then bitmap = luajava.getBitmapDrawable("http://111.92.241.174/pictures/defaulticon") end
if not _ENV[lticon] then _ENV[lticon] = bitmap end
if not lttext or lttext == "" then lttext = " " end
if string.find(lticon,"http%%") ~= nil then lticon = "http://111.92.241.174/pictures/defaulticon" end
if string.find(lticon,"/sdcard") == nil and string.find(lticon,"emulated") == nil and string.find(lticon,"http:/") == nil and string.find(lticon,"https:/") == nil then lticon = "http://111.92.241.174/pictures/defaulticon" end
if not lttext then lttext = " " end
if type(_ENV[lticon])~="userdata" then return 0 end
if ltname~=qltname then
local ctbg=chatbg()
ltresult = luajava.loadlayout(
{
LinearLayout,
padding={"12dp","0dp","0dp","0dp"},
layout_width = "match_parent",
layout_height = "wrap_content",
orientation = "horizontal",
gravity="left",
{
LinearLayout,
layout_height = "40dp",
layout_width = "40dp",
background = _ENV[lticon],
},
{
LinearLayout,
layout_height = "wrap_content",
layout_width = "wrap_content",
layout_marginLeft = "10dp",
orientation = "vertical",
{
TextView,
textColor="#000000",
text = tostring(ltname).."\n"..tostring(lttime),
textSize = "10sp",
layout_width = "wrap_content",
layout_height = "wrap_content",
}, {
TextView,
onLongClick = function()
luajava.newThread(function()
local a = gg.alert2("复制该文本", tostring(lttext), "复制", "取消")
if not a then return end
if a == 1 then
gg.copyText(tostring(lttext))
elseif a == 2 then
return
end
end):start()
return true
end,
text = tostring(lttext),
textSize = "14sp",
background = ctbg,
padding = "3dp",
layout_width = "wrap_content",
layout_height = "wrap_content",
}
}})
else
local ctbg=chatbg()
ltresult = luajava.loadlayout(
{
LinearLayout,
layout_width = "match_parent",
layout_height = "wrap_content",
orientation = "horizontal",
gravity="right",
{
LinearLayout,
layout_height = "wrap_content",
layout_width = "160dp",
layout_marginRight = "10dp",
orientation = "vertical",
gravity="right",
{
TextView,
textColor="#000000",
text = tostring(ltname).."\n"..tostring(lttime),
textSize = "10sp",
gravity="right",
layout_width = "wrap_content",
layout_height = "wrap_content",
}, {
TextView,
text = tostring(lttext),
textSize = "14sp",
background = ctbg,
gravity="right",
padding = "3dp",
layout_width = "wrap_content",
layout_height = "wrap_content",
}
},{
LinearLayout,
layout_marginRight = "10dp",
layout_marginLeft = "10dp",
layout_height = "40dp",
layout_width = "40dp",
background = _ENV[lticon],
onClick = function()
luajava.newThread(function() xiuxg() end):start()
end,
},})
end
return ltresult
end
function asked(nr)
loadingBox = getLoadingBox('正在思考中...')
loadingBox['显示']()
local hd = gg.makeRequest("https://baidu.com"..nr).content
loadingBox['关闭']()
return hd
end
function 发送聊天ai(lttext)
changan.setedit2("聊天框ai","")
if string.len(lttext) <= 0 then return 0 end
if not qlticon or qlticon == "" or qlticon == "nil" then qlticon = "http://111.92.241.174/pictures/defaulticon" qlticon=string.url(qlticon,"en") end
local aib=#ltaib+1
ltaib[aib]={}
ltaib[aib]["lticon"]=qlticon
ltaib[aib]["lttime"]=os.date("%Y-%m-%d %H:%M:%S", os.time())
ltaib[aib]["lttext"]=lttext
ltaib[aib]["ltname"]=qltname
shuaxinchatai(ltaib[aib])
local aibai=#ltaib+1
local hdnr=asked(lttext)
ltaib[aibai]={}
ltaib[aibai]["lticon"]="http://111.92.241.174/pictures/deepseek"
ltaib[aibai]["lttime"]=os.date("%Y-%m-%d %H:%M:%S", os.time())
ltaib[aibai]["lttext"]=hdnr
ltaib[aibai]["ltname"]="deepseek"
shuaxinchatai(ltaib[aibai])
end
function shuaxinchatai(content)
local t=changan.chatai(content)
--print(localres[#localres])
if type(t)=="userdata" then
addchatai(t)
end
end
function addchatai(cha)
if cha==nil then return 0 end
local function invoke2()
ltslaym4ai:addView(cha)
gundongai()
end
luajava.post(invoke2)
end
function gundongai()
local function invoke2()
_ENV["ltslays4ai"]:fullScroll(_ENV["ltslaym4ai"].FOCUS_DOWN)
end
local runnable = luajava.getRunnable(invoke2)
local handler = luajava.getHandler()
handler:post(runnable)
end
function removechatai(cha)
local function invoke2()
_ENV["ltslaym4ai"]:removeView(cha)
end
end
channel2 = "111.92.241.174"
channel = "AR"
local YS=gg.makeRequest("https://v1.hitokoto.cn/?j=j&encode=text").content
底部人物="/storage/emulated/0/孤行/图片/dbnacho"
侧边背景=getVerticalBG({0xffffffff,0xffffffff},15,2,0x87CEEBAF)
菜单背景=getVerticalBG({0xffffffff,0xffffffff},15)
悬浮窗图标 = "https://image.rlyun.fun/view.php/6f394bfc7f81dfd4e811afa59825428e.png"
function huiz()---绘制必须放在这里面
end
第一页 = {--创建分页,结尾调用
['分页名字']="首页",
[1]={--第一分区
['分区名字']="公告",
['功能配置']={
changan.text("公告" , "0xff000000" , "12sp" ) ,
changan.text("欢迎使用ikun全防",'#0000FF',"30sp"),
changan.line(),
changan.text("当前适配版本:开罗",0xffafdd22,"20sp" ),
changan.line(),
changan.text("已彻底解决闪退问题 ","0xffeacd76","20sp"),
changan.line(),
changan.text("Android 版本号: " .. version,"#B22222","20sp"),
changan.text("游戏运行环境: " .. hj,"#B22222","20sp"),
changan.line(),
changan.text("随机一言:"..YS),
changan.line(),
changan.button("选择进程",
function ()
string.toMusic('请选择地铁跑酷进程')
gg.setProcessX()
end),
changan.button("加入我们",
function()
gg.QQgroup("1076112643")
end),
changan.button ("打开水印",
function()
draw.text("ik", 60, 215)
draw.setColor("#EE311B")
draw.circle(80, 200, 50)
draw.setColor("#EE311B")
draw.circle(80, 200, 60)
draw.setColor("#EE311B")
draw.text("un", 150, 215)
draw.setColor("#EE311B")
draw.circle(180, 200, 50)
draw.setColor("#EE311B")
draw.circle(180, 200, 60)
draw.setColor("#EE311B")
draw.text("官方群:1076112643", 10, 300)
draw.text("ikun全防稳定奔放", 10, 350)
end),
changan.button ("新手教程",
function()
SO_PT(SO['新手'] ,4,"~A8 MOV W0, #1")
end),
changan.switch("跳过新手教程",
function()
SO_PT(SO['新手'],4,"~A8 MOV W0, #1")
gg.toast("跳过新手教程开启成功")
end,
function()
SO_PT(SO['新手'],4,"~A8 MOV W0, WZR")
gg.toast("跳过新手教程关闭成功")
end),
changan.switch("去除封号弹窗",
function()
SO_PT(SO['封号'],4,"~A8 MOV W0, WZR")
gg.toast("去除封号弹窗开启成功")
end,
function()
SO_PT(SO['封号'],4,"~A8 MOV W0, #1")
gg.toast("去除封号弹窗关闭成功")
end),
}},
[2]={--第二分区
['分区名字']="防封",
['功能配置']={
changan.text("防封" , "0xff000000" , "20sp" ) ,
changan.text("登录防建议切后台开否则会闪退" , "#B22222" , "20sp" ) ,
changan.line(),
changan.box({"防封",
changan.button("选择进程",
function ()
gg.setConfig("冻结间隔", 0)
string.toMusic('请选择地铁跑酷进程')
gg.setProcessX()
end),
changan.switch("登录全防",
function()
local start_time = os.clock()
local ggr = gg.getRangesList
local libList = ggr('libtersafe2.so')
if not libList or not libList[1] then
gg.alert('模块 libtersafe2.so 未加载')
os.exit()
end
local so = libList[1].start
local mem_table = {
{address = so + 0x4FD6AC, flags = 4, value = -698416192},
{address = so + 0x4FD6D0, flags = 4, value = 335544324},
{address = so + 0x4FD820, flags = 4, value = 335544324}}
gg.setValues(mem_table)
local time_used = os.clock() - start_time
gg.toast(('脚本执行完成!\\n执行耗时:%.3f秒\\n修改条数:4条'):format(time_used))
local start_time = os.clock()
local r = gg.getRangesList("libtersafe2.so")[1]
if not r then
gg.toast("未找到 libtersafe2.so")
return
end
local base = r.start
local list = {
{address = base + 0x4FD600, flags = 4, value = -698416192},
{address = base + 0x4FD61C, flags = 4, value = -698416192},
{address = base + 0x4FD628, flags = 4, value = -698416192},
{address = base + 0x4FD65C, flags = 4, value = -698416192},
{address = base + 0x4FD668, flags = 4, value = -698416192},
{address = base + 0x4FD66C, flags = 4, value = -698416192},
{address = base + 0x4FD67C, flags = 4, value = -698416192},
{address = base + 0x4FD68C, flags = 4, value = -698416192},
{address = base + 0x4FD690, flags = 4, value = -698416192},
{address = base + 0x4FD69C, flags = 4, value = -698416192},
{address = base + 0x4FD6BC, flags = 4, value = -698416192},
{address = base + 0x4FD6EC, flags = 4, value = -698416192},
{address = base + 0x4FD6F0, flags = 4, value = -698416192},
{address = base + 0x4FD6FC, flags = 4, value = -698416192},
{address = base + 0x4FD730, flags = 4, value = -698416192},
{address = base + 0x4FD73C, flags = 4, value = -698416192},
{address = base + 0x4FD74C, flags = 4, value = -698416192},
{address = base + 0x4FD750, flags = 4, value = -698416192},
{address = base + 0x4FD758, flags = 4, value = -698416192},
{address = base + 0x4FD75C, flags = 4, value = -698416192},
{address = base + 0x4FD760, flags = 4, value = -698416192},
{address = base + 0x4FD77C, flags = 4, value = -698416192},
{address = base + 0x4FD78C, flags = 4, value = -698416192},
{address = base + 0x4FD79C, flags = 4, value = -698416192},
{address = base + 0x4FD7CC, flags = 4, value = -698416192},
{address = base + 0x4FD7DC, flags = 4, value = -698416192},
{address = base + 0x4FD7EC, flags = 4, value = -698416192},
{address = base + 0x4FD7FC, flags = 4, value = -698416192},
{address = base + 0x4FD80C, flags = 4, value = -698416192},
{address = base + 0x4FD81C, flags = 4, value = -698416192},
{address = base + 0x4FD820, flags = 4, value = -698416192},
{address = base + 0x4FD82C, flags = 4, value = -698416192},
{address = base + 0x4FD83C, flags = 4, value = -698416192},
{address = base + 0x4FD84C, flags = 4, value = -698416192},
{address = base + 0x4FD85C, flags = 4, value = -698416192},
{address = base + 0x4FD86C, flags = 4, value = -698416192},
{address = base + 0x4FD87C, flags = 4, value = -698416192},
{address = base + 0x4FD88C, flags = 4, value = -698416192},
{address = base + 0x4FD8AC, flags = 4, value = -698416192},
{address = base + 0x4FD8BC, flags = 4, value = -698416192},
{address = base + 0x4FD8CC, flags = 4, value = -698416192},
{address = base + 0x4FD8DC, flags = 4, value = -698416192},
{address = base + 0x4FD8EC, flags = 4, value = -698416192},
{address = base + 0x4FD8FC, flags = 4, value = -698416192},
{address = base + 0x4FD90C, flags = 4, value = -698416192},
{address = base + 0x4FD910, flags = 4, value = -698416192},
{address = base + 0x4FD91C, flags = 4, value = -698416192},
{address = base + 0x4FD92C, flags = 4, value = -698416192},
{address = base + 0x4FD93C, flags = 4, value = -698416192},
{address = base + 0x4FD94C, flags = 4, value = -698416192},
{address = base + 0x4FD95C, flags = 4, value = -698416192},
{address = base + 0x4FD99C, flags = 4, value = -698416192},
{address = base + 0x4FD9BC, flags = 4, value = -698416192},
{address = base + 0x4FD9CC, flags = 4, value = -698416192},
}
MaterialAlert("done✔")
end),
changan.switch("防行为异常[大厅]",
function()
local so = gg.getRangesList("libtprt.so")[1].start
gg.setValues({
{ address = so + 0x15EADC, flags = 4, value = -698416192 },
{ address = so + 0x15EAEC, flags = 4, value = -698416192 },
{ address = so + 0x15EAFC, flags = 4, value = -698416192 },
{ address = so + 0x15EB0C, flags = 4, value = -698416192 },
{ address = so + 0x15EB1C, flags = 4, value = -698416192 },
{ address = so + 0x15EECC, flags = 4, value = -698416192 },
{ address = so + 0x15EEEC, flags = 4, value = -698416192 },
})
function SO_PT(FUNCTIONADD,TYPE,VALUE)
local SOMOD=gg.getRangesList("il2cpp.so")
if SOMOD[2]==nil then gg.alert([[开启失败
━━━━━━━━━━━━━━━
错误原因:未找到相关内存
解决方法:请重新选择游戏进程
━━━━━━━━━━━━━━━]])
else
gg.setValues({{address=SOMOD[2].start+FUNCTIONADD,flags=TYPE,value=VALUE}})
gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+4,flags=TYPE,value="~A8 RET"}})
end
end
local SO = {}
SO['行为1'] = 0x27583a8
SO['行为2'] = 0x275843c
SO['行为3'] = 0x27581ec
SO['行为4'] = 0x2751670
SO['行为5'] = 0x27580c4
SO['行为6'] = 0x27580c4
SO['行为7'] = 0x24e8fcc
SO['行为8'] = 0x2384f40
SO['行为9'] = 0x27b70e0
SO['行为10'] = 0x27b7000
SO['行为11'] = 0x274aca8
SO['行为12'] = 0x274fc84
SO['行为13'] = 0x27b6efc
SO['行为14'] = 0x27b694c
SO['行为15'] = 0x24e8888
SO['行为16'] = 0x24e8da8
SO['行为17'] = 0x24e8f20
SO['行为18'] = 0x29a0268
SO['行为19'] = 0x1447d1c
SO['行为20'] = 0x209693c
SO['行为21'] = 0x20988d0
SO['行为22'] = 0x1466690
SO['行为23'] = 0x20b4084
SO['行为24'] = 0x20baed8
SO['行为25'] = 0x20baf84
SO['行为26'] = 0x3ce999c
SO['行为27'] = 0x275003c
SO['行为28'] = 0x2758158
SO['行为29'] = 0x2758280
SO['行为30'] = 0x2758314
SO['行为31'] = 0x20bab58
SO['行为32'] = 0x20bac04
SO['行为33'] = 0x20bacb0
SO['行为34'] = 0x20bae00
SO['行为35'] = 0x20baf84
SO['行为36'] = 0x20bab58
SO['行为37'] = 0x2386c68
SO['行为38'] = 0x1bb6ee0
SO['行为39'] = 0x24e8b90
SO['行为40'] = 0x27500d4
SO['行为41'] = 0x2097b58
SO['行为42'] = 0x20b4fa0
SO['行为43'] = 0x20bae00
SO['行为44'] = 0xe80f24
SO['行为45'] = 0xe80f04
SO['行为46'] = 0x146e7bc
SO['行为47'] = 0x1434264
SO['行为48'] = 0x23acb64
for i = 1, 48 do
if SO['行为'..i] then
SO_PT(SO['行为'..i], 4, "~A8 MOV W0, WZR")
end
end
MaterialAlert("已为您开启异常行为")
end),
changan.switch("防举报 [大厅]",
function()
SO['防举报1'] = 0x1bb6f70
SO['防举报2'] = 0x1bb6e58
SO['防举报3'] = 0x21ec4c0
SO['防举报4'] = 0x29a3db8
for i = 1, 4 do
if SO['防举报'..i] then
SO_PT(SO['防举报'..i], 4, "~A8 MOV W0, WZR")
end
end
MaterialAlert("已为您开启阻断检测 ")
end),
changan.switch("阻断检测 [大厅]",
function()
local so=gg.getRangesList('libil2cpp.so')[2].start
py=0x1f50920
setvalue(so+py,4,-698416192)
py=0x1f50688
setvalue(so+py,4,-698416192)
gg.setValues({{address = gg.getRangesList("libtersafe2.so")[1]["start"] + 0x1FFBB8, flags = 4, value = -698416192}})
io.open("/sdcard/清瑰", "w+"):write([[8092
Var #6E3EEF0EC8|6e3eef0ec8|4|14000008|0|0|0|0|r-xp|/data/app/~~dbZf3-7Idi1M01OQgJ2aYg==/com.kiloo.subwaysurf-CB4G452mK0atiuC8vtHX4Q==/lib/arm64/libtersafe2.so|4a5ec8
Var #6E3EEF0F24|6e3eef0f24|4|d65f03c0|0|0|0|0|r-xp|/data/app/~~dbZf3-7Idi1M01OQgJ2aYg==/com.kiloo.subwaysurf-CB4G452mK0atiuC8vtHX4Q==/lib/arm64/libtersafe2.so|4a5f24
Var #6E3EF20540|6e3ef20540|4|14000007|0|0|0|0|r-xp|/data/app/~~dbZf3-7Idi1M01OQgJ2aYg==/com.kiloo.subwaysurf-CB4G452mK0atiuC8vtHX4Q==/lib/arm64/libtersafe2.so|4d5540]])
gg.loadList("/sdcard/清瑰", gg.LOAD_VALUES)
os.remove("/sdcard/清瑰")
end),
}),
}},
[3]={--第三分区
['分区名字']="刷号",
['功能配置']={
changan.text("刷号区域" , "0xff000000" , "20sp" ) ,
changan.line(),
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")--背饰全解
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, #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")--获得十倍
SO_PT(SO['解锁微博'],4,"~A8 MOV W0, #1")--解锁微博
SO_PT(SO['双倍金币'],4,"~A8 MOV W0, #1")--双倍金币
SO_PT(SO['炫跑卡'],4,"~A8 MOV W0, #6")--炫跑卡
SO_PT(SO['数据备份1'],4,"~A8 MOV W0, #1")--数据备份
SO_PT(SO['数据备份2'],4,"~A8 MOV W0, #1")--数据备份
SO_PT(SO['数据备份3'],4,"~A8 MOV W0, #1")--数据备份
MaterialAlert("===获取商品如下===\n金币获取30000000\n钥匙获取49000\n宝物钥匙获取500\n等级获取30级\n奖杯一键领取成功\n人物解锁成功\n滑板解锁成功\n背饰解锁成功\n皮肤解锁成功\n头像框解锁成功\n滑板技能解锁成功\n十倍得分解锁成功\n微博解锁成功\n双倍金币解锁成功\n炫跑卡解锁成功\n数据备份成功\n===商品获取完毕===")
end),
changan.switch("一键美化",
function()
SO_PT(SO['炫跑卡'],4,"~A8 MOV W0, #6")
SO_PT(0x236d4d0,4,"~A8 MOV X0, #1")
SO_PT(SO['替换人物'],4,"~A8 MOV X0, #190")
end),
changan.box({"代码查询 ",
changan.switch("奖励代码查询",
function()
local list = {
"搜索代码","1导弹","2蓝色魔鬼炸弹","4护盾","8香蕉皮","16颜料炸弹","32恶魔","64粘液罐子","128小狗","256滑板","225云雾","272减速乌龟","320净化饮料","384磁铁","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眼镜","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","幸运星背包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","默认滑板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","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金钥匙","杰克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","保安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","超人强270","小呆呆271","波比272","爱丽丝273","梅根274","果冻275","金陵上仙276","狸猫小管家277","粉小嘶278","艾呦喂279","海莉280","白雀281","阿布282","艾达公主283","阿轮284","阿组拉285","海伦娜286","悟空287","小鱼288","蓝星289","阿呆290","星戴拉291","阿丽塔292","星妹293","萌乐奶龙294","炫酷奶龙295","银壶296","法伊扎297","坦克机器人298","斯外普299","冷酷暴暴龙300","拽萌暴暴龙301","雨蒙302","星期四303","莉莉304","里奥305","小骨306","金蝉307","猪悟能308","沙悟净309","小胖保安310","芭蕾琪琪311","哈米312","小红帽313","匹诺曹314","青蛙王子315","中通小哥316","奥黛丽317","比利豆318","凯蒂319","哈士奇杰克320","冰淇灵321","233娘322","奥兹323","朱娜324","迪杰325","好好鸭琪琪326","小红孤小胖327","针线娃娃328","地铁跑酷3月27日星期四更新地铁跑酷海底世界的主要更新内容代码大全↓","角色:","罗根329","咖小吒330","海星妹妹331","苍灵332","幸运星333","浮游精灵334","芬恩335","滑板:","风火轮Z-11 313","深蓝飞鲂314","灵动花海315","三叶草316","水母滑板317","黄色潜艇318","好运锦鲤319","背饰:","乾坤圈Z-II 97","海洋之星98","苍灵之翼99","蝶梦之翼100","头像框:","2025海底世界头像框228","沧灵头像框229","哪小吒头像框230","社团联赛S29赛季头像框231","纸鸢呜春头像框232",
}
local Name = {} --- 功能函数表
local Choice = gg.choice(list, nil, "查询代码")
if Choice then
if Choice == 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 Choice == 2 then
os.exit()
end
end
end),
}),
changan.box({"一键解锁区域",
changan.switch("人物全解", function()
SO_PT(SO['人物'] ,4,"~A8 MOV W0, #1")
end,
function()
SO_PT(SO['人物'] ,4,"~A8 MOV W0, #1")
end
),
changan.switch("滑板全解", function()
SO_PT(SO['滑板'],4,"~A8 MOV W0, #1")
end,
function()
SO_PT(SO['滑板'],4,"~A8 MOV W0, #1")
end
),
changan.switch("背饰全解", function()
SO_PT(SO['背饰'] ,4,"~A8 MOV W0, #1")
SO_PT(SO['背饰保存'] ,4,"~A8 MOV W0, #1")---背饰保存
end,
function()
SO_PT(SO['背饰'] ,4,"~A8 MOV W0, #1")
end
),
changan.switch("装扮全解", function()
SO_PT(SO["装扮"], 4, "~A8 MOV\t W0, #1", "~A8 RET")
--gg.toast("装扮全解开启成功")
gg.toast("开启成功")
end
),
changan.switch("像框全解", function()
SO_PT(SO["像框"], 4, "~A8 MOV\t W0, #1", "~A8 RET")
--gg.toast("像框全解开启成功")
gg.toast("开启成功")
end
),
changan.switch("技能全解", function()
SO_PT(SO["技能"], 4, "~A8 MOV\t W0, #1", "~A8 RET")
--gg.toast("技能全解开启成功")
gg.toast("开启成功")
end
),
}),
changan.box({"保存解锁区域",
changan.switch("人物直接购买", function()
SO_PT(SO['人物购买按钮'],4,"~A8 B [PC,#"..SOGSPY_ST(SO['人物购买按钮'],SO['人物购买成功']).."]")
--gg.toast("成功")
end,
function()
SO_PT(SO['人物购买按钮'],4,"~A8 B [PC,#"..SOGSPY_ST(SO['人物购买按钮'],SO['人物购买成功']).."]")
end
),
changan.switch("滑板直接购买", function()
SO_PT(SO['滑板购买按钮'],4,"~A8 B [PC,#"..SOGSPY_ST(SO['滑板购买按钮'],SO['滑板购买成功']).."]")
--gg.toast("成功")
end,
function()
SO_PT(SO['滑板购买按钮'],4,"~A8 B [PC,#"..SOGSPY_ST(SO['滑板购买按钮'],SO['滑板购买成功']).."]")
end
),
changan.switch("金币人物", function()
local Character = {}
time = os.clock()
ms.ss(10299, 4, 32)
ms.py(291, 4, 4)
ms.py(-1, 8, 4)
ms.bc()
gg.clearResults()
do
do
for _FORV_4_, _FORV_5_ in ipairs(data) do
_FORV_5_ = _FORV_5_ - 67512
do
for _FORV_9_ = 0, 305 do
Character[#Character + 1] = {
value = 2,
address = _FORV_5_ + 44 + 232 * _FORV_9_,
flags = 4
}
Character[#Character + 1] = {
value = 0,
address = _FORV_5_ + 48 + 232 * _FORV_9_,
flags = 4
}
Character[#Character + 1] = {
value = 0,
address = _FORV_5_ + 60 + 232 * _FORV_9_,
flags = 4
}
Character[#Character + 1] = {
value = 2,
address = _FORV_5_ + 68 + 232 * _FORV_9_,
flags = 4
}
Character[#Character + 1] = {
value = 0,
address = _FORV_5_ + 100 + 232 * _FORV_9_,
flags = 4
}
end
end
end
end
end
gg.setValues(Character)
local time = string.sub(os.clock() - time, 0, 5)
gg.alert("开启成功")
gg.toast("开启成功")
end
),
changan.switch("金币滑板", function()
local Board = {}
time = os.clock()
ms.ss(20263, 4, 32)
ms.py(254, 4, 4)
ms.py(-1, 8, 4)
ms.bc()
gg.clearResults()
do
do
for _FORV_4_, _FORV_5_ in ipairs(data) do
_FORV_5_ = _FORV_5_ - 48768
do
for _FORV_9_ = 0, 290 do
Board[#Board + 1] = {
value = 2,
address = _FORV_5_ + 36 + 192 * _FORV_9_,
flags = 4
}
Board[#Board + 1] = {
value = 0,
address = _FORV_5_ + 40 + 192 * _FORV_9_,
flags = 4
}
Board[#Board + 1] = {
value = 0,
address = _FORV_5_ + 52 + 192 * _FORV_9_,
flags = 4
}
Board[#Board + 1] = {
value = 2,
address = _FORV_5_ + 76 + 192 * _FORV_9_,
flags = 4
}
Board[#Board + 1] = {
value = 0,
address = _FORV_5_ + 100 + 192 * _FORV_9_,
flags = 4
}
end
end
end
end
end
gg.setValues(Board)
local time = string.sub(os.clock() - time, 0, 5)
gg.alert("开启成功")
gg.toast("开启成功")
end
),
changan.switch("金币背饰", function()
local Ornament = {}
time = os.clock()
ms.ss(50061, 4, 32)
ms.py(63, 4, 4)
ms.py(-1, 8, 4)
ms.bc()
gg.clearResults()
do
do
for _FORV_4_, _FORV_5_ in ipairs(data) do
_FORV_5_ = _FORV_5_ - 6552
do
for _FORV_9_ = 0, 83 do
Ornament[#Ornament + 1] = {
value = 2,
address = _FORV_5_ + 36 + 104 * _FORV_9_,
flags = 4
}
Ornament[#Ornament + 1] = {
value = 1,
address = _FORV_5_ + 40 + 104 * _FORV_9_,
flags = 4
}
Ornament[#Ornament + 1] = {
value = 0,
address = _FORV_5_ + 48 + 104 * _FORV_9_,
flags = 4
}
end
end
end
end
end
gg.setValues(Ornament)
local time = string.sub(os.clock() - time, 0, 5)
gg.alert("开启成功")
gg.toast("开启成功")
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
function SOGSPY_ST(HDZ,DYZ)
if HDZ >= DYZ then
py=string.format("0x%X",HDZ-DYZ)
return tostring(string.format("-0x%X",py))
else
py=string.format("0x%X",DYZ-HDZ)
return tostring(string.format("0x%X",py))
end
end
function SO_PP(py,bh,sz)
so=gg.getRangesList('libil2cpp.so')[2].start
setvalue(so+py,bh,sz)
end
local SO = {}
SO['获取人物'] = 0x15e7c1c
SO['兑换码'] = 0x1ee50dc
local code = gg.prompt({'请输入人物代码id:'},{[1] = ""}, {[1] = 'number'})
if not code then return end
local addr = gg.getRangesList("libil2cpp.so")[2].start + SO['兑换码']
SO_PP(SO['兑换码'],4,'~A8LDR X0, [PC,#0x9178]')
SO_PP(SO['兑换码']+0x4,4,'~A8B [PC,#'..SOGSPY_ST(SO['兑换码']+0x4,SO['获取人物'])..']')
SO_PP(SO['兑换码']+0x9178,4,tonumber(code[1]))
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
function SOGSPY_ST(HDZ,DYZ)
if HDZ >= DYZ then
py=string.format("0x%X",HDZ-DYZ)
return tostring(string.format("-0x%X",py))
else
py=string.format("0x%X",DYZ-HDZ)
return tostring(string.format("0x%X",py))
end
end
function SO_PP(py,bh,sz)
so=gg.getRangesList('libil2cpp.so')[2].start
setvalue(so+py,bh,sz)
end
local SO = {}
SO['获取滑板'] = 0x15e7f98
SO['兑换码'] = 0x1ee50dc
local code = gg.prompt({'请输入滑板代码id:'},{[1] = ""}, {[1] = 'number'})
if not code then return end
local addr = gg.getRangesList("libil2cpp.so")[2].start + SO['兑换码']
SO_PP(SO['兑换码'],4,'~A8LDR X0, [PC,#0x9178]')
SO_PP(SO['兑换码']+0x4,4,'~A8B [PC,#'..SOGSPY_ST(SO['兑换码']+0x4,SO['获取滑板'])..']')
SO_PP(SO['兑换码']+0x9178,4,tonumber(code[1]))
string.toMusic('开启成功请去兑换码兑换')
end),
}),
changan.box({"宝物箱子",
changan.switch("十抽宝物",
function()
SO_PT(SO['十抽'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['十抽'] ,SO['全宝']).."]")
string.toMusic("ikun开启十抽全宝物请前往宝物箱子界面进行十抽")
end),
changan.switch("十抽保存",
function()
SO_PT(SO['十抽'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['十抽'] ,SO['宝物备份']).."]")
string.toMusic("ikun开启十抽宝物备份请前往保护箱子界面进行十抽")
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 X0, #78")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
changan.switch("保安",
function()
SO_PT(SO['替换人物'],4,"~A8 MOV X0, #190")
gg.toast("开启成功")
string.toMusic("开启成功")
end),
}),
changan.box({"替换区域",
changan.switch("替换人物",
function()
a = gg.prompt({"请输入代码"},{""},{"text"})[1]
if not a then return end
SO_PT(SO['替换人物'],4,"~A8 MOV X0, #" .. a .. "")
MaterialAlert("开启成功")
end),
changan.switch("替换滑板",
function()
a = gg.prompt({"请输入代码"},{""},{"text"})[1]
if not a then return end
SO_PT(SO['替换滑板'],4,"~A8 MOV X0, #" .. a .. "")
string.toMusic('成功')
end),
changan.switch("替换背饰",
function()
a = gg.prompt({"请输入代码"},{""},{"text"})[1]
if not a then return end
SO_PT(SO['替换背饰'],4,"~A8 MOV X0, #" .. a .. "")
string.toMusic('成功')
end),
changan.switch("替换装扮",
function()
a = gg.prompt({"请输入代码"},{""},{"text"})[1]
if not a then return end
SO_PT(SO['替换装扮'],4,"~A8 MOV X0, #" .. a .. "")
string.toMusic('成功')
MaterialAlert("开启成功")
end),
}),
changan.box({"其它功能",
changan.switch("粉色名称",
function()
SO_PT(0x236d4d0,4,"~A8 MOV X0, #1")
MaterialAlert("开启成功")
string.toMusic('开启成功')
end),
changan.switch("金色名称",
function()
SO_PT(SO['炫跑卡'],4,"~A8 MOV W0, #6")
SO_PT(0x236d4d0,4,"~A8 MOV X0, #1")
MaterialAlert("开启成功")
string.toMusic('金色名称开启成功')
end),
changan.switch("十倍得分", function()
SO_PT(SO["获取十倍"], 4, "~A8 MOV\t W0, #1", "~A8 RET")
SO_PT(SO["解锁十倍"], 4, "~A8 MOV\t W0, #1", "~A8 RET")
--gg.toast("十倍得分开启成功")
gg.toast("开启成功")
end
),
changan.switch("微博特权", function()
SO_PT(SO["微博"], 4, "~A8 MOV\t W0, #1", "~A8 RET")
--gg.toast("微博特权开启成功")
gg.toast("开启成功")
end
),
changan.switch("双倍金币", function()
SO_PT(SO["双倍"], 4, "~A8 MOV\t W0, #1", "~A8 RET")
--gg.toast("双倍金币开启成功")
gg.toast("开启成功")
end
),
changan.switch("满级跑卡", function()
SO_PT(SO["炫跑卡"], 4, "~A8 MOV\t W0, #6", "~A8 RET")
--gg.toast("开启成功")
gg.toast("开启成功")
end
),
changan.button("锁定奖励机制",
function()
local a = gg.prompt({"请输入物品代码"},{""},{"text"})[1]
if not a then return end
SO_PT(SO['奖励替换'],4,"~A8 MOV W0, #"..a)
gg.toast("锁定奖励机制开启成功")
end),
}),
changan.box({"修改数据",
changan.edit("普通金币数量","普通金币数量"),
changan.edit("普通钥匙数量","普通钥匙数量"),
changan.edit("宝物钥匙数量","宝物钥匙数量"),
changan.edit("燃跑炫卡等级","燃跑炫卡等级"),
changan.edit("无尽历史分数","无尽历史分数"),
changan.edit("无尽历史排名","无尽历史排名"),
changan.edit("账号当前等级","账号当前等级"),
changan.edit("道赛显示全服","道赛显示全服"),
changan.edit("道赛显示省标","道赛显示省标"),
changan.button("确认更改",
function()
local table={
changan.getedit("普通金币数量"),
changan.getedit("普通钥匙数量"),
changan.getedit("宝物钥匙数量"),
changan.getedit("燃跑炫卡等级"),
changan.getedit("无尽历史分数"),
changan.getedit("无尽历史排名"),
changan.getedit("账号当前等级"),
changan.getedit("道赛显示全服"),
changan.getedit("道赛显示省标"),
}
for Key,value in pairs(table)do
if(Key==1 and value ~="")then
local num_1 = changan.getedit("普通金币数量")
local num_1 = tonumber(num_1)
SO_Deposit(SO['金币'] ,4,num_1)
elseif(Key==2 and value ~="")then
local num_1 = changan.getedit("普通钥匙数量")
local num_1 = tonumber(num_1)
SO_Deposit(SO['钥匙'] ,4,num_1)
elseif(Key==3 and value ~="")then
local num_1 = changan.getedit("宝物钥匙数量")
local num_1 = tonumber(num_1)
SO_Deposit(SO['宝物钥匙'] ,4,num_1)
elseif(Key==4 and value ~="")then
SO_PT(SO['炫跑卡'] ,4,"~A8 MOV W0, #"..changan.getedit("燃跑炫卡等级"))
elseif(Key==5 and value ~="")then
local num_1 = changan.getedit("无尽历史分数")
local num_1 = tonumber(num_1)
SO_Deposit(SO['历史分数1'] ,4,num_1)
SO_Deposit(SO['历史分数2'] ,4,num_1)
gg.alert("重启即可")
elseif(Key==6 and value ~="")then
local num_1 = changan.getedit("无尽历史排名")
local num_1 = tonumber(num_1)
SO_Deposit(SO['历史排名'] ,4,num_1)
elseif(Key==7 and value ~="")then
local num_1 = changan.getedit("账号当前等级")
local num_1 = tonumber(num_1)
SO_Deposit(SO['等级'] ,4,num_1)
elseif(Key==8 and value ~="")then
SO_PT(SO['全服'] ,4,"~A8 MOV W0, #"..changan.getedit("道赛显示全服"))
elseif(Key==9 and value ~="")then
SO_PT(SO['省标'] ,4,"~A8 MOV W0, #"..changan.getedit("道赛显示省标"))
end
end
end),
}),
}},
[4]={--第四分区
['分区名字']="竞赛",
['功能配置']={
changan.text("竞赛区域" , "0xff000000" , "20sp" ) ,
changan.line(),
changan.text("防封号方法" , "#FFA500" , "36sp" ) ,
changan.line(),
changan.text("登录3天后再刷宝物,建议不要刷拉满,否则会被检测,不过一两个还是可以,道具赛控制时间[1分50秒过终点]就不会立刻封号,功能建议开例如 【概率聚能 无视障碍 能量倍增Pro】这种微功能,还有不要在晚上9-11点去玩道具赛因为=晚上9-11点左右人工特别强=" , "#FFA500" , "20sp" ) ,
changan.switch("自动加星",
function()
SO_PT(43850064, 4, "~A8 MOV W0, #999")
end),
changan.switch("泡泡效果",
function()
SO_PT(0xfbe850,4,"~A8 B [PC,#"..SOGSPY_ST(0xfbe850,0xfbddc0).."]","~A8 RET")
end),
changan.switch("保护效果",
function()
SO_PT(0xfbe850,4,"~A8 B [PC,#"..SOGSPY_ST(0xfbe850,0xfb7c60).."]","~A8 RET")
end),
changan.switch("悬浮导弹",
function()
SO_PT(0xfbe850,4,"~A8 B [PC,#"..SOGSPY_ST(0xfbe850,0xfbe214).."]","~A8 RET")
end),
changan.switch("重力模式",
function()
SO_PT(0x28d3110,4,"~A8 MOV W0, #1")
end),
changan.switch("重力聚能",
function()
SO_PT(0x28d3110,4,"~A8 MOV W0, #1")
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("开启成功")
end),
changan.switch("关闭断网弹窗",
function()
so=gg.getRangesList('libil2cpp.so')[2].start
LNB={
{address = so+SO['弹窗'], flags = 4, value = "~A8 MOV W0, #0x1"},
{address = so+SO['弹窗']+4, flags = 4, value = "~A8 RET"},
}
gg.setValues(LNB)
end),
changan.box({"设置人机区",
changan.switch("人机匹配机制",
function()
SO_PT(SO['匹配机制3'],4,"~A8B [PC,#"..SOGSPY_ST(SO['匹配机制3'],SO['竞赛模式1']).."]")
SO_PT(SO['匹配机制2'],4,"~A8MOV W0, #1")
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 = '~A8B [PC,#'..format..']'
return format
end
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 = '~A8MOV X0, XZR'},
{address = il2cpp + SO['获取玩家ID_2'] + 4, flags = 4 , value = '~A8RET'},
{address = il2cpp + SO['获取玩家ID_3'] , flags = 4 , value = '~A8MOV X0, XZR'},
{address = il2cpp + SO['获取玩家ID_3'] + 4, flags = 4 , value = '~A8RET'},
}
gg.setValues(Values)
gg.alert('开启成功\n已调出创建观战房间按钮\n点击创建观战房间匹配人机\n局内直接退即可加星')
end),
changan.switch("匹配人机",
function()
gg.alert("开启成功之后点击左上角的创建房间进入局内后直接退铂金及以上不能用")
SO_PT(SO['匹配机制3'],4,"~A8 B [PC,#"..SOGSPY_ST(SO['匹配机制3'],SO['竞赛模式1']).."]")
SO_PT(SO['匹配机制2'],4,"~A8 MOV W0, #1")
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
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 + SO['真人进不去游戏'] , flags = 4 , value = '~A8 MOV X0, XZR'},
{address = il2cpp + SO['真人进不去游戏'] + 4, flags = 4 , value = '~A8 RET'},
}
gg.setValues(Values)
gg.alert('开启成功\n铂金以下有效果\n进游戏直接退出即可加星')
end),
}),
changan.button("退出比赛 [局内开启]",
function()
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.alert('断网成功')
end),
changan.box({"美化段位",
changan.switch("美化段位" ,
function()
BL=gg.prompt({"请输入你要修改的段位\n1青铜\n2白银\n3黄金\n4铂金\n5钻石\n6王者"},{"6"},{"text"})[1]
SO_PT(SO['段位'],4,"~A8 MOV W0, #"..BL.."")
string.toMusic('段位美化成功')
end),
changan.switch("美化星数" ,
function()
BL=gg.prompt({"请输入你要修改的星星数量"},{"520"},{"text"})[1]
SO_PT(SO['星数'],4,"~A8 MOV W0, #"..BL.."")
string.toMusic('星数美化成功')
MaterialAlert("开启成功")
end),
changan.switch("美化国标" ,
function()
SO_PT(SO['全服'],4,"~A8 MOV W0, #"..gg.prompt({"输入你想要的排名"},{"1"},{"text"})[1])
string.toMusic('全服排名美化成功')
end),
changan.switch("美化省标" ,
function()
SO_PT(SO['省标'],4,"~A8 MOV W0, #"..gg.prompt({"输入你想要的排名"},{"1"},{"text"})[1])
string.toMusic('省份排名美化成功')
end),
}),
changan.box({"道具赛稳定区域 ",
changan.switch("半自动上分",
function()
SO_PT(SO['反弹道具1'] ,4,"~A8 MOV W0, #1")
SO_PT(SO['无视道具1'],4,"~A8 MOV W0, #1")--无视道具
SO_PT(SO['无视道具2'],4,"~A8 MOV W0, #1")--无视道具
SO_PT( 0x28cffb0,4, "~A8 MOV W0, #1")
SO_PT(SO['无视障碍'],4,"~A8 MOV W0, #1")
SO_PT(SO['PVP定人'],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 B [PC,#"..SOGSPY_ST(SO['跳跃'] ,SO['获取能量2']).."]")
SO_PT(SO['下滑1'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑1'] ,SO['获取能量2']).."]")
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 B [PC,#"..SOGSPY_ST(SO['跳跃'] ,SO['获取能量2']).."]")
SO_PT(SO['下滑1'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑1'] ,SO['获取能量2']).."]")
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("花落聚能",
function()
SO_PT(0x1cf3280, 4, "~A8 B [PC,#-0x9AB4]")
SO_PT(0x1dc6484, 4, "~A8 B [PC,#0xDAC924]")
SO_PT(0x1dc6674, 4, "~A8 B [PC,#0xDAC734]")
end),
changan.switch("BUFF聚能",
function()
SO_PT(SO['Buff模式'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['Buff模式'] ,SO['获取能量1']).."]")
gg.toast("开启成功")
string.toMusic('开启成功')
end,
function()
SO_PT(SO['Buff模式'],4,"~A8 MOV W0, #1")
string.toMusic("关闭成功")
MaterialAlert("开启成功")
end),
changan.switch("反弹道具" ,
function()
SO_PT(SO['反弹道具1'] ,4,"~A8 MOV W0, #1")
SO_PT(SO['反弹道具2'] ,4,"~A8 MOV W0, WZR")
string.toMusic("反弹道具开启成功")
end,
function()
SO_PT(SO['反弹道具2'] ,4,"~A8 MOV W0, WZR")
SO_PT(SO['反弹道具1'] ,4,"~A8 MOV W0, #1")
string.toMusic("反弹道具关闭成功")
end,
function ()
end),
changan.switch("开局道具" ,
function()
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.."","~A8 RET")
string.toMusic("开局道具修改成功")
end,
function ()
end),
changan.switch("能量倍增pro" ,
function()
SO_PT(SO['跳跃'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['跳跃'] ,SO['获取能量2']).."]")
SO_PT(SO['下滑1'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑1'] ,SO['获取能量2']).."]")
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 B [PC,#"..SOGSPY_ST(SO['跳跃'] ,SO['获取能量2']).."]")
SO_PT(SO['下滑1'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑1'] ,SO['获取能量2']).."]")
end),
changan.switch("图标聚能" ,
function()
SO_PT(SO['点击道具'],4,"~A8 B [PC,#"..SOGSPY_ST(SO['点击道具'] ,SO['获取能量2']).."]")
string.toMusic("点击道具图标获取能量开启成功")
end),
changan.switch("能量穿透" ,
function()
SO_PT(SO['能量穿透'] ,4,"~A8 MOV W0, WZR")
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.switch("无视减速带" ,
function()
SO_PT(SO['减速带'],4,"~A8 MOV W0, WZR")
string.toMusic("无视减速带开启成功")
end),
changan.switch("过滤10秒",
function()
SO_PT( 0x28cffb0,4, "~A8 MOV W0, #1")
gg.alert('过滤10秒开启成功')
end),
changan.switch("无视道具",
function ()
SO_PT(SO['无视道具1'],4,"~A8 MOV W0, #1")--无视道具
SO_PT(SO['无视道具2'],4,"~A8 MOV W0, #1")--无视道具
string.toMusic("己为您开启无视道具")
end,
function ()
end),
changan.switch("无视障碍",
function ()
SO_PT(SO['无视障碍'],4,"~A8 MOV W0, #1")
string.toMusic("己为您开启无视障碍")
end,
function ()
end),
}),
changan.box({"道具赛",
changan.switch("自动上分",
function ()
local SO = {}
SO['当前速度']=0x21f9aec
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.3},
{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 = 50391.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)
MaterialAlert("开启成功")
end),
changan.switch("定位坐标到终点前 ",
function ()
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
local ms = { }
function SO_PT(FUNCTIONADD, TYPE, VALUE)
local SOMOD = gg.getRangesList("il2cpp.so")
if SOMOD[2] == nil then gg.alert("开启失败\n因为选错进程\n解决方法:请重新选择内存最大的地铁跑酷进程进程\n") else
gg.setValues({{address=SOMOD[2].start+FUNCTIONADD, flags=TYPE, value=VALUE}})
gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+4, flags=TYPE, value="~A8 RET"}})
end
end
function SO_PK(value)
local patch = {}
for i, v in ipairs(value) do
table.insert(patch, {['address'] = v[1], ['flags'] = v[2], ['value'] = type(v[3]) ~= 'string' and tonumber(v[3]) or v[3]})
end
return gg.setValues(patch)
end
local addr = gg.getRangesList("libil2cpp.so")[2].start + 0x11486e4
SO_PK({
{addr, 4, "~A8 LDR S0, [PC,#0x14]"},
{addr + 0x4, 4, "~A8 LDR S1, [PC,#0x14]"},
{addr + 0x8, 4, "~A8 LDR S2, [PC,#0x14]"},
{addr + 0xC, 4, "~A8 LDR X0, [X0,#0x50]"},
{addr + 0x10, 4, "~A8 B [PC,#0x10AEA28]"},
{addr + 0x14, 16, 20}, -- x 左右
{addr + 4 + 0x14, 16, 20}, -- y 上下
{addr + 8 + 0x14, 16, 26300}, -- z 距离
})
gg.sleep(100)
SO_PK({
{addr, 4, "~A8 RET"},
})
gg.toast("开启成功")
end),
changan.switch("调出赛事房间",
function()
SO_PT(SO['赛事'] ,4,"~A8 MOV X0, #1")
end),
changan.switch("速度不变",
function()
SO_PT(SO['速度不变'],4,"~A8 MOV W0, #1")
end),
changan.switch("删除滑板建模",
function()
SO_PT(SO['滑板消失'],4,"~A8 MOV W0, #1")
MaterialAlert("开启成功")
string.toMusic('开启成功')
end,
function()
end),
changan.switch("道具图标[装b使用]",
function()
local j_1 = { "道具类型"..[[
无 = 0
导弹 = 1
蓝泡泡 = 2
护盾 = 4
香蕉 = 8
颜料 = 16
恶魔 = 32
绿泡泡 = 64
狗子 = 128
能量 = 256
乌龟 = 272
云雾 = 288
净化饮料 = 320
磁铁 = 384
群体护盾 = 512
双乌龟对抗赛 = 528
双导弹对抗赛 = 544
群体护盾对抗赛 = 545
滑板 = 560
捕捉观看 = 561
超级冲刺 = 562
羽毛 = 563
砝码 = 564
UFO = 565
充满能量 = 566
龙卷风 = 567
刺激剂 = 568
刺激剂_增加 = 569
]] }
local f_2
local y_3 = { "text" }
local Prompt = gg.prompt ( j_1 , f_2 , y_3 )
if Prompt == nil then
return
else
SO_PT(SO['道具图标'],4,"~A8 MOV W0, #" ..Prompt[1].."","~A8 RET")
string.toMusic("道具图标更改成功")
gg.toast("开启成功")
end
end,
function()
end),
changan.button("自改滑板时长",
function()
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({"推荐14250.5"},{"14250.5"},{"text"})
if not a then return end
setfloat(SO['滑板时长'], tonumber ( a [1] ) )
string.toMusic("开启成功")
end),
changan.switch("杀人机",
function()
SO_PT(SO['PVP定人'],4,"~A8 MOV W0, #1")
gg.toast("开启成功")
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.button("修改文字",
function()
gg.clearResults()
gg.setRanges(32)
a = gg.prompt({"请输入更改前的文字","请输入更改后的文字"},{[1]="别跑!",[2]="人机!"},{"text","text"})
if not a then return end
if a[1] == "" then return end
if a[2] == "" then return end
gg.searchNumber(";"..a[1], gg.TYPE_WORD, false, gg.SIGN_EQUAL, 0, -1, 0)
if gg.getResultsCount() == 0 then gg.alert('搜索失败') return end
gg.getResults(99999)
gg.editAll(";"..a[2], gg.TYPE_WORD)
MaterialAlert("开启成功")
string.toMusic("开启成功")
end),
changan.switch("下滑拖尾加重",
function()
SO_PT(SO['拖尾'] ,4,"~A8 MOV W0, #1","~A8 RET")
MaterialAlert("开启成功")
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, #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()
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 Offset = il2cpp_start + 0x1053e78
local mmap = gg.allocatePage(1 | 2 | 4) + 8
local table_correct = {
{address = Offset, flags = 4, value = '~A8 LDR X1, [PC,#0x8]'},
{address = Offset + 4, flags = 4, value = '~A8 BR X1'},
{address = Offset + 8, flags = 32, value = mmap},
{address = mmap, flags = 4, value = '~A8 LDR X0, [PC,#0x8]'},
{address = mmap + 4, flags = 4, value = '~A8 BR X30'},
{address = mmap + 8, flags = 4, value = -1},
}
gg.setValues(table_correct)
end
zhix()
gg.toast("开启成功")
string.toMusic('二段跳模式开启成功')
end,
function()
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")
string.toMusic('开启成功')
end),
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['房间防踢1'],4,"~A8 MOV W0, WZR")
SO_PT(SO['房间防踢'],4,"~A8 MOV W0, WZR")
gg.toast("开启成功")
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.box({
"无尽赛",
changan.switch("下滑穿墙",
function()
qmnb = {
{['memory']=32},
{['name']='下滑穿透'},
{['value']=4.5, ['type']=16},
{['lv']=9.0,['offset']=8, ['type']=16},
{['lv']=5.5,['offset']=16, ['type']=16},
{['lv']=1.0,['offset']=20, ['type']=16},
{['lv']=10.0,['offset']=24, ['type']=16},
}
qmxg = {
{['value']=9191.0,['offset']=0,['type']=16,['freeze']=true},
{['value']=9191.0,['offset']=16,['type']=16,['freeze']=true},
}
xqmnb(qmnb,qmxg)
gg.toast("已为您开启")
end,
function()
qmnb = {
{['memory']=32},
{['name']='恢复穿透'},
{['value']=9191.0, ['type']=16},
{['lv']=9.0,['offset']=8, ['type']=16},
{['lv']=9191.0,['offset']=16, ['type']=16},
{['lv']=1.0,['offset']=20, ['type']=16},
{['lv']=10.0,['offset']=24, ['type']=16},
}
qmxg = {
{['value']=4.5,['offset']=0,['type']=16},
{['value']=5.5,['offset']=16,['type']=16,['freeze']=true},
}
xqmnb(qmnb,qmxg)
end),
changan.switch("下滑瞬移",
function()
qmnb = {
{["memory"] = 32},
{["name"] = "下滑瞬移"},
{["value"] = -8388608, ["type"] = 4},
{["lv"] = -1082130432, ["offset"] = -16, ["type"] = 4},
{["lv"] = 2139095040, ["offset"] = -8, ["type"] = 4},
}
qmxg = {
{["value"] = 99999, ["offset"] = -64, ["type"] = 16},
}
xqmnb(qmnb)
gg.toast("已为您开启")
end,
function()
qmnb = {
{["memory"] = 32},
{["name"] = "恢复瞬移"},
{["value"] = -8388608, ["type"] = 4},
{["lv"] = -1082130432, ["offset"] = -16, ["type"] = 4},
{["lv"] = 2139095040, ["offset"] = -8, ["type"] = 4},
}
qmxg = {
{["value"] = 0, ["offset"] = -64, ["type"] = 16},
}
xqmnb(qmnb)
end),
changan.switch("人物大跳",
function()
local qmnb=
{
{['memory']=32},
{['name']='人物大跳'},
{['value']=1091567616, ['type']=32},
{['lv']=20.0,['offset']=-608, ['type']=16},
{['lv']=1.0,['offset']=12, ['type']=16},
{['lv']=10.0,['offset']=16, ['type']=16},
}
local qmxg=
{
{['value']=60.0,['offset']=-608,['type']=16,['freeze']=true},
}
xqmnb(qmnb,qmxg)
gg.toast("已为您开启")
end,
function()
local qmnb=
{
{['memory']=32},
{['name']='恢复大跳'},
{['value']=1091567616, ['type']=32},
{['lv']=60.0,['offset']=-608, ['type']=16},
{['lv']=1.0,['offset']=12, ['type']=16},
{['lv']=10.0,['offset']=16, ['type']=16},
}
local qmxg=
{
{['value']=20.0,['offset']=-608,['type']=16,['freeze']=true},
}
xqmnb(qmnb,qmxg)
end),
changan.switch("人物重力",
function()
gg.setRanges(32)
Name='人物重力'
local tb1=
{
{1091567616,32,0},
{200.0,16,-800},
{1.0,16,12},
{10.0,16,16},
}
local tb2=
{
{50,16,-800,true},
}
SearchWrite(tb1,tb2,dataType)
gg.toast("已为您开启")
end,
function()
gg.setRanges(32)
Name='恢复重力'
local tb1=
{
{1091567616,32,0},
{50.0,16,-800},
{1.0,16,12},
{10.0,16,16},
}
local tb2=
{
{200,16,-800,true},
}
SearchWrite(tb1,tb2,dataType)
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()
SO_PT(SO['过派对新手1'],4,"~A8 MOV W0, #1")
end),
changan.switch("重力聚能仅派对赛可用" ,
function()
SO_PT(SO['无限能量'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['无限能量'] ,SO['获取能量1']).."]")
SO_PT(SO['释放能量'],4,"~A8 MOV W0, #1","~A8 RET")
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")
string.toMusic("重力聚能开启成功")
end,
function ()
end),
changan.switch("HOOK加星(单开)",
function()
SO_PT(SO['防止卡屏1'],4,"~A8 MOV W0, #1","~A8 RET")
SO_PT(SO['防止卡屏2'],4,"~A8 MOV W0, WZR","~A8 RET")
SO_PT(SO['新时刻'],4,"~A8 MOV W0, #1")
SO_PT(SO['作弊时间'],4,"~A8 MOV W0, WZR")
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"}})
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")
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")
SO_PT(SO['能量穿透'] ,4,"~A8 MOV W0, #1")
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()
SO_PT(SO['攻击拾取'], 4, "~A8 RET")
-- 通用函数:根据模块名和状态取基址
function _lib(libs, state)
local lib = gg.getRangesList(libs)
for _, v in ipairs(lib) do
if v.state == state then return v.start end
end
return nil
end
-- 1. 先拿到 il2cpp 基址
local base = _lib('il2cpp', 'Xa')
if not base then
print('找不到 il2cpp,脚本结束')
os.exit()
end
--
local addr1 = base + SO['后程加速']
gg.setValues({
-- 第 1 组
{address = addr1, flags = 4, value = '~A8 LDR S0, [PC,#0x8]'},
{address = addr1 + 4, flags = 4, value = '~A8 RET'},
{address = addr1 + 8, flags = 16, value = 99999},
-- 第 2 组
})
gg.alert("开启成功\n进入游戏开启滑板直接到终点退出游戏即可加星")
string.toMusic('派对赛独家加星模式开启成功')
end),
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,
function()
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,
function()
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("发表情退出V1",
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("发表情退出V2",
function()
SO_PT(SO['表情退出'],4,"~A8 B [PC,#-0x67BF4]")
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()
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.box({"大乱斗区域",
changan.switch("局内修改分数",
function()
a = gg.prompt({"输入要修改的分数:"},{""},{"text"})[1]
a= tonumber(a)
SO_Deposit(0xeea22c,4,a,"~A8 RET")
string.toMusic('修改成功')
end),
changan.switch("无限滑板",
function()
SO_PT(SO["无限能量"],4,"~A8 MOV W0, #1")
string.toMusic('开启成功')
end),
}),
}},
[5]={--第二分区
['分区名字']="设置",
['功能配置']={
changan.text("设置" , "0xff000000" , "20sp" ) ,
changan.line(),
changan.switch("音量键隐藏UI",
function()
音量键=true
end,
function()
音量键=false
end),
changan.switch("摇一摇隐藏UI",
function()
摇一摇=true
end,
function()
摇一摇=false
end),
changan.button("退出UI",
function()
window:removeView(floatWindow)
luajava.setFloatingWindowHide(false)
tuichu=1
end),
}},
}
第二页 = {
['分页名字']="音乐",
[1]={--第一分区
['分区名字']="音乐",
['功能配置']={
}},
}
第三页={
['分页名字']="聊天室",
[1]={
['分区名字']="聊天室",
['功能配置']={
}},
}
第四页 = {
['分页名字']="助手",
[1]={--第一分区
['分区名字']="助手",
['功能配置']={
}},
}
changan.menu({
第一页,--调用上边的分页配置
第二页,
第三页,
第四页
})