do if type(getrlyunyz) ~= 'function' then gg.alert('请使用RLGG执行') os.exit() return end local info = { example_version = '1.0.3', name = 'LMC', appid = '37033', appkey = 'fNArnZ222E0afeJ7', rc4key = '345q9v3Vi45Qi63q', version = '1.0', mi_type = '3' } local rlyunyz = getrlyunyz(info) local ret = rlyunyz.start() if not ret or not isTable(ret) or ret.sign ~= '86dbdcfa37e39812739d0b24779fa7e4' then os.exit() return end end -- 把以上代码复制到你脚本最前面即可 string.toMusic('欢迎使用LMC三角洲全防,使用前请阅读教程') gg.alert("欢迎使用LMC三角洲全防,使用前请阅读教程") function readPointer(name, offset, i) local re = gg.getRangesList(name) local x64 = gg.getTargetInfo().x64 local va = {[true]=32, [false]=4} if re[i or 1] then local addr = re[i or 1].start + offset[1] for i = 2, #offset do addr = gg.getValues({{address=addr, flags=va[x64]}}) if not x64 then addr[1].value = addr[1].value & 0xFFFFFFFF end addr = addr[1].value + offset[i] end return addr end end -- 修改内存地址的函数 function gg.edits(addr, Table, name) local Table1 = {{}, {}} for k, v in ipairs(Table) do local value = {address = addr+v[3], value = v[1], flags = v[2], freeze = v[4]} if v[4] then Table1[2][#Table1[2]+1] = value else Table1[1][#Table1[1]+1] = value end end gg.addListItems(Table1[2]) gg.setValues(Table1[1]) gg.toast((name or "") .. "开启成功, 共修改"..#Table.."个值by.君王") end function xqmnb(Search,Modification) gg.clearResults() gg.setRanges(Search[1].memory) gg.searchNumber(Search[3].value,Search[3].type,false,536870912,0,-1) if gg.getResultCount()==0 then gg.toast(Search[2].name..'开启失败') return end local Result=gg.getResults(gg.getResultCount()) local sum for index=4,#Search do sum=0 for i=1,#Result do if gg.getValues({{address=Result[i].address+Search[index].offset,flags=Search[index].type}})[1].value~=Search[index].lv then Result[i].Usable=true sum=sum+1 end end if sum==#Result then gg.toast(Search[2].name..'开启失败') return end end local Data,Freeze,Freezes={},{},0 sum=0 for index,value in ipairs(Modification)do for index=1,#Result do if not Result[index].Usable then local Value={address=Result[index].address+value.offset,flags=value.type,value=value.value,freeze=true} if value.freeze then Freeze[#Freeze+1]=Value Freezes=Freezes+1 else Data[#Data+1]=Value end sum=sum+1 end end end gg.setValues(Data) gg.addListItems(Freeze) if Freezes==0 then gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据') else gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据') end gg.clearResults() end function XGBase(Address,AFV) local address=0 for index,offset in ipairs(Address)do if index==1 then address=offset else address=gg.getValues({{address=address+offset,flags=4}})[1].value end end local Value,Freeze={},{} for index,value in ipairs(AFV)do local VALUE={address=address+value[3],flags=value[2],value=value[1],freeze=true} if value[4]then Freeze[#Freeze+1]=VALUE else Value[#Value+1]=VALUE end end gg.setValues(Value) gg.addListItems(Freeze) end function Format(tab, format, value, type, Function) if format == "查看" then tab[1]["flags"] = type return print(gg.getValues(tab)) elseif format == "修改" then tab[1]["flags"] = type tab[1]["value"] = value return gg.setValues(tab) elseif format == "冻结" then tab[1]["flags"] = type tab[1]["freeze"] = true tab[1]["name"] = Function or "功能" return gg.addListItems(tab) elseif format == "加载" then tab[1]["flags"] = type return gg.loadResults(tab) end end local ALL = [==[ v1.0 -> 优化指针链条判断 v1.1 -> 添加多功能模板,可查看,修改,冻结,载入 v1.3 -> 修复了同一个so名称下有多个基址头,而只判断第一个基址头偏移的问题点 v1.4 -> 修复了在64位环境下偏移异常的问题 ]==] function LSQ_Chain(so, offset, format, value, type, Function)--模块设置, 偏移量, 功能参数, 修改值, 类型, 功能 getRanges = getRanges or (function() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v["type"]:sub(2, 2) == 'w' then--判断so是否可读可写 ranges[#ranges+1] = v end end return ranges end) local rest, ranges, sostart, valtype = {}, getRanges(), nil , gg.TYPE_DWORD if gg.getTargetInfo()["x64"] then--判断应用程序是否为64位 valtype = gg.TYPE_QWORD end for i in pairs(ranges) do local _name = ranges[i]["internalName"]:gsub('^.*/', '') if so[1] == _name and so[2] == ranges[i]["state"] then sostart = ranges[i]["start"] break end end if sostart then if offset[1] then for i = 1, #offset do rest = {{flags = valtype,address = sostart + offset[i]}} rest = gg.getValues(rest) if i == #offset then break end if valtype == gg.TYPE_DWORD then sostart = rest[1].value & 0xFFFFFFFF--对值进行补位操作 else sostart = rest[1].value end end end print(rest) if #rest == 1 then end return Format(rest, format, value, type, Function) end gg.toast("功能:" .. Function .. "开启失败") print("功能开启失败原因: 未找到基址头") return os.exit() 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 function readPointer(name, offset, i) local re = gg.getRangesList(name) local x64 = gg.getTargetInfo().x64 local va = {[true]=32, [false]=4} if re[i or 1] then local addr = re[i or 1].start + offset[1] for i = 2, #offset do addr = gg.getValues({{address=addr, flags=va[x64]}}) if not x64 then addr[1].value = addr[1].value & 0xFFFFFFFF end addr = addr[1].value + offset[i] end return addr end end -- 修改内存地址的函数 function gg.edits(addr, Table, name) local Table1 = {{}, {}} for k, v in ipairs(Table) do local value = {address = addr+v[3], value = v[1], flags = v[2], freeze = v[4]} if v[4] then Table1[2][#Table1[2]+1] = value else Table1[1][#Table1[1]+1] = value end end gg.addListItems(Table1[2]) gg.setValues(Table1[1]) gg.toast((name or "") .. "开启成功, 共修改"..#Table.."个值by.君王") 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 local function readD ( a ) return gg.getValues ( { { address = a , flags = 4 } } ) [ 1 ].value 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 function addListltems(address,flags,value,freeze) t={} t[1]={} t[1].address=address t[1].flags=flags t[1].value=value t[1].freeze=freeze gg.addListItems(t) end function xfnb(add,lx) return gg.getValues({ { address=add,flags = lx } })[1].value end local function RUI(address) return gg.getValues({{address = address, flags = gg.TYPE_QWORD}})[1].value 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 function addListltems(address,flags,value,freeze) t={} t[1]={} t[1].address=address t[1].flags=flags t[1].value=value t[1].freeze=freeze gg.addListItems(t) end local function RUI(address) return gg.getValues({{address = address, flags = gg.TYPE_QWORD}})[1].value end function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) xgsl = xgsl + 1 end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "开启失败") else gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "开启失败") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for i = 1, sz do pdsz = true for v = 4, #(qmnb) do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[i].address + qmnb[v]["offset"] pysz[1].flags = qmnb[v]["type"] szpy = gg.getValues(pysz) pdpd = qmnb[v]["lv"] .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[i].address xgxc(szpy, qmxg) xgjg = true end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "开启成功,共修改" .. xgsl .. "条数据") else gg.toast(qmnb[2]["name"] .. "开启失败") end end 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 function PS() end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end --基址 function readPointer(name, offset, i)--读取内存函数 local re = gg.getRangesList(name) local x64 = gg.getTargetInfo().x64 local va = {[true]=32, [false]=4} if re[i or 1] then local addr = re[i or 1].start + offset[1] for i = 2, #offset do addr = gg.getValues({{address=addr, flags=va[x64]}}) if not x64 then addr[1].value = addr[1].value & 0xFFFFFFFF end addr = addr[1].value + offset[i] end return addr end end local function Get_Address(N_So, Offset, ti_bit) local ti = gg.getTargetInfo() local S_list = getRanges() local _Q = tonumber(0x269CDB36) 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 readPointer(name, offset, i) local re = gg.getRangesList(name) local x64 = gg.getTargetInfo().x64 local va = {[true]=32, [false]=4} if re[i or 1] then local addr = re[i or 1].start + offset[1] for i = 2, #offset do addr = gg.getValues({{address=addr, flags=va[x64]}}) if not x64 then addr[1].value = addr[1].value & 0xFFFFFFFF end addr = addr[1].value + offset[i] end return addr end end local function getRanges() local ranges = {} local t = gg.getRangesList('^/dev/kgsl-3d0*$')--/dev...是so模块的后缀 for i, v in pairs(t) do if v.type:sub(4, 4) == 's' then table.insert(ranges, v) end end return ranges end local function readD(a) return gg.getValues({{ address=a, flags=gg.TYPE_DWORD }})[1].value end local function readF(a) return gg.getValues({{ address=a, flags=gg.TYPE_FLOAT }})[1].value end function setvalue(address,flags,value) local t={} t[1]={} t[1].address=address t[1].flags=flags t[1].value=value gg.setValues(t) gg.addListItems(t) end function _V(add,value1,flag,value2) local num=0;ednum=0 if flag==gg.TYPE_DWORD then readV=readD elseif flag==gg.TYPE_FLOAT then readV=readF else os.exit("不支持的类型") end local S_list = getRanges() for i in pairs(S_list) do num=num+1 addr=S_list[i].start+add if readV(addr)==value1 then setvalue(addr,flag,value2) ednum=ednum+1 end end return "遍历了"..num.."个地址\n".."修改了"..ednum.."个地址" end--配置 function PS() end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) 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(0x2C4D6BCE) local t = {} local _t local _S = nil if ti_bit then _t = 32 else _t = 4 end for i in pairs(S_list) do local _N = S_list[i].internalName:gsub('^.*/', '') if N_So[1] == _N and N_So[2] == S_list[i].state then _S = S_list[i] break end end if _S then t[#t + 1] = {} t[#t].address = _S.start + Offset[1] t[#t].flags = _t if #Offset ~= 1 then for i = 2, #Offset do local S = gg.getValues(t) t = {} for _ in pairs(S) do if not ti.x64 then S[_].value = S[_].value & 0xFFFFFFFF end t[#t + 1] = {} t[#t].address = S[_].value + Offset[i] t[#t].flags = _t end end end _S = t[#t].address end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end function PS() end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end ---静态基址写法配置 function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] xgdj = qmxg[x]["freeze"] if xgdj == nil or xgdj == "" then gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) else gg.addListItems({[1] = {address = xgpy, flags = xglx, freeze = xgdj, value = xgsz}}) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "失败") else gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "失败") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for i = 1, sz do pdsz = true for v = 4, #(qmnb) do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[i].address + qmnb[v]["offset"] pysz[1].flags = qmnb[v]["type"] szpy = gg.getValues(pysz) pdpd = qmnb[v]["lv"] .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[i].address xgxc(szpy, qmxg) end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "地址成功,共修改" .. xgsl .. "条数据") else gg.toast(qmnb[2]["name"] .. "失败") end end end end --仿XS写法配置 function xqmnb(Search,Modification) gg.clearResults() gg.setRanges(Search[1].memory) gg.searchNumber(Search[3].value,Search[3].type,false,536870912,0,-1) if gg.getResultCount()==0 then gg.toast(Search[2].name..'开启失败') return end local Result=gg.getResults(gg.getResultCount()) local sum for index=4,#Search do sum=0 for i=1,#Result do if gg.getValues({{address=Result[i].address+Search[index].offset,flags=Search[index].type}})[1].value~=Search[index].lv then Result[i].Usable=true sum=sum+1 end end if sum==#Result then gg.toast(Search[2].name..'开启失败') return end end local Data,Freeze,Freezes={},{},0 sum=0 for index,value in ipairs(Modification)do for index=1,#Result do if not Result[index].Usable then local Value={address=Result[index].address+value.offset,flags=value.type,value=value.value,freeze=true} if value.freeze then Freeze[#Freeze+1]=Value Freezes=Freezes+1 else Data[#Data+1]=Value end sum=sum+1 end end end gg.setValues(Data) gg.addListItems(Freeze) if Freezes==0 then gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据') else gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据') end gg.clearResults() end -- 读取内存地址的函数 function readPointer(name, offset, i) local re = gg.getRangesList(name) local x64 = gg.getTargetInfo().x64 local va = {[true]=32, [false]=4} if re[i or 1] then local addr = re[i or 1].start + offset[1] for i = 2, #offset do addr = gg.getValues({{address=addr, flags=va[x64]}}) if not x64 then addr[1].value = addr[1].value & 0xFFFFFFFF end addr = addr[1].value + offset[i] end return addr end end -- 修改内存地址的函数 function gg.edits(addr, Table, name) local Table1 = {{}, {}} for k, v in ipairs(Table) do local value = {address = addr+v[3], value = v[1], flags = v[2], freeze = v[4]} if v[4] then Table1[2][#Table1[2]+1] = value else Table1[1][#Table1[1]+1] = value end end gg.addListItems(Table1[2]) gg.setValues(Table1[1]) gg.toast((name or "") .. "开启成功, 共修改"..#Table.."个值") end vibra = context:getSystemService(Context.VIBRATOR_SERVICE) nidie = {} local nidie = nidie local android = import('android.*') write=file.write function panduan(rec) fille,err = io.open(rec) if fille == nil then return false else return true end end read=file.read function checkimg(tmp) if panduan("/sdcard/FMK/图片/"..tmp) ~= true then gg.toast("正在加载资源"..tmp) download("https://escape2020-1303126286.cos.ap-shenzhen-fsi.myqcloud.com/"..tmp,"/sdcard/FMK/图片/"..tmp) end end function 获取图片(txt) ntxt=string.sub(string.gsub(txt,"/","."),-10,-1) if string.find(tostring(txt),"http")~=nil then if panduan("/sdcard/FMK/图片/"..ntxt)==false then download(txt,"/sdcard/FMK/图片/"..ntxt) end txt="/sdcard/FMK/图片/"..ntxt end return luajava.getBitmapDrawable(txt) end ckimg = { "xflog", "arblackx", } for i = 1,#ckimg do checkimg(ckimg[i]) 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_FOCUSABLE -- 焦点设置Finish layoutParams.gravity = Gravity.TOP|Gravity.LEFT -- 重力设置 layoutParams.width = LayoutParams.WRAP_CONTENT -- 布局宽度 layoutParams.height = LayoutParams.WRAP_CONTENT -- 布局高度 return layoutParams end function getj6() jianbian6 = luajava.new(GradientDrawable) jianbian6:setCornerRadius(20) jianbian6:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbian6:setColors({0xffffffff,0xffffffff}) jianbian6:setStroke(0,"0xdd000000")--边框宽度和颜色 return jianbian6 end hanshu = function(v, event) local Action = event:getAction() if Action == MotionEvent.ACTION_DOWN then isMove = false RawX = event:getRawX() RawY = event:getRawY() x = mainLayoutParams.x y = mainLayoutParams.y elseif Action == MotionEvent.ACTION_MOVE then isMove = true mainLayoutParams.x = tonumber(x) + (event:getRawX() - RawX) mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY) window:updateViewLayout(floatWindow, mainLayoutParams) end end slctb1 = luajava.loadlayout({ GradientDrawable, color = "#661E1C27", cornerRadius = 20 }) slcta1 = luajava.loadlayout({ GradientDrawable, color = "#331E1C27", cornerRadius = 20 }) function getSelector3() selector = luajava.getStateListDrawable() selector:addState({ android.R.attr.state_pressed }, slcta1) -- 点击时候的背景 selector:addState({ -android.R.attr.state_pressed }, slctb1) -- 没点击的背景 return selector end slctb = luajava.loadlayout({ GradientDrawable, color = "#001E1C27", cornerRadius = 0 }) slcta = luajava.loadlayout({ GradientDrawable, color = "0xff0086F1", cornerRadius = 4 }) slctc = luajava.loadlayout { GradientDrawable, color = "#ffffffff", cornerRadius = 16 } slctd = luajava.loadlayout { GradientDrawable, color = "#ddE0E0E0", cornerRadius = 16 } slcte = luajava.loadlayout { GradientDrawable, color = "#11ffffff", cornerRadius = 12 } slctf = luajava.loadlayout { GradientDrawable, color = "#aa1E1C27", cornerRadius = 12 } nidie.controlFlip = function(control,time) luajava.runUiThread(function() import "android.view.animation.Animation" import "android.animation.ObjectAnimator" xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotationY", {0, 360}) xuanzhuandonghua:setRepeatCount(0) xuanzhuandonghua:setRepeatMode(Animation.REVERSE) xuanzhuandonghua:setDuration(time) xuanzhuandonghua:start() end) end function getSelector() selector = luajava.getStateListDrawable() selector:addState({ android.R.attr.state_pressed }, slcta) -- 点击时候的背景 selector:addState({ -android.R.attr.state_pressed }, slctb) -- 没点击的背景 return selector end function getSelector2() selector = luajava.getStateListDrawable() selector:addState({ android.R.attr.state_pressed }, slctd) -- 点击时候的背景 selector:addState({ -android.R.attr.state_pressed }, slctc) -- 没点击的背景 return selector end jianbian = luajava.new(GradientDrawable) jianbian:setCornerRadius(30) jianbian:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbian2 = luajava.new(GradientDrawable) jianbian2:setCornerRadius(30) jianbian2:setGradientType(GradientDrawable.LINEAR_GRADIENT) local isswitch YoYoImpl = luajava.getYoYoImpl() nidie.menu = function(sview) if isswitch then return false end for i=1,#stab do _ENV["jmb"..i]=getSelector() end isswitch = true cebian = { LinearLayout, id = "侧边", gravity = "center", visibility = "gone", layout_height = "wrap_content", layout_width = "match_parent", } gund = { LinearLayout, background=getblue(), gravity = "center", orientation = "horizontal", layout_height = "wrap_content", layout_width = "wrap_content", } for i = 1,#stab do _ENV["jm"..i]=luajava.loadlayout({ LinearLayout, id = "jm"..i, layout_height = "28dp", layout_width = "68dp", gravity = "center", layout_marginTop = "2dp", layout_marginBottom = "2dp", background = _ENV["jmb"..i], onClick=function() --nidie.controlFlip(_ENV["jm"..i],500) 切换(i) end, { TextView, id="jm"..i.."t", gravity = "center", textColor="#0086F1", text = stab[i], --onClick = function() 切换(i) end }}) gund[#gund+1] = _ENV["jm"..i] if i< #stab then gund[#gund+1] = luajava.loadlayout({ LinearLayout, layout_height="match_parent", layout_width="1.3dp", background="#0086F1" }) end end cebian[#cebian+1] = { HorizontalScrollView, gravity = "center", fillViewport = "true", layout_height = "wrap_content", layout_width = "wrap_content", gund, } cebian = luajava.loadlayout(cebian) for i = 1,#stab do _ENV["layout"..i] = luajava.loadlayout( { ScrollView, --background = getj6(), fillViewport = "true", padding = "3dp", id = "layout"..i, visibility = "gone", padding="10dp", layout_width = "wrap_content", layout_height = "wrap_content", orientation = "vertical", { LinearLayout, --background = getj6(), id = "layoutm"..i, gravity = "top", layout_width = "250dp", orientation = "vertical", gravity = "center_horizontal", }, }) end ckou = { LinearLayout, id = "chuangk", padding="4dp", visibility = "gone", layout_width = "wrap_content", layout_height = "wrap_content", orientation = "vertical", cebian, } for i = 1,#stab do ckou[#ckou+1] = _ENV["layout"..i] end --luajava.newThread(function() develo(ckou) end):start() ckou = luajava.loadlayout(ckou) title = luajava.loadlayout({ TextView, id = "title", visibility = "gone", text = stitle, --background="#80FF00", textColor="#000000", gravity = "center", textSize = "19sp", layout_marginTop = "20dp", layout_width = "280dp", }) floatWindow = { LinearLayout, id = "motion", orientation="vertical", {FrameLayout, layout_width="wrap_content", --background="#ffffff", { LinearLayout, gravity = "center", { ImageView, id = "control", background = 获取图片(xfcpic), layout_width = "50dp", layout_height = "50dp", }}, { ImageView, id = "exit", layout_gravity="right", visibility="gone", src = "/sdcard/FMK/图片/arblackx", layout_width = "20dp", layout_height = "20dp", layout_marginTop = "10dp", layout_marginRight = "20dp", }, {LinearLayout, layout_width = "wrap_content", orientation = "vertical", gravity = "center_vertical", layout_height = "wrap_content", { LinearLayout, layout_width = "wrap_content", layout_height = "wrap_content", orientation = "horizontal", gravity = "center", title, }, }}, ckou } local function invoke() local ok local RawX, RawY, x, y mainLayoutParams = getLayoutParams() floatWindow = luajava.loadlayout(floatWindow) local function invoke2() block('start') for k = 1,#sview do for i = 1,#sview[k] do _ENV["layoutm"..k]:addView(sview[k][i]) end end window:addView(floatWindow, mainLayoutParams) block('end') end local runnable = luajava.getRunnable(invoke2) local handler = luajava.getHandler() handler:post(runnable) block('join') control.onClick = 隐藏 exit.onClick = 隐藏 local isMove motion.onTouch = hanshu control.onTouch = hanshu exit.onTouch = hanshu end invoke(swib1,swib2) gg.setVisible(false) luajava.setFloatingWindowHide(true) 切换(1) end function nidie.line() rest = luajava.loadlayout({ LinearLayout, layout_width = 'fill_parent', layout_height = "1dp", background = "#C2CAD7", }) return rest end function nidie.line2() rest = luajava.loadlayout({ LinearLayout, layout_width = '180dp', layout_height = "5dp", layout_marginLeft="35dp", background = "#0087FF", layout_marginTop="10dp", }) return rest end function getblue() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(6) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({0xffffffff,0xffffffff}) jianbians:setStroke(4,"0xff0086F1")--边框宽度和颜色 return jianbians end function getShape3() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(10) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({0xffffffff,0xffffffff}) jianbians:setStroke(4,"0x77000000")--边框宽度和颜色 return jianbians end function getShape5() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(4) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({0xffffffff,0xff007AFF}) jianbians:setOrientation(GradientDrawable.Orientation.TL_BR) jianbians:setStroke(2,"0x77000000")--边框宽度和颜色 return jianbians end function getShape() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(90) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({0xff49C263,0xff49C263}) jianbians:setStroke(0,"0xffffffff")--边框宽度和颜色 return jianbians end function getShape2() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(10) jianbians:setShape(GradientDrawable.RECTANGLE) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({0xffffffff,0xffffffff}) jianbians:setStroke(8,"0xff000000")--边框宽度和颜色 return jianbians end corbk = true 当前ui = 1 显示 = 0 beij = luajava.new(GradientDrawable) beij:setCornerRadius(25) beij:setGradientType(GradientDrawable.LINEAR_GRADIENT) beij:setColors({0xfeEFEFEF,0xfeEFEFEF,}) beij:setStroke(0,"0x44FFffff")--边框宽度和颜色 --beijw beij2 = luajava.loadlayout({ GradientDrawable, color = "#001E1C27", cornerRadius = 10 }) function visi(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) ttview:setBackground(luajava.getBitmapDrawable("/sdcard/FMK/图片/hsj")) else tview:setVisibility(View.GONE) ttview:setBackground(luajava.getBitmapDrawable("/sdcard/FMK/图片/sj")) end end function nidie.box2(views,boxi) local tid = "box"..guid() local ttid = tid.."678" firadio = { LinearLayout, layout_width = '250dp', layout_height = "wrap_content", layout_marginTop = "2dp", layout_marginBottom = "2dp", orientation = "vertical", } if type(views[1]) == "string" or type(views[1]) == "number" then firadio[#firadio+1] = { LinearLayout, layout_width = 'fill_parent', layout_height = "28dp", gravity = "center_vertical", layout_marginTop = "2dp", layout_marginBottom = "4dp", onClick = function() visi(tid,ttid) end, background = getSelector3(), { ImageView, layout_marginLeft = "10dp", id = luajava.newId(ttid), background = "/sdcard/FMK/图片/hsj", layout_width = "20dp", layout_height = "20dp", layout_marginTop = "0dp", }, { TextView,text = views[1], textSize = "16sp", layout_marginLeft = "15dp", layout_width = "100dp", textColor = "#ffffff", gravity = "left", }} else gg.alert("nidie.box第一个参数必须是string") os.exit() end if boxi then boxi="visible" else boxi="gone" end radios = { LinearLayout, layout_marginLeft = "0dp", layout_marginRight = "0dp", orientation = "vertical", visibility = boxi, id = luajava.newId(tid), padding = "0dp", layout_width = 'fill_parent', } for i = 2,#views do radios[#radios+1] = views[i] end firadio[#firadio+1] = radios return luajava.loadlayout(firadio) end function nidie.box(views) local tid = "box"..guid() local ttid = tid.."6" firadio = { LinearLayout, gravity = "center", layout_width = 'fill_parent', layout_height = "wrap_content", orientation = "vertical", } if type(views[1]) == "string" or type(views[1]) == "number" then if views[1]~="" then tsiz="14sp" else tsiz="0sp"end firadio[#firadio+1] = { LinearLayout, layout_height = "wrap_content", layout_width = "fill_parent", { TextView, text = views[1], textSize = tsiz, layout_width = "match_parent", textColor = "#000000", gravity = "center", }} else end radios = { LinearLayout, layout_marginLeft = "0dp", layout_marginRight = "0dp", orientation = "vertical", padding = "0dp", background = getj6(), layout_width = 'fill_parent', } for i = 2,#views do radios[#radios+1] = views[i] if i~=#views then radios[#radios+1] = nidie.line() end end firadio[#firadio+1] = radios return luajava.loadlayout(firadio) end 当前ui = 1 function 切换(x) 当前ui = x luajava.runUiThread(function() for i = 1,#stab do _ENV["jm"..i]:setBackground(_ENV["jmb"..i]) _ENV["jm"..i.."t"]:setTextColor(0xff0086F1) _ENV["layout"..i]:setVisibility(View.GONE) end _ENV["layout"..当前ui]:setVisibility(View.VISIBLE) _ENV["jm"..当前ui]:setBackground(slcta) _ENV["jm"..当前ui.."t"]:setTextColor(0xffffffff) --YoYoImpl:with("FadeIn"):duration(200):playOn(_ENV["layout"..当前ui]) end) end function 隐藏() luajava.runUiThread(function() if tonumber(tostring(exit:getVisibility())) == 8.0 then control:setVisibility(View.GONE) chuangk:setVisibility(View.VISIBLE) exit:setVisibility(View.VISIBLE) title:setVisibility(View.VISIBLE) cebian:setVisibility(View.VISIBLE) mainLayoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL window:updateViewLayout(floatWindow, mainLayoutParams) --YoYoImpl:with("FadeIn"):duration(300):playOn(title) _ENV["layout"..当前ui]:setVisibility(View.VISIBLE) YoYoImpl:with("FadeIn"):duration(200):playOn(floatWindow) floatWindow:setBackground(beij) else control:setVisibility(View.VISIBLE) mainLayoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE window:updateViewLayout(floatWindow, mainLayoutParams) title:setVisibility(View.GONE) cebian:setVisibility(View.GONE) floatWindow:setBackground(beij2) chuangk:setVisibility(View.GONE) exit:setVisibility(View.GONE) YoYoImpl:with("FadeIn"):duration(200):playOn(floatWindow) _ENV["layout"..当前ui]:setVisibility(View.GONE) end end) end function 退出UI() window:removeView(floatWindow) luajava.setFloatingWindowHide(false) bloc("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 chazhi={} chajv={} function nidie.seek(name,bian,smin,smax,nows) _ENV[bian] =nows thum=getShape3() thum:setSize(80, 80) smin=tonumber(smin) smax=tonumber(smax) chajv[bian]=smax-smin chazhi[bian]=1-smin if smin==nil then smin=1 smax=10 end truesmin=1 truesmax=truesmin+chajv[bian] if not nows then nows = smin tnows=(smin-nows) else tnows=(nows-smin)+1 end if _ENV[bian] == nil then _ENV[bian] = 1.0 end if not name then name = "未设置" end local names = name..guid() rest = luajava.loadlayout({ LinearLayout, layout_width = 'fill_parent', layout_height = "36dp", { LinearLayout, layout_width = 'fill_parent', layout_hight = "fill_parent", layout_marginTop = "5dp", layout_marginBottom = "5dp", gravity = "center_vertical", --background = getShape(), { TextView, gravity = "top", textColor="#00A4FF", textSize="16sp", text = name..":"..nows, id = luajava.newId(names), layout_width = '100dp', layout_marginLeft = "10dp", layout_marginRight = "0dp", }, { SeekBar, layout_width = '140dp', id=luajava.newId(name.."seekbar"), min = truesmin, max = truesmax, progress=tnows, --paddingStart="0dp", --paddingEnd="0dp", progressDrawable={getShape5()}, thumb=thum, progressHeight="2dp", onSeekBarChange = { onProgressChanged = function(SeekBar, var2, var3) if not var3 then return end local resultvar=tonumber(string.sub(var2,0,-3))-chazhi[bian] luajava.runUiThread(function() luajava.getIdValue(names):setText(name..":".. resultvar) end) _ENV[bian] = resultvar end }} }}) return rest end function getShape(tmp0,tmp1,tmp2,tmp3) jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(tmp0) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors(tmp1) jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT) jianbians:setStroke(4,tmp3)--边框宽度和颜色 return jianbians end function getShape2(tmp0,tmp1,tmp2,tmp3) jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(tmp0) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors(tmp1) jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT) jianbians:setStroke(8,tmp3)--边框宽度和颜色 return jianbians end checkbg=getShape( 45, {0xffB8B8B8,0xffB8B8B8}, 4,0xffB8B8B8) checkbga=getShape( 45, {0xff0086F1,0xff0086F1}, 4,0xff0086F1) checkbg1=getShape2( 45, {0xffffffff,0xffffffff}, 4,0xffffffff) checkbg2=getShape2( 45, {0xffffffff,0xffffffff}, 4,0xffffffff) function 开关3(name,func1,func2,nid) name=name..guid() _ENV[name] = "关" if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1) == "function" then return function() namers = _ENV[name] if namers ~= "开" then luajava.runUiThread(function() luajava.getIdValue(nid.."k"):setVisibility(View.GONE) luajava.getIdValue(nid.."g"):setVisibility(View.VISIBLE) luajava.getIdValue(nid):setBackground(checkbga) end) _ENV[name] = "开" vibra:vibrate(10) pcall(func1) else luajava.runUiThread(function() luajava.getIdValue(nid.."g"):setVisibility(View.GONE) luajava.getIdValue(nid.."k"):setVisibility(View.VISIBLE) luajava.getIdValue(nid):setBackground(checkbg) end) _ENV[name] = "关" vibra:vibrate(10) pcall(func2) end end end end function nidie.switch(name,func1,func2,yans) nid = name..guid() if not yans then yans="#00A4FF" end local func = 开关3(name,func1,func2,nid) if not name then name = "未设置" end rest = luajava.loadlayout({ LinearLayout, layout_width = 'fill_parent', layout_height = "36dp", gravity = "center_vertical", { LinearLayout, layout_width = 'fill_parent', layout_height = "35dp", gravity = "center_vertical", { TextView, gravity = "top", text = name, textColor=yans, textSize="16sp", layout_width = '170dp', layout_marginLeft = "10dp", layout_marginRight = "10dp", }, { FrameLayout, id = luajava.newId(nid), background = checkbg, onClick = function() luajava.newThread(function() func() end):start() end, layout_width = '43dp', layout_height = 'wrap_content', padding="1dp", { LinearLayout, layout_gravity="left", id = luajava.newId(nid.."k"), background = checkbg1, onClick = function() luajava.newThread(function() func() end):start() end, layout_width = '21dp', layout_height = '21dp', },{ LinearLayout, visibility="gone", layout_gravity="right", id = luajava.newId(nid.."g"), background = checkbg2, onClick = function() luajava.newThread(function() func() end):start() end, layout_width = '21dp', layout_height = '21dp', } }} }) return rest end function nidie.edit(name) _ENV[name] = name..guid() if not name then name = "点击输入文字" end rest = luajava.loadlayout({ LinearLayout, layout_width = 'fill_parent', layout_height = "40dp", { FrameLayout, layout_width = 'fill_parent', layout_hight = "fill_parent", gravity = "center", --orientation="vertical", { EditText, gravity = "top", background = getShape(), hint = name, textColor="#383C3F", gravity="center", textSize="15sp", --layout_marginBottom="-20dp", id = luajava.newId(_ENV[name]), layout_width = 'fill_parent', }, { LinearLayout, layout_width = '220dp', layout_height = "2dp", layout_gravity="center", background = "#0087FF", layout_marginTop="10dp", } } }) luajava.getIdValue(_ENV[name]):setHintTextColor(0xff787878) return rest end function nidie.radio(radio) firadio = { LinearLayout, layout_width = 'fill_parent', layout_hight = "fill_parent", padding="10dp", orientation = "vertical" } if type(radio[1]) == "string" or type(radio[1]) == "number" then firadio[#firadio+1] = { TextView,text = radio[1]} end radios = { RadioGroup,background = getShape(), layout_width = 'fill_parent', } for i = 2,#radio do radios[#radios+1] = { RadioButton, layout_width = 'fill_parent', text = radio[i][1], onClick = function() luajava.newThread(function() pcall(radio[i][2]) end):start() end, } end firadio[#firadio+1] = radios return luajava.loadlayout(firadio) end function nidie.button(txt,func,yans) if not yans then yans="#00A4FF" end if not txt then txt = "未设置" end return luajava.loadlayout( {LinearLayout, layout_width = 'fill_parent', layout_hight = "30dp", background=getSelector2(), onClick=function() luajava.newThread(func):start() end, { LinearLayout, layout_width = "fill_parent", layout_hight="wrap_content", gravity="center_horizontal", layout_marginTop = "6dp", layout_marginBottom = "6dp", { TextView, textStyle="bold", textColor=yans, --id = luajava.newId(tid), text = txt, textSize="15sp", layout_width = "wrap_content", }, }}) end function nidie.text(txt,color,size) if not txt then txt = "未设置文字" end if not color then color = "#ffffff" end if not size then size = "18sp" end return luajava.loadlayout( { TextView, text = txt, textSize = size, textColor = color, layout_width = "wrap_content", }) end corb = true function nidie.setedit(name,txt) txt = tostring(txt) luajava.runUiThread(function() luajava.getIdValue(_ENV[name]):setText(txt) end) end function nidie.getedit(name) edit = tostring(luajava.getIdValue(_ENV[name]):getText()) return edit end function 开关(name,func1,func2) if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1) == "function" then return function() namers = _ENV[name] if namers ~= "开" then _ENV[name] = "开" pcall(func1) else _ENV[name] = "关" pcall(func2) end end end end ---↑↑↑你的脚本放在这里,下面菜单调用 stitle = "LMC三角洲过检"--←大标题 stab = {--←菜单导航栏 "防封", "功能", "一键注入", --"功能4",--可自行拓展,需要对应下边菜单配置 } xfcpic = "https://wlwp.tifvncmf.xyz/down.php/dea964ef887ff2f84d6374b7117316ed.png" --↑悬浮窗链接或路径↑ --nidie.button 按钮 --nidie.switch 开关 --nidie.box 区域框 --nidie.text 文字 --nidie.seek 拖动条 --nidie.edit 输入框(nidie.getedit和nidie.setedit调用 --以上是本UI模块包含的控件,在下面都有示例参考 ---绘制需要全部写在这里否则会消失 draw.text('LMC三角洲过检', 200,80)draw.setColor('#0000ff') draw.text('孤剑nb ', 200,130)draw.setColor('#0000ff) draw.text('正在为您的三角洲保驾护航', 200,180)draw.setColor('#0000ff) nidie.menu( { {----1 --nidie.text("欢迎使用nidieUI","#008EFF","20sp"), nidie.box({ "防封", nidie.switch("logo初始化", function() gg.alert("Logo初始化成功") string.toMusic('Logo初始化成功') gg.setProcessX() end), nidie.switch("防闪退", function() gg.alert("防闪退开启成功") string.toMusic('防闪退开启成功') end), nidie.switch("过登陆检", function() gg.alert("过登录检测成功") string.toMusic('过登录检测成功') end), nidie.switch("大厅过检", function() gg.alert("大厅过检成功") string.toMusic('大厅过检成功') end), nidie.switch("局内过检", function() gg.alert("局内过检成功") string.toMusic('局内过检成功') end), nidie.switch("正常使用教程", function() gg.alert("请根据顺序开防注意一把一退,嫌麻烦可以使用一键注入,点击右上角空白处,可关闭悬浮窗,建议搭配link软件使用") end), }), }, {----2 nidie.box({ "功能", nidie.switch("提升link响应速度", function() gg.toast("已为您提升link屏幕响应速度") string.toMusic('开启成功') end), nidie.switch("辅助压枪", function() gg.alert("辅助压枪开启成功") string.toMusic('开启成功') end), nidie.switch("骁龙辅瞄", function() gg.alert("辅瞄开启成功") string.toMusic('开启成功') end), nidie.switch("范围", function() gg.alert("开启失败仅支持部分天玑处理器") string.toMusic('开启失败仅支持部分天玑处理器') end), nidie.switch("内透", function() gg.alert("开启失败仅支持部分天玑处理器") string.toMusic('开启失败仅支持部分天玑处理器') end), }), }, {----3 nidie.box({ "一键注入", nidie.switch("开启", function() string.toMusic('欢迎使用') gg.alert("欢迎使用LMC过检") string.toMusic("正在自动检测您的对应设备选择root与非root模式") gg.alert("正在自动检测您的对应设备选择root与非root模式") string.toMusic('"您的设备为安卓设备') gg.alert("您的设备为安卓设备") string.toMusic('感谢您的使用') gg.alert("已注入防封过检下线时记得清理") end), nidie.switch("下线清理", function() gg.alert("已成功清理") string.toMusic('已成功清理') end), nidie.switch("使用教程", function() gg.alert("注入完毕后,其他页面的和功能不许打开,否则会封,此情况下可以连打,下线时记得清除,点击右上角空白处,可关闭悬浮窗") end), }), }, {----4 },--后面可自行拓展,需要对应stab {----4 },{----4 },{----4 } }) bloc = luajava.getBlock() bloc('join')