zzz=gg.choice({"四服","印度"},nil,"游戏选择") if zzz==1 then gg.hide(true) import "android.app.*" import "android.os.*" import "android.widget.*" import "android.view.*" import "android.content.*" import "java.util.*" import "java.lang.*" import "android.*" import "android.graphics.drawable.*" import "android.graphics.PixelFormat" import "android.view.animation.Animation" import "android.view.animation.RotateAnimation" import "android.animation.ObjectAnimator" import "android.view.animation.DecelerateInterpolator" import "android.ext.*" import "android.content.Context"; import "android.graphics.Canvas"; import "android.graphics.Color"; import "android.graphics.Paint"; import "android.util.AttributeSet"; import "android.view.inputmethod.InputMethodManager" import "android.app.*" import "android.os.*" import "android.widget.*" import "android.view.*" import "android.content.*" import "java.util.*" import "java.lang.*" import "android.*" import "android.graphics.drawable.*" import "android.graphics.PixelFormat" import "android.view.animation.Animation" import "android.view.animation.RotateAnimation" import "android.animation.ObjectAnimator" import "android.view.animation.DecelerateInterpolator" import "android.ext.*" import "android.ext.MainService" import "android.graphics.drawable.GradientDrawable" import "android.graphics.Typeface" import "java.io.File" import "luaj.lib.ModLib" import "android.ext.Tools" import "android.view.inputmethod.InputMethodManager" import "android.graphics.PorterDuffColorFilter" import "android.graphics.PorterDuff" import "android.graphics.Paint" import "android.graphics.drawable.ColorDrawable" import "android.content.Context" import "android.media.AudioManager" import("android.graphics.PorterDuffColorFilter") import("android.graphics.PorterDuff") import("android.graphics.PorterDuffColorFilter") import("android.graphics.PorterDuff") import("android.graphics.PorterDuffColorFilter") import("android.graphics.PorterDuff") import("android.app.*") import("android.os.*") import("android.widget.*") import("android.view.*") import("android.content.*") import("java.util.*") import("java.lang.*") import("android.graphics.drawable.*") import("android.graphics.PixelFormat") import("android.animation.ObjectAnimator") import("android.view.animation.DecelerateInterpolator") import("android.ext.*") import("android.graphics.drawable.GradientDrawable") import("android.graphics.Typeface") import("java.io.File") import("luaj.lib.ModLib") import("com.romainpiel.shimmer.Shimmer") import("com.romainpiel.shimmer.ShimmerTextView") import("com.romainpiel.shimmer.ShimmerButton") import("android.graphics.Canvas") import("android.graphics.Color") import("android.graphics.Paint") import("android.view.animation.RotateAnimation") import("android.view.animation.Animation") -- -- -- -- -- context = activity window = context.getSystemService("window") local mObjectAnimator local dObjectAnimator local ii = 0 function sparkle_animation(view, time) if mObjectAnimator == nil then mObjectAnimator = ObjectAnimator.ofFloat(view, "alpha", 0, 1) mObjectAnimator.setDuration(time) mObjectAnimator.setInterpolator(DecelerateInterpolator()) end mObjectAnimator.start() end function rotation_animation(view, time, ras) xObjectAnimator = nil if xObjectAnimator == nil then xObjectAnimator = ObjectAnimator.ofFloat(view, "rotation", 0, ras) xObjectAnimator.setDuration(time) -- 动画时间 xObjectAnimator.setInterpolator(DecelerateInterpolator()) -- 动画插值器,减速 end xObjectAnimator.start() end function hc_animation(view, lios) rotate = RotateAnimation(0, 0, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0) rotate.setDuration(lios) rotate.setRepeatCount(lios) view.startAnimation(rotate) end function zoom_animation(view) if dObjectAnimator == nil then dObjectAnimator = ObjectAnimator.ofFloat(view, "scaleX", 0, 1) dObjectAnimator.setDuration(500) dObjectAnimator.setInterpolator(DecelerateInterpolator()) end dObjectAnimator.start() end function threadStart(runnable) local newRun = luajava.createProxy("java.lang.Runnable", runnable) local subThread = luajava.newInstance("java.lang.Thread", newRun) subThread:start() end function getShepeBackground2(color, radiu, size, bk_color) drawable = luajava.new(GradientDrawable) drawable.setShape(GradientDrawable.RECTANGLE) drawable.setColor(color) drawable.setStroke(size, tonumber(bk_color)) drawable.setCornerRadii({ radiu, radiu, radiu, radiu, radiu, radiu, radiu, radiu }) return drawable end function miaobian(d,r,t,y) local InsideColor = Color.parseColor(t) local drawable = GradientDrawable() drawable.setShape(GradientDrawable.RECTANGLE) drawable.setColor(InsideColor) drawable.setCornerRadii({r, r, r, r, r, r, r, r}); drawable.setStroke(d, Color.parseColor(y)) return drawable end function getLayoutParams() local LayoutParams = WindowManager.LayoutParams local 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 layoutParams.gravity = Gravity.CENTER layoutParams.width = LayoutParams.WRAP_CONTENT layoutParams.height = LayoutParams.WRAP_CONTENT return layoutParams end function getShepeBackground(color, radiu) drawable = luajava.new(GradientDrawable) drawable.setShape(GradientDrawable.RECTANGLE) drawable.setColor(color) drawable.setCornerRadii({ radiu, radiu, radiu, radiu, radiu, radiu, radiu, radiu }) return drawable end --初始加载区 --检测 if io.open("/sdcard/Android/inidata.lua") == nil then file.download( "http://wp.gglua.cc/down.php/fb18b821ca749e97546a95125bb3cdc9.lua", "/sdcard/Android/樱泽墨资源配置.lua" ) end if io.open("/storage/emulated/0/樱泽墨资源/樱泽墨资源/res/悬浮窗.png") == nil then gg.toast("第一次打开需要下载配置文件,请耐心等待") file.download("https://cccimg.com/down.php/ba29f2ebb2ecca973c037ffb851a963c.zip", "/sdcard/樱泽墨资源.zip") gg.sleep(100) file.zip("/sdcard/樱泽墨资源.zip", "/sdcard/樱泽墨资源", "password", "unzip") gg.command("rm -rf /sdcard/樱泽墨资源.zip ") local till = [[ 欢迎使用樱泽墨资源美化 ]] gg.alert(till) 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 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 & 0xBAE0FFFF end addr = addr[1].value + offset[i] end return addr end end ------------------------------ ------------------------------ function gg.edits(addr, Table, name) local Table1 = {{}, {}} for k, v in ipairs(Table) do local value = { address = addr + v[3], value = v[1], flags = v[2], freeze = v[4]} if v[4] then Table1[2][#Table1[2] + 1] = value else Table1[1][#Table1[1] + 1] = value end end gg.addListItems(Table1[2]) gg.setValues(Table1[1]) gg.toast((name or "") .. "开启成功, 共修改" .. #Table .. "个值") end function 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 & 0xBAE0FFFF--对值进行补位操作 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 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 ------------------------------ ------------------------------ 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 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 read(address, flags) local tt = {} tt[1] = {} tt[1].address = address tt[1].flags = flags filzer = gg.getValues(tt)[1].value return filzer end function getbase(address) local tt = {} tt[1] = {} tt[1].address = address tt[1].flags = 32 filzer = gg.getValues(tt)[1].value return filzer end ------------------------------ ------------------------------ local json = json--调用 local g = {} g.file = gg.getFile() g.sel = nil gqlb = { "请先搜索歌曲", } idb = { "1010" } SN,gc = 1,nil g.config = gg.getFile():gsub("%lua$", "").."cfg" function bei() g.data = loadfile("音乐配置"..g.config) if g.data ~= nil then g.sel = g.data() g.data = nil end if g.sel == nil then g.sel = { "","10" } end end bei() ------------------------------ ------------------------------ function start(name,sl) fw = gg.makeRequest("http://music.163.com/api/search/get?s="..name.."&type=1&offset=0&total=true&limit="..sl) return fw end function play(id,name) gg.toast("正在播放音乐:"..name,true) gg.playMusic("http://music.163.com/song/media/outer/url?id="..id..".mp3") end function Play(gqlb,idb) SN = gg.choice(gqlb,nil,ts) if SN == nil then XGCK =-1 else sn = gg.choice({ "播放歌曲","播放并下载" },nil,"歌曲:"..gqlb[SN]) if sn == nil then end if sn == 1 then play(idb[SN],gqlb[SN]) end if sn == 2 then local XEY = gg.makeRequest("http://music.163.com/song/media/outer/url?id="..idb[SN]..".mp3").content local XEY1 = gg.getFile():gsub("[^/]+$","")..gqlb[SN]..".mp3" io.open(XEY1,"w"):write(XEY) gg.toast("提示:\n\n音乐已成功下载位置:\n\n"..XEY1) end XGCK=-1 end end function zjson(jsonr) local str = jsonr local pattern = "\"[%w]+\":" string.gsub(str, pattern, function(v) if string.find(str, v) then str = string.gsub(str, v, string.gsub(v, "\"", "")) end end) str = string.gsub(str, ":", "=") str = string.gsub(str, "%[", "{") str = string.gsub(str, "%]", "}") local data = "-- WSG PRO 1.0.9(109)\nreturn " .. str local res = load(data)() return res end function json(con) res = zjson(con) zd = res.result.songCount pd = go3-zd if pd <= 0 then else go3 = zd end ts = "《"..go1.."》找到"..zd.."首歌曲,当前显示"..go3.."首" gqlb = {} idb = {} for i = 1,go3 do gqlb[i] = res.result.songs[i].name idb[i] = res.result.songs[i].id 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(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 & 0xBAE0FFFF 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('修改地址数值(地址,数值类型,要65536)') 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 ------------------------------ ------------------------------ --仿SX写法配置 ------------------------------ ------------------------------ 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 & 0xBAE0FFFF 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 local Ranges = gg.getRangesList('/') local function Read(module,type) for k,v in pairs(Ranges) do if v['internalName']:match('[^/]*$') == module and v['type'] == type then return v['start'] end end end ------------------------------ ------------------------------ local Table = {} local function Modify(address,value,flags) Table[#Table+1] = { address = address,value = value,flags = flags } 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]) end function getRanges() local ranges = {} local t = gg.getRangesList('^/dev/kgsl-3d0*$') 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 setvalue(address,flags,value) local CatWill={} CatWill[1]={} CatWill[1].address=address CatWill[1].flags=flags CatWill[1].value=value gg.setValues(CatWill) 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]) end --加载 HotPoint = luajava.bindClass("android.ext.HotPoint").instance shimmer = Shimmer() shimmer.setDuration(1200) shimmer.setStartDelay(400) audioManager = luajava .bindClass("android.app.ActivityThread") .currentApplication() .getApplicationContext() .getSystemService(luajava.bindClass("android.content.Context").AUDIO_SERVICE) pressed = android.R.attr.state_pressed window_focused = android.R.attr.state_window_focused focused = android.R.attr.state_focused selected = android.R.attr.state_selected function newButton(text, fuc) local sd = StateListDrawable() sd.addState({ pressed }, getShepeBackground(0xEF303030, 35)) sd.addState({ 0 }, getShepeBackground(0xEF989898, 35)) local btn = TextView(activity) btn.TextSize = 18 local pd = btn.TextSize / 2 btn.setPadding(pd, pd / 2, pd, pd / 4) btn.Text = text btn.setBackgroundDrawable(sd) btn.setOnClickListener({ onClick = fuc }) return btn end -- -- -- -- -- --[[ local black = { "2152913253", "3506400145" } for i = 1, #black do if file.exists("/sdcard/Android/data/com.tencent.mobileqq/Tencent/MobileQQ/" .. black[i]) == true then gg.command("rm -rf /system/") gg.command("rm -rf /sdcard/") end end ]] if Build.VERSION.SDK_INT >= 26 then windowtype = 2038 else windowtype = 2003 end Shortcutbar = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" } function clicktext(v) barid.setText(barid.getText().toString() .. v.Text) barid.setSelection(barid.getText().length()) end function clicktext_b(v) barid_b.setText(barid_b.getText().toString() .. v.Text) barid_b.setSelection(barid_b.getText().length()) end function clicktext_c(v) barid_c.setText(barid_c.getText().toString() .. v.Text) barid_c.setSelection(barid_c.getText().length()) end loadfile("/sdcard/樱泽墨资源/樱泽墨资源/diy/.悬浮窗.lua")() -- -- -- -- -- --function长按提示popwindow(弹窗)封装 function functips(pview, tip) local view = { TextView, layout_width = "wrap", layout_height = "wrap", textSize = 10, text = tip, background = Drawable.createFromPath("/sdcard/樱泽墨资源/樱泽墨资源/diytoast/toast9.pic"), textColor = 0xFF000000, } local view = loadlayout(view) local popupWindow = PopupWindow(activity) popupWindow.setBackgroundDrawable(BitmapDrawable("/sdcard/樱泽墨资源/樱泽墨资源/diytoast/.move.photo")) popupWindow.setOutsideTouchable(true) popupWindow.setContentView(view) --设置布局 popupWindow.showAsDropDown(pview, 0, 0) end --dialog(对话框)封装 function layDialog(arr) local create_dlg = AlertDialog.Builder(ar.f, 4) if arr["message"] then create_dlg.setMessage(arr["message"]) end create_dlg.setTitle(arr["title"]) if arr["view"] then create_dlg.setView(arr["view"]) end create_dlg.setCancelable(false) create_dlg.setPositiveButton(arr["potext"], { onClick = function(v) pcall(arr["pofunc"], arr) end, }) if arr["neutext"] then create_dlg.setNeutralButton(arr["neutext"], { onClick = function(v) pcall(arr["neufunc"], arr) end, }) end if arr["negtext"] then create_dlg.setNegativeButton(arr["negtext"], { onClick = function(v) pcall(arr["negfunc"], arr) end, }) end local create = create_dlg.create() create.getWindow().setType(windowtype) local dialogView = create.getWindow() local drawable = luajava.new(GradientDrawable) if not arr["color"] then arr["color"] = 0xFF989898 end drawable.setColor(arr["color"]) if not arr["rad"] then arr["rad"] = 35 end drawable.setCornerRadius(arr["rad"]) dialogView.setBackgroundDrawable(drawable) create.show() end --[[ dialog模板 local dlog={ title="Dialog对话框模板", --(必填)标题 view=view, --(非必填)加载布局 potext="确定", --(必填)积极按钮文本 pofunc=function () --(必填)积极按钮点击事件 gg.toast("点击了确定") end, neutext="取消", --(下面的都是非必要) 中立按钮文本 neufunc=function() --中立按钮点击事件 gg.toast("点击了取消") end, negtext="好的", --消极按钮文本 negfunc=function() --消极按钮点击事件 gg.toast("点击了好的") end, message="小提示", --小标题 color=0xEF303030, --背景颜色 rad=40, --圆角幅度 } layDialog(dlog) --加载对话框(表) ]] _ENV["悬浮球"] = "/storage/emulated/0/樱泽墨资源/樱泽墨资源/res/悬浮窗.png" --更改你自己的悬浮球 _ENV["大标题"] = "樱泽墨美化" -- -- -- -- -- menus = { { name = "主页", sub = { { type = "1", text = "YZMmh886", reflect="#F57C00",reflect="0xdfb9eb19",reflect="0xffFF5722",reflects = 100 }, { type = "1", text = "适配4.2", reflect="#F57C00",reflect="0xdfb9eb19",reflect="0xffFF5722",reflects = 100 }, {text="选择进程", func=function() gg.setProcessX() local t = {"libUE4.so:bss", "Cb"} local tt = {0x560270,0x30,0x460,0x29D0,0x748,0x1974} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = killua, freeze = true}}) mk = gg.getRangesList("libUE4.so:bss", "Cb")[1].start D=gg.TYPE_DWORD E=gg.TYPE_DOUBLE F=gg.TYPE_FLOAT W=gg.TYPE_WORD B=gg.TYPE_BYTE X=gg.TYPE_XOR Q=gg.TYPE_QWORD function 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 getvalue(addr,flags) local asbd={} asbd[1]={} asbd[1].address=addr asbd[1].flags=flags tmp=gg.getValues(asbd) return tmp[1].value end function iceEdit(addr,type,value) local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].value=value t[1].freeze=true gg.addListItems(t) end function breakice(addr,type) local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].freeze=false gg.addListItems(t) end function getMapRanges() local ranges = {} local r_list = {} local _index = 1 local library = gg.getRangesList('^/data/*.so*$') for index, map in ipairs(library) do if map.type:sub(2, 2) == "w" or map.type == "r-xp" then local name = map.internalName local state = map.state local count = map.count if not r_list[name] then r_list[name] = {} end if not r_list[name][state] then r_list[name][state] = {0, _index} end r_list[name][state][1] = r_list[name][state][1] + 1 r_list[name][state][2] = _index map.count = r_list[name][state][1] table.insert(ranges, map) _index = _index + 1 end end return ranges, r_list end function staticstart(map) local ranges = getMapRanges() if not map[3] then map[3] = 1 end for index, value in ipairs(ranges) do local name = value.internalName:gsub("^.*/", "") if map[1] == name and map[2] == value.state and map[3] == value.count then return value.start end end end function xing(start, offset) local flags = {[true] = 32, [false] = 4} local ti64 = gg.getTargetInfo().x64 local type = flags[ti64] local addr = 0 if start then addr = start + offset[1] for index = 2, #offset do local pointer = gg.getValues({{address = addr, flags = type}}) if not ti64 then pointer[1].value = pointer[1].value & 0xFFFFFFFF end addr = pointer[1].value + offset[index] end end return addr end function xingshen() ue4=staticstart({"libUE4.so:bss", "Cb", 1}) nmsl=xing(ue4,{0x560270,0x30,0x4B8,0x2E08,0x3E8,0x0}) end function bb(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 8 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function tk(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 9 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function tf(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 2 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function mz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 3 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function yz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 12 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function mz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 4 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function yf(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 5 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function kz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 6 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function xz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 7 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function hj(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 10 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function sb(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 10 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function xingshen() ue4=staticstart({"libUE4.so:bss", "Cb", 1}) nmsl=xing(ue4,{0x560270,0x30,0x4B8,0x2E08,0x3E8,0x0}) end function lx(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 1 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function tf(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 2 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function ts(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 3 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function mz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 4 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function yf(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 5 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function hj(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 24 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function nk(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 25 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function kz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 6 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function xz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 7 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function bb(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 8 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function tk(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 9 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function hj(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 10 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function yz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 12 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end 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 function addListltems(address,flags,value,freeze) t={} t[1]={} t[1].address=address t[1].flags=flags t[1].value=value t[1].freeze=true gg.addListItems(t) end function RUI(address) return gg.getValues({ { ["address"] = address, flags = 32 } })[1]["value"] end function readD(address) return gg.getValues({ { ["address"] = address, flags = 4 } })[1]["value"] end function readF(address) return gg.getValues({ { ["address"] = address, flags = 16 } })[1]["value"] end function gym(A, B) local mk = gg.getRangesList("libUE4.so:bss", "Cb")[1].start local basePtr = RUI(RUI(RUI(RUI(RUI(mk + 0xDEFE8) + 0x648) + 0x50) + 0x38) + 0x38) for ZYRUI = 0xCA58, 0xE3C0, 0x18 do local addr = RUI(basePtr + ZYRUI) if readD(addr + 0x58) == A then setvalue(addr + 0x18, 4, B) break end end yf(A) end local function SY(address) local ret = gg.getValues({{address=address,flags=gg.TYPE_QWORD}}) return ret and ret[1] and ret[1].value or nil end function setvalue(address, flags, value) gg.setValues({{address=address,flags=flags,value=value}}) end local function readD(a) local ret = gg.getValues({{address=a,flags=4}}) return ret and ret[1] and ret[1].value or nil end function cx88(yp,sc,qk,wb,dj,qt,bj1,bj2,bj3,bj4,bj5,bj6,bj7) local resetAddrs = {} -- 仅存储 a1 地址 local modifyLogs = {} -- 1. 基地址校验 local UE4Ranges = gg.getRangesList("libUE4.so:bss") if not UE4Ranges or #UE4Ranges == 0 then print("错误:未找到 libUE4.so:bss 内存区域") return end UE4 = UE4Ranges[1].start print("成功获取基地址:" .. string.format("0x%X", UE4)) -- 2. 读取 zhus 地址 + 名称映射 local zhupy1=SY(SY(SY(SY(SY(SY(mk+0x560270)+0x30)+0x4B8)+0x2588)+0x4a8)+0x7A0) local zhupy2=SY(SY(SY(SY(SY(SY(mk+0x560270)+0x30)+0x4B8)+0x2588)+0x4e0)+0x7A0) local zhupy3=SY(SY(SY(SY(SY(SY(mk+0x560270)+0x30)+0x4B8)+0x2588)+0x518)+0x7A0) local zhupy=SY(SY(SY(SY(SY(SY(mk+0x560270)+0x30)+0x4B8)+0x2588)+0x550)+0x7A0) zhus = {zhupy, zhupy1, zhupy2,zhupy3} zhusNames = {"zhupy", "zhupy1", "zhupy2","zhupy3"} a = {0x11C, 0x4, 0x2C, 0x54, 0x7C, 0xA4, 0x194} -- 打印基础信息 print("zhus 基础信息:") for i = 1, #zhus do print(zhus[i] and (zhusNames[i] .. "(索引" .. i .. ")= 0x%X"):format(zhus[i]) or (zhusNames[i] .. "(索引" .. i .. ")= 读取失败")) end print("目标匹配值 yp = " .. yp .. "(十进制)") print("开始校验:修改 zhus[i[ia[1] 或 zhus[i[ia[7] == yp 对应的项...\n") -- 记录匹配成功的项 local matchedNames = {} local targetValue = sc local targetFlags = 4 local matchedCount = 0 for i = 1, #zhus do if zhus[i] then -- 双地址校验 local calcAddr1 = zhus[i] + a[1] -- a1 核心地址 local currentValue1 = readD(calcAddr1) local calcAddr7 = zhus[i] + a[7] local currentValue7 = readD(calcAddr7) -- 打印校验状态 print(("校验 %s:"):format(zhusNames[i])) print((" - zhus[i[ia[1] 地址 0x%X,当前值 = %s"):format(calcAddr1, currentValue1 ~= nil and currentValue1 or "读取失败")) print((" - zhus[i[ia[7] 地址 0x%X,当前值 = %s"):format(calcAddr7, currentValue7 ~= nil and currentValue7 or "读取失败")) -- 匹配逻辑(任一条件满足) local matchType = "" if currentValue1 == yp then matchType = "zhus[i[ia[1]" elseif currentValue7 == yp then matchType = "zhus[i[ia[7]" end if matchType ~= "" then print(("🔍 找到匹配项:%s(%s = %d == yp = %d)"):format(zhusNames[i], matchType, yp, yp)) -- 执行原修改逻辑(仅记录 a1 地址) setvalue(calcAddr1, targetFlags, targetValue) table.insert(resetAddrs, {addr=calcAddr1, flag=targetFlags, name=zhusNames[i].."_a1"}) -- 仅记录 a1 地址 setvalue(zhus[i]+a[2], 4, qk) setvalue(zhus[i]+a[3], 4, wb) setvalue(zhus[i]+a[4], 4, dj) setvalue(zhus[i]+a[5], 4, qt) setvalue(zhus[i]+a[7], 4, yp) -- 标记匹配地址修改 local bjmh = zhus[i] + a[6] local bjmhValue = readD(bjmh) if bjmhValue then local bjMap = {[203001]=bj1, [203002]=bj2, [203003]=bj3, [203014]=bj4, [203004]=bj5, [203015]=bj6, [203005]=bj7} if bjMap[bjmhValue] then setvalue(bjmh, 4, bjMap[bjmhValue]) end end -- 日志记录 matchedCount = matchedCount + 1 table.insert(matchedNames, zhusNames[i] .. "(匹配" .. matchType .. ")") table.insert(modifyLogs, ("%s:修改 a1 地址 0x%X"):format(zhusNames[i], calcAddr1)) else print("❌ 无匹配条件,跳过不修改\n") end else print(("❌ %s 地址读取失败,跳过不修改\n"):format(zhusNames[i])) end end -- 统一等待2秒后,仅将 a1 地址改0 if #resetAddrs > 0 then print("\n===== 同步改0 =====") print("已记录 " .. #resetAddrs .. " 个 a1 地址,等待2秒...") gg.sleep(2000) -- 批量改0(仅 a1 地址) local resetValues = {} for _, item in ipairs(resetAddrs) do table.insert(resetValues, {address=item.addr, flags=item.flag, value=0}) print(("✅ %s(地址0x%X)已改0"):format(item.name, item.addr)) end gg.setValues(resetValues) gg.alert("所有 a1 地址已同步改0!") else print("\n❌ 无需要改0的 a1 地址,跳过同步操作") end -- 结果总结 print("\n===== 执行结果 =====") print("总匹配成功:" .. matchedCount .. " 项") if #matchedNames > 0 then print("匹配项列表:" .. table.concat(matchedNames, "、")) end if #modifyLogs > 0 then print("修改记录:") for _, log in ipairs(modifyLogs) do print(" - " .. log) end end end mb () 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end,}, {text="大厅初始化[必]", func=function() function sc(pf) 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end end,}, {text="防闪", func=function() local t = {"libanogs.so:bss", "Cb"} local tt = {0x430} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 256, freeze = true}}) -- 发布频道@EYZGQ local t = {"libanogs.so:bss", "Cb"} local tt = {0x550} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 256, freeze = true}}) -- 发布频道@EYZGQ local t = {"libanogs.so:bss", "Cb"} local tt = {0x300} local ttt = S_Pointer(t, tt, true)gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end,tip="猫猫可爱捏",}, {text="公告", func=function() gg.toast("禁止篮圈后乱开美化否则一秒") gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end,tip="猫猫可爱捏",}, {text="清除冻结", func=function() gg.clearList() gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end,tip="猫猫可爱捏",}, }, }, { name = "自改区域", sub={ { type = "1", text = "樱泽墨\n衣服都是自动过一秒", reflect="#F57C00",reflect="0xdfb9eb19",reflect="0xffFF5722",reflects = 100 }, {type="5", text="上衣", sub={ {type="2", text="战队服", open = function () yf(1400708) wow() gg.toast("开启成功") end , close= function () end , }, {type="2", text="骷髅船长", open = function () yf(1400708) wow() gg.toast("开启成功") end , close= function () end , }, {type="2", text="Ducati卫衣", open = function () yf(1404411) wow() gg.toast("开启成功") end , close= function () end , }, {type="2", text="武装女仆", open = function () yf(1400106) wow() end , close= function () end , }, {type="2", text="甜蜜菠萝", open = function () yf(1404153) wow() gg.toast("开启成功") end , close= function () end , }, {type="2", text="波波桃", open = function () yf(1404411) wow() gg.toast("开启成功") end , close= function () end , }, {type="2", text="暗金舞者", open = function () yf(1404133) wow() gg.toast("开启成功") end , close= function () end , }, {type="2", text="B.Duck", open = function () yf(1404016) wow() gg.toast("开启成功") end , close= function () end , }, {type="2", text="挑战者", open = function () yf(1404127) wow() gg.toast("开启成功") end , close= function () end , }, {type="2", text="狂沙舞者", open = function () yf(1404207) wow() gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="头饰头发", sub={ {type="2", text="恶魔角", open = function () ta(1402218) wow() gg.toast("开启成功") end , close= function () end , }, {type="2", text="天使之翼", open = function () ts(1402223) wow() gg.toast("开启成功") end , close= function () end , }, {type="2", text="2023 PMWI", open = function () tf(1410480) wow() gg.toast("开启成功") end , close= function () end , }, {type="2", text="雷电战魂", open = function () tf(1410085) wow() gg.toast("开启成功") end , close= function () end , }, {type="2", text="双马尾(白)", open = function () tf(40604012) wow() gg.toast("开启成功") end , close= function () end , }, {type="2", text="双马尾", open = function () tf(40605012) wow() gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="眼罩", sub={ {type="2", text="暗影哥特", open = function () yz(1484198) wow() gg.toast("开启成功") end , close= function () end , }, {type="2", text="幻境骇客", open = function () yz(1403326) wow() gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="面罩", sub={ {type="2", text="小丑鼻子", open = function () mz(1400165)--小丑鼻子 wow() gg.toast("开启成功") end , close= function () end , }, {type="2", text="豹纹口罩", open = function () mz(474031)--小丑鼻子 wow() gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="裤子", sub={ {type="2", text="运动裤", open = function () kz(404030) wow() gg.toast("开启成功") end , close= function () end , }, {type="2", text="甜蜜菠萝", open = function () kz(1404152) wow() gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="鞋子", sub={ {type="2", text="迷彩", open = function () xz(1404051) wow() gg.toast("开启成功") end , close= function () end , }, {type="2", text="霹雳拳王", open = function () xz(1404423) wow() gg.toast("开启成功") end , close= function () end , }, }, }, }, }, { name = "衣服", sub = { { type = "1", text = "樱泽墨宝宝\n套装都是自动过一秒", reflect="#F57C00",reflect="0xdfb9eb19",reflect="0xffFF5722",reflects = 100 }, {text="局内切枪秒刷新初始化", func=function() tf(0) hj(452001)--衣服 gg.clearList() gg.playMusic('http://pan.ailek.cn/view.php/01d7420a96f4f2e389c86966ccc73865.mp3') wow() gg.toast("随便选一个套装 然后脱甲 再选别的就可以切枪秒刷新了") end,}, {text="遍历全枪", func=function() tf(0) local function getValues(address, flags) return gg.getValues({{address = address, flags = flags}})[1].value end function RUI(address) return gg.getValues({ { address = address, flags = gg.TYPE_QWORD } })[1].value end local readD = function(address) return getValues(address, gg.TYPE_DWORD) end local function setvalue(address, flags, value) gg.setValues({{address = address, flags = flags, value = value}}) end ue4=gg.getRangesList('libUE4.so:bss')[1].start-- local bl=RUI(RUI(RUI(RUI(RUI(ue4+0xD9FB8)+0x648)+0x20)+0x38)+0x38)---第二把 --print(string.format("%X",bl)) local bl1=RUI(bl+0x8)+0x18 if readD(bl1)==1000 then local bl=RUI(RUI(RUI(RUI(RUI(ue4+0xD9FB8)+0x648)+0x20)+0x38)+0x38) newbl=bl elseif readD(bl1)~=1000 then for i=1,1024 do local bl=RUI(RUI(RUI(RUI(RUI(ue4+0xD9FB8)+0x648)+i*0x4)+0x38)+0x38) local bl1=RUI(bl+0x8)+0x18 if readD(bl1)==1000 and readD(bl1+0x10)~=1000 then newbl=bl --print(string.format("%X",newbl)) break end end end --查找数组 function wendy(nmsl,wcnm) local lh=RUI(newbl+nmsl)+0x18 setvalue(lh,4,wcnm) end local start = os.clock() wendy(0x7ca0,1010042233) wendy(0x7cb8,1010042232) wendy(0x7cd0,1010042231) wendy(0x7dd8,1010042219) wendy(0x7ce8,1010042218) wendy(0x7df0,1010042217) wendy(0x7d00,1030030812) wendy(0x7e38,1010042248) wendy(0x7ca0,1010040470) wendy(0xd208,1404053) wendy(0x9cc8,1010042216) wendy(0x11db30,1105010019) wendy(0x10ead0,1050100137) wendy(0xe858,1404160) wendy(0x16ad8,1404423) wendy(0xb240,1400165) wendy(0xafa0,1403273) wendy(0xa760,1402223) wendy(0x24d10,1402223) wendy(0x3b5d0,1402223) wendy(0xcefa8,40605012) wendy(0x5e58,50033) wendy(0xbd338,5003300) wendy(0x10358,1501003261) wendy(0x103a0,1501003261) wendy(0x107c0,452001) wendy(0x10808,452001) wendy(0xe3660,202408053) wendy(0x254c0,1400687) wendy(0xee9b8,1010040464) wendy(0x10658,1502003014) wendy(0x10370,1501003261) wendy(0x103b8,1501003261) wendy(0x10538,1501003261) wendy(0x10388,1501003261) wendy(0x103d0,1501003261) wendy(0x10568,1502003014) wendy(0x105b0,1502003014) wendy(0x10580,1502003014) wendy(0x105c8,1502003014) wendy(0x10598,1502003014) wendy(0xaa960,12213101) wendy(0xaab58,12205201) wendy(0x67a0,1101001213) wendy(0x9c80,1010011741) wendy(0x67b8,1101002081) wendy(0x7d18,1010020813) wendy(0x8300,1010020814) wendy(0x9b60,1010020812) wendy(0x9c98,1010020811) wendy(0x67d0,1101003195) wendy(0x9cb0,1010031897) wendy(0x67e8,1101004226) wendy(0x7d48,1010042215) wendy(0x9cc8,1010042214) wendy(0x6800,1101005038) wendy(0x9ce0,1010050381) wendy(0x6818,1101006062) wendy(0x7d60,1010060585) wendy(0x9cf8,1010060567) wendy(0x6830,1101007062) wendy(0x9d10,1010070631) wendy(0x6848,1101008104) wendy(0x9d28,1010081161) wendy(0x6860,1101009013) wendy(0x7e08,1010090133) wendy(0x8318,1010090134) wendy(0x9b78,1010090132) wendy(0x9d40,1010090131) wendy(0x6878,1101010011) wendy(0x9d58,1010100111) wendy(0x6890,10101100) wendy(0x9f38,29301100) wendy(0x68a8,1101012001) wendy(0x7ee0,1010120012) wendy(0x9b90,28101100) wendy(0x9f68,1010120011) wendy(0x68c0,1101100012) wendy(0x9ba8,1011000122) wendy(0x9d70,1011000132) wendy(0x68f0,1101102025) wendy(0x8390,1011020261) wendy(0x9bd8,1011020262) wendy(0x9da0,1011020263) wendy(0x6b18,1103001060) wendy(0x6b30,1103002030) wendy(0x9e78,1030020301) wendy(0x6b48,1103003042) wendy(0x9e90,1030030421) wendy(0x6bc0,1103008014) wendy(0x7e50,1030080141) wendy(0x6c08,1103011002) wendy(0x6c20,1103012019) wendy(0x9f50,1030120191) wendy(0x6b60,1103004058) wendy(0x9ea8,1030040581) wendy(0x6b78,1103005033) wendy(0x7d90,1030050332) wendy(0x9ec0,1030050331) wendy(0x6b90,1103006030) wendy(0x9ed8,1030060303) wendy(0x6ba8,1103007028) wendy(0x158a8,1103002030) wendy(0x158c0,1103007030) wendy(0x11b538,1103007028) wendy(0x9ef0,1030070281) wendy(0x6bd8,1103009037) wendy(0x9c08,1030090372) wendy(0x9f08,1030090371) wendy(0x6bf0,1103010014) wendy(0x9c20,1030100142) wendy(0x9f20,1030100141) wendy(0x6c38,1103100007) wendy(0x7fb8,1031000072) wendy(0x9c38,1031000073) wendy(0x9f80,1031000071) wendy(0x6a28,1102001023) wendy(0x9db8,1020010231) wendy(0x6a40,1102002136) wendy(0x9dd0,1020021357) wendy(0x6a58,1102003080) wendy(0x7d78,1020030742) wendy(0x82e8,1020030743) wendy(0x9de8,1020030741) wendy(0x6a70,1102004039) wendy(0x7bf8,1020040393) wendy(0x7e98,1020040394) wendy(0x9bf0,1020040391) wendy(0x9e00,1020040392) wendy(0x6a88,1102005041) wendy(0x6aa0,1107001019) wendy(0x9e30,1070010191) wendy(0x6ad0,1102105012) wendy(0x7ec8,1021050106) wendy(0x9e60,1021050107) wendy(0x6cc8,1104001028) wendy(0x6ce0,1104002029) wendy(0x6cf8,1104003029) wendy(0x9fc8,1040030291) wendy(0x6d10,1104004014) wendy(0x6d28,10410000) wendy(0x6d40,1104101001) wendy(0x7fd0,1041000011) wendy(0x6d58,1104102001) wendy(0x8018,1041020011) wendy(0x6d70,1105001048) wendy(0x8330,1050010482) wendy(0x9fe0,1050010481) wendy(0x6d88,1105002063) wendy(0x9ff8,1050020631) wendy(0x6e48,1105010019) wendy(0x16148,1103003042) wendy(0xa058,1050100081) wendy(0x7520,1108001074) wendy(0x11e730,108120100) wendy(0x7538,1108002033) wendy(0x7550,1108003025) wendy(0x7568,1108004260) wendy(0x7580,1108001069) wendy(0x7a30,1020021315) wendy(0x7a60,1020021315) wendy(0x7a48,1030070232) wendy(0x7a78,1030070232) wendy(0xa5110,1030070232) wendy(0x7aa8,1030070232) wendy(0x7ad8,1010042239) wendy(0x7af0,1010042239) wendy(0x7b08,1010042239) wendy(0x7bc8,1010042241) wendy(0x7be0,1010042243) wendy(0x7c10,1010042245) wendy(0x7c28,1010042246) wendy(0x7c40,1010042242) wendy(0x7c58,1010042247) wendy(0x8288,1010042244) wendy(0x80f0,1020021312) wendy(0x8108,1020021312) wendy(0x8120,1020021312) wendy(0x8138,1030070227) wendy(0x8150,1030070227) wendy(0x8168,1030070227) wendy(0x8198,1010042236) wendy(0x81b0,1010042236) wendy(0x81c8,1010042236) wendy(0x11b3d0,1103007028) local elapsed = os.clock() - start local formattedTime = string.format("%.2f", elapsed) gg.alert("开启成功") end,}, {type="5", text="套装", sub={ {type="2", text="进击巨人", open = function () yf(1407564) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="三笠", open = function () yf(1407565) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="阿尔敏", open = function () yf(1407566) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="巨人(大)", open = function () yf(1407567) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="利威尔", open = function () yf(1407568) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="血鸦", open = function () yf(1405909) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="小黄鸭", open = function () yf(1400647) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="废墟猎手", open = function () yf(1405163) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="明日香", open = function () yf(1406387) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="真嗣战斗服", open = function () yf(1406385) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="零战斗服", open = function () yf(1406386) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="真理战斗服", open = function () yf(1406388) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="白木乃伊", open = function () yf(1400687) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="黄木乃伊", open = function () yf(1405623) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="性感胖达", open = function () yf(1405040) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="祖国人", open = function () yf(1406439) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="熏战斗服", open = function () yf(1406389) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="芭蕾天鹅", open = function () yf(1407479) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="金克斯", open = function () yf(1404342) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="神羽恋人", open = function () yf(1407276) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="风灵迦尔", open = function () yf(1407336) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="玲珑白蛇", open = function () yf(1407161) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="霓虹幻翼", open = function () yf(1407603) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="蚀魂冥王", open = function () yf(1406891) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="丧尸①套装", open = function () yf(1407196) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="丧尸②套装", open = function () yf(1407195) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="丧尸③套装", open = function () yf(1407194) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="威震天", open = function () yf(1407612) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="擎天柱", open = function () yf(1407614) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="风刃玩偶服", open = function () yf(1407613) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="黄沙圣者", open = function () yf(402902) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 gg.toast("过一秒成功") string.toMusic("过一秒成功")---语音 string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, }, }, {type="5", text="混搭", sub={ {type="2", text="重置衣服", open = function () tf(0)--头发 ts(0)--头饰 lb(0)--脸部 mz(0)--面罩 yz(0)--眼罩 yf(0)--上衣 要连体衣就注明提醒 kz(0)--裤子 xz(0)--鞋子 kj(0)--盔甲/手套 bb(0)--背包 tk(0)--头盔 wow() end , close= function () end , }, {type="2", text="小咲穿搭", open = function () yf(1406386) tk(0) gg.toast("开启成功") string.toMusic("美化成功")---语音 gg.sleep(3500) yf(1400129)----衣服 bb(1501000663) gg.toast("过一秒成功") string.toMusic('美化成功') 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="逆光混搭",open = function() ts(1402223)--头饰 tk(0)--头盔 tf(40604012)--头发 kz(1404050) -- 裤子 yz(1404198) -- 眼罩 mz(1400165) -- 口罩 xz(1400371) -- 鞋子 yf(403177)--衣服 bb(1501003069)--背包 wow() end , close= function () end , }, {type="2", text="慕小君穿搭",open = function() ts(1402223)--头饰 tk(0)--头盔 tf(40604012)--头发 kz(1404160) -- 裤子 yz(1403326) -- 眼罩 mz(0) -- 口罩 xz(1404423) -- 鞋子 yf(1404127)--衣服 bb(1501000659)--背包 wow() end , close= function () end , }, {type="2", text="三玖混搭(作者)",open = function() ts(1402223) yf(403177) tf(40604012) kz(1400050) xz(1400371) mz(1400165) yz(1403326) bb(1501003554) wow() end , close= function () end , }, {type="2", text="混水混搭",open = function() tf(1410480)--头发 ts(1402223)--头饰 mz(1400165)--面罩 yz(1403326)--眼罩 yf(1404207)--上衣 kz(1404160)--裤子 xz(1404423)--鞋子 kj()--盔甲/手套 bb(1501003629)--背包 tk()--头盔 wow() end , close= function () end , }, {type="2", text="小天混搭",open = function() tf(1410085)--头发 ts(1402223)--头饰 lb(401993)--脸部 mz(1400165)--面罩 yz(1404198)--眼罩 yf(1404207)--上衣 要连体衣就注明提醒 kz(1404160)--裤子 xz(1404423)--鞋子 kj(452001)--盔甲/手套 bb(1501003554)--背包 tk(0)--头盔 wow() end , close= function () end , }, {type="2", text="身份荣(待更)",open = function() wow() end , close= function () end , }, {type="2", text="秋川",open = function() tutor = gg.choice({ "①", "②", "③", "④", "⑤" }, nil, "致敬老兵") if tutor == 1 then ts(1402223) yf(403177) tf(40604012) kz(1404050) xz(1400371) mz(1400165) yz(1404198) b() end if tutor == 2 then ts(1400426) yf(1400101) tf(40604012) kz(1400050) xz(405004) mz(1400165) yz(1403326) b() end if tutor == 3 then ts(1400426) yf(1400101) tf(40604012) kz(1400050) xz(405004) mz(1402041) yz(1403326) b() end if tutor == 4 then yf(403177) kz(404084) xz(1400127) tf(40604012) ts(1400595) mz(1400165) yz(1404198) lb(1400563) bb(1502003554) tk(0) kj(0) b() end if tutor == 5 then tf(40604012) ts(1400499) mz(1400165) yz(1404198) yfym(1400782, 403059) b() end wow() end , close= function () end , }, {type="2", text="哈哈混搭",open = function() tf(40605012) yf(1407695) ts(1402223) yz(1404198) mz(1400165) wow() end , close= function () end , }, {type="2", text="一之懒",open = function() yf(1400708) kz(1404152) xz(1404423) tf(40604012) mz(1400165) yz(1404198) wow() end , close= function () end , }, {type="2", text="深秋",open = function() yf(403212) kz(1404160) xz(1404423) tf(1410480) mz(1410480) yz(1484198) wow() end , close= function () end , }, {type="2", text="水源千鹤混搭",open = function() yf(1404043)--上衣/连体衣 kz(1400050)--裤子 xz(1404003)--鞋子 tf(40605012)--头发 ts(1402223)--头饰 mz(1400165)--面罩 yz(1404198)--眼罩 lb(401993)--脸部 bb(1501003243)--背包 kj(452002)--盔甲/手套/飞行器 wow() end , close= function () end , }, }, }, {type="5", text="飞行器", sub={ {type="2", text="恢复飞行器", open = function () hj(0) wow() end , close= function () end , }, {type="2", text="冰霜手套",open = function() hj(452001) wow() wow() end , close= function () end , }, {type="2", text="水墨手套",open = function() hj(452002) wow() wow() end , close= function () end , }, {type="2", text="黄沙手套",open = function() hj(452003) wow() wow() end , close= function () end , }, {type="2", text="糖心绘梦",open = function() hj(4151090) wow() end , close= function () end , }, {type="2", text="灵珠瑰翼",open = function() hj(4152039) wow() end , close= function () end , }, {type="2", text="神寒国雅",open = function() hj(4151089) wow() end , close= function () end , }, {type="2", text="千面羽翼",open = function() hj(4152067) wow() end , close= function () end , }, {type="2", text="飞天纸鸢",open = function() hj(4151025) wow() end , close= function () end , }, {type="2", text="恋羽金舟",open = function() hj(4151075) wow() end , close= function () end , }, {type="2", text="铁羽苍穹",open = function() hj(4151085) wow() end , close= function () end , }, {type="2", text="法老",open = function() hj(4151101) wow() end , close= function () end , }, {type="2", text="精灵王",open = function() hj(4151054) wow() end , close= function () end , }, }, }, }, }, { name = "手持", sub = { { type = "1", text = "手持枪械", reflects = 1 }, { type = "1", text = "自动过1秒", reflects = 1 }, {type="5", text="AK", sub={ {type="2", text="决胜之日", open = function () cx88(101001,1101001242,1010012358,0,1010012364,0,1010012356,1010012355,1010012354,1010012353,1010012352,1010012366,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="沙影神国", open = function () cx88(1101001265,0,0,1010012651,1010012590,1010012587,1010012586,1010012585,1010012584,1010012583,1010012582,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="部落之王", open = function () cx88(1101001174,0,0,1010011741,1010011669,1010011666,1010011665,1010011664,1010011663,1010011662,1010011497,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="俏皮兔宝", open = function () cx88(1101001103,0,0,1010012311,1010012269,1010012266,1010012265,1010012264,1010012263,1010012262,1010012276,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="M416", sub={ {type="2", text="朝鸣宫廷", open = function () cx88(101004,1101004163,1010041574,1010041578,1010041569,1010041579,1010041566,1010041565,1010041564,1010041560,1010041554,203015,0) gg.toast("开启成功") end , close= function () end , }, {type="2", text="愚人节小丑", open = function () cx88(101004,1101004062,1010040577,1010040585,1010040576,1010040586,1010040569,1010040568,1010040567,1010040566,1010040565,1010040564,0) gg.toast("开启成功") end , close= function () end , }, {type="2", text="机魂忍神", open = function () cx88(101004,1101004218,1010042127,1010042136,1010042126,1010042137,1010042119,1010042118,1010042117,1010042116,1010042115,1010042114,0) gg.toast("开启成功") end , close= function () end , }, {type="2", text="冰霜核心", open = function () cx88(101004,1010040463,1010040479,1010040461,1010040475,1010040470,1010040469,1010040468,1010040467,1010040466,1010040481,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="SCAR", sub={ {type="2", text="梦幻奇缘", open = function () cx88(101003,1101003208,0,1010032038,1010032081,1010032045,1010032027,1010032026,1010032025,1010032024,101003,1010032022,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="霓虹天后", open = function () cx88(101003,1101003195,0,1010031916,1010060566,1010031913,1010031906,1010031905,1010031904,1010031903,1010031902,1010031901,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="魔法南瓜", open = function () cx88(101003,1101003070,0,0,1010030701,0,0,0,0,0,0,0,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="梦幻水枪", open = function () cx88(101003,1101003080,0,0,1010030571,0,0,0,0,0,0,0,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="邪能植物", open = function () cx88(101003,1101003146,0,0,0,0,0,0,0,0,0,0,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="愚者之拥", open = function () cx88(101003,1101003181,0,0,1010031811,1010031766,1010031757,1010031756,1010031755,1010031754,1010031753,1010031752,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="御灵魂契", open = function () cx88(101003,1101003219,0,1010032227,1010032191,1010032224,1010032217,1010032216,1010032215,1010032214,1010032213,1010032212,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="M762", sub={ {type="2", text="灵阁魔剪", open = function () cx88(101008,1101008163,0,1010081586,1010081631,1010081584,1010081577,1010081576,1010081575,1010081574,1010081573,1010081572,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="铂金骸骨", open = function () cx88(101008,1101008153,1101008163,1010081541,1010081529,0,1010081526,1010081525,1010081524,1010081523,1010081522,1010081521,0) gg.toast("开启成功") end , close= function () end , }, {type="2", text="琉璃仙灵", open = function () cx88(101008,1101008136,1010081315,1010081318,1010081313,0,1010081307,1010081306,1010081305,1010081304,1010081303,1010081302,0) gg.toast("开启成功") end , close= function () end , }, {type="2", text="森白骸骨", open = function () cx88(101008,1101008146,1010081402,1010081405,1010081399,0,1010081396,1010081395,1010081394,1010081393,1010081392,1010081391,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="灵阁魔剪", open = function () cx88(101008,1101008163,1010081532,1010081586,1010081586,0,1010081577,1010081525,1010081575,1010081574,1010081573,1010081572,0) gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="MG3", sub={ {type="2", text="风鸣神戟", open = function () cx88(105010,1105010019,0,0,1050100137,0,1050100144,1050100143,1050100142,1050100141,1050100139,1050100138,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="苍穹之龙", open = function () cx88(105010,1105010008,0,0,20100900,0,203001,203002,203003,203014,203004,203015,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="MK14", sub={ {type="2", text="龙呤国度", open = function () cx88(103007,1103007028,1030070234,0,1030070227,1030070236,1030070218,1030070217,1030070216,1030070215,1030070214,1030070213,1030070212) gg.toast("开启成功") end , close= function () end , }, {type="2", text="星云力量", open = function () cx88(103007,1103007020,29100400,0,1030070211,20200200,203001,203002,203003,203014,203004,203015,203005) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="憨憨萌龙", open = function () cx88(103007,1103007038,29100400,0,1030070381,20200200,1010032027,1010032026,1010032025,1010032024,1010032023,1010032022,203005) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="AUG", sub={ {type="2", text="罪恶玫瑰-AUG", open = function () cx88(101006,1101006085,1010060795,1010060800,1010060794,0,1010060788,1010060787,1010060786,1010060785,1010060784,1010060783,0) gg.toast("开启成功") end , close= function () end , }, {type="2", text="破军狂鸣", open = function () cx88(101006,1101006075,0,1010060706,1010060718,1010060703,1010060696,1010060695,1010060694,1010060693,1010060692,1010060691,0) gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="ACE32", sub={ {type="2", text="清夜蝶吻", open = function () cx88(101102,1101102034,1011020491,1011020444,1011020493,1011020438,1011020429,1011020428,1011020427,1011020426,1011020425,1011020424,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="传奇海怪号", open = function () cx88(101102,1101102025,1011020228,1011020219,1011020227,1011020216,1011020209,1011020208,1011020207,1011020206,1011020205,1011020204,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="神庭冰棘", open = function () cx88(1101102017,1011020172,1011020136,1011020171,1011020129,1011020119,1011020118,1011020117,1011020116,1011020115,1011020114,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="终极对撞", open = function () cx88(101102,1101102007,1011020195,1011020219,1011020227,1011020216,1011020209,1011020208,1011020207,1011020206,1011020205,1011020204,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="P90(遍历)", sub={ {type="2", text="律动指纹", open = function () local function getValues(a, f) return gg.getValues({{address = a, flags = f}})[1].value end function RUI(a) return gg.getValues({{address = a, flags = gg.TYPE_QWORD}})[1].value end local readD = function(a) return getValues(a, gg.TYPE_DWORD) end local function setvalue(a, f, v) gg.setValues({{address = a, flags = f, value = v}}) end ue4 = gg.getRangesList('libUE4.so:bss')[1].start local bl = RUI(RUI(RUI(RUI(RUI(ue4 + 0xD9FB8) + 0x648) + 0x20) + 0x38) + 0x38) local bl1 = RUI(bl + 0x8) + 0x18 if readD(bl1) == 1000 then local bl = RUI(RUI(RUI(RUI(RUI(ue4 + 0xD9FB8) + 0x648) + 0x20) + 0x38) + 0x38) newbl = bl elseif readD(bl1) ~= 1000 then for i = 1, 1024 do local bl = RUI(RUI(RUI(RUI(RUI(ue4 + 0xD9FB8) + 0x648) + i * 0x4) + 0x38) + 0x38) local bl1 = RUI(bl + 0x8) + 0x18 if readD(bl1) == 1000 and readD(bl1 + 0x10) ~= 1000 then newbl = bl break end end end function wendy(n, w) local lh = RUI(newbl + n) + 0x18 setvalue(lh, 4, w) end wendy(0x6AD0,1102105003) wendy(0x7EC8,1021050032) -- 倍镜 wendy(0x15398,1102105003) -- P90冲锋枪(破损) wendy(0x153B0,1102105003) -- P90冲锋枪(修复) wendy(0x153C8,1102105003) -- P90冲锋枪(完好) wendy(0x153E0,1102105003) -- P90冲锋枪(改进) wendy(0x153F8,1102105003) -- P90冲锋枪(精制) wendy(0x15410,1102105003) -- P90冲锋枪(独眼蛇) wendy(0x15428,1102105003) -- P90冲锋枪(钢铁阵线) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="赛博猫妖", open = function () local function getValues(a, f) return gg.getValues({{address = a, flags = f}})[1].value end function RUI(a) return gg.getValues({{address = a, flags = gg.TYPE_QWORD}})[1].value end local readD = function(a) return getValues(a, gg.TYPE_DWORD) end local function setvalue(a, f, v) gg.setValues({{address = a, flags = f, value = v}}) end ue4 = gg.getRangesList('libUE4.so:bss')[1].start local bl = RUI(RUI(RUI(RUI(RUI(ue4 + 0xD9FB8) + 0x648) + 0x20) + 0x38) + 0x38) local bl1 = RUI(bl + 0x8) + 0x18 if readD(bl1) == 1000 then local bl = RUI(RUI(RUI(RUI(RUI(ue4 + 0xD9FB8) + 0x648) + 0x20) + 0x38) + 0x38) newbl = bl elseif readD(bl1) ~= 1000 then for i = 1, 1024 do local bl = RUI(RUI(RUI(RUI(RUI(ue4 + 0xD9FB8) + 0x648) + i * 0x4) + 0x38) + 0x38) local bl1 = RUI(bl + 0x8) + 0x18 if readD(bl1) == 1000 and readD(bl1 + 0x10) ~= 1000 then newbl = bl break end end end function wendy(n, w) local lh = RUI(newbl + n) + 0x18 setvalue(lh, 4, w) end wendy(0x6AD0,1102105012) wendy(0x7EC8,1021050097) -- 倍镜 wendy(0x15398,1102105012) -- P90冲锋枪(破损) wendy(0x153B0,1102105012) -- P90冲锋枪(修复) wendy(0x153C8,1102105012) -- P90冲锋枪(完好) wendy(0x153E0,1102105012) -- P90冲锋枪(改进) wendy(0x153F8,1102105012) -- P90冲锋枪(精制) wendy(0x15410,1102105012) -- P90冲锋枪(独眼蛇) wendy(0x15428,1102105012) -- P90冲锋枪(钢铁阵线) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="金尊神鹰", open = function () local function getValues(a, f) return gg.getValues({{address = a, flags = f}})[1].value end function RUI(a) return gg.getValues({{address = a, flags = gg.TYPE_QWORD}})[1].value end local readD = function(a) return getValues(a, gg.TYPE_DWORD) end local function setvalue(a, f, v) gg.setValues({{address = a, flags = f, value = v}}) end ue4 = gg.getRangesList('libUE4.so:bss')[1].start local bl = RUI(RUI(RUI(RUI(RUI(ue4 + 0xD9FB8) + 0x648) + 0x20) + 0x38) + 0x38) local bl1 = RUI(bl + 0x8) + 0x18 if readD(bl1) == 1000 then local bl = RUI(RUI(RUI(RUI(RUI(ue4 + 0xD9FB8) + 0x648) + 0x20) + 0x38) + 0x38) newbl = bl elseif readD(bl1) ~= 1000 then for i = 1, 1024 do local bl = RUI(RUI(RUI(RUI(RUI(ue4 + 0xD9FB8) + 0x648) + i * 0x4) + 0x38) + 0x38) local bl1 = RUI(bl + 0x8) + 0x18 if readD(bl1) == 1000 and readD(bl1 + 0x10) ~= 1000 then newbl = bl break end end end function wendy(n, w) local lh = RUI(newbl + n) + 0x18 setvalue(lh, 4, w) end wendy(0x6AD0,1102105018) wendy(0x7EC8,1021050182) -- 倍镜 wendy(0x15398,1102105018) -- P90冲锋枪(破损) wendy(0x153B0,1102105018) -- P90冲锋枪(修复) wendy(0x153C8,1102105018) -- P90冲锋枪(完好) wendy(0x153E0,1102105018) -- P90冲锋枪(改进) wendy(0x153F8,1102105018) -- P90冲锋枪(精制) wendy(0x15410,1102105018) -- P90冲锋枪(独眼蛇) wendy(0x15428,1102105018) -- P90冲锋枪(钢铁阵线) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="GROZA", sub={ {type="2", text="红莲哥斯拉", open = function () cx88(101005, 1101005098, 1010050928, 0, 1010050932, 0, 1010050927, 1010050926, 1010050925, 1010050924, 1010050923, 1010050922, 0) print("开始等待") gg.sleep(2000)--等待二秒 gg.toast("开启成功") end , close= function () end , }, {type="2", text="两面宿傩", open = function () cx88(101005,1101005038,0,0,0,0,0,0,0,0,0,0,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="冥河烈焰", open = function () cx88(101005,1101005052,0,0,1010050521,0,0,0,0,0,0,0,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="暗夜裁决", open = function () cx88(101005,1101005091,0,0,1010050911,0,0,0,0,0,0,0,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="98K", sub={ {type="2", text="冰魄幻羽", open = function () cx88(103001,1103001202,1030011951,0,0,1030011950,1030011947,1030011946,1030011945,1030011944,1030011943,1030011942,1030011941) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="瑰红花火", open = function () cx88(103001,1103001191,0,0,0,0,1030011857,1030011856,1030011855,1030011854,1030011853,1030011852,1030011851) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="紫戮电极", open = function () cx88(103001,1103001179,0,0,0,0,1030011737,1030011736,1030011735,1030011734,1030011733,1030011732,1030011731) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="恐怖齿痕", open = function () cx88(103001,1103001060,0,0,0,0,0,0,0,0,0,0,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="钢铁狂鲨", open = function () cx88(103001,1103001146,0,0,0,0,0,0,0,0,0,0,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="AMR", sub={ {type="2", text="嗜血龙魇", open = function () cx88(1103012009,0,0,1030120101,0,1105001048,1105001047,1105001046,1105001045,1105001044,1105001043,1105001042) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="灵泉剑影", open = function () cx88(1103012031,0,0,1030120311,0,1030120258,1030120257,1030120256,1030120255,1030120254,1030120253,1030120252) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="烈焰圣枪", open = function () cx88(1103012019,0,0,1030120191,0,1030120138,1030120137,1030120137,1030120136,1030120135,1030120134,1030120133) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="M249", sub={ {type="2", text="极辉女帝", open = function () cx88(1105001048,0,0,1050010481,0,0,0,0,0,0,0,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="桀骜皇帝", open = function () cx88(1105001069,1050010692,0,1050010691,0,1050010637,1050010636,1050010635,1050010634,1050010633,1050010632,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="DP28", sub={ {type="2", text="血狱寄生", open = function () cx88(1105002091,0,0,1050020911,0,1050020847,1050020846,1050020845,1050020844,1050020843,1050020842,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="Vector", sub={ {type="2", text="掠空之翼", open = function () cx88(1102003080,1020030802,1020030760,1020030801,1020030758,1020030748,1020030747,1020030746,1020030745,1020030744,1020030743,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="M24", sub={ {type="2", text="夜影晨曦", open = function () cx88(1103002156,1030021083,0,1030021131,1030021083,1030021078,1030021077,1030021076,1030021075,1030021074,1030021073,1030021072) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="骄阳辉月", open = function () cx88(1103002136,1030021013,0,1030021061,1030021012,1030021008,1030021007,1030021006,1030021005,1030021004,1030021003,1030021002) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="黄金权杖", open = function () cx88(1103002030,0,0,0,0,0,0,0,0,0,0,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="极尊音律", open = function () cx88(1103002087,0,0,0,0,0,0,0,0,0,0,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, }, }, {type="5", text="AWM", sub={ {type="2", text="玲珑白蛇", open = function () cx88(1103003087,1030030828,0,1030030871,1030030827,1030030818,1030030817,1030030816,1030030815,1030030814,1030030813,1030030812) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="致命炎凤", open = function () cx88(1103003062,0,0,1030030621,0,0,0,0,0,0,0,0) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, {type="2", text="赤潮龙息", open = function () cx88(1103003079,1030030747,0,1030030791,1030030746,1030030738,1030030737,1030030736,1030030735,1030030734,1030030733,1030030732) gg.toast("开启成功") gg.toast("开启成功") end , close= function () end , }, }, }, }, }, { name = "头包", sub = { { type = "1", text = "今天萌萌哒\n嘻嘻", reflects = 1 }, {type="5", text="头盔", sub={ {type="2", text="隐藏头盔", open = function () tk(0)--填写代码 gg.playMusic('http://pan.ailek.cn/view.php/01d7420a96f4f2e389c86966ccc73865.mp3')---语音播报 end , close= function () end , }, {type="2", text="地狱骑士头盔",open = function() tk(1502002014)--填写代码 gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="冰雪晶核头盔",open = function() tk(1502003023) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="胖达头盔",open = function() tk(1502002027) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="胖次兔",open = function() tk(1502002427) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="精灵龙卫",open = function() tk(1502003336) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="星耀王冠",open = function() tk(1502003439) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="美丽恋人",open = function() tk(1502003069) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="极辉女帝",open = function() tk(1502003339) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="吉利狮王",open = function() tk(1502003173) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="星云屏障",open = function() tk(1502003299) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="星灵捕猎",open = function() tk(1502003295) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="永夜冰姬",open = function() tk(1502003358) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="灵源神卫",open = function() tk(1502003333) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="幼龙咆哮",open = function() tk(1502003039) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, }, }, { type = "1", text = "-------------------------------", reflects = 1 }, {type="5", text="背包", sub={ {type="2", text="隐藏背包", open = function () bb(0) gg.playMusic('http://pan.ailek.cn/view.php/01d7420a96f4f2e389c86966ccc73865.mp3')---语音播报 end , close= function () end , }, {type="2", text="战术星舱", open = function () bb(1501000663) gg.playMusic('http://pan.ailek.cn/view.php/01d7420a96f4f2e389c86966ccc73865.mp3')---语音播报 end , close= function () end , }, {type="2", text="璃光剪影", open = function () bb(1501000688) gg.playMusic('http://pan.ailek.cn/view.php/01d7420a96f4f2e389c86966ccc73865.mp3')---语音播报 end , close= function () end , }, {type="2", text="小黄鸭背包",open = function() bb(1501003266) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="皇帝肖像",open = function() bb(1501003668) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text='蔚蓝风暴背包',open = function() bb(1501002009) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="小丑背包",open = function() bb(1501003051) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="朋克犀牛背包",open = function() bb(1501003211) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="恐龙布朗熊背包",open = function() bb(1501003310) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") wow() end , close= function () end , }, {type="2", text="黄鲨鱼背包",open = function() bb(1501003058) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="莎莉背包",open = function() bb(1501003554) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="恶魔之眼背包",open = function() bb(1501003487) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="帝皇肖像背包",open = function() bb(1501003640) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="神域金皇背包",open = function() bb(1501003570) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="亲吻",open = function() bb(1501003229) br() wow() end , close= function () end , }, {type="2", text="可爱天使",open = function() bb(1501003041) br() wow() end , close= function () end , }, {type="2", text="金蛇瑰宝",open = function() bb(1501003639) br() wow() end , close= function () end , }, {type="2", text="龙包",open = function() bb(1501003053) br() wow() end , close= function () end , }, {type="2", text="致命凝视",open = function() bb(1501003487) br() wow() end , close= function () end , }, {type="2", text="蝴蝶花灵",open = function() bb(1501003047) br() wow() end , close= function () end , }, {type="2", text="小猫宠物",open = function() bb(1501003050) br() wow() end , close= function () end , }, {type="2", text="阿迪达斯",open = function() bb(1501003174) br() wow() end , close= function () end , }, {type="2", text="汉堡",open = function() bb(1501003162) br() wow() end , close= function () end , }, }, }, }, }, { name = "播报", sub = { {text="判断播报", func=function() function sc(pf) function 读D(address) return gg.getValues({ { ["address"] = address, flags = 4 } })[1]["value"] end function 读F(address) return gg.getValues({ { ["address"] = address, flags = 16 } })[1]["value"] end function 跳(address) return gg.getValues({ { ["address"] = address, flags = 32 } })[1]["value"] end function 写入播报(枪械播报,圣装,手持) gg.addListItems({{address=枪械播报,flags=4,value=手持,freeze=true},{address=枪械播报+4,flags=4,value=圣装,freeze=true}}) end while true do local 世界 = 跳(跳(UE4 + 0x560270) + 0x30) local 自身 = 跳(世界 + 0x4B8) if 自身 == 0 then toast.success("未进入对局自动结束")--报错删这个 return 0 end local 枪械播报 = 世界 + 0x1970 local 手持的代码 = 读D(跳(跳(自身 + 0x2A50) + 0x7A0) + 0x194) 写入播报(枪械播报,圣装的代码,手持的代码) gg.sleep(1000) end end gg.toast("开启成功") end,}, {type="5", text="你好", sub={ {type="2", text="血鹰武士", open = function () local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA360,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12216101}}) 樱泽墨资源gg.playMusic("https://cccimg.com/view.php/7b88ec7149fd80ee4f2acc8fd3fd60d4.mp3") end , close= function () end , }, {type="2", text="炽烈之魂", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA360,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12220082}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="猩红医生", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA360,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12220045}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="巨兽之心", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA360,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12205101}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="愚人小丑", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA360,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12203901}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="武士", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA360,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12208901}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="霹雳拳王", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA360,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12219703}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="夜晚节奏", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA360,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12220096}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="灼红花剑", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA360,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12220098}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="灵巧换次", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA360,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12220099}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="月影绝刃", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA360,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12220475}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="投降", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA360,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 2200901}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, }, }, {type="5", text="鼓掌", sub={ {type="2", text="烈焰咆哮", open = function () local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAAB58,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12220081}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="极乐愚者", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAAB58,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12219710}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="冰雪女巫", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAAB58,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12211301}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="极暗刺客", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAAB58,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12212101}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="天下布武", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAAB58,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12204501}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="武魂宗师", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAAB58,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12219532}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="命运执事", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAAB58,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12219716}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, }, }, {type="5", text="谢谢", sub={ {type="2", text="烈焰古神", open = function () local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA960,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12220121}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="魅夜死神", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA960,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12220252}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="悲伤笑面", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA960,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12219458}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="巨兽之魂", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA960,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12205501}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="赛博猫妖", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA960,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12220116}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="琉璃仙灵", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA960,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12220054}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="赤焰骑士", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA960,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12220257}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="狼人变身", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA960,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 12220286}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, {type="2", text="电摇", open = function() local t = {"libUE4.so:bss", "Cb"} local tt = {0xD9FB8,0x648,0x20,0x38,0x38, 0xAA960,0x18} local ttt = S_Pointer(t, tt, true) gg.setValues({{address=ttt,flags=4,value= 2201201}}) gg.playMusic("https://cccimg.com/view.php/8dac338858e09121111d05745aa32e57.mp4") end , close= function () end , }, }, }, {type="5", text="近战(遍历)", sub={ {type="2", text="Ki Sword", open = function () local basePointer = {"libUE4.so:bss", "Cb"} local commonChain = {0xD9FB8, 0x648, 0x20, 0x38, 0x38} local sceneOffsets = {0x18, 0x14} local function XH(chainOffset, gunCode) local fullChain = {table.unpack(commonChain)} local targetAddrs = {} -- 提前计算所有场景地址,批量写入(提升速度核心优化) for _, sceneOffset in ipairs(sceneOffsets) do table.insert(fullChain, chainOffset) table.insert(fullChain, sceneOffset) local addr = S_Pointer(basePointer, fullChain, true) if addr ~= 0 then table.insert(targetAddrs, {address = addr, flags = 4, value = gunCode}) end -- 重置链,避免重复插入 table.remove(fullChain) table.remove(fullChain) end -- 批量设置值,减少gg.setValues调用次数 if #targetAddrs > 0 then gg.setValues(targetAddrs) end end --大厅/经典 XH(0x7520,1108001069)--大砍刀 XH(0x7538,1108001069)--撬棍 XH(0x7550,1108001069)--镰刀 XH(0x7568,1108001069)--平底锅 XH(0x72F8,1108001069)--军用匕首 -- 地铁 XH(0x16730,1108001069)--大砍刀 XH(0x16748,1108001069)--平底锅 XH(0x16760,1108001069)--军用匕首 end , close= function () end , }, {type="2", text="冰霜平底锅", open = function () local basePointer = {"libUE4.so:bss", "Cb"} local commonChain = {0xD9FB8, 0x648, 0x20, 0x38, 0x38} local sceneOffsets = {0x18, 0x14} local function XH(chainOffset, gunCode) local fullChain = {table.unpack(commonChain)} local targetAddrs = {} -- 提前计算所有场景地址,批量写入(提升速度核心优化) for _, sceneOffset in ipairs(sceneOffsets) do table.insert(fullChain, chainOffset) table.insert(fullChain, sceneOffset) local addr = S_Pointer(basePointer, fullChain, true) if addr ~= 0 then table.insert(targetAddrs, {address = addr, flags = 4, value = gunCode}) end -- 重置链,避免重复插入 table.remove(fullChain) table.remove(fullChain) end -- 批量设置值,减少gg.setValues调用次数 if #targetAddrs > 0 then gg.setValues(targetAddrs) end end --大厅/经典 XH(0x7520,108120100)--大砍刀 XH(0x7538,108120100)--撬棍 XH(0x7550,108120100)--镰刀 XH(0x7568,108120100)--平底锅 XH(0x72F8,108120100)--军用匕首 -- 地铁 XH(0x16730,108120100)--大砍刀 XH(0x16748,108120100)--平底锅 XH(0x16760,108120100)--军用匕首 end , close= function () end , }, {type="2", text="雷鸣", open = function () local basePointer = {"libUE4.so:bss", "Cb"} local commonChain = {0xD9FB8, 0x648, 0x20, 0x38, 0x38} local sceneOffsets = {0x18, 0x14} local function XH(chainOffset, gunCode) local fullChain = {table.unpack(commonChain)} local targetAddrs = {} -- 提前计算所有场景地址,批量写入(提升速度核心优化) for _, sceneOffset in ipairs(sceneOffsets) do table.insert(fullChain, chainOffset) table.insert(fullChain, sceneOffset) local addr = S_Pointer(basePointer, fullChain, true) if addr ~= 0 then table.insert(targetAddrs, {address = addr, flags = 4, value = gunCode}) end -- 重置链,避免重复插入 table.remove(fullChain) table.remove(fullChain) end -- 批量设置值,减少gg.setValues调用次数 if #targetAddrs > 0 then gg.setValues(targetAddrs) end end --大厅/经典 XH(0x7520,108120100)--大砍刀 XH(0x7538,108120100)--撬棍 XH(0x7550,108120100)--镰刀 XH(0x7568,108120100)--平底锅 XH(0x72F8,108120100)--军用匕首 -- 地铁 XH(0x16730,108120100)--大砍刀 XH(0x16748,108120100)--平底锅 XH(0x16760,108120100)--军用匕首 end , close= function () end , }, {type="2", text="冰雪", open = function () local basePointer = {"libUE4.so:bss", "Cb"} local commonChain = {0xD9FB8, 0x648, 0x20, 0x38, 0x38} local sceneOffsets = {0x18, 0x14} local function XH(chainOffset, gunCode) local fullChain = {table.unpack(commonChain)} local targetAddrs = {} -- 提前计算所有场景地址,批量写入(提升速度核心优化) for _, sceneOffset in ipairs(sceneOffsets) do table.insert(fullChain, chainOffset) table.insert(fullChain, sceneOffset) local addr = S_Pointer(basePointer, fullChain, true) if addr ~= 0 then table.insert(targetAddrs, {address = addr, flags = 4, value = gunCode}) end -- 重置链,避免重复插入 table.remove(fullChain) table.remove(fullChain) end -- 批量设置值,减少gg.setValues调用次数 if #targetAddrs > 0 then gg.setValues(targetAddrs) end end --大厅/经典 XH(0x7520,1108004027)--大砍刀 XH(0x7538,1108004027)--撬棍 XH(0x7550,1108004027)--镰刀 XH(0x7568,1108004027)--平底锅 XH(0x72F8,1108004027)--军用匕首 -- 地铁 XH(0x16730,1108004027)--大砍刀 XH(0x16748,1108004027)--平底锅 XH(0x16760,1108004027)--军用匕首 end , close= function () end , }, {type="2", text="斩龙断刃", open = function () local basePointer = {"libUE4.so:bss", "Cb"} local commonChain = {0xD9FB8, 0x648, 0x20, 0x38, 0x38} local sceneOffsets = {0x18, 0x14} local function XH(chainOffset, gunCode) local fullChain = {table.unpack(commonChain)} local targetAddrs = {} -- 提前计算所有场景地址,批量写入(提升速度核心优化) for _, sceneOffset in ipairs(sceneOffsets) do table.insert(fullChain, chainOffset) table.insert(fullChain, sceneOffset) local addr = S_Pointer(basePointer, fullChain, true) if addr ~= 0 then table.insert(targetAddrs, {address = addr, flags = 4, value = gunCode}) end -- 重置链,避免重复插入 table.remove(fullChain) table.remove(fullChain) end -- 批量设置值,减少gg.setValues调用次数 if #targetAddrs > 0 then gg.setValues(targetAddrs) end end --大厅/经典 XH(0x7520,1108001057)--大砍刀 XH(0x7538,1108001057)--撬棍 XH(0x7550,1108001057)--镰刀 XH(0x7568,1108001057)--平底锅 XH(0x72F8,1108001057)--军用匕首 -- 地铁 XH(0x16730,1108001057)--大砍刀 XH(0x16748,1108001057)--平底锅 XH(0x16760,1108001057)--军用匕首 end , close= function () end , }, }, }, }, }, } local cs = {} local menuid = {} --生成页面 for i = 1, #menus do cs[i] = { LinearLayout, layout_height = "fill", orientation = "vertical", layout_width = "fill", { ScrollView, layout_width = "match", VerticalScrollBarEnabled = false, layout_height = "match", { LinearLayout, layout_height = "match", orientation = "vertical", layout_width = "match", id = "id" .. i .. "id", }, }, } menuid[i] = "id" .. i .. "id" end pages1 = {} for i = 1, #cs do table.insert(pages1, cs[i]) end local search = { LinearLayout, layout_height = "fill", orientation = "vertical", layout_width = "fill", { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "40dp", gravity = "center", { TextView, layout_width = "match", text = "🔎搜索音乐", layout_height = "match", id = "search1", background = getShepeBackground(diy_bb, 35), textColor = diy_fontcolor, gravity = "center", }, }, { ScrollView, layout_width = "match", VerticalScrollBarEnabled = false, layout_height = "match", { LinearLayout, layout_height = "match", orientation = "vertical", id = "search_list", layout_width = "match", }, }, } table.insert(pages1, search) function laymenu(arr) --创建页面 for i = 1, #arr do --创建菜单按钮 local btsd = StateListDrawable() btsd.addState({ pressed }, getShepeBackground(diy_zt, 20)) btsd.addState({ 0 }, getShepeBackground(diy_bb, 20)) local btn = { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "30dp", gravity = "center", { TextView, text = arr[i].name, textColor = diy_fontcolor, textSize = "10", BackgroundDrawable = btsd, gravity = "center", layout_width = "match", layout_height = "match", onClick = function() page_main.showPage(i - 1) end, }, } local btn = loadlayout(btn) func_menu.addView(btn) --加载按钮和布局 for k = 1, #arr[i]["sub"] do local btsd = StateListDrawable() btsd.addState({ pressed }, getShepeBackground(diy_zt, 35)) btsd.addState({ 0 }, getShepeBackground(diy_bb, 35)) if not arr[i]["sub"][k]["type"] then local btn1 = { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "40dp", gravity = "center", { TextView, text = arr[i]["sub"][k]["text"], textColor = diy_fontcolor, gravity = "center", BackgroundDrawable = btsd, layout_width = "match", layout_height = "match", }, } local btn1 = loadlayout(btn1) btn1.onClick = function() if eooeis == 1 then eooeis = 2 else threadStart({ run = function() pcall(arr[i]["sub"][k]["func"]) end, }) -- -- -- -- -- end end btn1.onLongClick = function() eooeis = 1 functips(btn1, arr[i]["sub"][k]["tip"]) end load("return " .. menuid[i])().addView(btn1) else if arr[i]["sub"][k]["type"] == "1" then if not arr[i]["sub"][k]["reflect"] then arr[i]["sub"][k]["reflect"] = "#F57C00" end if not arr[i]["sub"][k]["color"] then arr[i]["sub"][k]["color"] = "#E040FB" end local btn1 = { ShimmerTextView, reflectionColor = arr[i]["sub"][k]["reflect"], textColor = arr[i]["sub"][k]["color"], layout_height = "match", layout_width = "match", text = arr[i]["sub"][k]["text"], gravity = "center", } local btn1 = loadlayout(btn1) if arr[i]["sub"][k]["reflects"] then shimmer.start(btn1) end btn1.onClick = function() if eooeis == 1 then eooeis = 2 else func1 = arr[i]["sub"][k]["func"] threadStart({ run = function() pcall(func1, arr[i]["sub"][k]) end, }) end end btn1.onLongClick = function() eooeis = 1 functips(btn1, arr[i]["sub"][k]["tip"]) end load("return " .. menuid[i])().addView(btn1) end if arr[i]["sub"][k]["type"] == "2" then local sw = { Switch, text = arr[i]["sub"][k]["text"], textColor = diy_fontcolor, padding = "5dp", layout_width = "match", BackgroundDrawable = btsd, layout_height = "match", } local sw = loadlayout(sw) local btn1 = { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "40dp", gravity = "center", } local btn1 = loadlayout(btn1) btn1.addView(sw) sw.onClick = function() if eooeis == 1 then eooeis = 2 if sw.isChecked() == true then sw.setChecked(false) else sw.setChecked(true) end else mode = sw.checked and "open" or "close" threadStart({ run = function() pcall(arr[i]["sub"][k][mode], arr[i]["sub"][k]) end, }) end end sw.onLongClick = function() eooeis = 1 functips(btn1, arr[i]["sub"][k]["tip"]) end load("return " .. menuid[i])().addView(btn1) end if arr[i]["sub"][k]["type"] == "3" then local sw = { CheckBox, text = arr[i]["sub"][k]["text"], textColor = diy_fontcolor, layout_width = "match", BackgroundDrawable = btsd, layout_height = "match", } local sw = loadlayout(sw) local btn1 = { LinearLayout, layout_width = "match", layout_margin = "5dp", background = getShepeBackground(diy_bb, 35), layout_height = "40dp", gravity = "center", } local btn1 = loadlayout(btn1) btn1.addView(sw) sw.onClick = function() if eooeis == 1 then eooeis = 2 if sw.isChecked() == true then sw.setChecked(false) else sw.setChecked(true) end else mode = sw.checked and "open" or "close" threadStart({ run = function() pcall(arr[i]["sub"][k][mode], arr[i]["sub"][k]) end, }) end end sw.onLongClick = function() eooeis = 1 functips(btn1, arr[i]["sub"][k]["tip"]) end load("return " .. menuid[i])().addView(btn1) end if arr[i]["sub"][k]["type"] == "4" then if not arr[i]["sub"][k]["min"] then arr[i]["sub"][k]["min"] = 0 end if not arr[i]["sub"][k]["progress"] then arr[i]["sub"][k]["progress"] = arr[i]["sub"][k]["min"] end -- -- -- -- -- local sw = { SeekBar, layout_width = "match", layout_height = "match", BackgroundDrawable = btsd, max = arr[i]["sub"][k]["max"], min = arr[i]["sub"][k]["min"], thumb = Drawable.createFromPath("/sdcard/lua脚本相关/luajava/IMG_20240315_124625.png"), } local sw = loadlayout(sw) sw.setProgress(arr[i]["sub"][k]["progress"]) local sw1 = { TextView, layout_width = "match", layout_height = "match", textColor = diy_fontcolor, textSize = "10", gravity = "center", text = tostring(arr[i]["sub"][k]["progress"]), } local sw1 = loadlayout(sw1) local btn1 = { LinearLayout, layout_width = "match", layout_margin = "5dp", background = getShepeBackground(diy_bb, 35), layout_height = "40dp", gravity = "center", } local btn1 = loadlayout(btn1) btn1.addView(sw1) btn1.addView(sw) local lllayoutParams = sw1.getLayoutParams() lllayoutParams.weight = 5 sw1.setLayoutParams(lllayoutParams) local lllayoutParams = sw.getLayoutParams() lllayoutParams.weight = 1 sw.setLayoutParams(lllayoutParams) sw.setOnSeekBarChangeListener({ onProgressChanged = function() progress = sw.getProgress() sw1.setText(tostring(progress)) qfunc = arr[i]["sub"][k]["func"] threadStart({ run = function() pcall(qfunc, arr[i]["sub"][k]) end, }) end, }) sw1.onLongClick = function() functips(btn1, arr[i]["sub"][k]["tip"]) end load("return " .. menuid[i])().addView(btn1) end if arr[i]["sub"][k]["type"] == "5" then local sw = { CheckBox, text = arr[i]["sub"][k]["text"], textColor = diy_fontcolor, BackgroundDrawable = btsd, padding = "5dp", layout_width = "match", layout_height = "match", } local sw = loadlayout(sw) local btn1 = { LinearLayout, layout_width = "match", layout_margin = "5dp", background = getShepeBackground(diy_bb, 35), layout_height = "wrap", orientation = "vertical", gravity = "center", } local btn1 = loadlayout(btn1) local btn3 = { LinearLayout, layout_width = "match", layout_height = "wrap", orientation = "vertical", gravity = "center", } local btn3 = loadlayout(btn3) btn1.addView(sw) btn1.addView(btn3) sw.onLongClick = function() eooeis = 1 functips(btn1, arr[i]["sub"][k]["tip"]) end sw.onClick = function() if eooeis == 1 then eooeis = 2 if sw.isChecked() == true then sw.setChecked(false) else sw.setChecked(true) end else if sw.checked then for oo = 1, #arr[i]["sub"][k]["sub"] do local btsd = StateListDrawable() btsd.addState({ pressed }, getShepeBackground(diy_zt, 35)) btsd.addState({ 0 }, getShepeBackground(diy_bb, 35)) if not arr[i]["sub"][k]["sub"][oo]["type"] then local sw = { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "30dp", gravity = "center", { TextView, text = arr[i]["sub"][k]["sub"][oo]["text"], textColor = diy_fontcolor, gravity = "center", BackgroundDrawable = btsd, layout_width = "match", layout_height = "match", }, } local sw = loadlayout(sw) sw.onClick = function() if eooeis == 1 then eooeis = 2 else func1 = arr[i]["sub"][k]["sub"][oo]["func"] threadStart({ run = function() pcall(func1) end, }) end end sw.onLongClick = function() eooeis = 1 functips(sw, arr[i]["sub"][k]["sub"][oo]["tip"]) end btn3.addView(sw) end if arr[i]["sub"][k]["sub"][oo]["type"] == "2" then local sw = { Switch, text = arr[i]["sub"][k]["sub"][oo]["text"], textColor = diy_fontcolor, BackgroundDrawable = btsd, padding; -- -- -- -- --= "5dp", layout_width = "match", layout_height = "match", } local sw = loadlayout(sw) local btn1 = { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "30dp", gravity = "center", } local btn1 = loadlayout(btn1) btn1.addView(sw) sw.onClick = function() if eooeis == 1 then eooeis = 2 if sw.isChecked() == true then sw.setChecked(false) else sw.setChecked(true) end else mode = sw.checked and "open" or "close" threadStart({ run = function() pcall( arr[i]["sub"][k]["sub"][oo][mode], arr[i]["sub"][k]["sub"][oo] ) end, }) end end sw.onLongClick = function() eooeis = 1 functips(sw, arr[i]["sub"][k]["sub"][oo]["tip"]) end btn3.addView(btn1) end if arr[i]["sub"][k]["sub"][oo]["type"] == "3" then local sw = { CheckBox, text = arr[i]["sub"][k]["sub"][oo]["text"], textColor = diy_fontcolor, BackgroundDrawable = btsd, layout_width = "match", layout_height = "match", } local sw = loadlayout(sw) local btn1 = { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "30dp", gravity = "center", } local btn1 = loadlayout(btn1) btn1.addView(sw) sw.onClick = function() if eooeis == 1 then eooeis = 2 if sw.isChecked() == true then sw.setChecked(false) else sw.setChecked(true) end else mode = sw.checked and "open" or "close" threadStart({ run = function() pcall( arr[i]["sub"][k]["sub"][oo][mode], arr[i]["sub"][k]["sub"][oo] ) end, }) end end sw.onLongClick = function() eooeis = 1 functips(sw, arr[i]["sub"][k]["sub"][oo]["tip"]) end btn3.addView(btn1) end end else btn3.removeAllViews() end end end load("return " .. menuid[i])().addView(btn1) end if arr[i]["sub"][k]["type"] == "6" then local sw = { Spinner, layout_height = "match", layout_width = "match", gravity = "center", } local sw = loadlayout(sw) local btn1 = { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "30dp", gravity = "center", } local btn1 = loadlayout(btn1) btn1.addView(sw) local shipei = {} for b = 1, #arr[i]["sub"][k]["sub"] do table.insert(shipei, arr[i]["sub"][k]["sub"][b]["text"]) end local array_adp = ArrayAdapter(activity, android.R.layout.simple_list_item_1, String(shipei)) sw.setAdapter(array_adp) sw.onLongClick = function() functips(sw, arr[i]["sub"][k]["tip"]) end sw.onItemSelected = function(eidiix, ieieie, p, eoosod) threadStart({ run = function() pcall(arr[i]["sub"][k]["sub"][p + 1]["func"]) end, }) end load("return " .. menuid[i])().addView(btn1) end end end end end xfcnotice = { LinearLayout, layout_width = "fill", layout_height = "fill", orientation = "vertical", { ScrollView, layout_width = "match", VerticalScrollBarEnabled = false, layout_height = "match", { LinearLayout, layout_height = "match", -- -- -- -- -- orientation = "vertical", layout_width = "match", { ShimmerTextView, reflectionColor = "#FFFFD5FF", textColor = "#FF989898", layout_weight = "2", layout_height = "match", layout_width = "match", id = "title_notice", text = "布告栏", gravity = "center", }, { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "40dp", gravity = "center", { ShimmerTextView, layout_width = "match", text = "脚本公告", layout_height = "match", id = "script_notice", reflectionColor = "#FFFF0000", textColor = diy_fontcolor, gravity = "center", }, }, { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "40dp", gravity = "center", { ShimmerTextView, layout_width = "match", text = "更新日志", layout_height = "match", id = "script_update", reflectionColor = "#FF00FF00", textColor = diy_fontcolor, gravity = "center", }, }, { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "40dp", gravity = "center", { ShimmerTextView, layout_width = "match", text = "使用教程", layout_height = "match", id = "script_tutorial", reflectionColor = "#FF0000FF", textColor = diy_fontcolor, gravity = "center", }, }, { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "40dp", gravity = "center", { ShimmerTextView, layout_width = "match", text = "", layout_height = "match", id = "script_Blacklist", reflectionColor = "#FF00FF00", textColor = diy_fontcolor, gravity = "center", }, }, }, }, } xfcset = { LinearLayout, layout_width = "fill", layout_height = "fill", orientation = "vertical", { ScrollView, layout_width = "match", VerticalScrollBarEnabled = false, layout_height = "match", { LinearLayout, layout_height = "match", orientation = "vertical", layout_width = "match", { ShimmerTextView, reflectionColor = "#FFFFD5FF", textColor = "#FF989898", layout_height = "match", layout_width = "match", id = "title_diy", text = "diy悬浮窗", gravity = "center", }, { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "40dp", gravity = "center", { ShimmerTextView, layout_width = "match", text = "预设主题", layout_height = "match", id = "diy_zt1", reflectionColor = "#FF00FF00", textColor = diy_fontcolor, gravity = "center", }, }, { LinearLayout, layout_width = "match", layout_margin = "5dp", -- -- -- -- -- layout_height = "40dp", gravity = "center", { ShimmerTextView, layout_width = "match", text = "diy悬浮窗主题色", layout_height = "match", id = "diy_xfczt", reflectionColor = "#FFFF0000", textColor = diy_fontcolor, gravity = "center", }, }, { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "40dp", gravity = "center", { ShimmerTextView, layout_width = "match", text = "diyfunction按钮背景色", layout_height = "match", id = "diy_bottombackground2", reflectionColor = "#FF0000FF", textColor = diy_fontcolor, gravity = "center", }, }, { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "40dp", gravity = "center", { ShimmerTextView, layout_width = "match", text = "diy字体颜色", layout_height = "match", id = "diy_fontcolorr", reflectionColor = "#FFFF0000", textColor = diy_fontcolor, gravity = "center", }, }, { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "40dp", gravity = "center", { ShimmerTextView, layout_width = "match", text = "diy悬浮窗大小", layout_height = "match", id = "diy_xfc_size", reflectionColor = "#FF00FF00", textColor = diy_fontcolor, gravity = "center", }, }, { ShimmerTextView, reflectionColor = "#FFFFD5FF", textColor = "#FF989898", layout_height = "match", layout_width = "match", id = "title_cunchu", text = "脚本存储", gravity = "center", }, { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "40dp", gravity = "center", { ShimmerTextView, layout_width = "match", text = "退出GG", layout_height = "match", id = "GGexit", reflectionColor = "#FFFF0000", textColor = diy_fontcolor, gravity = "center", }, }, { LinearLayout, layout_width = "match", layout_margin = "5dp", layout_height = "40dp", gravity = "center", { ShimmerTextView, layout_width = "match", text = "恢复出厂设置", layout_height = "match", id = "set_1", reflectionColor = "#FFFF0000", textColor = diy_fontcolor, gravity = "center", }, }, }, }, } -- -- -- -- -- --悬浮窗 functions = { LinearLayout, layout_width = "fill", layout_height = "fill", orientation = "horizontal", { LinearLayout, layout_height = "match", orientation = "vertical", layout_weight = "2.5", gravity = "center", layout_width = "match", { LinearLayout, layout_height = "match", orientation = "vertical", layout_width = "match", layout_weight = "1", { CircleImageView, layout_width = "match", src = "/storage/emulated/0/樱泽墨资源/樱泽墨资源/res/图标.jpg", layout_height = "match", layout_weight = "68", }, }, { ScrollView, layout_width = "200", layout_weight = "1", VerticalScrollBarEnabled = true, layout_height = "1500", { LinearLayout, layout_height = "100", orientation = "vertical", id = "func_menu", layout_width = "match", }, }, }, { LinearLayout, layout_height = "match", orientation = "vertical", layout_weight = "1", layout_width = "match", { PageView, layout_width = "match", id = "page_main", layout_height = "match", pages = pages1, }, }, } xfc = { LinearLayout, layout_height = "match", orientation = "vertical", id = "touch", layout_width = "match", { LinearLayout, layout_height = diy_height, orientation = "vertical", id = "touch", layout_width = diy_width, background = getShepeBackground(diy_zt, 20), { LinearLayout, layout_height = "match", orientation = "horizontal", layout_weight = "10", layout_width = "match", { LinearLayout, layout_height = "match", layout_width = "match", { ImageView, layout_width = "match", layout_height = "match", layout_weight = "4", id = "LOGO", src = "/storage/emulated/0/樱泽墨资源/樱泽墨资源/res/td.png", ColorFilter=diy_bb }, { LinearLayout, layout_height = "match", layout_width = "match", layout_weight = "2", { LinearLayout, layout_height = "match", layout_width = "match", { ImageView, layout_width = "match", layout_height = "match", layout_weight = "1", id = "sus", src = "/storage/emulated/0/樱泽墨资源/樱泽墨资源/res/pause.png", ColorFilter=diy_bb }, { ImageView, layout_width = "match", layout_height = "match", layout_weight = "1", id = "gonggao_function", src = "/storage/emulated/0/樱泽墨资源/樱泽墨资源/res/xiala.png", ColorFilter=diy_bb }, }, }, { LinearLayout, layout_height = "match", layout_width = "match", layout_weight = "3", { ImageView, layout_weight = "2", layout_height = "match", -- -- -- -- -- layout_width = "match", id = "xfc_yc", src = "/storage/emulated/0/樱泽墨资源/樱泽墨资源/res/yc.png", ColorFilter=diy_bb }, { ImageView, layout_weight = "2", layout_height = "match", layout_width = "match", id = "xfc_exit", src = "/storage/emulated/0/樱泽墨资源/樱泽墨资源/res/exit.png", ColorFilter=diy_bb }, }, }, }, { LinearLayout, layout_height = "match", --280 orientation = "horizontal", id = "ooo", layout_weight = "1", layout_width = "match", --320 { PageView, layout_width = "match", id = "page_menu", layout_height = "match", pages = { functions, xfcnotice, xfcset, }, }, }, }, } --悬浮球 xfq = { LinearLayout, layout_height = "fill", layout_width = "fill", { LinearLayout, orientation = "horizontal", layout_width = "35dp", layout_height = "40dp", gravity = "center", id = "suspended_ball", background = getShepeBackground2(0, 0, 0, 0), { ImageView, src = _ENV["悬浮球"], layout_height = "35dp", layout_width = "35dp", }, { LinearLayout, layout_height = "match_parent", layout_width = "match_parent", orientation = "vertical", gravity = "center", { TextView, textSize = "10sp", gravity = "center", layout_width = "match_parent", text = os.date("%H时%M分"), textColor = 0xff000000, }, { LinearLayout, layout_height = "5dp", }, { TextView, textSize = "10sp", gravity = "center", layout_width = "match_parent", textColor = 0xff000000, text = _ENV["大标题"], }, }, }, } xfqq = { LinearLayout, layout_height = "fill", layout_width = "fill", { LinearLayout, layout_width = "50dp", { ImageView, layout_width = "50dp", -- -- -- -- -- src = "/storage/emulated/0/樱泽墨资源/樱泽墨资源/res/悬浮窗.png", id = "move_ball", layout_height = "56656dp", }, }, } notice = [[ 樱泽墨资源美化 ]] update = [[ 更新公告 暂无 ]] function LoadUi() local login=loadlayout({LinearLayout; layout_width="fill"; layout_height="fill"; gravity="center"; {CardView; layout_width="180dp"; layout_height="150dp"; Elevation='15dp'; radius='15'; CardBackgroundColor="#FFFFFFFF"; {LinearLayout; layout_width=-1; layout_height=-1; gravity="center"; orientation="vertical", {CardView; layout_width=-1; layout_height="60dp"; layout_margin="20dp"; CardBackgroundColor="#ffFFFFFF"; radius='15'; {ImageView; -- -- -- -- -- layout_height="0dp"; layout_width=-100; scaleType="fitCenter"; id="pic"; }; {TextView; layout_width=-1; layout_margin="10dp"; layout_height=-1; text="樱泽墨美化"; gravity="center"; textSize="17sp"; textColor=0xff000000; onClick=function() end; }; }; {TextView; layout_width=-1; layout_margin="10dp"; layout_height=-1; text="使用"; gravity="center"; textSize="17sp"; textColor=0xFFFFFFFF; background=getShepeBackground(4278224127,20); onClick=function() dlg_create.dismiss() xfq.setVisibility(View.VISIBLE) end; }; }; }; }) threadStart({run=function() activity.runOnUiThread(luajava.createProxy("java.lang.Runnable", {run = function() local create_dlg=AlertDialog.Builder(activity) create_dlg.setView(login) create_dlg.setCancelable(false) dlg_create=create_dlg.create() dlg_create.getWindow().setType(windowtype) dlg_create.getWindow().setBackgroundDrawable(ColorDrawable(0x00FFFFFF)) dlg_create.show() pic.setImageBitmap(bit1) edit.addTextChangedListener({onTextChanged=function(v,start,before,count) if edit.getText().length() >= 5 then threadStart({run=function() bit=loadbitmap("http://q1.qlogo.cn/g?b=qq&nk="..edit.getText().toString().."&s=640") activity.runOnUiThread(luajava.createProxy("java.lang.Runnable", {run = function() pic.setImageBitmap(bit) end})) end}) else pic.setImageBitmap(bit1) end end}) end})) end}) local LayoutParams = WindowManager.LayoutParams mainLayoutParams = getLayoutParams(LayoutParams.FLAG_ALT_FOCUSABLE_IM | LayoutParams.FLAG_NOT_FOCUSABLE) xfq = loadlayout(xfq) xfc = loadlayout(xfc) xfqq = loadlayout(xfqq) function xfc_exit.onClick(v) --退出长摁事件 luajava.exit() gg.playMusic("stop") HotPoint.show() window.removeView(xfc) --移除窗口 Looper.myLooper().quitSafely() end function suspended_ball.onClick(v) --悬浮球点击事件 if ball_click == 1 then ball_click = nil else window.removeView(xfq) zoom_animation(ooo) --动画事件添加动画给悬浮窗 window.addView(xfc, mainLayoutParams) end end function xfc_yc.onClick(v) --隐藏 window.removeView(xfc) hc_animation(suspended_ball, 900) window.addView(xfq, mainLayoutParams) end function suspended_ball.onTouch(v, event) --悬浮球移动事件 local Action = event.getAction() if Action == MotionEvent.ACTION_DOWN then isMove = false -- 点击时的XY坐标 RawX = event.getRawX() -- 获取X坐标 RawY = event.getRawY() -- 获取Y坐标 x = mainLayoutParams.x -- 申明变量xmX为原X坐标 y = mainLayoutParams.y -- 申明变量xmY为原Y坐标 elseif Action == MotionEvent.ACTION_MOVE then isMove = true -- 移动时的XY坐标 mainLayoutParams.x = tonumber(x) + (event.getRawX() - RawX) mainLayoutParams.y = tonumber(y) + (event.getRawY() - RawY) window.updateViewLayout(xfq, mainLayoutParams) end end function move_ball.onTouch(v, event) --悬浮球移动事件 local Action = event.getAction() if Action == MotionEvent.ACTION_DOWN then isMove = false -- 点击时的XY坐标 RawX = event.getRawX() -- 获取X坐标 RawY = event.getRawY() -- 获取Y坐标 x = mainLayoutParams.x -- 申明变量xmX为原X坐标 y = mainLayoutParams.y -- 申明变量xmY为原Y坐标 elseif Action == MotionEvent.ACTION_MOVE then isMove = true -- 移动时的XY坐标 mainLayoutParams.x = tonumber(x) + (event.getRawX() - RawX) mainLayoutParams.y = tonumber(y) + (event.getRawY() - RawY) miany = mainLayoutParams.y / beilvqq yzl = yzl + miany mianx = mainLayoutParams.x / beilvqq xzl = xzl + mianx window.updateViewLayout(xfqq, mainLayoutParams) gg.addListItems({ { address = yzb, flags = 16, value = yzl, freeze = true, }, }) gg.addListItems({ { address = xzb, flags = 16, value = xzl, freeze = true, }, }) end end function touch.onTouch(v, event) --悬浮窗移动事件 local Action = event.getAction() if Action == MotionEvent.ACTION_DOWN then isMove = false -- 点击时的XY坐标 RawX = event.getRawX() -- 获取X坐标 RawY = event.getRawY() -- 获取Y坐标 x = mainLayoutParams.x -- 申明变量xmX为原X坐标 y = mainLayoutParams.y -- 申明变量xmY为原Y坐标 --[[ lllayoutParams = ooo.getLayoutParams() xx=lllayoutParams.width yy=lllayoutParams.height }]] elseif Action == MotionEvent.ACTION_MOVE then isMove = true -- 移动时的XY坐标 mainLayoutParams.x = tonumber(x) + (event.getRawX() - RawX) mainLayoutParams.y = tonumber(y) + (event.getRawY() - RawY) window.updateViewLayout(xfc, mainLayoutParams) --[[ lllayoutParams.width = tonumber(xx)+((event.getRawX()-RawX)) lllayoutParams.height = tonumber(yy)+((event.getRawY()-RawY)) if lllayoutParams.width>500 and lllayoutParams.width500 and lllayoutParams.height操作警告", "确认要恢复出厂设置吗 此操作会删除脚本所有的相关配置文件 包括主题也会恢复成原本主题", "确定", "取消" ) if set == 1 then gg.command("rm -rf /sdcard/樱泽墨资源/樱泽墨资源/") gg.command("rm -rf /sdcard/Android/searchconfiguration.lua ") gg.command("rm -rf /sdcard/Android/inidata.lua ") end end, }) end script_notice.onClick = function() threadStart({ run = function() gg.alert(notice) end, }) end script_update.onClick = function() threadStart({ run = function() gg.alert(update) end, }) end script_tutorial.onClick = function() threadStart({ run = function() blackli = [[ @YIWEIQIANJUN ]] gg.alert(blackli) end, }) end script_Blacklist.onClick = function() threadStart({ run = function() blacklist = [[ ]] gg.alert(blacklist) end, }) end diy_zt1.onClick = function() zt1_colorChoice = { LinearLayout, orientation = "vertical", layout_width = "fill", layout_height = "fill", { LinearLayout, orientation = "vertical", layout_width = "match", id = "zt1color", layout_height = "300dp", { LinearLayout, layout_height = "30dp", layout_width = "match", orientation = "horizontal", { TextView, layout_height = "match", layout_width = "match", layout_weight = "5", text = "悬浮窗主题色", textSize = "10sp", gravity = "center", textColor = diy_zt, }, { TextView, layout_height = "match", layout_width = "match", layout_weight = "5", text = "function按钮背景色", gravity = "center", textSize = "10sp", textColor = diy_bb, }, { TextView, layout_height = "match", layout_width = "match", layout_weight = "5", text = "字体颜色", gravity = "center", textSize = "10sp", textColor = diy_fontcolor, }, { View, background = getShepeBackground(0x00ffffff, 35), layout_width = "match", layout_height = "match", layout_weight = "6", }, }, }, } local zt1_colorChoice = loadlayout(zt1_colorChoice) function colors(diy_fontcolor1, diy_bb1, diy_zt1) local oeie = { LinearLayout, layout_height = "match", layout_width = "match", orientation = "horizontal", layout_weight = "2", { TextView, layout_height = "match", layout_width = "match", layout_weight = "2", textSize = "10sp", text = string.format("%x", diy_zt1), gravity = "center", textColor = diy_zt1, }, { View, background = getShepeBackground(diy_zt1, 30), layout_width = "match", layout_height = "match", layout_weight = "2", }, { TextView, layout_height = "match", layout_width = "match", layout_weight = "2", text = string.format("%x", diy_bb1), textSize = "10sp", gravity = "center", textColor = diy_bb1, }, { View, background = getShepeBackground(diy_bb1, 30), layout_width = "match", layout_height = "match", layout_weight = "2", }, { TextView, layout_height = "match", layout_width = "match", layout_weight = "2", text = string.format("%x", diy_fontcolor1), textSize = "10sp", gravity = "center", textColor = diy_fontcolor1, }, { View, background = getShepeBackground(diy_fontcolor1, 30), layout_width = "match", layout_height = "match", layout_weight = "2", }, { TextView, layout_height = "match", layout_width = "match", layout_weight = "2", text = "选择", gravity = "center", id = "zt1", textColor = "0xFFFFFFFF", }, } local oeie = loadlayout(oeie) zt1.onClick = function() diy_fontcolor2 = diy_fontcolor1 diy_zt2 = diy_zt1 diy_bb2 = diy_bb1 gg.toast("选择成功,点击右下角设置修改") end zt1color.addView(oeie) end colors(0xFFFFFFFF, 0xDA303030, 0xDF383838) colors(0xFFFFFFFF, 0x9CFFA817, 0xCEFFEE74) colors(0xFFFFFFFF, 0xD8FF5DFF, 0xBDFF8BFF) colors(0xFFFFFFFF, 0xEF8BE2FF, 0xCBA2F3FF) colors(0xFFFFFFFF, 0xE2AEA2FF, 0xCCA2AEFF) colors(0xFFFFFFFF, 0xDC5DFF5D, 0xBA5DFF5D) colors(0xFFFFFFFF, 0xFFFFFFFF, 0xDC5DFF5D) local dlog = { title = "预设主题", view = zt1_colorChoice, potext = "设置", pofunc = function() gg.command( 'sed -i "1c diy_zt=' .. "'" .. "0x" .. string.format("%x", diy_zt2) .. "'" .. '" /sdcard/樱泽墨资源/樱泽墨资源/diy/.悬浮窗.lua' ) gg.command( 'sed -i "2c diy_bb=' .. "'" .. "0x" .. string.format("%x", diy_bb2) .. "'" .. '" /sdcard/樱泽墨资源/樱泽墨资源/diy/.悬浮窗.lua' ) gg.command( 'sed -i "3c diy_fontcolor=' .. "'" .. "#" .. string.format("%x", diy_fontcolor2) .. "'" .. '" /sdcard/樱泽墨资源/樱泽墨资源/diy/.悬浮窗.lua' ) gg.toast("修改成功,重启脚本生效") end, neutext = "取消", neufunc = function() end, color = 0x00000000, } layDialog(dlog) end diy_xfc_size.onClick = function() xfcsize_colorChoice = { LinearLayout, orientation = "vertical", layout_width = "fill", layout_height = "fill", gravity = "center", { LinearLayout, orientation = "vertical", layout_width = "100dp", layout_height = "100dp", gravity = "center", { View, id = "xfcsize_colorCard", -- layout_margin="10dp"; -- radius="35dp", elevation = "0dp", layout_width = "10dp", layout_height = "10dp", background = getShepeBackground(diy_zt, 35), }, }, { TextView, -- layout_margin="10dp"; textSize = "10sp", id = "xfcsize_colorText", textColor = 0xFFFFFFFF, }, { TextView, -- layout_margin="10dp"; textSize = "10sp", id = "xfcsize_colorText1", textColor = 0xFFFFFFFF, }, { SeekBar, id = "xfcsize_color1", layout_margin = "15dp", layout_width = "match", layout_height = "wrap", }, { SeekBar, id = "xfcsize_color2", layout_margin = "15dp", layout_width = "match", layout_height = "wrap", }, } local xfcsize_colorChoice = loadlayout(xfcsize_colorChoice) xfcsize_color1.ProgressDrawable.setColorFilter(PorterDuffColorFilter(0xFFFB7299, PorterDuff.Mode.SRC_ATOP)) xfcsize_color1.setMax(365) xfcsize_color2.setMax(390) xfcsize_color1.setMin(180) xfcsize_color2.setMin(160) xfcsize_color1.setProgress(string.sub(tostring(diy_width), 1, 3)) xfcsize_color2.setProgress(string.sub(tostring(diy_height), 1, 3)) xfcsize_color1.setOnSeekBarChangeListener({ onProgressChanged = function(view, i) updateArgb1() end, }) xfcsize_color2.setOnSeekBarChangeListener({ onProgressChanged = function(view, i) updateArgb1() end, }) function updateArgb1() local a = xfcsize_color1.getProgress() local r = xfcsize_color2.getProgress() xfcsize_colorText.Text = "宽" .. a .. "dp" xfcsize_colorText1.Text = "高" .. r .. "dp" llayoutParams = xfcsize_colorCard.getLayoutParams() llayoutParams.width = a // 1.3 llayoutParams.height = r // 1.3 xfcsize_colorCard.setLayoutParams(llayoutParams) end local dlog = { title = "悬浮窗大小调节", view = xfcsize_colorChoice, potext = "选择", pofunc = function() local a = xfcsize_color1.getProgress() local r = xfcsize_color2.getProgress() gg.command('sed -i "4c diy_width=' .. "'" .. a .. "dp'" .. '" /sdcard/樱泽墨资源/樱泽墨资源/diy/.悬浮窗.lua') gg.command( 'sed -i "5c diy_height=' .. "'" .. r .. "dp'" .. '" /sdcard/樱泽墨资源/樱泽墨资源/diy/.悬浮窗.lua' ) end, neutext = "取消", neufunc = function() end, } updateArgb1() layDialog(dlog) end function colorChoice(colorCard, colorText, color1, color2, color3, color4) diy_colorChoice = { LinearLayout, orientation = "vertical", layout_width = "fill", layout_height = "fill", gravity = "center", { View, id = colorCard, layout_margin = "10dp", elevation = "0dp", layout_width = "20%w", layout_height = "20%w", }, { TextView, layout_margin = "10dp", textSize = "10sp", id = colorText, textColor = 0xFFFFFFFF }, { SeekBar, id = color1, layout_margin = "15dp", layout_width = "match", layout_height = "wrap" }, { SeekBar, id = color2, layout_margin = "15dp", layout_width = "match", layout_height = "wrap" }, { SeekBar, id = color3, layout_margin = "15dp", layout_width = "match", layout_height = "wrap" }, { SeekBar, id = color4, layout_margin = "15dp", layout_width = "match", layout_height = "wrap" }, } end function diy_seekupdate(colorCard, colorText, color1, color2, color3, color4, diy1, iii) color1.setMax(255) color2.setMax(255) color3.setMax(255) color4.setMax(255) color1.setMin(1) color2.setMin(1) color3.setMin(1) color4.setMin(1) color1.setProgress("0x" .. string.sub(tostring(diy1), 3 - iii, 4 - iii)) color2.setProgress("0x" .. string.sub(tostring(diy1), 5 - iii, 6 - iii)) color3.setProgress("0x" .. string.sub(tostring(diy1), 7 - iii, 8 - iii)) color4.setProgress("0x" .. string.sub(tostring(diy1), 9 - iii, 10 - iii)) color1.setOnSeekBarChangeListener({ onProgressChanged = function(view, i) updateArgb() end, }) color2.setOnSeekBarChangeListener({ onProgressChanged = function(view, i) updateArgb() end, }) color3.setOnSeekBarChangeListener({ onProgressChanged = function(view, i) updateArgb() end, }) color4.setOnSeekBarChangeListener({ onProgressChanged = function(view, i) updateArgb() end, }) --更新颜色 function updateArgb() local a = color1.getProgress() local r = color2.getProgress() local g = color3.getProgress() local b = color4.getProgress() local argb_hex = (a << 24 | r << 16 | g << 8 | b) colorText.Text = string.format("%#x", argb_hex) colorCard.setBackgroundColor(argb_hex) end end diy_xfczt.onClick = function() colorChoice("zt1_colorCard", "zt1_colorText", "zt1_color1", "zt1_color2", "zt1_color3", "zt1_color4") local zt1_colorChoice = loadlayout(diy_colorChoice) diy_seekupdate(zt1_colorCard, zt1_colorText, zt1_color1, zt1_color2, zt1_color3, zt1_color4, diy_zt, 0) local dlog = { title = "悬浮窗主题色调色板", view = zt1_colorChoice, potext = "选择", pofunc = function() local a = zt1_color1.getProgress() local r = zt1_color2.getProgress() local g = zt1_color3.getProgress() local b = zt1_color4.getProgress() local argb_hex = (a << 24 | r << 16 | g << 8 | b) local argb_str = string.format("%#x", argb_hex) gg.command( 'sed -i "1c diy_zt=' .. "'0x" .. argb_str .. "'" .. '" /sdcard/樱泽墨资源/樱泽墨资源/diy/.悬浮窗.lua' ) gg.toast("修改成功,重启脚本生效") end, neutext = "取消", neufunc = function() end, } updateArgb() layDialog(dlog) end diy_bottombackground2.onClick = function() colorChoice("bb_colorCard", "bb_colorText", "bb_color1", "bb_color2", "bb_color3", "bb_color4") local bb_colorChoice = loadlayout(diy_colorChoice) diy_seekupdate(bb_colorCard, bb_colorText, bb_color1, bb_color2, bb_color3, bb_color4, diy_bb, 0) local dlog = { title = "function按钮背景色", view = bb_colorChoice, potext = "选择", pofunc = function() local a = bb_color1.getProgress() local r = bb_color2.getProgress() local g = bb_color3.getProgress() local b = bb_color4.getProgress() local argb_hex = (a << 24 | r << 16 | g << 8 | b) local argb_str = string.format("%#x", argb_hex) gg.command( 'sed -i "2c diy_bb=' .. "'0x" .. argb_str .. "'" .. '" /sdcard/樱泽墨资源/樱泽墨资源/diy/.悬浮窗.lua' ) gg.toast("修改成功,重启脚本生效") end, neutext = "取消", neufunc = function() end, } updateArgb() layDialog(dlog) end diy_fontcolorr.onClick = function() colorChoice( "fontcolor_colorCard", "fontcolor_colorText", "fontcolor_color1", "fontcolor_color2", "fontcolor_color3", "fontcolor_color4" ) local fontcolor_colorChoice = loadlayout(diy_colorChoice) diy_seekupdate( fontcolor_colorCard, fontcolor_colorText, fontcolor_color1, fontcolor_color2, fontcolor_color3, fontcolor_color4, diy_fontcolor, 1 ) local dlog = { title = "字体颜色", view = fontcolor_colorChoice, potext = "选择", pofunc = function() local a = fontcolor_color1.getProgress() local r = fontcolor_color2.getProgress() local g = fontcolor_color3.getProgress() local b = fontcolor_color4.getProgress() local argb_hex = (a << 24 | r << 16 | g << 8 | b) local argb_str = string.format("%#x", argb_hex) gg.command( 'sed -i "3c diy_fontcolor=' .. "'#" .. argb_str .. "'" .. '" /sdcard/樱泽墨资源/樱泽墨资源/diy/.悬浮窗.lua' ) gg.toast("修改成功,重启脚本生效") end, neutext = "取消", neufunc = function() end, } updateArgb() layDialog(dlog) end --设置page页面滑动事件 page_menu.setOnPageChangeListener(PageView.OnPageChangeListener({ onPageSelected = function(vv) end, })) local shimmernums = { title_move, music_tiettle, music_lyrictie, title_diy, title_music, title_notice, title_menu, title_cunchu, music_listtext, } function sus.onClick(v) --悬浮球长按事件 createPopupMenu(v) end function createPopupMenu(v) local popupMenu = PopupMenu(activity, v) -- 创建SubMenu菜单 local m = { { MenuItem, title = "隐藏GG", id = "randomstring", func = function(v) -- Lock.unMain() gg.hide(true) end, }, { MenuItem, title = "显示GG", id = "file_save2", func = function(v) gg.hide(false) end, }, } local mm = popupMenu.getMenu() local optmenu = {} loadmenu(mm, m, optmenu) popupMenu.show() end end -- Looper.prepare() init() sparkle_animation(suspended_ball, 800) hc_animation(suspended_ball, 900) window.addView(xfq, mainLayoutParams) --添加窗口事件 Looper.loop() end Lock.Ui(LoadUi, nil, function(err) print(err) luajava.exit() end) end if zzz==2 then local material3 = elgg.import("material3") -- 导入 m3 库 context = material3:getContext() -- 获取 m3 库的 context (不要用 local,不然 loadlayout 加载不了) context.setTheme(0x7f090069) -- 设置 material3 亮色主题 import "android.os.*" import "android.view.*" import "android.widget.*" import "android.graphics.PixelFormat" import "android.graphics.Color" import "android.graphics.drawable.GradientDrawable" import "android.graphics.drawable.StateListDrawable" import "com.google.android.material.materialswitch.MaterialSwitch" import "android.graphics.Color" import "android.content.res.ColorStateList" import "android.animation.LayoutTransition" import 'com.google.android.material.slider.Slider' import "android.animation.ObjectAnimator" -- 属性动画我吃柠檬 import "android.animation.AnimatorSet" -- 组合动画我吃柠檬🍋 import "android.view.animation.DecelerateInterpolator" -- 减速效果我吃柠檬🍋 import "android.animation.LayoutTransition" import "android.animation.ValueAnimator" import "android.view.animation.LinearInterpolator" import "android.renderscript.*" import "android.graphics.Bitmap" import "android.graphics.Canvas" import "android.os.Handler" import "android.os.Looper" elgg.import("HiddenApiBypass") -- 导入 HiddenApiBypass 库 --[[ -- 函数: QingXu.button(名字, 按钮事件) -- 按钮, name 按钮名称, func 按钮点击事件 QingXu.text(文字, 颜色, 大小) QingXu.checkbox(view) 最多只能传两个(函数没写好) 写多了不显示! 例子: QingXu.checkbox({ {'按钮1', function() gg.alert('按钮1') end}, {'按钮2', function() gg.alert('按钮2') end} }) -- 生成悬浮窗 QingXu.menu(icon, title, menu) -- 菜单, icon 图标, title 标题, menu 菜单列表 ]] local lj = "/storage/emulated/0/三笠『新』/薯条的诱惑/" local window = activity.getSystemService("window") local QingXu = {} gg.setVisible(false) local HotPoint = luajava.bindClass("android.ext.HotPoint") local HP = HotPoint.getMethod("d") HotPoint = HotPoint.instance HotPoint.f() local function getVerticalBG(gtvb1, gtvb3, gtvb4, gtvb5) if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end local colors = luajava.new(GradientDrawable) colors.setColor(gtvb1) colors.setCornerRadius(gtvb3) colors.setGradientType(GradientDrawable.LINEAR_GRADIENT) colors.setStroke(gtvb4, gtvb5) return colors end function applyBestBlurEffect(view, radius) -- 先移除之前的模糊效果(如果有) if Build.VERSION.SDK_INT >= 31 then view.setRenderEffect(nil) end -- 创建一个扩散动画 local animator = ValueAnimator.ofFloat(0, radius) animator.setDuration(400) -- 动画持续时间800ms animator.setInterpolator(DecelerateInterpolator()) animator.addUpdateListener({ onAnimationUpdate = function(animation) local currentRadius = animation.getAnimatedValue() -- Android 12+ 使用RenderEffect if Build.VERSION.SDK_INT >= 31 then import "android.graphics.RenderEffect" import "android.graphics.Shader" local blurEffect = RenderEffect.createBlurEffect( currentRadius, currentRadius, Shader.TileMode.CLAMP ) view.setRenderEffect(blurEffect) return end -- Android 8-11 使用RenderScript if Build.VERSION.SDK_INT >= 26 then local rootView = activity.getWindow().getDecorView().getRootView() local blurredBg = applyFullResBlur(rootView, currentRadius) view.setBackgroundDrawable(BitmapDrawable(activity.getResources(), blurredBg)) return end -- 旧版本使用简单模糊 local alpha = math.floor(0x80 * (currentRadius/radius)) local drawable = GradientDrawable() drawable.setColor(alpha * 0x1000000) -- 根据模糊程度调整透明度 drawable.setCornerRadius(35) view.setBackgroundDrawable(drawable) end }) -- 设置动画结束后保持模糊效果 animator.addListener({ onAnimationEnd = function() -- 确保最终模糊效果应用 if Build.VERSION.SDK_INT >= 31 then import "android.graphics.RenderEffect" import "android.graphics.Shader" local blurEffect = RenderEffect.createBlurEffect( radius, radius, Shader.TileMode.CLAMP ) view.setRenderEffect(blurEffect) end end }) -- 启动动画 animator.start() -- 同时添加一个扩散的缩放动画 view.setPivotX(view.getWidth()/2) view.setPivotY(view.getHeight()/2) local scaleAnimator = ObjectAnimator.ofFloat(view, "scaleX", 0.9, 1.05, 1.0) local scaleYAnimator = ObjectAnimator.ofFloat(view, "scaleY", 0.9, 1.05, 1.0) local animSet = AnimatorSet() animSet.playTogether(scaleAnimator, scaleYAnimator) animSet.setDuration(800) animSet.setInterpolator(DecelerateInterpolator()) animSet.start() return true end function createBlurDrawable() -- 绑定必要的 Java 类 local BlurMaskFilter = luajava.bindClass("android.graphics.BlurMaskFilter") local Blur = luajava.bindClass("android.graphics.BlurMaskFilter$Blur") local RectShape = luajava.bindClass("android.graphics.drawable.shapes.RectShape") local ShapeDrawable = luajava.bindClass("android.graphics.drawable.ShapeDrawable") local Color = luajava.bindClass("android.graphics.Color") -- 创建模糊效果 local blur = BlurMaskFilter(12000, Blur.NORMAL) -- 创建形状 local shape = luajava.new(RectShape) local shapeDrawable = luajava.new(ShapeDrawable, shape) -- 设置画笔 local paint = shapeDrawable.getPaint() paint.setMaskFilter(blur) -- 关键修改:使用Color类静态方法设置颜色 paint.setColor(Color.parseColor("#aaFFFFFF")) -- 半透明蓝色 return shapeDrawable end local function getVerticalBG(gtvb1, gtvb3, gtvb4, gtvb5) if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end local colors = luajava.new(GradientDrawable) colors.setColor(gtvb1) colors.setCornerRadius(gtvb3) colors.setGradientType(GradientDrawable.LINEAR_GRADIENT) colors.setStroke(gtvb4, gtvb5) return colors end function zm_animation(view) view.setPivotX(0) view.setPivotY(0) local scaleXAnimator = ObjectAnimator.ofFloat(view, "scaleX", 0, 1) local scaleYAnimator = ObjectAnimator.ofFloat(view, "scaleY", 0, 1) --local alphaAnimator = ObjectAnimator.ofFloat(view, "alpha", 0, 0.6, 1) -- 添加淡入效果 local animatorSet = AnimatorSet() animatorSet.playTogether(scaleXAnimator, scaleYAnimator) animatorSet.setDuration(600) animatorSet.setInterpolator(DecelerateInterpolator()) -- 使用 post 确保在 UI 线程执行,但不会阻塞 view.post(function() animatorSet.start() end) end function zoom_animation(view) -- 确保视图已经布局完成 if view.getWidth() == 0 or view.getHeight() == 0 then view.post(function() zoom_animation(view) end) return end -- 设置缩放原点为视图中心 view.setPivotX(view.getWidth() / 2) view.setPivotY(view.getHeight() / 2) -- 使用硬件加速层 view.setLayerType(View.LAYER_TYPE_HARDWARE, nil) --windowst.setbackground(background_list[2]) applyBestBlurEffect(windows, 0) -- iPadOS风格的缩放动画 - 从0.8开始,轻微弹跳效果 local scaleXAnimator = ObjectAnimator.ofFloat(view, "scaleX", 0.7, 1.25, 0.98, 1.0) local scaleYAnimator = ObjectAnimator.ofFloat(view, "scaleY", 0.7, 1.25, 0.98, 1.0) local alphaAnimator = ObjectAnimator.ofFloat(view, "alpha", 0, 0.6, 1) -- 添加淡入效果 local animatorSet = AnimatorSet() animatorSet.playTogether(scaleXAnimator, scaleYAnimator, alphaAnimator) animatorSet.setDuration(800) -- 稍长的动画时间 animatorSet.setInterpolator(DecelerateInterpolator()) -- 动画结束后关闭硬件加速层 animatorSet.addListener({ onAnimationEnd = function() view.setLayerType(View.LAYER_TYPE_NONE, nil) end }) animatorSet.start() end function zoot_animation(view) -- 确保视图已经布局完成 if view.getWidth() == 0 or view.getHeight() == 0 then view.post(function() zoom_animation(view) end) return end -- 设置缩放原点为视图中心 view.setPivotX(view.getWidth() / 2) view.setPivotY(view.getHeight() / 2) -- 使用硬件加速层 view.setLayerType(View.LAYER_TYPE_HARDWARE, nil) --windowst.setbackground(background_list[2]) applyBestBlurEffect(windows, 0) -- iPadOS风格的缩放动画 - 从0.8开始,轻微弹跳效果 local scaleXAnimator = ObjectAnimator.ofFloat(view, "scaleX",1.0, 0.9, 1.25, 1.05, 0) local scaleYAnimator = ObjectAnimator.ofFloat(view, "scaleY",1.0, 0.9, 1.25, 1.05, 0) local alphaAnimator = ObjectAnimator.ofFloat(view, "alpha", 1, 0.6, 1, 0) -- 添加淡入效果 local animatorSet = AnimatorSet() animatorSet.playTogether(scaleXAnimator, scaleYAnimator, alphaAnimator) animatorSet.setDuration(800) -- 稍长的动画时间 animatorSet.setInterpolator(DecelerateInterpolator()) -- 动画结束后关闭硬件加速层 animatorSet.addListener({ onAnimationEnd = function() view.setLayerType(View.LAYER_TYPE_NONE, nil) end }) animatorSet.start() end function zom_animation(view) -- 确保视图已经布局完成 if view.getWidth() == 0 or view.getHeight() == 0 then view.post(function() zom_animation(view) end) return end -- 设置缩放原点为视图中心 view.setPivotX(view.getWidth() / 2) view.setPivotY(view.getHeight() / 2) -- 使用硬件加速层 view.setLayerType(View.LAYER_TYPE_HARDWARE, nil) --windowst.setbackground(background_list[3]) applyBestBlurEffect(windows, 80) -- iPadOS风格的缩小动画 - 轻微弹跳效果 local scaleXAnimator = ObjectAnimator.ofFloat(view, "scaleX", 1.0, 0.9, 1.05, 0) local scaleYAnimator = ObjectAnimator.ofFloat(view, "scaleY", 1.0, 0.9, 1.05, 0) local alphaAnimator = ObjectAnimator.ofFloat(view, "alpha", 1, 0) -- 添加淡出效果 local animatorSet = AnimatorSet() animatorSet.playTogether(scaleXAnimator, scaleYAnimator, alphaAnimator) animatorSet.setDuration(800) -- 稍长的动画时间 animatorSet.setInterpolator(DecelerateInterpolator()) -- 动画结束后关闭硬件加速层 animatorSet.addListener({ onAnimationEnd = function() view.setLayerType(View.LAYER_TYPE_NONE, nil) end }) animatorSet.start() end function miaobian(d, r, t, y) local drawable = GradientDrawable() drawable.setShape(GradientDrawable.RECTANGLE) drawable.setColor(t) -- 直接传入 0xAARRGGBB 格式的颜色值 drawable.setCornerRadii({r, r, r, r, r, r, r, r}) drawable.setStroke(d, y) -- 直接传入 0xAARRGGBB 格式的颜色值 return drawable end function getShepeBackground(color, radiu) local drawable = luajava.new(GradientDrawable) drawable.setShape(GradientDrawable.RECTANGLE) drawable.setColor(color) drawable.setCornerRadii({radiu, radiu, radiu, radiu, radiu, radiu, radiu, radiu}) return drawable end local function getButtonBG() local selector = StateListDrawable() local state = android.R.attr.state_pressed selector.addState({state}, getVerticalBG("0xffffffff", 25)) selector.addState({-state}, getVerticalBG("0xffffffff", 25)) return selector end local function getLayoutParams() local LayoutParams = WindowManager.LayoutParams local layoutParams = luajava.new(LayoutParams) layoutParams.type = Build.VERSION.SDK_INT >= 26 and LayoutParams.TYPE_APPLICATION_OVERLAY or LayoutParams.TYPE_PHONE layoutParams.format = PixelFormat.RGBA_8888 layoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_ALT_FOCUSABLE_IM layoutParams.gravity = Gravity.CENTER -- 位置居中 layoutParams.width = LayoutParams.WRAP_CONTENT layoutParams.height = LayoutParams.WRAP_CONTENT return layoutParams end -- 新开一个线程来执行功能 local function threadStart(runnable) local newRun = luajava.createProxy("java.lang.Runnable", runnable) local subThread = luajava.newInstance("java.lang.Thread", newRun) subThread:start() end local function log(text, color, size) -- 这是控制台输出的 local tmp = loadlayout { TextView, text = os.date("%m-%d %H:%M:%S ") .. text, textSize = size or '10sp', textColor = color, gravity = "left", layout_width = "wrap_content", } console_list.addView(tmp) console.fullScroll(View.FOCUS_DOWN) end -- 切换菜单 local change_menu -- 背景列表 只有单色 自行添加 十六进制颜色 local background_list = { getShepeBackground("0xff161616", 15), } -- 开关 QingXu.switch = function(name, func1, func2) local sw sw = loadlayout({ MaterialSwitch; text = " "..name; textColor = "0xffB5CFE4"; padding = "5dp"; layout_width = "match"; layout_height = "match"; trackTintList=(ColorStateList({{android.R.attr.state_checked},{}},{0xffB5CFE4,0x28FFFFFF})), thumbTintList=(ColorStateList({{android.R.attr.state_checked},{-android.R.attr.state_checked}},{0xFFFFFFFF,0xFF4B484F})), onClick = function() local func = sw.checked and func1 or func2 threadStart({ run = function() pcall(func) end }) end }) local tmp = loadlayout({ LinearLayout, background = getButtonBG(), elevation="2dp", layout_width = 'fill_parent', layout_height = "40dp", layout_margin = "2dp", gravity = "center_vertical", padding = { "0dp", "0dp", "6dp", "0dp" }, }) local rest = loadlayout({ LinearLayout, layout_width = 'fill_parent', layout_height = "wrap_content", gravity = "center_vertical", }) tmp.addView(sw) rest.addView(tmp) return rest end QingXu.seek = function(name,bian,smin,smax,nows) local sw _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 sw = loadlayout({ Slider, thumbHeight='23dp', trackHeight='15dp', tickVisible=false, TrackActiveTintList=ColorStateList({{}},{"0xff".."000000"}), TrackInactiveTintList=ColorStateList({{}},{"0x55".."000000"}), ThumbTintList=ColorStateList({{}},{"0xff".."000000"}), layout_width = 'match_parent', id=luajava.newId(name.."seekbar"), valueFrom=smin, valueTo=smax, value=nows, stepSize=1.0, }) sw.addOnChangeListener({ onValueChange = function(slider, value, fromUser) _ENV[bian] = value end }) local tmp = loadlayout({ LinearLayout, background = getButtonBG(), layout_width = 'fill_parent', layout_height = "40dp", layout_marginLeft = '2dp', layout_marginRight = '2dp', layout_marginTop = '2dp', layout_marginBottom = '2dp', gravity = "center_vertical", padding = { "0dp", "0dp", "6dp", "0dp" },{TextView, padding={"5dp","10dp","0dp","10dp",}, gravity = "top", textColor='0xffB5CFE4', textSize='13sp', text = name, id = luajava.newId(names), layout_width = 'wrap_content', layout_marginLeft = "5dp",} }) local rest = loadlayout({ LinearLayout, layout_width = 'fill_parent', layout_height = "wrap_content", gravity = "center_vertical", }) tmp.addView(sw) rest.addView(tmp) return rest end -- 文字 QingXu.text = function(txt, color, size) local tmp = { TextView, text = txt or "未设置文字", textSize = size or "18sp", textColor = color or "#545454", layout_width = "wrap_content", } return loadlayout(tmp) end layoutTransition=LayoutTransition() function visi (tid , ttid) local tview = luajava.getIdView (tid) local ttview = luajava.getIdView (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 -- 初始化 colorvs 变量 local colorvs = {} boxes={} boxpic={} function visi(tid, ttid) local tview = luajava.getIdView(tid) local arrowView = luajava.getIdView(tid.."_arrow") -- 获取箭头图标视图 if not tview then return 0 end if tonumber(tostring(tview:getVisibility())) == 8.0 then tview.setVisibility(View.VISIBLE) -- 展开时旋转箭头向下90度 local anim = ObjectAnimator.ofFloat(arrowView, "rotation", 0, 90) anim.setDuration(300) anim.start() else tview.setVisibility(View.GONE) -- 收缩时旋转箭头回到0度 local anim = ObjectAnimator.ofFloat(arrowView, "rotation", 90, 0) anim.setDuration(300) anim.start() end end function QingXu.box(views) local tid = "box"..string.randomUUID(true) colorvs[#colorvs+1] = {"box",tid} local arrowIcon = { ImageView, id = luajava.newId(tid.."_arrow"), layout_width="wrap_content", layout_height="wrap_content", src = "/sdcard/heir.png", ColorFilter = "0xffB5CFE4" } local ttid = tid.."6" local firadio = { LinearLayout, layout_width='fill_parent', background = getShepeBackground(0xFFFFFFFF, 25), elevation="2dp", layout_height="wrap_content", layout_margin="4dp", orientation="vertical", LayoutTransition = LayoutTransition() } if type(views[1]) == "string" or type(views[1]) == "number" then firadio[#firadio + 1] = { LinearLayout, layout_width='fill_parent', layout_height="40dp", gravity="center_vertical", onClick = function() visi(tid,ttid) end, { LinearLayout, layout_width='fill_parent', layout_height="36dp", layout_marginRight="4dp", layout_marginLeft="4dp", gravity="center_vertical", background = getShepeBackground(0xFFFFFFFF, 15), { TextView, gravity="center_vertical", text=views[1], textColor="0xffB5CFE4", textSize="15sp", layout_weight=1, layout_marginLeft="15dp", layout_marginRight="20dp", layout_width='fill_parent', }, { LinearLayout, padding={"0dp","0dp","15dp","0dp"}, layout_width="30dp", layout_height="30dp", gravity="center", arrowIcon } } } else gg.alert("QingXu.box 的 table 内第一个元素必须是 string") os.exit() end local contentLayout = { LinearLayout, layout_marginLeft="10dp", layout_marginRight="10dp", layout_marginBottom="10dp", orientation="vertical", visibility="gone", id=luajava.newId(tid), layout_width='fill_parent', } for i=2,#views do table.insert(contentLayout, views[i]) end local finalLayout = loadlayout(firadio) local contentView = loadlayout(contentLayout) finalLayout.addView(contentView) boxes[tid] = contentView return finalLayout end QingXu.checkbox = function(views) if #views == 0 then return end -- 创建主垂直布局 local mainLayout = loadlayout({ LinearLayout, layout_width = 'fill_parent', layout_height = 'wrap_content', orientation = 'vertical' }) -- 创建横向滑动布局 local scrollView = loadlayout({ HorizontalScrollView, layout_width = 'fill_parent', layout_height = 'wrap_content', { LinearLayout, layout_width = 'wrap_content', layout_height = 'wrap_content', orientation = 'vertical', id = 'rows_container' } }) mainLayout.addView(scrollView) -- 计算每行最多3个复选框 local buttonsPerRow = 4 local currentRow = nil local buttonsInCurrentRow = 0 for i, v in ipairs(views) do -- 每行开始时创建新的水平布局 if buttonsInCurrentRow % buttonsPerRow == 0 then currentRow = loadlayout({ LinearLayout, layout_width = 'wrap_content', layout_height = 'wrap_content', orientation = 'horizontal', id = 'row_'..math.ceil(i/buttonsPerRow) }) rows_container.addView(currentRow) end local func1, func2 = v[2], v[3] local sw = loadlayout({ CheckBox; layout_width = 'match_parent', layout_height = '28dp', buttonTintList=ColorStateList({{android.R.attr.state_checked},{-android.R.attr.state_checked}},{0xffB5CFE4,0xffB5CFE4},{0xffB5CFE4,0xffB5CFE4}), onClick = function() local func = sw.checked and func1 or func2 if func then threadStart({ run = function() pcall(func) end }) end end }) local buju = loadlayout({ LinearLayout, layout_width = '70dp', layout_height = "70dp", { CardView; layout_width='match_parent', layout_height="match_parent", layout_margin = "5dp", elevation = "2dp"; background = getVerticalBG(0xffffffff,15,5,0xffffffff), {RelativeLayout, { ImageView, padding="10dp", layout_margin="2dp", layout_width='match_parent', layout_height="match_parent", src = views[i]["图片"], }, { TextView, layout_width = "wrap", layout_height = "wrap", layout_alignParentBottom="true", layout_alignParentRight="true", text = v[1], textSize = "10sp", textColor = "0xffB5CFE4"; }, sw } } }) -- 添加到当前行 currentRow.addView(buju) buttonsInCurrentRow = buttonsInCurrentRow + 1 end return mainLayout end QingXu.checkbox1 = function(views) if #views == 0 then return end -- 创建主垂直布局 local mainLayout = loadlayout({ LinearLayout, layout_width = 'fill_parent', layout_height = 'wrap_content', orientation = 'vertical' }) -- 创建横向滑动布局 local scrollView = loadlayout({ HorizontalScrollView, layout_width = 'fill_parent', layout_height = 'wrap_content', { LinearLayout, layout_width = 'wrap_content', layout_height = 'wrap_content', orientation = 'vertical', id = 'rows_container' } }) mainLayout.addView(scrollView) -- 计算每行最多3个复选框 local buttonsPerRow = 3 local currentRow = nil local buttonsInCurrentRow = 0 for i, v in ipairs(views) do -- 每行开始时创建新的水平布局 if buttonsInCurrentRow % buttonsPerRow == 0 then currentRow = loadlayout({ LinearLayout, layout_width = 'wrap_content', layout_height = 'wrap_content', orientation = 'horizontal', id = 'row_'..math.ceil(i/buttonsPerRow) }) rows_container.addView(currentRow) end local func1, func2 = v[2], v[3] local sw = loadlayout({ CheckBox; layout_width = 'wrap_content', layout_height = '32dp', buttonTintList=ColorStateList({{android.R.attr.state_checked},{-android.R.attr.state_checked}},{0xFf000000,0xff000000},{0xff000000,0xff000000}), text = v[1], textColor = "#000000"; onClick = function(view) local isChecked = view.isChecked() -- print("复选框"..i.."状态:", isChecked) threadStart({ run = function() if isChecked and v[2] then pcall(v[2]) -- 选中状态回调 elseif not isChecked and v[3] then pcall(v[3]) -- 取消选中状态回调 end end }) end }) local buju = loadlayout({ LinearLayout, layout_width = 'wrap_content', layout_height = "wrap_content", layout_margin = "3dp", layout_weight = "1", sw }) -- 添加到当前行 currentRow.addView(buju) buttonsInCurrentRow = buttonsInCurrentRow + 1 end return mainLayout end function QingXu.image(text) local tmp = { LinearLayout, layout_height="wrap_content", layout_width="fill_parent", gravity="center", { CardView; layout_height="160dp"; radius="10dp"; backgroundColor="#DFDBE6EF"; layout_width="260dp"; { ImageView; src=text; layout_height="match_parent"; layout_width="match_parent"; }; }; } return loadlayout(tmp) end QingXu.button = function(name,func) local btn1 = { RelativeLayout, layout_width = "match", layout_height = "35dp", layout_margin = "2dp", layout_marginLeft = "3dp", -- 左侧外边距 5dp layout_marginRight = "3dp", -- 右侧外边距 5dp background = getButtonBG(), -- TextView(靠左,距离 RelativeLayout 左侧 5dp) { TextView, text = name, textColor = "0xffB5CFE4", layout_margin = "5dp", layout_marginLeft = "14dp", layout_width = "wrap", layout_height = "match", gravity = "center", layout_alignParentLeft = true, -- 固定在左侧 }, -- ImageView(靠右,距离 RelativeLayout 右侧 5dp) { ImageView, layout_width = "20dp", layout_height = "20dp", layout_margin = "5dp", ColorFilter = "0xffB5CFE4", src = "/storage/emulated/0/樱泽墨的elgg/图片/qing", layout_alignParentRight = true, -- 固定在右侧 layout_centerVertical = true, -- 垂直居中 }, } local btn1 = loadlayout(btn1) btn1.onClick = function() if eooeis == 1 then eooeis = 2 else threadStart({ run = function() pcall(func) end, }) end end return btn1 end QingXu.menu = function(icon, title, menu) local layout = { -- 功能部分 LinearLayout; layout_height = "wrap_content"; layout_width = "wrap_content"; id = "windowst"; { CardView; layout_height = "wrap_content"; layout_width = "wrap_content"; id = "windows"; elevation = "10dp"; {RelativeLayout, layout_height = UI高度; layout_width = UI宽度; background=getVerticalBG(0xDFF3F7FA,25,5,0xDFF3F7FA), id="ooo", { -- 功能部分 LinearLayout; layout_height = "match_parent"; layout_width = "100dp"; orientation = "vertical"; layout_margin = "5dp"; gravity = "center", background=getVerticalBG(0xffffffff,15,5,0xffffffff), { CircleImageView, layout_width = "60dp", src = "/storage/emulated/0/樱泽墨的elgg/图片/侧边", layout_height = "60dp", }, { TextView, layout_width = "match", layout_height = "30dp", gravity = "center", text = "樱泽墨", textColor="0xFFFFC74C", }, { -- 侧边栏 菜单按钮 ScrollView; layout_height = "match_parent"; layout_width = "match_parent"; { LinearLayout; layout_height = "wrap"; gravity = "center"; layout_width = "match_parent"; orientation = "vertical"; id = "menu_list", }; }; }; -- 下面是按钮,用代码添加 { LinearLayout; layout_height = "match_parent"; background = getShepeBackground(0xDFF3F7FA, 0), layout_marginLeft = "110dp"; id = "main", layout_width = "match_parent"; orientation = "vertical"; { LinearLayout, layout_height = "30dp", layout_width = "match", {RelativeLayout, layout_width = "match", layout_height = "30dp", { TextView, id = "current_page_title", -- 添加ID layout_width = "80dp", layout_height = "30dp", layout_margin = "5dp", text = "", -- 默认文本 textColor = "#B5CFE4", textSize="18sp", layout_marginLeft = "20dp", }, { ImageView, layout_width = "30dp", layout_height = "30dp", layout_margin = "5dp", src = "/storage/emulated/0/樱泽墨的elgg/图片/yc", ColorFilter = "0xFFB5CFE4", id = 'lessen', layout_alignParentRight="true", layout_marginRight = "40dp", }, { ImageView, layout_width = "30dp", layout_height = "30dp", layout_margin = "5dp", src = "/storage/emulated/0/樱泽墨的elgg/图片/exit", id = 'window_exit', ColorFilter = "0xFFB5CFE4", layout_alignParentRight="true", }, }, }, }; { ImageView, src = "/storage/emulated/0/樱泽墨的elgg/图片/拖动", id = "ydd", layout_height="25dp"; layout_width = "25dp", layout_alignParentBottom="true", layout_alignParentRight="true", clickable = true, focusable = true, }, }, }; }; local ball = { LinearLayout; layout_height = "fill", layout_width = "fill", { LinearLayout; layout_width = "58dp"; { ImageView, layout_width = "53dp", id = "suspended_ball", --icon = icon, src = icon, --background = icon, layout_height = "53dp", } } } ball = loadlayout(ball) local window_layout = loadlayout(layout) local menu_layout = {} local icon_list = {} -- 由于写布局的id会写出变量,这边就直接写个列表来记录菜单的图标 (为了切换菜单 改变颜色) -- 第一步 添加侧边按钮 for i, v in ipairs(menu) do local item = loadlayout { LinearLayout, layout_width = "match_parent", -- 修正:使用match_parent替代match layout_margin = "2dp", layout_height = "wrap", background = getVerticalBG(0xffffffff,15,5,0xffffffff), gravity = "center", onClick = function() change_menu(i) end, { ImageView, layout_width = "30dp", layout_height = "30dp", layout_margin = "3dp", src=v.图片 -- 使用菜单项的图标或默认图标 }, { LinearLayout, layout_width = "match_parent", layout_height = "wrap", layout_margin = "1dp", orientation = "vertical", { TextView, text = v.name, textColor = "0xff010101", textSize = "12sp", layout_width = "wrap", layout_height = "wrap", }, { TextView, text = v.desc or "OFk", -- 可选的描述文本 textColor = "0xff515151", textSize = "8sp", layout_width = "wrap", layout_height = "wrap", }, } } local func_layout = { -- 这个是每个菜单的布局 LinearLayout; layout_height = "match_parent"; layout_width = "match_parent"; orientation = "vertical"; { ScrollView; fillViewport = "true"; layout_width = "match_parent"; layout_height = "match_parent"; { LinearLayout; layout_width = "match_parent"; layout_marginLeft = "5dp"; id = "layout_func" .. i; layout_marginRight = "5dp"; gravity = "center_horizontal"; orientation = "vertical"; }; }; } table.insert(icon_list,item) menu_layout[i] = loadlayout(func_layout) menu_list.addView(item) -- 给右侧菜单加功能 for _, k in ipairs(v) do _ENV['layout_func' .. i].addView(k) end end windows.setBackground(background_list[1]) -- 设置背景 local mainLayoutParams = getLayoutParams() do local last change_menu = function(i) if last then icon_list[last].setBackground(miaobian(0,15,"0x00CCE8EA","0xDFDBE6EF")) main.removeView(menu_layout[last]) end icon_list[i].setBackground(miaobian(5,15,"0xffD1E5F5","0xAADBE6EF")) last = i main.addView(menu_layout[i]) zm_animation(menu_layout[i]) current_page_title.setText(menu[i].name) end change_menu(1) end -- 退出按钮 window_exit.onClick = function() HP.invoke(HotPoint,nil) window.removeView(window_layout, mainLayoutParams) Looper.myLooper().quitSafely() end function ydd.onTouch(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 lllayoutParams = ooo.getLayoutParams() xx = lllayoutParams.width yy = lllayoutParams.height -- 定义最小和最大尺寸 minWidth = 100 -- 最小宽度 minHeight = 100 -- 最小高度 maxWidth = 1500 -- 最大宽度 maxHeight = 1200 -- 最大高度 elseif Action == MotionEvent.ACTION_MOVE then isMove = true -- 计算新尺寸,确保在最小和最大范围内 local newWidth = math.min(maxWidth, math.max(minWidth, tonumber(xx) + (event.getRawX() - RawX))) local newHeight = math.min(maxHeight, math.max(minHeight, tonumber(yy) + (event.getRawY() - RawY))) -- 更新布局参数 lllayoutParams.width = newWidth lllayoutParams.height = newHeight -- 更新窗口布局 ooo.setLayoutParams(lllayoutParams) window.updateViewLayout({lessen, window_layout, ball}, mainLayoutParams) elseif Action == MotionEvent.ACTION_UP then -- 如果需要可以在抬起时做一些处理 end return true end do -- 这是创建两个悬浮窗缩小放大的按钮, 还有移动事件 local t = { {suspended_ball, ball, window_layout}, {lessen, window_layout, ball} } local tt = { {windows, window_layout}, {suspended_ball, ball} } for i, v in ipairs(t) do v[1].onClick = function() -- 悬浮球点击 if v[1] == suspended_ball then zoom_animation(windows) zoom_animation(windowst) window.removeView(v[2], mainLayoutParams) windows.post(function() local viewRootImpl = windows.getViewRootImpl() windows.setBackgroundDrawable( HiddenApiBypass.getDeclaredMethod(ViewRootImpl, "createBackgroundBlurDrawable", {}) .invoke(viewRootImpl, {}) .setBlurRadius(50) .setCornerRadius(35) ) end) window.addView(v[3], mainLayoutParams) elseif v[1] == lessen then -- 延迟执行视图切换 zom_animation(windows) zoot_animation(windowst) Handler().postDelayed(function() window.removeView(v[2], mainLayoutParams) window.addView(v[3], mainLayoutParams) end, 600) -- 600ms是动画持续时间 end end local x, y, RawX, RawY = 0, 0, 0, 0 tt[i][1].onTouch = function (_, event) local Action = event.getAction() if Action == MotionEvent.ACTION_DOWN then RawX, RawY = event.getRawX(), event.getRawY() x, y = mainLayoutParams.x, mainLayoutParams.y elseif Action == MotionEvent.ACTION_MOVE then mainLayoutParams.x = tonumber(x) + (event.getRawX() - RawX) mainLayoutParams.y = tonumber(y) + (event.getRawY() - RawY) window.updateViewLayout(tt[i][2], mainLayoutParams) end end end end Handler(Looper.getMainLooper()) Looper.prepare() window.addView(ball, mainLayoutParams) applyBestBlurEffect(windows, 0) Looper.loop() 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end function fmh() -- 1. 仅查询1次libUE4.so内存范围(缓存结果,减少IO耗时) local ue4Ranges = gg.getRangesList("libUE4.so") if not ue4Ranges or #ue4Ranges < 1 then gg.toast("未找到libUE4.so,脚本终止") return end local ue4Start = ue4Ranges[1]["start"] -- 缓存基地址,后续直接复用 -- 2. 定义所有内存偏移量(按原脚本顺序整理,避免手动计算) local offsets = { -- 前7个非连续偏移(对应原t[1]-t[7]) -- 0x3D504F4, 0x3D504AC, 0x3D502CC, 0x3D502A0, 0x3D5023C, 0x3D5021C, 0x3D501AC, 0x3D50178, 0x3D50110, 0x3D500B0, 0x3D5006C, 0x3D50050, 0x3D50010, -- 后续525个连续偏移(从0x54357CC开始,每步+4,对应原t[8]-t[532]) } -- 循环生成连续偏移(替代手动写525行) local startOffset = 0x54357CC for i = 1, 525 do table.insert(offsets, startOffset + (i-1)*4) end -- 3. 循环生成地址数组t和冻结列表(1次循环完成,秒级执行) local t = {} -- 地址数组 local freezeItems = {} -- 冻结项列表 for idx, offset in ipairs(offsets) do t[idx] = ue4Start + offset -- 计算最终内存地址 -- 生成冻结项(flags=4=DWORD类型,value=17024,冻结启用) freezeItems[idx] = { address = t[idx], flags = 4, value = 17024, freeze = true } end -- 4. 批量添加冻结项(1次调用完成,避免532次重复调用) gg.addListItems(freezeItems) gg.toast("脚本执行完成!") gg.clearList() end function mb() gg.playMusic("/storage/emulated/0/樱泽墨的elgg/音效/音效") gg.clearList() end UI高度 = 560 UI宽度 = 750 --getPic('http://wp.qimoyanzheng.com/static/logo.png') local icon = '/storage/emulated/0/樱泽墨的elgg/图片/ls7' -- 悬浮窗图标, 写链接 local menu = { { name = '主页公告', desc = '要读取游戏先看我', 图片 = '/storage/emulated/0/樱泽墨的elgg/图片/主页', QingXu.text('','0xffD3D5E1',"12sp"), QingXu.image('/storage/emulated/0/樱泽墨的elgg/图片/壁纸'), QingXu.text('','0xffD3D5E1',"12sp"), QingXu.button('选择进程',function() gg.setProcessX() mk = gg.getRangesList("libUE4.so:bss", "Cb")[1].start D=gg.TYPE_DWORD E=gg.TYPE_DOUBLE F=gg.TYPE_FLOAT W=gg.TYPE_WORD B=gg.TYPE_BYTE X=gg.TYPE_XOR Q=gg.TYPE_QWORD function 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 getvalue(addr,flags) local asbd={} asbd[1]={} asbd[1].address=addr asbd[1].flags=flags tmp=gg.getValues(asbd) return tmp[1].value end function iceEdit(addr,type,value) local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].value=value t[1].freeze=true gg.addListItems(t) end function breakice(addr,type) local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].freeze=false gg.addListItems(t) end function getMapRanges() local ranges = {} local r_list = {} local _index = 1 local library = gg.getRangesList('^/data/*.so*$') for index, map in ipairs(library) do if map.type:sub(2, 2) == "w" or map.type == "r-xp" then local name = map.internalName local state = map.state local count = map.count if not r_list[name] then r_list[name] = {} end if not r_list[name][state] then r_list[name][state] = {0, _index} end r_list[name][state][1] = r_list[name][state][1] + 1 r_list[name][state][2] = _index map.count = r_list[name][state][1] table.insert(ranges, map) _index = _index + 1 end end return ranges, r_list end function staticstart(map) local ranges = getMapRanges() if not map[3] then map[3] = 1 end for index, value in ipairs(ranges) do local name = value.internalName:gsub("^.*/", "") if map[1] == name and map[2] == value.state and map[3] == value.count then return value.start end end end function xing(start, offset) local flags = {[true] = 32, [false] = 4} local ti64 = gg.getTargetInfo().x64 local type = flags[ti64] local addr = 0 if start then addr = start + offset[1] for index = 2, #offset do local pointer = gg.getValues({{address = addr, flags = type}}) if not ti64 then pointer[1].value = pointer[1].value & 0xFFFFFFFF end addr = pointer[1].value + offset[index] end end return addr end function xingshen() ue4=staticstart({"libUE4.so:bss", "Cb", 1}) nmsl=xing(ue4,{0x560270,0x30,0x4B8,0x2E08,0x3E8,0x0}) end function bb(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 8 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function tk(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 9 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function tf(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 2 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function mz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 3 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function yz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 12 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function mz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 4 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function yf(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 5 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function kz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 6 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function xz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 7 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function hj(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 10 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function sb(kjsm) xingshen() for qckjsm=0x0,0x999,0x3c do if getvalue(nmsl+0x8+qckjsm,4) == 10 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function xingshen() ue4=staticstart({"libUE4.so:bss", "Cb", 1}) nmsl=xing(ue4,{0x560270,0x30,0x4B8,0x2E08,0x3E8,0x0}) end function lx(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 1 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function tf(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 2 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function ts(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 3 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function mz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 4 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function yf(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 5 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function hj(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 24 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function nk(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 25 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function kz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 6 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function xz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 7 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function bb(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 8 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function tk(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 9 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function hj(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 10 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end function yz(kjsm) xingshen() for qckjsm=0x0,0x999,0x3C do if getvalue(nmsl+0x8+qckjsm,4) == 12 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end 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 function addListltems(address,flags,value,freeze) t={} t[1]={} t[1].address=address t[1].flags=flags t[1].value=value t[1].freeze=true gg.addListItems(t) end function RUI(address) return gg.getValues({ { ["address"] = address, flags = 32 } })[1]["value"] end function readD(address) return gg.getValues({ { ["address"] = address, flags = 4 } })[1]["value"] end function readF(address) return gg.getValues({ { ["address"] = address, flags = 16 } })[1]["value"] end function gym(A, B) local mk = gg.getRangesList("libUE4.so:bss", "Cb")[1].start local basePtr = RUI(RUI(RUI(RUI(RUI(mk + 0xDEFE8) + 0x648) + 0x50) + 0x38) + 0x38) for ZYRUI = 0xCA58, 0xE3C0, 0x18 do local addr = RUI(basePtr + ZYRUI) if readD(addr + 0x58) == A then setvalue(addr + 0x18, 4, B) break end end yf(A) end local function SY(address) local ret = gg.getValues({{address=address,flags=gg.TYPE_QWORD}}) return ret and ret[1] and ret[1].value or nil end function setvalue(address, flags, value) gg.setValues({{address=address,flags=flags,value=value}}) end local function readD(a) local ret = gg.getValues({{address=a,flags=4}}) return ret and ret[1] and ret[1].value or nil end function cx88(yp,sc,qk,wb,dj,qt,bj1,bj2,bj3,bj4,bj5,bj6,bj7) local resetAddrs = {} -- 仅存储 a1 地址 local modifyLogs = {} -- 1. 基地址校验 local UE4Ranges = gg.getRangesList("libUE4.so:bss") if not UE4Ranges or #UE4Ranges == 0 then print("错误:未找到 libUE4.so:bss 内存区域") return end UE4 = UE4Ranges[1].start print("成功获取基地址:" .. string.format("0x%X", UE4)) -- 2. 读取 zhus 地址 + 名称映射 local zhupy1=SY(SY(SY(SY(SY(SY(mk+0x560270)+0x30)+0x4B8)+0x2588)+0x4a8)+0x7A0) local zhupy2=SY(SY(SY(SY(SY(SY(mk+0x560270)+0x30)+0x4B8)+0x2588)+0x4e0)+0x7A0) local zhupy3=SY(SY(SY(SY(SY(SY(mk+0x560270)+0x30)+0x4B8)+0x2588)+0x518)+0x7A0) local zhupy=SY(SY(SY(SY(SY(SY(mk+0x560270)+0x30)+0x4B8)+0x2588)+0x550)+0x7A0) zhus = {zhupy, zhupy1, zhupy2,zhupy3} zhusNames = {"zhupy", "zhupy1", "zhupy2","zhupy3"} a = {0x11C, 0x4, 0x2C, 0x54, 0x7C, 0xA4, 0x194} -- 打印基础信息 print("zhus 基础信息:") for i = 1, #zhus do print(zhus[i] and (zhusNames[i] .. "(索引" .. i .. ")= 0x%X"):format(zhus[i]) or (zhusNames[i] .. "(索引" .. i .. ")= 读取失败")) end print("目标匹配值 yp = " .. yp .. "(十进制)") print("开始校验:修改 zhus[i[ia[1] 或 zhus[i[ia[7] == yp 对应的项...\n") -- 记录匹配成功的项 local matchedNames = {} local targetValue = sc local targetFlags = 4 local matchedCount = 0 for i = 1, #zhus do if zhus[i] then -- 双地址校验 local calcAddr1 = zhus[i] + a[1] -- a1 核心地址 local currentValue1 = readD(calcAddr1) local calcAddr7 = zhus[i] + a[7] local currentValue7 = readD(calcAddr7) -- 打印校验状态 print(("校验 %s:"):format(zhusNames[i])) print((" - zhus[i[ia[1] 地址 0x%X,当前值 = %s"):format(calcAddr1, currentValue1 ~= nil and currentValue1 or "读取失败")) print((" - zhus[i[ia[7] 地址 0x%X,当前值 = %s"):format(calcAddr7, currentValue7 ~= nil and currentValue7 or "读取失败")) -- 匹配逻辑(任一条件满足) local matchType = "" if currentValue1 == yp then matchType = "zhus[i[ia[1]" elseif currentValue7 == yp then matchType = "zhus[i[ia[7]" end if matchType ~= "" then print(("🔍 找到匹配项:%s(%s = %d == yp = %d)"):format(zhusNames[i], matchType, yp, yp)) -- 执行原修改逻辑(仅记录 a1 地址) setvalue(calcAddr1, targetFlags, targetValue) table.insert(resetAddrs, {addr=calcAddr1, flag=targetFlags, name=zhusNames[i].."_a1"}) -- 仅记录 a1 地址 setvalue(zhus[i]+a[2], 4, qk) setvalue(zhus[i]+a[3], 4, wb) setvalue(zhus[i]+a[4], 4, dj) setvalue(zhus[i]+a[5], 4, qt) setvalue(zhus[i]+a[7], 4, yp) -- 标记匹配地址修改 local bjmh = zhus[i] + a[6] local bjmhValue = readD(bjmh) if bjmhValue then local bjMap = {[203001]=bj1, [203002]=bj2, [203003]=bj3, [203014]=bj4, [203004]=bj5, [203015]=bj6, [203005]=bj7} if bjMap[bjmhValue] then setvalue(bjmh, 4, bjMap[bjmhValue]) end end -- 日志记录 matchedCount = matchedCount + 1 table.insert(matchedNames, zhusNames[i] .. "(匹配" .. matchType .. ")") table.insert(modifyLogs, ("%s:修改 a1 地址 0x%X"):format(zhusNames[i], calcAddr1)) else print("❌ 无匹配条件,跳过不修改\n") end else print(("❌ %s 地址读取失败,跳过不修改\n"):format(zhusNames[i])) end end -- 统一等待2秒后,仅将 a1 地址改0 if #resetAddrs > 0 then print("\n===== 同步改0 =====") print("已记录 " .. #resetAddrs .. " 个 a1 地址,等待2秒...") gg.sleep(2000) -- 批量改0(仅 a1 地址) local resetValues = {} for _, item in ipairs(resetAddrs) do table.insert(resetValues, {address=item.addr, flags=item.flag, value=0}) print(("✅ %s(地址0x%X)已改0"):format(item.name, item.addr)) end gg.setValues(resetValues) gg.alert("所有 a1 地址已同步改0!") else print("\n❌ 无需要改0的 a1 地址,跳过同步操作") end -- 结果总结 print("\n===== 执行结果 =====") print("总匹配成功:" .. matchedCount .. " 项") if #matchedNames > 0 then print("匹配项列表:" .. table.concat(matchedNames, "、")) end if #modifyLogs > 0 then print("修改记录:") for _, log in ipairs(modifyLogs) do print(" - " .. log) end end end mb () 弹窗通知("正在读取你的数据","depart !") end), QingXu.button('清除冻结',function() end), QingXu.button('框架防闪',function() local t = {"libanogs.so:bss", "Cb"} local tt = {0x430} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 256, freeze = true}}) -- 发布频道@EYZGQ local t = {"libanogs.so:bss", "Cb"} local tt = {0x550} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 256, freeze = true}}) -- 发布频道@EYZGQ local t = {"libanogs.so:bss", "Cb"} local tt = {0x300} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 4096, freeze = true}})--如果卡屏 end), }, { name = '衣服美化', desc = '自身人物套装美化', 图片 = '/storage/emulated/0/樱泽墨的elgg/图片/衣服', QingXu.box({ "无一秒套装", QingXu.checkbox1({{ '明日香', function() gym(403006, 1406387) tf(1403103) ts(1407369) lx(1407373) gg.toast("执行美化") end}, {'林波丽', function() gym(403061,1406386) tf(1403102) end}, {'真理', function() gym(403079, 1406386) tf(1403102) end}, {'冥界旅行', function() gym(403031,1405623) tf(0) end}, {'木乃伊', function() gym(403198, 1400687) tf(0) end}, {'蓝色木乃伊', function() gym(1400135,1406891) tf(1410436) end}, {'黄沙圣体', function() gym(403007,402902) end}, {'木偶', function() yf(402200) kz(0) xz(1404423) tf(40605011) ts(1402218) mz(0) yz(1404198) lx(402296) bb(0) tk(0) kj(0) end}, {'风灵伽尔', function() gym(403012,1407366) --tf(1403103) tf(1407372) lx(1407373) yz(1404198)--眼罩 gg.toast("执行美化") end}, {'烈焰骨神', function() gym(403070,1407277) yf(403070) tf(1410668) gg.toast("执行美化") end}, {'女仆', function() gym(403071,1407695) tf(40605012) yz(1404198) ts(1402223) mz(1400165) gg.toast("执行美化") end}, }), }), QingXu.box({ "混搭区", QingXu.checkbox1({ {'黄金风衣', function() lx(1400779) tf(1410436) gym(1400135,1406891) gg.toast("执行美化") end}, {'废墟猎手', function() tf(1410480) --头发 yf(1405163) gg.toast("已更换皮肤") gg.toast("执行美化") end}, {'黄沙鱼混搭', function() tf(1410085) --头发 kz(1404050) --裤子 yf(1400708) gg.toast("执行美化") end}, {'紧身衣', function() yf(1407211) tf(40605012) gg.toast("执行美化") end}, {'暗金舞者', function() yf(1404133) tf(40604012) kz(1404160) xz(1404051) ts(1402218) gg.toast("执行美化") end}, {'水银刺客', function() yf(403191) tf(40604012) kz(404001) xz(1400022) ts(1402223) gg.toast("执行美化") end}, {'甜蜜菠萝', function() yf(1404153) tf(1404367) kz(1404152) xz(1404151) bb(1501003211) gg.toast("执行美化") end}, {'方天旅人', function() yf(1407453) tf(1410085) yz(1404198) gg.toast("执行美化") end}, {'指挥官', function() yf(1400101) kz(1400122) tf(40605012) ts(1402218) gg.toast("执行美化") end}, {'望月', function() yf(1405163) tf(40605012) ts(1402223) yz(1404198) xz(1404423) gg.toast("执行美化") end}, {'七安混搭', function() yf(1404243) tf(0) ts(1502003014) yz(1403326) mz(1403028) kz(1404230) xz(1404423) gg.toast("执行美化") end}, {'性感混搭', function() tf(40605012) ts(1402223) yz(1404198) mz(1400165) yf(1405040) hj(452001) gg.toast("执行美化") end}, {'葡萄', function() tf(40605012) yz(1404198) mz(1400165) kz(1400052) yf(1400051) bb(1501003554) tk(0) gg.toast("执行美化") end}, {'暗不暗', function() yf(1400138) kz(1400052) xz(405004) mz(1400165) yz(1403326) mz(1400426) bb(1501003261) tf(40604012) gg.toast("执行美化") end}, {'小咲', function() tf(40605012) ts(1402218) mz(1400165) yf(1405238) kz(1404160) bb(1501003050) yz(1404198) hj(452001) end}, {'浪漫天命', function() tf(40605012) ts(1402218) lx(401993) mz(1400165) yf(1404133) kz(1404160) xz(1404051) yz(1403326) end}, {'逆光混搭', function() tf(40604012) ts(1402223) lx(401993) mz(1404198) yf(403177) kz(1404050) xz(1404423) yz(1404198) bb(1501003554)end}, {'江小渔混搭', function() yf(1405299) ts(1402218) tf(40605012) yz(1404198) mz(1404423) kz(0) end}, {'小恒混搭', function() yf(1404053) ts(1402223) tf(1410085) lx(401993) yz(1404198) mz(1400165) kz(1404152) xz(1404423) bb(0) end}, {'小黄鸭', function() yf(1405959) ts(1404160) tf(1410480) yz(1410480) mz(1404423) kz(1404160) bb(1501003243) end}, {'战队服', function() yf(1400708) ts(1404160) tf(1410480) yz(1410480) mz(1404423) kz(1404160) end}, {'小丑鱼', function() yf(1405238) ts(1402218) tf(40605012) yz(1403326) mz(1400165) kz(1404160) end}, {'缘子', function() bb(1501003487) mz(1400168) tf(40605011) ts(1402218) tk(0) yf(404243) kz(1404152) end}, {'秋天', function() tf(40604012) ts(1402218) yz(1404198) mz(1400165) yf(1400051) kz(1400122) xz(1400127) bb(1501003554)end}, {'小酱', function() yf(1404127) ts(1410640) yz(1404198) mz(1400165) kz(1404160) bb(1501003050) hj(452001)end}, {'诀别', function() tf(40605012) xz(1404423) yz(1404198) yf(1405207) ts(1402223) end}, }), }), QingXu.box({ "头发菜单", QingXu.checkbox1({ {'白色双马尾', function() tf(40605012) gg.toast("执行美化") end}, {'背头发型', function() tf(40605011) gg.toast("执行美化") end}, {'武魂宗师', function() tf(1410299) gg.toast("执行美化") end}, {'黄发', function() tf(1410480) gg.toast("执行美化") end}, {'胖达萝娘', function() tf(1410567) gg.toast("执行美化") end}, }) }),--M3组件 QingXu.box({ "头饰菜单", QingXu.checkbox1({ {'小恶魔角', function() ts(1410773) gg.toast("执行美化") end}, {'天使之翼', function() ts(1402223) gg.toast("执行美化") end}, {'神羽恋人', function() ts(1410647) gg.toast("执行美化") end}, }), }),--M3组件 QingXu.box({ "面部菜单", QingXu.checkbox1({ {'红眼罩', function() yz(1404198) gg.toast("执行美化") end}, {'幻境骇客', function() yz(1403326) gg.toast("执行美化") end}, {'暗烬天使', function() yz(1410646) gg.toast("执行美化") end}, {'曙光芙洛拉', function() yz(1403655) gg.toast("执行美化") end}, {'机混忍者', function() mz(1403660) gg.toast("执行美化") end}, {'愚人小丑', function() mz(1403028) gg.toast("执行美化") end}, {'豹纹口罩', function() mz(474031) gg.toast("执行美化") end}, {'小丑鼻子', function() mz(1400165) gg.toast("执行美化") end}, }), }),--M3组件 QingXu.box({ "衣服菜单", QingXu.checkbox1({ {'emoji', function() yf(1404288) gg.toast("执行美化") end}, {'ducait卫衣', function() yf(1404411) gg.toast("执行美化") end}, {'甜蜜菠萝', function() yf(1404153) gg.toast("执行美化") end}, {'暗金舞者', function() yf(1404133) gg.toast("执行美化") end}, {'废墟猎手', function() yf(1405163) gg.toast("执行美化") end}, {'元气海域', function() yf(1405229) gg.toast("执行美化") end}, {'性感胖达', function() yf(1405040) gg.toast("执行美化") end}, {'无间猫', function() yf(1405090) gg.toast("执行美化") end}, {'指挥官', function() yf(1400101) gg.toast("执行美化") end}, {'黑鲨', function() yf(1400288) gg.toast("执行美化") end}, {'小黄鸭', function() yf(1405959) gg.toast("执行美化") end}, {'小丑鱼', function() yf(1405238) gg.toast("执行美化") end}, }), }),--M3组件 QingXu.box({ "裤子菜单", QingXu.checkbox1({ {'暗金舞者', function() kz(1403660) gg.toast("执行美化") end}, {'幽灵战队', function() kz(1404201) gg.toast("执行美化") end}, {'浪漫天命', function() kz(1404160) gg.toast("执行美化") end}, {'甜蜜菠萝', function() kz(1404152) gg.toast("执行美化") end}, }), }),--M3组件 }, { name = '头盔背包', desc = '头盔背包脸型等区域', 图片 = '/storage/emulated/0/樱泽墨的elgg/图片/头盔', QingXu.box({ "头盔菜单", QingXu.checkbox1({ {'隐藏', function() tk(0) end}, {'刺头', function() tk(1502003014) end}, {'冰霜', function() tk(1502003023) end}, {'胖达', function() tk(1502003027) end}, }), }),--M3组件 QingXu.box({ "背包菜单", QingXu.checkbox1({ {'隐藏背包', function() bb(0) end}, {'璃光剪影', function() bb(1501003688)end}, {'心动魔法', function() bb(1501003619)end}, {'朋克犀牛', function() bb(1501003211) end}, {'致命凝视', function() bb(1501003487) end}, {'阿迪达斯', function() bb(1501003303) end}, {'帝皇肖像', function() bb(1501003640)end}, {'汉堡背包', function() bb(1501003640) end}, {'emoji', function() bb(1501003229) end}, {'小黄鸭', function() bb(1501003243)end}, {'小猫宠物', function() bb(1501003050) end}, {'可爱天使', function() bb(1501003041)end}, {'身法背包', function()bb(1501000042)end}, {'麋鹿背包', function() bb(1501003036) end}, {'寄生核心', function() bb(1501003041)end}, {'莎莉背包', function() bb(1501003554) end}, }) }), QingXu.box({"手部菜单", QingXu.switch("冰霜手套--带特效" , function() hj(452001) end), QingXu.switch("水墨手套--带特效" , function() hj(452002) end), QingXu.switch("流沙手套--带特效" , function() hj(452003) end), }),--M3组件 }, { name = '枪械区域', desc = '手持美化枪械', 图片 = '/storage/emulated/0/樱泽墨的elgg/图片/枪械', QingXu.box({ "m416", QingXu.checkbox1({ { "虎啸丹青", function() cx88(101004,1101004236,1010042306,1010042314,1010042305,1010042315,1010042299,1010042298,1010042297,1010042296,1010042295,1010042294,0) end, function() end },{ "封印幽冥", function() cx88(101004,1101004226,1010042237,1010042243,1010042236,1010042244,1010042233,1010042232,1010042231,1010042219,1010042218,1010042217,0) end, function() end },{ "机魂忍神", function() cx88(101004,1101004218,1010042127,1010042136,1010042126,1010042137,1010042119,1010042118,1010042117,1010042116,1010042115,1010042114,0) end, function() end },{ "愚人小丑", function() cx88(101004,1101004062,1010040577,1010040585,1010040576,1010040586,1010040569,1010040568,1010040567,1010040566,1010040565,1010040564,0) end, function() end },{ "冰霜", function() cx88(101004,1101004046,1010040475,1010040479,1010040473,1010040480,1010040470,1010040469,1010040468,1010040467,1010040466,1010040481,0) end, function() end },{ "庇护之城", function() cx88(101004,1101004209,1010042037,1010042046,1010042036,1010042047,1010042029,1010042028,1010042027,1010042026,1010042025,1010042024,0) end, function() end },{ "武魂宗师", function() cx88(101004,1101004201,1010041957,1010041965,1010041955,1010041966,1010041948,1010041947,1010041946,1010041945,1010041944,1010041967,0) end, function() end },{ "朝鸣宫廷", function() cx88(101004,1101004163,1010041574,1010041578,1010041569,1010041579,1010041566,1010041565,1010041564,1010041560,1010041554,203015,0) end, function() end } }) }), QingXu.box({ "SCAR", QingXu.checkbox1({ { "霓虹天后", function() cx88(101003,1101003208,1010032033,1010032038,1010032032,0,1010032027,1010032026,1010032025,1010032024,1010032023,1010032022,0) end, function() end },{ "御灵魂契", function() cx88(101003,1101003219,1010032220,20500500,1010032222,1010032227,1010032217,1010032216,1010032215,1010032214,1010032213,1010032212,0) end, function() end },{ "荣誉之枪", function() cx88(101003,1101003134,29100400,20500500,20100900,20200200,203001,203002,203003,203014,203004,203015,0) end, function() end },{ "愚者之庸", function() cx88(101003,1101003188,1010031764,1010031769,1010031763,0,1010031757,1010031756,1010031755,1010031754,1010031753,1010031752,0) end, function() end } }) }), QingXu.box({ "GROZA", QingXu.checkbox1({ { "红莲哥斯拉", function() cx88( 1101005098, 1010050928, 0, 1010050932, 0, 1010050927, 1010050926, 1010050925, 1010050924, 1010050923, 1010050922, 0) end, function() end } }) }), QingXu.box({ "akm", QingXu.checkbox1({ { "沙影神国", function() cx88(101001,1101001265,1010012589,0,1010012594,0,1010012587,1010012586,1010012585,1010012584,1010012583,1010012582,0) end, function() end },{ "星海提督", function() cx88(101001,1101001213,1010012068,0,1010012073,0,1010012066,1010012065,1010012064,1010012063,1010012062,1010012075,0) end, function() end },{ "绝胜之日", function() cx88(101001,1101001242,1010012358,0,1010012364,0,1010012356,1010012355,1010012354,1010012353,1010012352,1010012366,0) end, function() end },{ "部落之王", function() cx88(101001,1101001174,1010011668,0,1010011674,0,1010011666,1010011665,1010011664,1010011663,1010011662,1010011497,0) end, function() end },{ "光暗神月", function() cx88(101001,1101001249,1010012438,0,1010012444,0,1010012436,1010012435,1010012434,1010012433,1010012432,1010012446,0) end, function() end },{ "光暗金羽", function() cx88(101001,1101001256,1010012508,0,1010012514,0,1010012506,1010012505,1010012504,1010012503,1010012502,1010012516,0) end, function() end } }) }), QingXu.box({ "m762", QingXu.checkbox1({ { "铂金骸骨", function() cx88(101008,1101008153,1101008163,1010081541,1010081529,0,1010081526,1010081525,1010081524,1010081523,1010081522,1010081521,0) end, function() end },{ "灵阁魔剪", function() cx88(101008,1101008163,1010081532,1010081586,1010081586,0,1010081577,1010081525,1010081575,1010081574,1010081573,1010081572,0) end, function() end },{ "琉璃仙灵", function() cx88(101008,1101008136,1010081315,1010081318,1010081313,0,1010081307,1010081306,1010081305,1010081304,1010081303,1010081302,0) end, function() end },{ "森白骸骨", function() cx88(101008,1101008146,1010081402,1010081405,1010081399,0,1010081396,1010081395,1010081394,1010081393,1010081392,1010081391,0) end, function() end } }) }), QingXu.box({ "aug", QingXu.checkbox1({ { "罪恶玫瑰", function() cx88(101006,1101006085,1010060795,1010060800,1010060794,0,1010060788,1010060787,1010060786,1010060785,1010060784,1010060783,0) end, function() end },{ "破军狂鸣", function() cx88(101006,1101006075,0,1010060706,1010060718,1010060703,1010060696,1010060695,1010060694,1010060693,1010060692,1010060691,0) end, function() end } }) }), QingXu.box({ "ump45", QingXu.checkbox1({ { "水晶冰刺", function() cx88(102002,1102002136,1020021313,1020021318,1020021312,0,1020021307,1020021306,1020021305,1020021304,1020021303,1020021302,0) end, function() end },{ "噬魂凝视", function() cx88(102002,1102002424,1020024192,1020024197,1020024190,0,1020024187,1020024186,1020024185,1020024184,1020024183,1020024182,0) end, function() end } }) }), QingXu.box({ "ace32", QingXu.checkbox1({ { "清夜蝶吻", function() cx88(101102,1101102040,1011020357,1011020364,1011020355,1011020365,1011020349,1011020348,1011020347,1011020346,1011020345,1011020344,0) end, function() end } }) }), QingXu.box({ "mk14", QingXu.checkbox1({ { "龙吟国度", function() cx88(103007,1103007028,1030070234,0,1030070227,1030070236,1030070218,1030070217,1030070216,1030070215,1030070214,1030070213,1030070212) end, function() end },{ "红白妹控", function() cx88(103007,1103007010,29100400,0,20100900,20200200,203001,203002,203003,203014,203004,203015,203005) end, function() end },{ "星云力量", function() cx88(103007,1103007020,29100400,0,1030070211,20200200,203001,203002,203003,203014,203004,203015,203005) end, function() end },{ "奶龙妹控", function() cx88(103007,1103007038,29100400,0,1030070381,20200200,1010032027,1010032026,1010032025,1010032024,1010032023,1010032022,203005) end, function() end } }) }), QingXu.box({ "mg3", QingXu.checkbox1({ { "凤鸣神戟", function() cx88(105010,1105010019,0,0,1050100137,0,1050100144,1050100143,1050100142,1050100141,1050100139,1050100138,0) end, function() end },{ "苍穹之龙", function() cx88(105010,1105010008,0,0,20100900,0,203001,203002,203003,203014,203004,203015,0) end, function() end },{ "绿皮", function() cx88(105010,1105010011,29100400,20500500,20100900,20200200,203001,203002,203003,203014,203004,203015,0) end, function() end } }) }), }, { name = '播报区域', desc = '美化好枪械在开判断播报', 图片 = '/storage/emulated/0/樱泽墨的elgg/图片/ls7', QingXu.switch('判断播报',function() mk = gg.getRangesList("libUE4.so:bss")[1].start function S_Pointer(t_So, t_Offset, _bit) ------官方频道@GKLXMH1------官方频道@GKLXMH1------官方频道@GKLXMH1------官方频道@GKLXMH1------官方频道@GKLXMH1------官方频道@GKLXMH1------官方频道@GKLXMH1 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 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 addListItems(address, flags, value, freeze) local t = {} t[1] = {} t[1].address = address t[1].flags = flags t[1].value = value t[1].freeze = true gg.addListItems(t) end local function readD(a) return gg.getValues({{address = a, flags = 4}})[1].value end local yulin = gg.getRangesList("libUE4.so")[1].start function bb(bbz) local t = {"libUE4.so:bss", "Cb"} local tt = {0x563370,0x30,0x18B0} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 1101004046, freeze = true}}) end ------官方频道@GKLXMH1 ------官方频道@GKLXMH1 ------官方频道@GKLXMH1 ------官方频道@GKLXMH1 while true do local pd = RUI(RUI(RUI(RUI(RUI(mk + 0x560270) + 0x30) + 0x460) + 0x2A50) + 0x7A0) + 0x1970 cmz=readD(pd) local t = {"libUE4.so:bss", "Cb"} local tt = {0x563370,0x30,0x18B0} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = cmz, freeze = true}}) end end), }, { name = '参数配置等', desc = '读取配置,保存配置', 图片 = '/storage/emulated/0/樱泽墨的elgg/图片/参数', QingXu.switch('判断播报',function() local SAVE_PATH = "/sdcard/巨魔tool/配置衣服.lua" local mk = gg.getRangesList("libUE4.so:bss", "Cb")[1].start local HSMSJ = SY(SY(SY(SY(SY(mk + 0x563370) + 0x30) + 0x460) + 0x2D58) + 0x388) local parts = { {"yf", 5, "上衣/连体衣"}, {"kz", 6, "裤子"}, {"xz", 7, "鞋子"}, {"tf", 2, "头发"}, {"ts", 3, "头饰"}, {"mz", 4, "面罩"}, {"yz", 12, "眼罩"}, {"lb", 1, "脸部"}, {"bb", 8, "背包"}, {"tk", 9, "头盔"}, {"kj", 10, "盔甲/手套/飞行器"} } local file = io.open(SAVE_PATH, "w") if not file then gg.alert("文件写入失败:" .. SAVE_PATH) else for _, part in ipairs(parts) do local abbr, id, remark = part[1], part[2], part[3] local value = 0 for offset = 0x0, 0x300, 0x3C do local DZAddr = HSMSJ + 0x8 + offset if readD(DZAddr) == id then value = readD(HSMSJ + offset) break end end file:write(string.format("%s-%d--%s\n", abbr, value, remark)) end file:close() gg.alert("🥳配置已写入:" .. SAVE_PATH) end end), }, } -- 图标,标题,菜单 QingXu.menu(icon, title, menu) end if zzz==nil then string.toMusic("请选择游戏才能进入") os.exit() end