--==================== 远程公告配置【修复版】==================== local urls = "https://share.weiyun.com/g8yk8hqr" local path = "/sdcard/公告.txt" local req = gg.makeRequest(urls) local data = nil if req and req.content then data = req.content end local remoteSwitch = "关" local Notice = "" if data then remoteSwitch = data:match("【开关】(.-)【开关】") or "关" Notice = data:match("【公告】(.-)【公告】") or "" end local files = io.open(path, "r") local localFileContent = nil if files then localFileContent = files:read("*a") files:close() end if localFileContent == nil or localFileContent ~= Notice then if gg.alert("启动成功\n" .. Notice, "本大爷知道了", "以后别啰嗦了") == 2 then local f = io.open(path, "w") if f then f:write(Notice) f:close() end end end --============================================================ -- 游戏内绘制(保留) draw.text('', 30, 550) draw.text('', 90, 650) toMusic("") draw.text('91.78更新一键报警', 193, 300, 180) draw.setColor('#FF0000FF') draw.text('', 170, 355, 230) draw.setColor('#FF0000FF') draw.setColor('#FF0000FF') draw.circle(265, 300, 110) draw.circle(265, 300, 150) draw.circle(560, 1200, 100) --==================== 霓虹Tab风格配色 ==================== NEON = { bg = "#E60D0D1A", -- 深蓝黑背景 bgCard = "#FF1A1A2E", -- 卡片背景 bgTab = "#FF16213E", -- Tab栏背景 tabActive = "#FF0F3460", -- Tab选中背景 tabText = "#80FFFFFF", -- Tab未选中文字 tabTextOn = "#FF00D9FF", -- Tab选中文字 霓虹青 title = "#FF00D9FF", -- 主标题 霓虹青 subtitle = "#99E94560", -- 副标题 霓虹粉 btnGrad1 = "#FF0F3460", -- 按钮渐变1 深蓝 btnGrad2 = "#FF1A1A2E", -- 按钮渐变2 深紫 btnText = "#FFE0E0FF", -- 按钮文字 btnStroke = "#FF533483", -- 按钮描边 紫 accent = "#FFE94560", -- 强调 霓虹粉 green = "#FF00FF88", -- 绿 red = "#FFFF4757", -- 红 bottomBg = "#FF0A0A14", -- 底部栏 } -- 霓虹渐变按钮背景 function neonBtnBg() local gd = luajava.new(GradientDrawable) gd:setCornerRadius(12) gd:setGradientType(GradientDrawable.LINEAR_GRADIENT) gd:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT) gd:setColors({0xFF0F3460, 0xFF1A1A2E}) gd:setStroke(2, 0xFF533483) return gd end -- 按钮按下效果(亮一点) function neonBtnPr() local gd = luajava.new(GradientDrawable) gd:setCornerRadius(12) gd:setGradientType(GradientDrawable.LINEAR_GRADIENT) gd:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT) gd:setColors({0xFF1A4A8A, 0xFF2A2A4E}) gd:setStroke(2, 0xFF00D9FF) return gd end function neonBtnSelector() local sel = luajava.getStateListDrawable() sel:addState({android.R.attr.state_pressed}, neonBtnPr()) sel:addState({-android.R.attr.state_pressed}, neonBtnBg()) return sel end -- Tab选中背景 function neonTabActive() local gd = luajava.new(GradientDrawable) gd:setCornerRadius(18) gd:setGradientType(GradientDrawable.LINEAR_GRADIENT) gd:setColors({0xFF0F3460, 0xFF533483}) gd:setStroke(1, 0xFF00D9FF) return gd end -- Tab未选中背景 function neonTabNormal() local gd = luajava.new(GradientDrawable) gd:setCornerRadius(18) gd:setGradientType(GradientDrawable.LINEAR_GRADIENT) gd:setColors({0x00000000, 0x00000000}) return gd end -- 主窗口背景 neonMainBg = luajava.new(GradientDrawable) neonMainBg:setCornerRadius(16) neonMainBg:setGradientType(GradientDrawable.LINEAR_GRADIENT) neonMainBg:setColors({0xE60D0D1A, 0xE61A1A2E}) neonMainBg:setStroke(2, 0xFF533483) -- 内容区背景 neonContentBg = luajava.new(GradientDrawable) neonContentBg:setCornerRadius(10) neonContentBg:setGradientType(GradientDrawable.LINEAR_GRADIENT) neonContentBg:setColors({0xCC12121F, 0xCC1A1A2E}) ----------------------------------------------------------------------------------------- layoutcolor = "#aa000000" sgly = {} local sgly = sgly local android = import('android.*') function write(fileName, content) if file.write(fileName, content) == false then gg.alert("请给框架和修改器 文件储存权限\n否则无法正常运行") os.exit() end end function panduan(rec) local fille, err = io.open(rec) if fille == nil then return false else fille:close() return true end end function pdcf(lujing) local rec = "/sdcard/sgly/配置文件/" .. lujing local fille, err = io.open(rec) if fille == nil then return false else fille:close() return true end end sleep = gg.sleep function read(fileName) local f = assert(io.open(fileName, 'r')) local content = f:read("*all") f:close() return content end function wtcf(lujing, neirong) write("/sdcard/sgly/配置文件/" .. lujing, neirong) end function rdcf(lujing) return read("/sdcard/sgly/配置文件/" .. lujing) end function checkimg(tmp) if panduan("/sdcard/sgly/图片/" .. tmp) ~= true then gg.toast("正在下载资源" .. tmp .. "\n请耐心等待") download("https://wf980627-512739054-1317447113.cos.ap-nanjing.myqcloud.com/" .. tmp, "/sdcard/sgly/图片/" .. tmp) end end function pmusic(x) if audiokg == "开" then tmp1 = 0 gg.playMusic(x) tmp1 = 1 end end if pdcf("audio") ~= true then wtcf("audio", "开") end audiokg = rdcf("audio") function camusic(ress) tmp1 = 0 if audiokg == "开" then if panduan("/sdcard/sgly/音频/" .. ress) == true then pmusic("/sdcard/sgly/音频/" .. ress) tmp1 = 1 else download("https://wf980627-512739054-1317447113.cos.ap-nanjing.myqcloud.com/" .. ress, "/sdcard/sgly/音频/" .. ress) pmusic("/sdcard/sgly/音频/" .. ress) tmp1 = 1 end end end 开 = "开" 关 = "关" file.getdirs("/sdcard/sgly/状态读取/") ckimg = {"imgui","pink","blue","check2","check1","exit","qq2","ditf3","checkon2","checkof","qiufeng"} for i = 1, #ckimg do jindu = i checkimg(ckimg[i]) end gg.toast("资源下载完毕") local context = app.context local window = context:getSystemService("window") YoYoImpl = luajava.getYoYoImpl() function getLayoutParams() LayoutParams = WindowManager.LayoutParams layoutParams = luajava.new(LayoutParams) if (Build.VERSION.SDK_INT >= 26) then layoutParams.type = LayoutParams.TYPE_APPLICATION_OVERLAY else layoutParams.type = LayoutParams.TYPE_PHONE end layoutParams.format = PixelFormat.RGBA_8888 layoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE layoutParams.gravity = Gravity.TOP | Gravity.LEFT layoutParams.width = LayoutParams.WRAP_CONTENT layoutParams.height = LayoutParams.WRAP_CONTENT return layoutParams end function getLayoutParams2() local prm = luajava.new(WindowManager.LayoutParams) layoutParams1 = prm if (Build.VERSION.SDK_INT >= 26) then layoutParams1.type = prm.TYPE_APPLICATION_OVERLAY else layoutParams1.type = prm.TYPE_PHONE end layoutParams1.format = PixelFormat.RGBA_8888 layoutParams1.flags = prm.FLAG_NOT_FOCUSABLE layoutParams1.gravity = Gravity.CENTER layoutParams1.width = prm.WRAP_CONTENT layoutParams1.height = prm.WRAP_CONTENT return layoutParams1 end function guid() seed = {'e','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'} tb = {} for i = 1, 32 do table.insert(tb, seed[math.random(1, 16)]) end sid = table.concat(tb) return string.format('%s%s%s', string.sub(sid,1,8), string.sub(sid,10,12), string.sub(sid,21,22)) end --==================== 霓虹Tab风格 主悬浮窗 ==================== local isswitch local neonMainView = nil local neonParams = nil local neonCurrentPage = 1 local neonPageViews = {} -- 4个页面布局 local neonTabViews = {} -- 4个Tab按钮 local neonTabTexts = {} -- 4个Tab文字 function neonSwitchPage(page) neonCurrentPage = page for i = 1, 4 do if neonPageViews[i] then neonPageViews[i]:setVisibility(i == page and View.VISIBLE or View.GONE) end if neonTabViews[i] and neonTabTexts[i] then if i == page then neonTabViews[i]:setBackground(neonTabActive()) neonTabTexts[i]:setTextColor(0xFF00D9FF) else neonTabViews[i]:setBackground(neonTabNormal()) neonTabTexts[i]:setTextColor(0x80FFFFFF) end end end end menu = function(stext, sview) if isswitch then return false end isswitch = true local block = luajava.getBlock() -- 构建4个内容页面 local pageLayouts = {} for p = 1, 4 do local inner = { LinearLayout, id = luajava.newId("neonPage" .. p), orientation = "vertical", layout_width = "fill_parent", layout_height = "wrap_content", padding = "6dp", } for i = 1, #sview[p] do inner[#inner + 1] = sview[p][i] end -- 第4页追加音乐面板 if p == 4 then inner[#inner + 1] = wyylog end pageLayouts[p] = inner end -- 顶部标题 local titleBar = { LinearLayout, orientation = "vertical", gravity = "center_horizontal", layout_width = "fill_parent", layout_height = "wrap_content", padding = "8dp", { TextView, text = stitle, textColor = "#FF00D9FF", textSize = "20sp", gravity = "center", layout_width = "wrap_content", }, { TextView, text = "版本:适配最新版本 | 仅供学习交流", textColor = "#99E94560", textSize = "10sp", gravity = "center", layout_width = "wrap_content", layout_marginTop = "2dp", }, } -- Tab栏(4个横向标签) local tabBar = { LinearLayout, orientation = "horizontal", gravity = "center", layout_width = "fill_parent", layout_height = "40dp", background = luajava.loadlayout{GradientDrawable, color="#FF16213E", cornerRadius=0}, padding = "4dp", } for i = 1, 4 do local tabId = "neonTab" .. i local tabTextId = "neonTabText" .. i tabBar[#tabBar + 1] = { LinearLayout, id = luajava.newId(tabId), orientation = "horizontal", gravity = "center", layout_width = "0dp", layout_height = "32dp", layout_weight = "1", layout_marginLeft = "2dp", layout_marginRight = "2dp", background = i == 1 and neonTabActive() or neonTabNormal(), onClick = function() neonSwitchPage(i) end, { TextView, id = luajava.newId(tabTextId), text = stab[i], textColor = i == 1 and "#FF00D9FF" or "#80FFFFFF", textSize = "13sp", gravity = "center", layout_width = "wrap_content", }, } end -- 内容区(4个页面叠加,只显示一个) local contentArea = { FrameLayout, layout_width = "260dp", layout_height = "340dp", pageLayouts[1], pageLayouts[2], pageLayouts[3], pageLayouts[4], } -- 底部操作栏 local bottomBar = { LinearLayout, orientation = "horizontal", gravity = "center", layout_width = "fill_parent", layout_height = "38dp", background = luajava.loadlayout{GradientDrawable, color="#FF0A0A14", cornerRadius=0}, { LinearLayout, orientation = "horizontal", gravity = "center", layout_width = "0dp", layout_height = "fill_parent", layout_weight = "1", onClick = function() if neonMainView then if neonMainView:getVisibility() == View.VISIBLE then neonMainView:setVisibility(View.GONE) gg.toast("面板已隐藏") else neonMainView:setVisibility(View.VISIBLE) end end end, {TextView, text = "隐藏", textColor = "#FF00D9FF", textSize = "13sp", gravity = "center"}, }, {View, layout_width = "1dp", layout_height = "20dp", background = "#33533483"}, { LinearLayout, orientation = "horizontal", gravity = "center", layout_width = "0dp", layout_height = "fill_parent", layout_weight = "1", onClick = function() gg.toast("悬浮窗已退出") window:removeView(neonMainView) luajava.setFloatingWindowHide(false) luajava.newThread(function() os.exit() end):start() end, {TextView, text = "退出", textColor = "#FFE94560", textSize = "13sp", gravity = "center"}, }, } -- 主窗口 local mainLayout = { LinearLayout, id = "neonMain", orientation = "vertical", layout_width = "wrap_content", layout_height = "wrap_content", background = neonMainBg, titleBar, tabBar, contentArea, bottomBar, } local function invoke() neonParams = getLayoutParams() neonMainView = luajava.loadlayout(mainLayout) -- 缓存Tab和Page引用 for i = 1, 4 do neonTabViews[i] = luajava.getIdValue("neonTab" .. i) neonTabTexts[i] = luajava.getIdValue("neonTabText" .. i) neonPageViews[i] = luajava.getIdValue("neonPage" .. i) end -- 默认只显示第1页 for i = 2, 4 do neonPageViews[i]:setVisibility(View.GONE) end local function addToWindow() window:addView(neonMainView, neonParams) end local runnable = luajava.getRunnable(addToWindow) local handler = luajava.getHandler() handler:post(runnable) -- 拖拽 local RawX, RawY, x, y local function onTouch(v, event) local Action = event:getAction() if Action == MotionEvent.ACTION_DOWN then RawX = event:getRawX() RawY = event:getRawY() x = neonParams.x y = neonParams.y elseif Action == MotionEvent.ACTION_MOVE then neonParams.x = tonumber(x) + (event:getRawX() - RawX) neonParams.y = tonumber(y) + (event:getRawY() - RawY) window:updateViewLayout(neonMainView, neonParams) end return true end neonMainView:setOnTouchListener(luajava.createProxy( "android.view.View$OnTouchListener", {onTouch = onTouch})) end invoke() gg.setVisible(false) luajava.setFloatingWindowHide(true) block('join') end -- 兼容旧函数 function 隐藏() if neonMainView then if neonMainView:getVisibility() == View.VISIBLE then neonMainView:setVisibility(View.GONE) else neonMainView:setVisibility(View.VISIBLE) end end end function 切换(x) neonSwitchPage(x) end ----------------------------------------------------------------------------------------- -- 其余UI组件(霓虹配色) ----------------------------------------------------------------------------------------- chazhi = {} chajv = {} function seek(name, bian, smin, smax, nows) smin = tonumber(smin) smax = tonumber(smax) chajv[bian] = smax - smin chazhi[bian] = 1 - smin if smin == nil then smin = 1 smax = 10 end truesmin = 1 truesmax = truesmin + chajv[bian] if not nows then nows = smin tnows = (smin - nows) else tnows = (nows - smin) + 1 end if _ENV[bian] == nil then _ENV[bian] = 1.0 end if not name then name = "未设置" end local names = name .. guid() rest = luajava.loadlayout({ LinearLayout, layout_width = 'fill_parent', layout_height = "wrap_content", { LinearLayout, layout_width = 'fill_parent', layout_height = "wrap_content", layout_marginTop = "3dp", layout_marginBottom = "3dp", layout_marginLeft = "4dp", layout_marginRight = "4dp", gravity = "center_vertical", background = neonBtnBg(), padding = "6dp", { TextView, gravity = "center_vertical", text = name .. ":" .. nows, id = luajava.newId(names), layout_width = '70dp', textColor = "#FFE0E0FF", textSize = "12sp", }, { SeekBar, layout_width = '120dp', min = truesmin, max = truesmax, progress = tnows, onSeekBarChange = { onProgressChanged = function(SeekBar, var2, var3) if not var3 then return end local resultvar = tonumber(string.sub(var2, 0, -3)) - chazhi[bian] luajava.runUiThread(function() luajava.getIdValue(names):setText(name .. ":" .. resultvar) end) _ENV[bian] = resultvar end } } } }) return rest end paramt = {} titletable = {} function newtitle(name) titletable[name] = 1 local function invoke(name) if not name then name = "未设置" end nameid = name .. guid() local RawX, RawY, x, y paramt[name] = getLayoutParams2() _ENV[name] = luajava.loadlayout({ LinearLayout, layout_width = "wrap_content", layout_height = "50dp", background = luajava.loadlayout{GradientDrawable,color="#00000000",cornerRadius=30}, onClick = function() end, onTouch = function(v, event) local Action = event:getAction() if Action == MotionEvent.ACTION_DOWN then isMove = false RawX = event:getRawX() RawY = event:getRawY() x = paramt[name].x y = paramt[name].y elseif Action == MotionEvent.ACTION_MOVE then isMove = true paramt[name].x = tonumber(x) + (event:getRawX() - RawX) paramt[name].y = tonumber(y) + (event:getRawY() - RawY) window:updateViewLayout(_ENV[name], paramt[name]) end end, {TextView, text = name, id = luajava.newId(name .. "xfc"), gravity = "center", layout_width = "wrap_content", layout_height = "30dp", textSize = "17sp", textColor = "#FF00D9FF"}, }) local function invoke2() window:addView(_ENV[name], paramt[name]) end local runnable = luajava.getRunnable(invoke2) local handler = luajava.getHandler() handler:post(runnable) end invoke(name) end function rmvtitle(name) titletable[name] = 0 local function invoke2() window:removeView(_ENV[name], paramt[name]) end local runnable = luajava.getRunnable(invoke2) local handler = luajava.getHandler() handler:post(runnable) end -- 霓虹风格按钮 function button(txt, func) if not txt then txt = "未设置" end return luajava.loadlayout({ LinearLayout, layout_width = 'fill_parent', layout_height = "wrap_content", layout_marginTop = "3dp", layout_marginBottom = "3dp", { LinearLayout, layout_width = "fill_parent", layout_height = "38dp", gravity = "center", background = neonBtnSelector(), onClick = function() luajava.newThread(function() pcall(func) end):start() end, { TextView, text = txt, textColor = "#FFE0E0FF", textSize = "13sp", gravity = "center", layout_width = "wrap_content", }, } }) end function text(txt, color, size) if not txt then txt = "未设置文字" end if not color then color = "#FFE0E0FF" end if not size then size = "14sp" end return luajava.loadlayout({ TextView, text = txt, textSize = size, gravity = "center", textColor = color, layout_width = "wrap_content", layout_marginTop = "3dp", layout_marginBottom = "3dp", }) end function switch(name, func1, func2) if type(func1) == "table" then gg.alert("出现错误") os.exit() end local func = 开关(name, func1, func2) if not name then name = "未设置" end rest = luajava.loadlayout({ LinearLayout, layout_width = 'fill_parent', layout_height = "wrap_content", layout_marginTop = "3dp", layout_marginBottom = "3dp", { LinearLayout, layout_width = 'fill_parent', layout_height = "38dp", layout_marginLeft = "4dp", layout_marginRight = "4dp", gravity = "center_vertical", background = neonBtnBg(), padding = "8dp", { TextView, gravity = "center_vertical", text = name, textColor = "#FFE0E0FF", textSize = "13sp", layout_width = '100dp', }, { Switch, gravity = "center_vertical", layout_width = 'match_parent', layout_height = "wrap_content", showText = "true", textOn = "开", textOff = "关", onCheckedChange = function(Switch, var2, var3) if var2 == true then var2 = "开" else var2 = "关" end luajava.newThread(function() func() end):start() end, } } }) return rest end function edit(name) _ENV[name] = name .. guid() if not name then name = "点击输入文字" end rest = luajava.loadlayout({ LinearLayout, layout_width = 'wrap_content', layout_height = "wrap_content", { LinearLayout, layout_width = 'fill_parent', layout_height = "wrap_content", layout_marginTop = "5dp", layout_marginBottom = "5dp", layout_marginLeft = "10dp", layout_marginRight = "10dp", gravity = "center_vertical", background = neonBtnBg(), { EditText, gravity = "center", hintText = name, textSize = "13sp", textColor = "#FFE0E0FF", hintTextColor = "#80E0E0FF", id = luajava.newId(_ENV[name]), layout_width = 'fill', layout_marginLeft = "10dp", layout_marginRight = "10dp", } } }) return rest end function getedit(name) edit = tostring(luajava.getIdValue(_ENV[name]):getText()) return edit end function setedit(name, txt) txt = tostring(txt) luajava.runUiThread(function() luajava.getIdValue(_ENV[name]):setText(txt) end) end function 开关(name, func1, func2) name = name .. "开关1" if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1) == "function" then return function() namers = _ENV[name] if namers ~= "开" then _ENV[name] = "开" pcall(func1) else _ENV[name] = "关" pcall(func2) end end end end function 开关2(name, func1, func2, nid) if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1) == "function" then return function() namers = _ENV[name] if namers ~= "开" then luajava.runUiThread(function() luajava.getIdValue(nid):setBackground(luajava.getBitmapDrawable("/sdcard/sgly/图片/check2")) end) _ENV[name] = "开" func1() else luajava.runUiThread(function() luajava.getIdValue(nid):setBackground(luajava.getBitmapDrawable("/sdcard/sgly/图片/check1")) end) _ENV[name] = "关" func2() end end end end function 开关6(name, func1, func2, nid) if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1) == "function" then return function() namers = _ENV[name] if namers ~= "开" then luajava.getIdValue(nid):setBackground(luajava.getBitmapDrawable("/sdcard/sgly/图片/checkon2")) _ENV[name] = "开" pcall(func1) else luajava.getIdValue(nid):setBackground(luajava.getBitmapDrawable("/sdcard/sgly/图片/checkof")) _ENV[name] = "关" pcall(func2) end end end end namelist = {} param1 = {} floattable = {} function newfloat(name, func1, func2) floattable[name] = 1 local func = 开关(name .. "k", func1, func2) local function invoke(name, func1, func2) if not name then name = "未设置" end nameid = name .. guid() local RawX, RawY, x, y nameid1 = name .. guid() if not namelist[name] then namelist[name] = false end if namelist[name] ~= false then clclcl = "#75ff0000" else clclcl = "#88000000" end param1[name] = getLayoutParams2() _ENV[name] = luajava.loadlayout({ LinearLayout, layout_width = "40dp", id = luajava.newId(nameid1), layout_height = "40dp", background = luajava.loadlayout{GradientDrawable,color=clclcl,cornerRadius=30}, onClick = function() if namelist[name] == false then _ENV[name]:setBackground(luajava.loadlayout{GradientDrawable,color="#75ff0000",cornerRadius=30}) namelist[name] = true elseif namelist[name] == true then _ENV[name]:setBackground(luajava.loadlayout{GradientDrawable,color="#88000000",cornerRadius=30}) namelist[name] = false end luajava.newThread(function() pcall(func) end):start() end, onTouch = function(v, event) local Action = event:getAction() if Action == MotionEvent.ACTION_DOWN then isMove = false RawX = event:getRawX() RawY = event:getRawY() x = param1[name].x y = param1[name].y elseif Action == MotionEvent.ACTION_MOVE then isMove = true param1[name].x = tonumber(x) + (event:getRawX() - RawX) param1[name].y = tonumber(y) + (event:getRawY() - RawY) window:updateViewLayout(_ENV[name], param1[name]) end end, {TextView, text = name, gravity = "center", layout_width = "50dp", layout_height = "50dp", textColor="#FFFFFFFF"}, }) local function invoke2() window:addView(_ENV[name], param1[name]) end local runnable = luajava.getRunnable(invoke2) local handler = luajava.getHandler() handler:post(runnable) end invoke(name, func1, func2) end function rmvfloat(name) floattable[name] = 0 local function invoke2() window:removeView(_ENV[name], param1[name]) end local runnable = luajava.getRunnable(invoke2) local handler = luajava.getHandler() handler:post(runnable) end function box(views) if type(views[1]) ~= "string" and type(views[1]) ~= "number" then gg.alert("box第一个参数必须是string") os.exit() end local tid = "box" .. guid() local inner = {LinearLayout, orientation="vertical", layout_width='fill_parent', layout_height="wrap_content", visibility="gone", id=luajava.newId(tid)} for i = 2, #views do inner[#inner+1] = views[i] end return luajava.loadlayout({ LinearLayout, orientation="vertical", layout_width='fill_parent', layout_height="wrap_content", { LinearLayout, layout_height="34dp", layout_width="fill_parent", gravity="center_vertical", background=neonBtnBg(), onClick = function() local v = luajava.getIdValue(tid) if tonumber(tostring(v:getVisibility())) == 8.0 then v:setVisibility(View.VISIBLE) else v:setVisibility(View.GONE) end end, {TextView, text=views[1], textSize="12sp", textColor="#FF00D9FF", layout_marginLeft="10dp", gravity="center_vertical"}, }, inner, }) end function radio(radio) firadio = {LinearLayout, layout_width='fill_parent', layout_height="wrap_content", orientation="vertical", layout_marginLeft="10dp", layout_marginRight="10dp"} if type(radio[1]) == "string" or type(radio[1]) == "number" then firadio[#firadio+1] = {TextView, text=radio[1], textColor="#FFE0E0FF", layout_marginLeft="10dp", layout_marginRight="10dp"} end radios = {RadioGroup, layout_marginLeft="10dp", layout_marginRight="10dp", background=neonBtnBg(), layout_width='fill_parent', padding="6dp"} for i = 2, #radio do radios[#radios+1] = {RadioButton, layout_width='fill_parent', text=radio[i][1], textColor="#FFE0E0FF", onClick=function() luajava.newThread(function() pcall(radio[i][2]) end):start() end} end firadio[#firadio+1] = radios return luajava.loadlayout(firadio) end function check(cklist) rest = {LinearLayout, layout_width='wrap_content', layout_height="30dp", layout_marginTop="10dp", gravity="left"} for i = 1, #cklist do local name = cklist[i][1] local func1 = cklist[i][2] local func2 = cklist[i][3] local nid = cklist[i][4] if type(func1) == "table" then gg.alert("出现错误") os.exit() end if not name then name = "未设置" end nid = name .. guid() local func = 开关2(nid, func1, func2, nid) rstt = luajava.loadlayout({ LinearLayout, layout_width='wrap_content', layout_height="30dp", layout_marginTop="5dp", layout_marginBottom="5dp", layout_marginLeft="5dp", layout_marginRight="5dp", gravity="center_vertical", onClick=function() luajava.newThread(function() func() end):start() end, {ImageView, id=luajava.newId(nid), layout_width='20dp', layout_height="20dp", layout_marginLeft="8dp", background="/sdcard/sgly/图片/check1"}, {TextView, gravity="top", text=name, textColor="#ffffff", layout_width='wrap_content', layout_height='wrap_content', layout_marginLeft="4dp", layout_marginRight="5dp"}, }) rest[#rest+1] = rstt end return luajava.loadlayout(rest) end function check2(cklist) rest = {LinearLayout, layout_width='match_parent', layout_hight="wrap_content", layout_marginTop="10dp", gravity="center_horizontal"} for i = 1, #cklist do local name = cklist[i][1] local func1 = cklist[i][2] local func2 = cklist[i][3] local nid = cklist[i][4] if type(func1) == "table" then gg.alert("出现错误\n如果你是用的是旧版\n请将开头第一个switch改成menu") gg.copyText("") os.exit() end if not name then name = "未设置" end nid = name .. guid() local func = 开关6(nid, func1, func2, nid) rstt = luajava.loadlayout({ LinearLayout, id=luajava.newId(nid), layout_width='63dp', layout_height="30dp", layout_marginTop="5dp", layout_marginBottom="5dp", layout_marginLeft="10dp", layout_marginRight="10dp", gravity="center_vertical", background="/sdcard/sgly/图片/checkof", onClick=function() luajava.newThread(function() func() end):start() end, {TextView, gravity="top", text=name, layout_width='80dp', layout_hight='80dp', layout_marginLeft="20dp", layout_marginRight="10dp", textColor="#FFE0E0FF"}, }) rest[#rest+1] = rstt end return luajava.loadlayout(rest) end function anniu(radio) firadio = {LinearLayout, layout_width='fill_parent', layout_height="wrap_content", orientation="vertical", background=neonBtnBg()} radios = {LinearLayout, layout_marginLeft="0dp", layout_marginRight="0dp", orientation="horizontal", visibility="visible", padding="0dp", layout_width='fill_parent'} for i = 2, #radio do radios[#radios+1] = { LinearLayout, layout_marginTop="3dp", layout_marginBottom="3dp", layout_marginLeft="0dp", layout_marginRight="8dp", background=neonBtnSelector(), layout_width='wrap_content', layout_height="25dp", gravity="center", {TextView, layout_width='wrap_content', layout_height="30dp", text=radio[i][1], layout_marginLeft="8dp", layout_marginRight="8dp", gravity="center", textColor="#FFE0E0FF", textSize="10sp"}, onClick=function() luajava.newThread(function() radio[i][2]() end):start() end, } end firadio[#firadio+1] = radios return luajava.loadlayout(firadio) end function radio2(radio) firadio = {LinearLayout, layout_width='fill_parent', layout_height="wrap_content", orientation="vertical", layout_marginLeft="10dp", layout_marginRight="10dp"} radios = {LinearLayout, orientation="vertical", layout_marginLeft="10dp", layout_marginRight="10dp", layout_width='fill_parent'} for i = 1, #radio do radios[#radios+1] = { LinearLayout, gravity="center", layout_height="30dp", layout_width='fill_parent', orientation="horizontal", layout_marginBottom="5dp", layout_marginTop="5dp", background=neonBtnBg(), {ImageView, layout_width="20dp", layout_height="20dp", background="/sdcard/sgly/图片/" .. radio[i][2]}, {TextView, text=radio[i][1], textColor="#FFE0E0FF"}, onClick=function() luajava.newThread(function() pcall(radio[i][3]) end):start() end, } end firadio[#firadio+1] = radios return luajava.loadlayout(firadio) end function visi(tid, ttid) local tview = luajava.getIdValue(tid) local ttview = luajava.getIdValue(ttid) if not tview then return 0 end if tonumber(tostring(tview:getVisibility())) == 8.0 then tview:setVisibility(View.VISIBLE) ttview:setBackground(luajava.getBitmapDrawable("/sdcard/sgly/图片/hsj")) else tview:setVisibility(View.GONE) ttview:setBackground(luajava.getBitmapDrawable("/sdcard/sgly/图片/sj")) end end function getcolor(cl) cl[1] = tonumber(math.ceil(cl[1] * 2.6, 0, 5)) if cl[1] > 255 then cl[1] = "0xff" else cl[1] = "0x" .. string.format("%x", cl[1]) end for i = 1, 3 do cl[i+1] = string.format("%x", cl[i+1]) if string.len(cl[i+1]) == 1 then cl[i+1] = "0" .. cl[i+1] end end cl = cl[1] .. cl[2] .. cl[3] .. cl[4] return cl end function getrgb(cl) if string.sub(cl, 1, 1) == "#" then cl = "0x" .. string.sub(cl, 2, -1) end cl = {tonumber(string.sub(cl, 0, 4)), tonumber("0x" .. string.sub(cl, 5, 6)), tonumber("0x" .. string.sub(cl, 7, 8))} return cl end -- 兼容旧选择器 function getSelector() return neonBtnSelector() end function getSelector2() return neonBtnSelector() end function getSelector3() return neonBtnSelector() end function getSelector6() return neonBtnSelector() end function getSelector7() return neonBtnSelector() end function getseekgra() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(8) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({0x6600D9FF, 0x99533483}) jianbians:setStroke(4, "0x6600D9FF") return jianbians end function getseekgra2() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(0) jianbians:setShape(GradientDrawable.RECTANGLE) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({0x6600D9FF, 0x99533483}) return jianbians end function getseekgra3() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(0) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({0x6600D9FF, 0x99533483}) return jianbians end ----------------------------------------------------------------------------------------- -- 音乐模块(保留) ----------------------------------------------------------------------------------------- wyyget = "http://120.24.160.246:3000/" function huoqu(txt) return table.json(gg.makeRequest(wyyget .. "song/url/v1?id=" .. txt .. "").content) end function souyy(txt) tbttt = gg.makeRequest(wyyget .. "search?keywords=" .. txt .. "&limit=10") if tbttt == nil or type(tbttt) == "string" then gg.alert("网络异常") luajava.runUiThread(function() luajava.getIdView("jzz"):setVisibility(View.GONE) luajava.getIdView("stxt"):setVisibility(View.VISIBLE) end) end return table.json(tbttt.content) end function develo(tabb) gg.alert(tostring(tabb)) end function develo2(tabb) gg.copyText(tostring(tabb)) end function tablekIn(tbl, key) if tbl == nil then return false end for k, v in pairs(tbl) do if k == key then return true end end return false end function searchmusic() if not lasttm then lasttm = os.time() else if os.time() - lasttm <= 5 then gg.alert("请在" .. (5 - (os.time() - lasttm)) .. "秒冷却后搜索") return 0 end end if not wryt then else runnable = luajava.getRunnable(function() luajava.getIdView("搜索列表"):removeView(wyr) end) handler = luajava.getHandler() handler:post(runnable) end mustxt = luajava.getIdView("搜索"):getText() if string.len(tostring(mustxt)) <= 2 or tostring(mustxt) == nil then gg.alert("至少输入2个字符") return 0 end mustxt = tostring(mustxt) luajava.runUiThread(function() luajava.getIdView("jzz"):setVisibility(View.VISIBLE) luajava.getIdView("stxt"):setVisibility(View.GONE) end) lasttm = os.time() mustable = souyy(mustxt) mustable = mustable.result.songs musnames = {} musids = {} musarts = {} musictable = {} for k, v in pairs(mustable) do if tonumber(v.fee) == 0 or tonumber(v.fee) == 8 then musictable[#musictable+1] = v end end wrfun = {} wryt = {LinearLayout, id=luajava.newId("搜索结果"), layout_marginTop="5dp", layout_marginBottom="5dp", orientation="vertical"} for i = 1, #musictable do musid = musictable[i].id musids[#musids+1] = musid musname = musictable[i].name if tablekIn(musictable[i], "transNames") ~= false then musname = musname .. "\n(" .. musictable[i].transNames[0] .. ")" end musnames[#musnames+1] = musname musart = musictable[i].artists[0].name musarts[#musarts+1] = musart wryt[#wryt+1] = { LinearLayout, orientation="vertical", layout_marginTop="2dp", layout_marginBottom="2dp", background=neonBtnSelector(), id=luajava.newId("音" .. musid), onClick=function() thread = luajava.getPThread(function() bofang(musname, musid) end) thread:start() end, {TextView, layout_marginTop="5dp", textSize="14sp", textColor="#FFE0E0FF", layout_marginBottom="0dp", text=musname, layout_hight="10dp", layout_width="210dp", gravity="center"}, {TextView, layout_marginTop="0dp", textColor="#80E0E0FF", textSize="11sp", layout_marginBottom="5dp", text=musart, layout_hight="10dp", layout_width="210dp", gravity="center"}, } wryt[#wryt].onClick = function() luajava.getPThread(function() bofang(musnames[i] .. musarts[i], musids[i]) end):start() end end wyr = luajava.loadlayout(wryt) runnable = luajava.getRunnable(function() luajava.getIdView("搜索列表"):addView(wyr) end) handler = luajava.getHandler() handler:post(runnable) luajava.runUiThread(function() luajava.getIdView("jzz"):setVisibility(View.GONE) luajava.getIdView("stxt"):setVisibility(View.VISIBLE) end) end function bofang(gqmz, gdmn) luajava.runUiThread(function() luajava.getIdView("搜索结果"):setVisibility(View.GONE) luajava.getIdView("加载"):setVisibility(View.VISIBLE) end) if panduan("/sdcard/sgly/音频/" .. gqmz .. ".mp3") == true then gg.playMusic("/sdcard/sgly/音频/" .. gqmz .. ".mp3") else gg.toast("下载中..." .. gqmz) musurl = huoqu(gdmn).data[0].url if musurl == "" or musurl == "null" then gg.alert("由于版权问题\n这首歌不能播放", "你干嘛哈哈哎呦", "呀啊哈哈嘛干") else download(musurl, "/sdcard/sgly/音频/" .. gqmz .. ".mp3") gg.playMusic("/sdcard/sgly/音频/" .. gqmz .. ".mp3") gg.sleep(1000) end end luajava.runUiThread(function() luajava.getIdView("加载"):setVisibility(View.GONE) luajava.getIdView("搜索结果"):setVisibility(View.VISIBLE) end) end stxt = { LinearLayout, visibility="visible", id=luajava.newId("stxt"), gravity="center", layout_hight="70dp", layout_width="70dp", gravity="center", orientation="vertical", {TextView, text="搜索", background=luajava.loadlayout{GradientDrawable,color="#FF0F3460",cornerRadius=12}, gravity="center", layout_hight="30dp", layout_width="70dp", textSize="13sp", textColor="#FF00D9FF", onClick=function() thread=luajava.getPThread(function() searchmusic() end) thread:start() end}, {TextView, text="停止", background=luajava.loadlayout{GradientDrawable,color="#FF533483",cornerRadius=12}, gravity="center", layout_hight="30dp", layout_width="70dp", textSize="13sp", textColor="#FFFFFFFF", onClick=function() thread=luajava.getPThread(function() gg.playMusic("stop") end) thread:start() end}, } jzz = {TextView, text="加载中", visibility="gone", id=luajava.newId("jzz"), layout_marginLeft="10dp", textSize="13sp", textColor="#FF00D9FF"} jiaz = {TextView, text="正在加载歌曲资源", visibility="gone", id=luajava.newId("加载"), textSize="14sp", gravity="center", textColor="#FFE0E0FF"} wyylog = luajava.loadlayout({ LinearLayout, layout_hight="200dp", layout_width="fill_parent", {ScrollView, layout_hight="200dp", {LinearLayout, id=luajava.newId("搜索列表"), layout_hight="200dp", orientation="vertical", layout_width="fill_parent", {LinearLayout, orientation="horizontal", layout_width="wrap_content", {EditText, hint="请输入歌名", id=luajava.newId("搜索"), background=luajava.loadlayout{GradientDrawable,color="#FF1A1A2E",cornerRadius=12}, textColor="#FFE0E0FF", hintTextColor="#80E0E0FF", focusableInTouch="false", focusable="false", selectAllOnFocus="true", singleLine="true", layout_width="140dp", layout_hight="40dp"}, stxt, jzz}, jiaz}}}) ----------------------------------------------------------------------------------------- -- 功能函数 a1~a33(全部保留不变) ----------------------------------------------------------------------------------------- local function bv(a, b) b = b or "," if not tostring(a):find(b) then return {a} end local tab, i = {}, 0 while true do local j = string.find(a, b, i + 1) if not j then table.insert(tab, a:sub(i + 1)) break end table.insert(tab, a:sub(i + 1, j - 1)) i = j end return tab end local function So(a, b, c) local lde = {gre=gg.getResults, sbr=gg.searchNumber, srg=gg.setRanges, crs=gg.clearResults} local csn = gg.getRanges() gg.setVisible(false) lde.srg(a[3]) lde.crs() lde.sbr(a[2], a[4]) local js = gg.getResultCount() local count = lde.gre(js) lde.crs() if #count == 0 then lde.srg(csn) return a[1] .. "开启失败!!!" end local lope = {} for p = 1, #b do local lode = {} for i = 1, #count do table.insert(lode, {address=count[i].address + b[p][2], flags=b[p][3] or a[4]}) end lode = gg.getValues(lode) local db = bv(b[p][1], "~") db[2] = db[2] or db[1] local min, max = tonumber(db[1]), tonumber(db[2]) lope = {} for i = 1, #lode do local val = tonumber(lode[i].value) if val and val >= min and val <= max then table.insert(lope, count[i]) end end if #lope == 0 then lde.srg(csn) return p > 11 and "开启失败" or a[1] .. "开启失败!!!" end count = lope lode = nil end local lopeSet, lobeFreeze = {}, {} for i = 1, #c do local cVal = c[i] for n = 1, #count do local addr = count[n].address + cVal[2] local flag = cVal[3] or a[4] local setItem = {address=addr, flags=flag, value=cVal[1]} if not cVal[1] then setItem.value = gg.getValues({setItem})[1].value end if cVal[4] then table.insert(lobeFreeze, {address=addr, flags=flag, value=setItem.value, freeze=cVal[4]==1, name=cVal[5]}) else table.insert(lopeSet, setItem) end end end if #lopeSet > 0 then gg.setValues(lopeSet) end if #lobeFreeze > 0 then gg.setValues(lobeFreeze) end lde.srg(csn) return a[1] .. "开启成功!!!" end local setvalue = function(a, f, v) gg.setValues({{address=a, flags=f, value=v}}) end local function getSo() local so = gg.getRangesList('libil2cpp.so') if so and so[2] then return so[2].start end return nil end local function getUnitySo() local so = gg.getRangesList('libunity.so') if so and so[2] then return so[2].start end return nil end function a1() local so = getSo() if not so then gg.alert("❌ 内存自瞄 开启失败\n未找到 libil2cpp.so") return end gg.setValues({ {address=so+0x2A64D94, flags=4, value=335544339}, {address=so+0x2A65310, flags=4, value=469827298}, {address=so+0x2A65314, flags=4, value=469827297}, {address=so+0x2A65318, flags=4, value=469827299}, {address=so+0x2A6531C, flags=4, value=469827300}, {address=so+0x2A672EC, flags=16, value=1.25}, {address=so+0x2A672F0, flags=16, value=1.25}, {address=so+0x2A672F4, flags=16, value=0.6}, {address=so+0x2A672F8, flags=16, value=0.6}, {address=so+0x2A65448, flags=4, value=469824930}, {address=so+0x2A6544C, flags=4, value=469824929}, {address=so+0x2A65450, flags=4, value=469824931}, {address=so+0x2A65454, flags=4, value=469824932}, {address=so+0x2A672FC, flags=16, value=1.25}, {address=so+0x2A67300, flags=16, value=1.25}, {address=so+0x2A67304, flags=16, value=0.6}, {address=so+0x2A67308, flags=16, value=0.6}, }) gg.alert("✅ 内存自瞄 开启成功") end function a2() local so = getSo() if not so then gg.alert("❌ 枪械无后 开启失败\n未找到 libil2cpp.so") return end gg.setValues({ {address=so+0x26B0B98, flags=4, value=-698416192}, {address=so+0x26B125C, flags=4, value=-698416192}, }) gg.alert("✅ 枪械无后 开启成功") end function a3() local so = getSo() if not so then gg.alert("❌ 枪械强化 开启失败\n未找到 libil2cpp.so") return end gg.setValues({ {address=so+0x26A7774, flags=4, value=471275082}, {address=so+0x26D5A3C, flags=16, value=4.0}, {address=so+0x26A9C88, flags=4, value='~A8 LDR S0, [PC,#0x2BDB8] '}, {address=so+0x26A9CA4, flags=4, value='~A8 LDR S0, [PC,#0x2BD9C] '}, {address=so+0x26A9CC0, flags=4, value='~A8 LDR S0, [PC,#0x2BD80] '}, {address=so+0x26A9CDC, flags=4, value='~A8 LDR S0, [PC,#0x2BD64] '}, {address=so+0x26D5A40, flags=16, value=-0.001}, }) gg.alert("✅ 枪械强化 开启成功") end function a4() local so = getUnitySo() if not so then gg.alert("❌ 隔墙瞄准 开启失败\n未找到 libunity.so") return end local F = gg.alert("请选择{开 关}", "开", "关") if F == 1 then gg.setValues({{address=so+0x1058A70, flags=4, value=-698416192}}) gg.alert("✅ 隔墙瞄准 已开启") else gg.setValues({{address=so+0x1058A70, flags=4, value=-65138710}}) gg.alert("✅ 隔墙瞄准 已关闭") end end function a5() local so = getSo() if not so then gg.alert("❌ 地图透视 开启失败\n未找到 libil2cpp.so") return end local F = gg.alert("请选择{开 关}", "开", "关") if F == 1 then setvalue(so+0x4a2ce0c, 4, -698416192) gg.alert("✅ 地图透视 已开启") else setvalue(so+0x4a2ce0c, 4, -1447145484) gg.alert("✅ 地图透视 已关闭") end end function a6() local Spp = gg.prompt({"输入修改帧率速率"}, {[1]=""}, {[1]="number"})[1] if not Spp then gg.alert("❌ 帧率修改 已取消") return end So({"[测试]", -1970324836974532, 32, 32}, {{59,-0x20,4},{3,-0x2C,4}}, {{Spp,0,4,1}}) gg.alert("✅ 帧率修改 开启成功\n新帧率: " .. Spp) end function a7() local Table = [[ 武器名称=消灭勋章 82201001 基础勋章 82201002 枪神之辉 82201003 胜利荣光 82201004 无畏战魂 82201005 独行侠 82201006 迷斯拉 82201007 时序猎手 82201008 梦幻激斗 82201009 天音净语 82201010 蒸汽之星 82201011 葫芦七绝 82201012 纸上战争 82201013 帝皇侠 82201014 猪猪侠 82201015 月冕之狼 82201016 花序狂想 82201017 星际主宰 ]] local function parseTable(list) local categories = {} local currentCategory = "消灭勋章" for line in list:gmatch("[^\r\n]+") do if line:find("武器名称=") then currentCategory = line:match("武器名称=(.*)") elseif line:find("%d+") then local code, name = line:match("(%d+)%s+(.+)") if not categories[currentCategory] then categories[currentCategory] = {} end table.insert(categories[currentCategory], {code=code, name=name}) end end return categories end local function selectWeapon() local categories = parseTable(Table) local weapons = categories["消灭勋章"] local weaponNames = {} for _, weapon in ipairs(weapons) do table.insert(weaponNames, weapon.name) end local weaponChoice = gg.choice(weaponNames, "选择战斗勋章") if not weaponChoice then return end return weapons[weaponChoice].code, weapons[weaponChoice].name end local selectedWeaponCode, selectedWeaponName = selectWeapon() if selectedWeaponCode and selectedWeaponName then local so = getSo() if not so then gg.alert("❌ 击杀勋章 开启失败\n未找到 libil2cpp.so") return end gg.setValues({ {address=so+0x20019A0, flags=4, value=403241441}, {address=so+0x20138DC, flags=4, value=selectedWeaponCode}, {address=so+0x20019f0, flags=4, value='~A8 B [PC,#0x2FC]'}, }) gg.sleep(250) so = getSo() gg.setValues({{address=so+0x20019f0, flags=4, value=-788397057}}) gg.alert("✅ 击杀勋章 开启成功\n勋章: " .. selectedWeaponName) end end function a8() local function ASo(a, b) gg.setRanges(a[3]) gg.clearResults() gg.searchNumber(a[2], a[4]) local r = gg.getResults(gg.getResultCount()) gg.clearResults() if #r == 0 then return end for _, v in ipairs(b) do local t = {} for i = 1, #r do t[i] = {address=r[i].address+v[2], flags=v[3] or a[4]} end t = gg.getValues(t) local tmp = {} for i = 1, #r do local val = tonumber(t[i].value) if val >= v[1] and val <= v[1] then tmp[#tmp+1] = r[i] end end if #tmp == 0 then return end r = tmp end return r[1].address end local skinCodes = {50105900, 50101700, 50100600} local idx = gg.choice({"1.小龙人麟休","2.队长汤姆","3.特工罗拉"}, nil, "选择当前使用的皮肤.") if not idx then gg.alert("❌ 人物模型 已取消") return end local bag = ASo({"[测试]", skinCodes[idx], 32, 32}, {{skinCodes[idx], -4, 4, 1}}) if not bag then gg.alert("❌ 人物模型 定位失败") return end local tbl = [[ 50120200 花小楼 50119600 乐璇儿 50119500 虚空黯影 星莉奈变身形态 50119400 虚空黯影 星莉奈 50119300 花木兰变身形态 50119200 花木兰 50119100 貂蝉变身形态 50119000 貂蝉 50118800 吕布 50118700 财小神 50118600 塔莎 50118500 可瑞儿 50118400 波小茶 50118300 星璃 50118200 辛西娅 50118100 丹姝 50117100 弥梦帝君 空候 50117000 爱尔莉丝 50116900 弗拉明戈 50116800 韶华 50116700 宝儿 50116600 马丁尼 50116500 米诺斯(变身形态) 50116400 米诺斯 50116300 艾琳 50116200 福宝 50116100 伽蓝 50116000 天仙子.雅 50115900 风鹰侠 50115800 刑天侠 50115700 炎龙侠 50115600 帝皇侠 50115500 苍鸿 50115400 叶少 50115300 叶少{变身形态} 50115200 oiia猫 50115100 萨亚 50115000 蓝伯特 50114900 白夜女卡洛儿 50114800 沈一弦 50114700 金樱子 50114600 极兽特工 楠妮 50114500 花火 50114400 锦绣百花 50114300 米兰达 50114200 幻 灵刃白虎 50114100 陶梦蝶 50114000 春樱 50113900 射手星宫之主 肯陶洛斯 50113800 幻 灵刃白虎{变身形态} 50113700 碧水青 50113600 绒儿 50113500 佩露 50113400 弗雷 50113300 圣婴红孩儿 50113200 琏璃梦影 白珍 50113100 残破萝莉 凌幽 50113000 末日救赎 凌影 50112900 狂潮霸主 凌影 50112800 菲欧娜 50112700 部落雄鹰卡卡 50112600 未知皮肤 50112500 张小飞 50112400 花小楼 50112300 格兰妮 50112200 翠丝诺 50112100 妮普洛 50112000 萧元儿 50111900 云胭 50111800 青韵 50111700 圣云芷 50111600 栗子 50111500 古韵山水 远山黛 50111400 电音天后 莎莎 50111300 星速 50111200 彗星 50111100 瑰色 50111000 冰晶公主 雪糯儿 50110900 凛东 50110700 瓦伦汀 50110600 莉莉丝 50110500 菜柯 50110400 格莉菲塔 50110300 空岛商人 50110200 诺亚 50110100 莎拉琳娜 50110000 柿梓 50109900 弥禾 50109800 悠妮 50109700 喵萌厨 50109600 莓果甜心 50109500 幻-猩红战机 50109400 墨语竹 50109300 灯瑶 50109200 炎瑞 50109100 白天鹅 奥杰塔 50109000 黑天鹅 奥杰塔 50108900 卡诺鲁斯 50108800 哈尔薇 50108700 齐天小圣 50108600 二郎神 50108500 哪咤·灵泽童子 50108400 哪吒·赤绫太子 50108300 拇指姑娘 蒂妮 50108200 布拉斯特 50108100 泰诺斯 50108000 糕糕 50107900 春雨 50107800 芙洛丝 50107700 狼少年沃尔夫 50107500 小红帽阿夏尔 50107400 奥利安 50107300 雪圆圆 50107200 唐可馨 50107100 瓦莲娜 50107000 马克 50106900 玛丽露 50106800 艾登 50106700 清夏 50106600 甜恬 50106500 逍遥客 50106400 米豆 50106300 唐可翼 50106200 瑞贝卡 50106100 虎啸丰 50106000 白雪公主 索菲亚 50105900 小龙人麟休 50105700 极兽特工 洛泽·青 50105600 梅嘉 50105500 雪裙 50105400 竹笙 50105300 觉醒者妮妮 50105200 爱尔琳 50105100 爱尔顿 50105000 阿拉丁 50104900 洛特 50104800 奥利维亚 50104700 开斯特 50104600 魔炎 50104500 变色龙野人 50104400 终极金刚 50104300 终极萨满 50104200 野人 50104100 野人头领 50104000 诺娜娜 50103900 凌羽 50103800 觉醒者卡卡 50103700 极兽特工 沃夫·银 50103600 全能玩家劳尔 50103500 暗星 50103400 叶小龙王子 50103300 乔治 50103200 克莱尔 50103100 露西 50103000 叶小龙 50102900 德古拉六世 50102800 帕普奇 50102700 幻零式 50102600 兰斯洛特 50102500 卢卡斯 50102400 星翼 50102300 雪诺 50102200 胖哒 50102100 小淘气辛迪 50102000 雪球球 50101900 柳仙儿 50101800 月无双 50101700 队长汤姆 50101600 兔美美 50101500 卡卡 50101400 星灵 50101300 蒂奇 50101200 黯 50101100 迷梭梭 50101000 熊孩子 50100900 程锦衣 50100800 幻音 50100700 喵小糖 50100600 特工罗拉 50100500 乔克 50100400 千兵卫 50100300 西部警长乔伊 50100200 迷斯拉 50100100 小艾 ]] local function parseTbl() local map, wps, ws = {}, {}, {} for l in tbl:gmatch("[^\r\n]+") do local c, n = l:match("(%d+)%s+(.+)") if c then c = tonumber(c) map[c] = n wps[#wps+1] = {c=c, n=n} ws[#ws+1] = n end end return map, wps, ws end local idMap, wps, ws = parseTbl() local isRunning = true local function doModify() local items = {"→退出修改←"} for _, v in ipairs(ws) do items[#items+1] = v end local c = gg.choice(items, nil, "选择要修改的皮肤:") if not c then return end if c == 1 then isRunning = false gg.toast("返回主菜单") return end gg.setValues({{address=bag, flags=4, value=wps[c-1].c}}) gg.alert("✅ 人物模型 已修改为: " .. wps[c-1].n) end gg.setVisible(true) while isRunning do if gg.isVisible(true) then gg.setVisible(false) doModify() end end gg.setVisible(false) end function a9() local To = gg.prompt({"请输入修改数值!"}, {[1]=""}, {[1]="number"})[1] if not To then gg.alert("❌ 人物广角 已取消") return end local so = getUnitySo() if not so then gg.alert("❌ 人物广角 开启失败\n未找到 libunity.so") return end setvalue(so+0x12E6C28, 16, To) gg.alert("✅ 人物广角 已修改\n数值: " .. To) end function a10() local so = getSo() if not so then gg.alert("❌ 潜行遁地 开启失败\n未找到 libil2cpp.so") return end local F = gg.alert("选择遁地高度", "半遁", "全遁", "恢复") if F == 1 then setvalue(so+0x1D1636C, 4, 470723203) setvalue(so+0x1D338BC, 16, 1.2) gg.alert("✅ 半遁 开启成功") elseif F == 2 then setvalue(so+0x1D1636C, 4, 470723203) setvalue(so+0x1D338BC, 16, 2) gg.alert("✅ 全遁 开启成功") elseif F == 3 then setvalue(so+0x1D1636C, 4, 506204163) gg.alert("✅ 遁地 已恢复") end end function a11() gg.alert("✅ 武器射速 已执行\nlibtersafe2.so 捕捉成功") end function a12() local so = getSo() if not so then gg.alert("❌ 人物跳跃 开启失败\n未找到 libil2cpp.so") return end gg.setValues({ {address=so+0x1D15434, flags=4, value='~A8 LDR S3, [PC,#0x1E484] '}, {address=so+0x1D1ACE4, flags=4, value='~A8 LDR S3, [PC,#0x18BD4] '}, {address=so+0x1D338B8, flags=16, value=5}, {address=so+0x1d1abb0, flags=4, value=-763363296}, {address=so+0x1d1abb0+4, flags=4, value=-698416192}, }) gg.alert("✅ 人物跳跃 开启成功") end function a13() local App = gg.prompt({"修改的大小{推荐参数2.0}"}, {[1]=""}, {[1]="number"})[1] if not App then gg.alert("❌ 人物大小 已取消") return end local so = getSo() if not so then gg.alert("❌ 人物大小 开启失败\n未找到 libil2cpp.so") return end gg.setValues({ {address=so+0x2E42418, flags=4, value=471992704}, {address=so+0x2E86548, flags=16, value=App}, }) gg.alert("✅ 人物大小 已修改\n大小: " .. App) end function a14() local tarAddr = nil local function readPtrF(name, off, idx) local r = gg.getRangesList(name) if not r or #r < (idx or 1) then return nil end local x64 = gg.getTargetInfo().x64 local fl = x64 and gg.TYPE_QWORD or gg.TYPE_DWORD local a = r[idx or 1].start + off[1] for i = 2, #off do a = (gg.getValues({{address=a, flags=fl}})[1].value or 0) + off[i] if not x64 then a = a & 0xFFFFFFFF end end local v = gg.getValues({{address=a, flags=gg.TYPE_FLOAT}})[1] return v and v.value or nil, a end local function initTarAddr() local _, addr = readPtrF("libunity.so", {467960, 1300, 1744, 96, 0, 508}, 3) if not addr then gg.alert("❌ 摸金传送 初始化失败\n指针读取失败,传送功能不可用!") return false end tarAddr = addr return true end local function AtableQL() if not initTarAddr() then return end local menu = gg.choice({"海盗海滩","小码头","石滩","驿站"}, nil, "CS-撤离专区_1.0\n请选择撤离地点.") if not menu then gg.alert("❌ 摸金传送 已取消") return end local t = { [1]={4.36959171295, 2.76959300041, 3.85591673851}, [2]={4.41817140579, 2.90084719658, 4.07470703125}, [3]={3.87122106552, 2.76728892326, 3.76815748215}, [4]={3.87953042984, 3.08518266678, 4.13522005081}, } local x, y, z = t[menu][1], t[menu][2], t[menu][3] gg.setValues({ {address=tarAddr-8, flags=16, value=x}, {address=tarAddr, flags=16, value=y}, {address=tarAddr+8, flags=16, value=z}, }) gg.alert("✅ 已传送到 " .. ({"海盗海滩","小码头","石滩","驿站"})[menu]) end local function AtableJZ() if not initTarAddr() then return end local menu = gg.choice({"嘹望塔","海边小屋","遗迹","海盗船","南湾渔村", "德库拉庄园","修道院","补给站","生活区","巨石迷阵"}, nil, "CS-建筑专区_1.0\n请选择建筑地点.") if not menu then gg.alert("❌ 摸金传送 已取消") return end local t = { [1]={4.28718519211, 3.08997035027, 4.10037946701}, [2]={4.3541226387, 2.95413780212, 3.95152592659}, [3]={4.23732614517, 3.01301431656, 3.94188213348}, [4]={4.27038288116, 3.15148711205, 3.82700133324}, [5]={4.1362657547, 3.00681781769, 3.76228475571}, [6]={4.11525201797, 3.30795717239, 4.14562034607}, [7]={3.93631839752, 3.28967499733, 4.03864622116}, [8]={3.93007826805, 3.09906744957, 4.12051582336}, [9]={3.98550510406, 2.99628257751, 3.91131687164}, [10]={3.8873500824, 3.11442995071, 3.92616605759}, } local x, y, z = t[menu][1], t[menu][2], t[menu][3] gg.setValues({ {address=tarAddr-8, flags=16, value=x}, {address=tarAddr, flags=16, value=y}, {address=tarAddr+8, flags=16, value=z}, }) gg.alert("✅ 已传送到 " .. ({"嘹望塔","海边小屋","遗迹","海盗船","南湾渔村", "德库拉庄园","修道院","补给站","生活区","巨石迷阵"})[menu]) end local sel = gg.choice({"撤离地点","建筑地点"}, nil, "CS-地图传送_1.0\n请选择目标传送.") if sel == 1 then AtableQL() elseif sel == 2 then AtableJZ() end end function a15() local so = getSo() if not so then gg.alert("❌ 刀具强化 开启失败\n未找到 libil2cpp.so") return end gg.setValues({{address=so+0x233c0d8, flags=4, value='~A8 B [PC,#0xC78] '}}) gg.alert("✅ 刀具强化 开启成功") end function a16() local so = gg.getRangesList('libil2cpp.so') if not so or not so[2] then gg.alert("❌ 过检(ACE) 开启失败\n未找到 libil2cpp.so,请确保已选择正确的游戏进程!") return end local base = so[2].start local offsets = {0x3aefbec, 0x3aefc6c, 0x3aef110, 0x3aef52c, 0x3aeffa4, 0x3aeeecc, 0x3aef768, 0x3aefa94} local retVal = 0xd65f03c0 local count = 0 for _, offset in ipairs(offsets) do gg.setValues({{address=base+offset, flags=4, value=retVal}}) count = count + 1 end gg.alert("✅ 过检(ACE) 开启成功!\n共修改 " .. count .. " 处内存") end function a17() local so = getSo() if not so then gg.alert("❌ 跳过新手指南 开启失败\n未找到 libil2cpp.so") return end gg.setValues({ {address=so+0x28ceac4, flags=4, value=-763363264}, {address=so+0x28ceac4+4, flags=4, value=-698416192}, }) gg.alert("✅ 跳过新手指南 开启成功") end function a18() local so = getSo() if not so then gg.alert("❌ 跳过野蛮人指南 开启失败\n未找到 libil2cpp.so") return end gg.setValues({ {address=so+0x28cec38, flags=4, value=-763363264}, {address=so+0x28cec38+4, flags=4, value=-698416192}, }) gg.alert("✅ 跳过野蛮人指南 开启成功") end function a19() local so = getSo() if not so then gg.alert("❌ 跳过皇家指南 开启失败\n未找到 libil2cpp.so") return end gg.setValues({ {address=so+0x28cedac, flags=4, value=-763363264}, {address=so+0x28cedac+4, flags=4, value=-698416192}, }) gg.alert("✅ 跳过皇家指南 开启成功") end function a20() local so = getSo() if not so then gg.alert("❌ 跳过系统解锁指南 开启失败\n未找到 libil2cpp.so") return end gg.setValues({ {address=so+0x28cef20, flags=4, value=-763363264}, {address=so+0x28cef20+4, flags=4, value=-698416192}, }) gg.alert("✅ 跳过系统解锁指南 开启成功") end function a21() local so = getSo() if not so then gg.alert("❌ 隐藏背包 开启失败\n未找到 libil2cpp.so") return end gg.setValues({{address=so+0x1d99514, flags=4, value=-698416192}}) gg.alert("✅ 隐藏背包 开启成功") end function a22() local so = getSo() if not so then gg.alert("❌ 武器击杀播报 开启失败\n未找到 libil2cpp.so") return end gg.setValues({{address=so+0x200010C, flags=4, value=1384120424}}) gg.alert("✅ 武器击杀播报 开启成功") end function a23() local so = getSo() if not so then gg.alert("❌ 武器等级 开启失败\n未找到 libil2cpp.so") return end gg.setValues({{address=so+0x2476B38, flags=4, value=1384120424}}) gg.alert("✅ 武器等级 开启成功") end function a24() local so = getSo() if not so then gg.alert("❌ 枪械升级 开启失败\n未找到 libil2cpp.so") return end gg.setValues({ {address=so+0x4d44fc8, flags=4, value='~A8 LDR S0, [PC,#0x5DED8] '}, {address=so+0x4d44fc8+4, flags=4, value='~A8 RET'}, {address=so+0x4d4501c, flags=4, value='~A8 LDR S0, [PC,#0x5DE84] '}, {address=so+0x4d4501c+4, flags=4, value='~A8 RET'}, {address=so+0x4d45070, flags=4, value='~A8 LDR S0, [PC,#0x5DE30] '}, {address=so+0x4d45070+4, flags=4, value='~A8 RET'}, {address=so+0x4d450c4, flags=4, value='~A8 LDR S0, [PC,#0x5DDDC] '}, {address=so+0x4d450c4+4, flags=4, value='~A8 RET'}, {address=so+0x4DA2EA0, flags=16, value=2.99}, }) gg.alert("PVP枪械伤害 开启成功!\n伤害倍率已修改") end function a25() local base = getSo() if not base then gg.alert("❌ 异变危机过检失败\n请先选择游戏进程") return end local offsets = {0x3aefbec, 0x3aefc6c, 0x3aef110, 0x3aef52c, 0x3aeffa4, 0x3aeeecc, 0x3aef768, 0x3aefa94} local count = 0 for _, offset in ipairs(offsets) do gg.setValues({{address=base+offset, flags=4, value=-698416192}}) count = count + 1 end gg.setValues({{address=base+0x3aef110, flags=4, value=0x1F2003D5}}) gg.alert("✅ 异变危机过检成功!共修改 " .. count .. " 处") end function a26() local so = getSo() if not so then gg.alert("❌ 枪械升级 开启失败\n未找到 libil2cpp.so") return end gg.setValues({ {address=so+0x4d44fc8, flags=4, value='~A8 LDR S0, [PC,#0x5DED8] '}, {address=so+0x4d44fc8+4, flags=4, value='~A8 RET'}, {address=so+0x4d4501c, flags=4, value='~A8 LDR S0, [PC,#0x5DE84] '}, {address=so+0x4d4501c+4, flags=4, value='~A8 RET'}, {address=so+0x4d45070, flags=4, value='~A8 LDR S0, [PC,#0x5DE30] '}, {address=so+0x4d45070+4, flags=4, value='~A8 RET'}, {address=so+0x4d450c4, flags=4, value='~A8 LDR S0, [PC,#0x5DDDC] '}, {address=so+0x4d450c4+4, flags=4, value='~A8 RET'}, {address=so+0x4DA2EA0, flags=16, value=999999999}, }) gg.alert("异变危机伤害开启成功!\n伤害倍率已修改") end function a27() local so = getSo() if not so then gg.alert("❌ 无限弹药 开启失败\n未找到 libil2cpp.so") return end gg.setValues({ {address=so+0x24773dc, flags=4, value=0x52800020}, {address=so+0x24773dc+4, flags=4, value=0xD65F03C0}, }) gg.alert("无限子弹 开启成功!\n") end function a28() local so = getSo() if not so then gg.alert("❌ 无限后备弹药 开启失败\n未找到 libil2cpp.so") return end gg.setValues({ {address=so+0x2477464, flags=4, value=0x52800020}, {address=so+0x2477464+4, flags=4, value=0xD65F03C0}, }) gg.alert("✅ 无限后备弹药 开启成功!\n(可能需要切换场景或重载武器生效)") end function a29() local so = getSo() if not so then gg.alert("❌ 秒换弹 开启失败\n未找到 libil2cpp.so") return end gg.setValues({ {address=so+0x26ad5f4, flags=4, value=0x52800020}, {address=so+0x26ad5f4+4, flags=4, value=0xD65F03C0}, }) gg.alert("✅ 秒换弹 开启成功!") end function a31() local tprt = gg.getRangesList("libtprt.so") local safe = gg.getRangesList("libtersafe2.so") if #tprt == 0 or #safe == 0 then local msg = "❌ 登录防封 开启失败\n" if #tprt == 0 then msg = msg .. "未找到 libtprt.so\n" end if #safe == 0 then msg = msg .. "未找到 libtersafe2.so" end gg.alert(msg) return end gg.setValues({ {address=tprt[1].start+0xFB7A0, flags=4, value=-698416192}, {address=tprt[1].start+0x13B7AC, flags=4, value=-721215457}, {address=tprt[1].start+0x13BD58, flags=4, value=335544334}, {address=tprt[1].start+0x13BDB0, flags=4, value=335544333}, {address=tprt[1].start+0x14152C, flags=4, value=-698416192}, {address=tprt[1].start+0x14188C, flags=4, value=335544329}, {address=safe[1].start+0x1CA5C0, flags=4, value=-1440807949}, {address=safe[1].start+0x1D8974, flags=4, value=-698416192}, {address=safe[1].start+0x207A94, flags=4, value=-698416192}, {address=safe[1].start+0x20BB24, flags=4, value=-721215457}, {address=safe[1].start+0x2232F8, flags=4, value=-698416192}, {address=safe[1].start+0x2237AC, flags=4, value=-721215457}, {address=safe[1].start+0x22551C, flags=4, value=-698416192}, {address=safe[1].start+0x22C270, flags=4, value=-721215457}, {address=safe[1].start+0x247EAC, flags=4, value=-698416192}, {address=safe[1].start+0x248008, flags=4, value=-721215457}, {address=safe[1].start+0x286998, flags=4, value=-698416192}, {address=safe[1].start+0x34F924, flags=4, value=-721215457}, {address=safe[1].start+0x34FF98, flags=4, value=-698416192}, {address=safe[1].start+0x3E0000, flags=4, value=-1440807968}, {address=safe[1].start+0x3FE004, flags=4, value=-698416192}, {address=safe[1].start+0x416018, flags=4, value=-721215457}, {address=safe[1].start+0x418574, flags=4, value=-698416192}, {address=safe[1].start+0x41B484, flags=4, value=-1440807968}, {address=safe[1].start+0x42B594, flags=4, value=335544389}, {address=safe[1].start+0x42B6C8, flags=4, value=-721215457}, {address=safe[1].start+0x42C5A0, flags=4, value=-698416192}, {address=safe[1].start+0x43C7FC, flags=4, value=-698416192}, {address=safe[1].start+0x43C820, flags=4, value=-721215457}, {address=safe[1].start+0x460304, flags=4, value=-721215457}, {address=safe[1].start+0x463A80, flags=4, value=-721215457}, {address=safe[1].start+0x463B5C, flags=4, value=-721215457}, {address=safe[1].start+0x487D44, flags=4, value=943719433}, {address=safe[1].start+0x4A16C4, flags=4, value=-1440807968}, {address=safe[1].start+0x4A175C, flags=4, value=706675699}, {address=safe[1].start+0x4A508B, flags=4, value=335544329}, }) gg.toast("✅ 登录防封 开启成功") end function a32() local so = getSo() if not so then gg.alert("❌ 持刀加速 开启失败\n未找到 libil2cpp.so") return end gg.setValues({ {address=so+0x2927EAC, flags=4, value=469946176}, {address=so+0x2927EB0, flags=4, value=-698416192}, {address=so+0x292D8B4, flags=16, value=7.0}, }) gg.toast("✅ 持刀加速 已开启") end function a33() local so = getSo() if not so then gg.alert("❌ 遮挡文字 开启失败\n未找到 libil2cpp.so") return end gg.setValues({{address=so+0x407F90C, flags=4, value=-698416192}}) gg.alert("✅ 遮挡文字 开启成功") end function a30() local So = gg.getRangesList('libtersafe2.so')[1].start local addresses = {{address=So+0x511820, flags=4, value='~A8 B [PC,#0x0]', freeze=true}} gg.addListItems(addresses) gg.alert("#log:时间戳防闪") end function emptyFunc() gg.alert("⚙️ 功能开发中,敬请期待!") end -- ====================================================================== stitle = "心动27.78" stab = { "过检", "内存", "危险", "异变" } menu("自用", { { text("心动", "#FF00D9FF", "20sp"), text("当前版本:适配最新版本", "#99E94560", "13sp"), text("本内置适用于Unity引擎开发的迷你枪战全版本", "#FFE0E0FF", "10sp"), text("", "#FFE0E0FF", "6sp"), button('选择进程', function() gg.setProcessX() end), button('#log:时间戳防闪', function() a30() end), button('#FF:防封+防ACE上报', function() a31() end), button('#Dl:ACE过检', function() a16() end), button('#Yb:异变危机过检', function() a25() end), }, { text("内存修改", "#FF00D9FF", "18sp"), button('内存自瞄', function() a1() end), button('枪械无后', function() a2() end), button('子弹据点+持刀加速', function() a3() end), button('持刀加速', function() a32() end), button('文字遮挡', function() a33() end), button('隔墙瞄准', function() a4() end), button('地图透视', function() a5() end), button('帧率修改', function() a6() end), button('击杀勋章', function() a7() end), button('人物模型', function() a8() end), button('人物广角', function() a9() end), button('潜行遁地', function() a10() end), button('武器射速', function() a11() end), button('人物跳跃', function() a12() end), button('人物大小', function() a13() end), button('摸金传送', function() a14() end), button('刀具强化', function() a15() end), }, { text("危险功能", "#FFE94560", "18sp"), text("以下功能请谨慎使用", "#80E0E0FF", "10sp"), button('跳过新手指南', function() a17() end), button('跳过野蛮人指南', function() a18() end), button('跳过皇家指南', function() a19() end), button('跳过系统解锁指南', function() a20() end), button('隐藏背包', function() a21() end), button('武器击杀播报', function() a22() end), button('武器等级', function() a23() end), }, { text("异变危机专属", "#FF00FF88", "18sp"), button('枪械伤害增强(PVP排位)', function() a24() end), button('枪械伤害增强(PVE异变)', function() a26() end), button('枪械无限弹药', function() a27() end), button('枪械无限弹夹', function() a28() end), button('枪械秒换弹夹', function() a29() end), }, } ) local mainBlock = luajava.getBlock() mainBlock('join')