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({ 第一页,--调用上边的分页配置 第二页, 第三页, 第四页 })