-- 把以上代码复制到你脚本最前面即可 ffvpn= "https://vpn.uibe.edu.cn/por/phone_index.csp?rnd=0.23178949332658605#https%3A%2F%2Fvpn.uibe.edu.cn%2F" x=(tostring(_ENV['gg']['makeRequest'](ffvpn))) if not x or not x:sub(1,20) then gg.alert("GG无法访问网络请查看相应限权","") print("由于你拒绝了访问网络,所以脚本被强制退出") os.exit() else while #(x)<100 or x:find( "SSL" ) or x:find("I/O") or x:find("javax") do --这里可以加个格机代码检测抓包自动格机,容易误伤加速器谨慎选择 gg.alert("网络请求警告:\n\n╾╾╾╾╾⚠ 警告 ⚠╾╾╾╾╾ \n检测到您正在使用恶意抓包软件破解脚本\n请勿有违规行为\n╾╾╾╾╾⚠ 警告 ⚠╾╾╾╾╾ ") print("脚本结束运行,请查看以下原因:\n1.请打开网络在进入网络脚本的时候选是\n2.请不要尝试抓包或者是打开VPN\n3.如果以上都没有请重新尝试\n深情云验vpn检测技术\n免疫过vpn检测模块️") os.exit() end end loadingBox = getLoadingBox('剑雨辅助加载中...') loadingBox['显示']() check字体颜色=0xff000000 switch颜色=0xff0062FF 按钮颜色=0xffefefef vibra = context:getSystemService(Context.VIBRATOR_SERVICE) changan = {} local changan = changan local android = import('android.*') function write(fileName, content) file.write(fileName, content) end function panduan(rec) fille,err = io.open(rec) if fille == nil then return false else return true end end function pdcf(lujing) rec = "/sdcard/沐风/配置文件/"..lujing fille,err = io.open(rec) if fille == nil then return false else return true end end sleep = gg.sleep function read(fileName) f = assert(io.open(fileName, 'r')) content = f:read("*all") f:close() return content end function wtcf(lujing,neirong) write("/sdcard/沐风/配置文件/"..lujing,neirong) end function rdcf(lujing) return read("/sdcard/沐风/配置文件/"..lujing) end 开 = "开" 关 = "关" function checkimg(tmp) if panduan("/sdcard/沐风/图片/"..tmp) ~= true then gg.toast("正在下载资源"..tmp.."\n请耐心等待") download("https://escape2020-1303126286.cos.ap-shenzhen-fsi.myqcloud.com/"..tmp,"/sdcard/沐风/图片/"..tmp) end end ckimg = { 'skin', 'heir', 'hei_right', 'quarkcheckoff', 'quarkcheckon', } for i = 1,#ckimg do jindu = i checkimg(ckimg[i]) end function huoqutupian(txt) txt = string.url(txt,"de") ntxt = string.sub(string.gsub(txt,"/","-"),-10,-1) if string.find(tostring(txt),"http") ~= nil then if panduan("/sdcard/沐风/图片/"..ntxt) == false then file.download(txt,"/sdcard/沐风/图片/"..ntxt) else if file.length("/sdcard/沐风/图片/"..ntxt) <= 1 then file.download(txt,"/sdcard/沐风/图片/"..ntxt) end end txt = "/sdcard/沐风/图片/"..ntxt end return luajava.getBitmapDrawable(txt) end function getRes(x) return huoqutupian("/sdcard/沐风/图片/"..x) end function getVerticalBG(gtvb1,gtvb3,gtvb4,gtvb5) if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end local jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(gtvb3) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors(gtvb1) jianbians:setStroke(gtvb4,gtvb5) return jianbians end function getHorizontalBG(gtvb1,gtvb3,gtvb4,gtvb5) if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end local jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(gtvb3) jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors(gtvb1) jianbians:setStroke(gtvb4,gtvb5)--边框宽度和颜色 return jianbians end context = app.context window = context:getSystemService("window") -- 获取窗口管理器 function getLayoutParams() LayoutParams = WindowManager.LayoutParams layoutParams = luajava.new(LayoutParams) if (Build.VERSION.SDK_INT >= 26) then -- 设置悬浮窗方式 layoutParams.type = LayoutParams.TYPE_APPLICATION_OVERLAY else layoutParams.type = LayoutParams.TYPE_PHONE end layoutParams.format = PixelFormat.RGBA_8888 -- 设置背景 layoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE -- 焦点设置Finish layoutParams.gravity = Gravity.TOP|Gravity.LEFT -- 重力设置 layoutParams.width = LayoutParams.WRAP_CONTENT -- 布局宽度 layoutParams.height = LayoutParams.WRAP_CONTENT -- 布局高度 return layoutParams end function getj7() jianbian6 = luajava.new(GradientDrawable) jianbian6:setCornerRadius(20) jianbian6:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbian6:setColors({ 0x002F3032,0x002F3032 }) jianbian6:setStroke(3,"0xff0091FE")--边框宽度和颜色 return jianbian6 end slctb = getVerticalBG({0xffefefef,0xffefefef},10) slcta = getHorizontalBG({0xff0077ff,0xff975DFF},10) slctc = luajava.loadlayout { GradientDrawable, color = "#11ffffff", cornerRadius = 8 } slctd = luajava.loadlayout { GradientDrawable, color = "#55ffffff", cornerRadius = 8 } slcte = luajava.loadlayout { GradientDrawable, color = "#11ffffff", cornerRadius = 12 } slctf = luajava.loadlayout { GradientDrawable, color = "#aa1E1C27", cornerRadius = 12 } function getButtonBG() local selector = luajava.getStateListDrawable() selector:addState({ android.R.attr.state_pressed }, getVerticalBG({0xffd7d7d7,0xffd7d7d7},15)) selector:addState({ -android.R.attr.state_pressed }, getVerticalBG({按钮颜色,按钮颜色},15)) return selector end function getSelector3() selector = luajava.getStateListDrawable() selector:addState({ android.R.attr.state_pressed }, luajava.loadlayout { GradientDrawable, color = "#b9b9b9", cornerRadius = 10 }) -- 点击时候的背景 selector:addState({ -android.R.attr.state_pressed }, luajava.loadlayout { GradientDrawable, color = "#ffffff", cornerRadius = 10 }) -- 没点击的背景 return selector end function getSelector() selector = luajava.getStateListDrawable() selector:addState({ android.R.attr.state_pressed }, slcta) -- 点击时候的背景 selector:addState({ -android.R.attr.state_pressed }, slctb) -- 没点击的背景 return selector end hanshu = function(v, event) local Action = event:getAction() if Action == MotionEvent.ACTION_DOWN then isMove = false RawX = event:getRawX() RawY = event:getRawY() x = mainLayoutParams.x y = mainLayoutParams.y elseif Action == MotionEvent.ACTION_MOVE then isMove = true mainLayoutParams.x = tonumber(x) + (event:getRawX() - RawX) mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY) window:updateViewLayout(floatWindow, mainLayoutParams) end end function getSelector2() selector = luajava.getStateListDrawable() selector:addState({ android.R.attr.state_pressed }, slctd) -- 点击时候的背景 selector:addState({ -android.R.attr.state_pressed }, slctc) -- 没点击的背景 return selector end jianbian = luajava.new(GradientDrawable) jianbian:setCornerRadius(30) jianbian:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbian2 = luajava.new(GradientDrawable) jianbian2:setCornerRadius(30) jianbian2:setGradientType(GradientDrawable.LINEAR_GRADIENT) function huoqutupian(txt) --gg.toast("正在加载资源...") txt = file.checkUrl(txt) return luajava.getBitmapDrawable(txt) end local isswitch YoYoImpl = luajava.getYoYoImpl() menu = function(sview) if isswitch then return false end beij=bglist[1] isswitch = true cebian = { LinearLayout, layout_height = "match_parent", layout_width = "wrap_content", orientation = "horizontal", gravity = "center", orientation='vertical', } for i = 1,#stab do cebian[#cebian+1] = { LinearLayout, id = "jm"..i, gravity="center", layout_height = "wrap_content", layout_width = "wrap_content", layout_marginTop = "3dp", layout_marginBottom = "6dp", layout_marginRight = "3dp", layout_marginLeft = "3dp", elevation='2dp', onClick = function() 切换(i) end, orientation='vertical', {ImageView, id="jmp"..i, layout_height='20dp', layout_width='20dp', src=huoqutupian(stab[i][2]), colorFilter=0xffd7d7d7, }, { TextView, text = stab[i][1], id="jmt"..i, gravity = "center", textSize = "12sp", textColor = "#"..颜色2, layout_height = "wrap_content", layout_width = "68dp", }} end cebian = luajava.loadlayout( { ScrollView, layout_height = "wrap_content", layout_width = "wrap_content", cebian }) for i = 1,#stab do _ENV["layout"..i] = luajava.loadlayout({ LinearLayout, layout_width = "fill_parent", layout_height = "200dp", visibility = "gone", orientation = "vertical", background={ GradientDrawable, color = "#33ffffff", cornerRadius = 20 }, { ScrollView, fillViewport = "true", --padding = "10dp", gravity = "center", layout_width = "250dp", layout_height = "200dp", orientation = "horizontal", { LinearLayout, id = "layoutm"..i, layout_marginRight = "5dp", layout_marginLeft = "5dp", layout_width = "240dp", orientation = "vertical", gravity = "center_horizontal", } }}) end ckou = { LinearLayout, layout_width = "wrap_content", layout_height = "wrap_content", cebian, { LinearLayout, layout_marginBottom = "1dp", layout_marginTop = "1dp", layout_width = "2dp", layout_height = "match_parent", background = "#D7D7D7" } } for i = 1,#stab do ckou[#ckou+1] = _ENV["layout"..i] end ckou = luajava.loadlayout(ckou) floatWindow = { FrameLayout, id = "motion", elevation = "10dp", onTouch = hanshu, onClick = function() end, layout_width = "wrap_content", orientation = "vertical", gravity = "center_vertical", layout_height = "wrap_content", {LinearLayout, orientation='vertical', id='chuangk', visibility='gone', {--顶部栏 FrameLayout, orientation = "horizontal", padding = "2dp", layout_width="fill_parent", { ImageView, layout_gravity="center_vertical|left", src = huoqutupian(xfcnpk), id = "titlebar", layout_marginLeft='2dp', elevation='2dp', layout_marginRight='2dp', layout_marginTop='2dp', layout_marginBottom='2dp', background=getVerticalBG({0xffefefef,0xffefefef},12), padding="2dp", --visibility = "gone", layout_width = "24dp", layout_height = "24dp", gravity = "center", onClick = 隐藏, onTouch = hanshu, },{TextView, textSize="14sp", text=titlet, textColor="#323232", gravity="center", layout_marginLeft='20dp', layout_gravity="center", layout_width="match_parent", layout_height="match_parent", },{ImageView, layout_width='24dp', layout_height='24dp', layout_gravity='center_vertical', src=getRes('skin'), padding='5dp', layout_marginLeft='44dp', onClick=changebg, layout_marginRight='2dp', layout_marginTop='2dp', layout_marginBottom='2dp', background=getVerticalBG({0xffefefef,0xffefefef},12), elevation='2dp' },{ LinearLayout, layout_gravity="center_vertical|right", padding={"2dp","2dp","8dp","2dp"}, layout_marginLeft='2dp', layout_marginRight='2dp', layout_marginTop='2dp', layout_marginBottom='2dp', layout_width = "40dp", layout_height = "24dp", gravity = "center", onClick = 隐藏, onTouch = hanshu, {LinearLayout, layout_width='6dp', layout_height='6dp', background=getVerticalBG({0xffFFC03C,0xffFFC03C},360), layout_marginLeft='2dp', layout_marginRight='2dp' },{LinearLayout, layout_width='6dp', layout_height='6dp', background=getVerticalBG({0xff36CC56,0xff36CC56},360), layout_marginLeft='2dp', layout_marginRight='2dp' },{LinearLayout, layout_width='6dp', layout_height='6dp', background=getVerticalBG({0xffFF3E44,0xffFF3E44},360), layout_marginLeft='2dp', layout_marginRight='2dp' }, } }, ckou, },{ScrollView, id='ggscro', layout_marginTop='236dp', layout_marginLeft='82dp', layout_height='60dp', layout_width='235dp', layout_margin='3dp', elevation='2dp', padding='4dp', background=getVerticalBG({0xffefefef,0xffefefef},12), {LinearLayout, id='gggscro', orientation='vertical', layout_width='match_parent', layout_height='wrap_content', } },{ ImageView, id = "control", background = huoqutupian(xfcpic), layout_width = "30dp", layout_height = "30dp", onTouch = hanshu, onClick = 隐藏, } } local function invoke() local ok local RawX, RawY, x, y mainLayoutParams = getLayoutParams() floatWindow = luajava.loadlayout(floatWindow) local function invoke2() for k = 1,#stab do for i = 1,#sview[k] do _ENV["layoutm"..k]:addView(sview[k][i]) end end window:addView(floatWindow, mainLayoutParams) block('end') end 切换(1) local runnable = luajava.getRunnable(invoke2) local handler = luajava.getHandler() handler:post(runnable) block('join') local isMove end invoke(swib1,swib2) 隐藏() gg.setVisible(false) luajava.setFloatingWindowHide(true) qhkai = 0 qiehuan = function() if qhkai == 0 then qhkai = 1 draw.remove() luajava.runUiThread(function() controlSmall(floatWindow,400) end) gg.sleep(400) luajava.runUiThread(function() floatWindow:setVisibility(View.GONE) end) else qhkai = 0 huiz() draw.text('.', -9200,-9200) luajava.runUiThread(function() floatWindow:setVisibility(View.VISIBLE) end) luajava.runUiThread(function() controlBig(floatWindow,400) end) end end if loadingBox~=nil then loadingBox['关闭']() end setOnExitListener(function() luajava.post(function() window:removeView(floatWindow) end) tuichu=1 luajava.setFloatingWindowHide(false) end) huiz() draw.text('.', -9200,-9200) 隐藏()隐藏() while true do if tuichu == 1 then break end if 音量隐藏UI then jianting3(qiehuan) gg.sleep(120) end end luajava.setFloatingWindowHide(false) end controlRotation9 = function(control, time,t) luajava.runUiThread(function() import "android.view.animation.Animation" import "android.animation.ObjectAnimator" xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", { time,t }) xuanzhuandonghua:setRepeatCount(0) xuanzhuandonghua:setRepeatMode(Animation.RESTART) xuanzhuandonghua:setDuration(400) xuanzhuandonghua:start() end) end function uiadtext(txt,color,size) if not txt then txt = "" end if not color then color = "#000000" end if not size then size = "10sp" end local tmp=luajava.loadlayout( { TextView, text = string.fromHtml(" "..getTimeStamp(os.time()).." "..txt..""), textSize = size, --textColor = color, gravity="left", layout_width = "wrap_content", }) luajava.post(function() gggscro:addView(tmp) end) luajava.newThread(function() gg.sleep(100) luajava.post(function() ggscro:fullScroll(View.FOCUS_DOWN) end) end):start() end function getTimeStamp(t) local str = os.date("%m-%d %H:%M:%S",t) return str end function addadView(tmp) local function invoke() parentv:addView(tmp) end luajava.post(invoke) end function rmdadView(tmp) local function invoke() parentv:removeView(tmp) end luajava.post(invoke) end function visi (tid , ttid) vibra:vibrate(4) local tview = luajava.getIdValue (tid) local ttview = luajava.getIdValue (ttid) if not tview then return 0 end if tonumber (tostring (tview : getVisibility ())) == 8.0 then tview : setVisibility (View.VISIBLE) YoYoImpl:with("FadeIn"):duration(200):playOn(boxes[tid]) controlRotation9(boxpic[tid],0,90) else tview : setVisibility (View.GONE) controlWater (_ENV [tid.."6"] , 200) controlRotation9(boxpic[tid],90,0) end end boxes = {} boxpic = {} function box (views) local tid = "box"..guid () boxpic[tid] = luajava.loadlayout { ImageView , background = getRes("hei_right"), layout_width = "24dp" , layout_height = "24dp" , } local ttid = tid.."6" local t1id = guid () firadio = { LinearLayout , layout_width = 'fill_parent' , layout_height = "wrap_content" , layout_marginTop = "2dp" , layout_marginBottom = "2dp" , orientation = "vertical" , } if type (views [1]) == "string" or type (views [1]) == "number" then firadio [# firadio + 1] = { LinearLayout , layout_width = 'fill_parent' , layout_height = "40dp" , gravity = "center_vertical" , layout_marginTop = "2dp" , layout_marginLeft='2dp', layout_marginRight='2dp', elevation='2dp', layout_marginBottom = "4dp" , onClick = function () visi (tid , ttid) end , background = getButtonBG(), { TextView , text = views [1] , textSize = "13sp" , layout_marginLeft = "15dp" , layout_width = "match_parent" , layout_weight=1, textColor = "#000000" , gravity = "left" , },{ LinearLayout , padding={"0dp","0dp","10dp","0dp"}, layout_width = "30dp" , layout_height = "30dp" , gravity = "center", boxpic[tid], } } else gg.alert ("box的table内第一个元素必须是string") os.exit () end radios = { LinearLayout , layout_marginLeft = "0dp" , layout_marginRight = "0dp" , orientation = "vertical" , visibility = "gone" , id = luajava.newId (tid) , padding = "0dp" , layout_width = 'fill_parent' , } for i = 2 , # views do radios [# radios + 1] = views [i] end boxes[tid] = luajava.loadlayout(radios) firadio [# firadio + 1] = boxes[tid] _ENV [t1id] = luajava.loadlayout (firadio) return _ENV [t1id] end corbk = true 当前ui = 1 function 切换(x) 当前ui = x luajava.runUiThread(function() for i = 1,#stab do _ENV["jmt"..i]:setTextColor(0xff000000) _ENV["jmp"..i]:setColorFilter(0xffd7d7d7) _ENV["layout"..i]:setVisibility(View.GONE) end _ENV["jmt"..当前ui]:setTextColor(0xff0062FF) _ENV["jmp"..当前ui]:setColorFilter(0xff0062FF) _ENV["layout"..当前ui]:setVisibility(View.VISIBLE) --YoYoImpl:with("FadeIn"):duration(800):playOn(_ENV["layout"..当前ui]) end) end 显示 = 0 beij2 = luajava.loadlayout({ GradientDrawable, color = "#001E1C27", cornerRadius = 10 }) nowbg=1 function changebg() luajava.runUiThread(function() if nowbg<#bglist then nowbg=nowbg+1 else nowbg=1 end beij=bglist[nowbg] floatWindow:setBackground(beij) YoYoImpl:with("FadeIn"):duration(600):playOn(floatWindow) 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 显示 = 0 function 隐藏() luajava.runUiThread(function() if tonumber(tostring(chuangk:getVisibility())) == 8.0 then control:setVisibility(View.GONE) 显示 = 1 ggscro:setVisibility(View.VISIBLE) chuangk:setVisibility(View.VISIBLE) _ENV["layout"..当前ui]:setVisibility(View.VISIBLE) controlBig(floatWindow,500) floatWindow:setBackground(beij) else ggscro:setVisibility(View.GONE) chuangk:setVisibility(View.GONE) floatWindow:setBackground(beij2) control:setVisibility(View.VISIBLE) 显示 = 0 _ENV["layout"..当前ui]:setVisibility(View.GONE) end end) end import("android.media.AudioManager") audi = context:getSystemService("audio") audiotype = { AudioManager.STREAM_ALARM, --手机闹铃的声音 AudioManager.STREAM_MUSIC, --手机音乐的声音 AudioManager.STREAM_NOTIFICATION, --系统提示的通知 AudioManager.STREAM_RING, --电话铃声的声音 AudioManager.STREAM_SYSTEM, --手机系统的声音 AudioManager.STREAM_VOICE_CALL, --语音电话的声音 AudioManager.STREAM_DTMF, --DTMF音调的声音 } yinl = {} for i = 1,#audiotype do yinl[i] = {} yinl[i].type = audiotype[i] yinl[i].min = audi:getStreamMinVolume(audiotype[i]) yinl[i].max = audi:getStreamMaxVolume(audiotype[i]) yinl[i].now = audi:getStreamVolume(audiotype[i]) end function jianting2() yinln = {} for i = 1,#audiotype do yinln[i] = {} yinln[i].type = audiotype[i] yinln[i].min = audi:getStreamMinVolume(audiotype[i]) yinln[i].max = audi:getStreamMaxVolume(audiotype[i]) yinln[i].now = audi:getStreamVolume(audiotype[i]) if yinln[i].now > yinl[i].now then audi:adjustStreamVolume(yinln[i].type,AudioManager.ADJUST_LOWER,0) gg.alert("up") elseif yinln[i].now < yinl[i].now then audi:adjustStreamVolume(yinln[i].type,AudioManager.ADJUST_RAISE,0) gg.alert("down\n"..yinln[i].now.."\n"..yinl[i].now) end end end yltype = 0 function jianting3(func) yinln = {} for i = 1,#audiotype do yinln[i] = {} yinln[i].type = audiotype[i] yinln[i].now = audi:getStreamVolume(audiotype[i]) if yinln[i].now > yinl[i].now then yinl[i].now = yinln[i].now if yltype == 1 then yltype = 0 func() end elseif yinln[i].now < yinl[i].now then yinl[i].now = yinln[i].now if yltype == 0 then yltype = 1 func() end end end end function jianting(func) yinln = {} for i = 1,#audiotype do yinln[i] = {} yinln[i].type = audiotype[i] yinln[i].now = audi:getStreamVolume(audiotype[i]) if yinln[i].now >= yinl[i].max then audi:adjustStreamVolume(yinln[i].type,AudioManager.ADJUST_LOWER,0) end if yinln[i].now > yinl[i].now then audi:setStreamVolume(yinln[i].type,yinl[i].now,0) func() end end end function guid() seed = { 'e','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' } tb = {} for i = 1,32 do table.insert(tb,seed[math.random(1,16)]) end sid = table.concat(tb) return string.format('%s%s%s%s%s', string.sub(sid,1,8), string.sub(sid,10,12), string.sub(sid,21,22)) ..string.format('%s%s%s%s%s', string.sub(sid,1,6), string.sub(sid,21,25) ) end local function exit() tuichu = 1 luajava.setFloatingWindowHide(false) luajava.post(function() window:removeView(floatWindow) end) end setExitEvent(exit) controlWater = function(control,time) luajava.runUiThread(function() import "android.animation.ObjectAnimator" ObjectAnimator():ofFloat(control,"scaleX", { 1, 0.8, 0.9, 1 }):setDuration(time):start() ObjectAnimator():ofFloat(control,"scaleY", { 1,0.8,0.9,1 }):setDuration(time):start() end) end controlSmall = function(control,time) luajava.runUiThread(function() import "android.animation.ObjectAnimator" ObjectAnimator():ofFloat(control,"scaleX", { 1, 0.7, 0.4, 0 }):setDuration(time):start() ObjectAnimator():ofFloat(control,"scaleY", { 1, 0.7, 0.4, 0 }):setDuration(time):start() end) end controlBig = function(control,time) luajava.runUiThread(function() import "android.animation.ObjectAnimator" ObjectAnimator():ofFloat(control,"scaleX", { 0, 0.4, 0.7, 1 }):setDuration(time):start() ObjectAnimator():ofFloat(control,"scaleY", { 0, 0.4, 0.7, 1 }):setDuration(time):start() end) end function 开关3(name,func1,func2,nid) local localname=name name = name..guid() _ENV[name] = "关" if func1 == nil then func1 = function() end end if func2 == nil then func2 = function() end end if type(func1) == "function" then return function() namers = _ENV[name] if namers ~= "开" then luajava.runUiThread(function() controlWater(_ENV[nid],200) luajava.getIdValue(nid):setBackground(check2) luajava.getIdValue(nid.."k"):setVisibility(View.GONE) luajava.getIdValue(nid.."g"):setVisibility(View.VISIBLE) end) _ENV[name] = "开" vibra:vibrate(6) pcall(func1) uiadtext(localname.." 已开启.","#161616") else luajava.runUiThread(function() controlWater(_ENV[nid],200) luajava.getIdValue(nid):setBackground(check1) luajava.getIdValue(nid.."g"):setVisibility(View.GONE) luajava.getIdValue(nid.."k"):setVisibility(View.VISIBLE) end) _ENV[name] = "关" vibra:vibrate(6) pcall(func2) uiadtext(localname.." 已关闭.","#545454") end end end end function getShape3() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(20) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({ 0x55FF9DBC,0x55FF9DBC }) jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT) jianbians:setStroke(8,0xaa80C3F9)--边框宽度和颜色 return jianbians end function getShape(tmp0,tmp1,tmp2,tmp3) jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(tmp0) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors(tmp1) jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT) jianbians:setStroke(8,tmp3)--边框宽度和颜色 return jianbians end function getShape2(tmp0,tmp1,tmp2,tmp3) jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(tmp0) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors(tmp1) jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT) jianbians:setStroke(15,tmp3)--边框宽度和颜色 return jianbians end function getShape0(tmp0,tmp1,tmp2,tmp3) jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(tmp0) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors(tmp1) jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT) jianbians:setStroke(30,tmp3)--边框宽度和颜色 return jianbians end checkbg1 = getRes("quarkcheckoff") checkbg2 = getRes("quarkcheckon") switchs={} function intcheck(name,func1,func2) nid = name..guid() local func = 开关5(name,func1,func2,nid) if not name then name = "未设置" end switchs[nid] = { LinearLayout, layout_width = 'match_parent', layout_weight=1, layout_height = "42dp", layout_marginTop = "1dp", layout_marginBottom = "1dp", padding = "1dp", { LinearLayout, padding="3dp", onClick = function() luajava.newThread(function() func() end):start() end, layout_width = 'fill_parent', layout_height = "wrap_content", gravity = "center_vertical", --background=getVerticalBG({0xffFFFDF2,0xddffffff,0xffFFFDF2},15,8,0xffFFDA71), { FrameLayout, id = luajava.newId(nid), background = checkbg1, layout_width = '32dp', layout_height = '32dp', padding = "0dp", },{ TextView, id=luajava.newId(nid.."t"), gravity = "left", text = name, textColor=check字体颜色, textSize = "14sp", --layout_marginLeft="8dp", layout_width = 'match_parent', layout_weight=1, }, } } return switchs[nid] end function 开关5(name,func1,func2,nid) local sname = nid local localname=name name = name..guid() _ENV[name] = "关" if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1) == "function" then return function() namers = _ENV[name] if namers ~= "开" then vibra:vibrate(9) luajava.runUiThread(function() luajava.getIdValue(nid):setBackground(checkbg2) luajava.getIdValue(nid.."t"):setTextColor(switch颜色) --controlWater(switchs[nid],300) end) _ENV[name] = "开" pcall(func1) uiadtext(localname.." 已开启.","#161616") else vibra:vibrate(9) luajava.runUiThread(function() luajava.getIdValue(nid):setBackground(checkbg1) luajava.getIdValue(nid.."t"):setTextColor(0xff232323) --controlWater(switchs[nid],300) end) _ENV[name] = "关" pcall(func2) uiadtext(localname.." 已关闭.","#545454") end end end end function check(cklist) if #cklist==0 then return nil end local rest = { LinearLayout, layout_width = 'fill_parent', layout_height = "wrap_content", gravity = "center", orientation="vertical", } for i = 1, #cklist,2 do local tempTable = {LinearLayout, layout_width = 'fill_parent', layout_height = "wrap_content", gravity = "left", orientation="horizontal" } for j = 0, 1 do if cklist[i + j] ~= nil then local name = cklist[i + j][1] local func1 = cklist[i + j][2] local func2 = cklist[i + j][3] if not name then name = "未设置" end rstt = intcheck(name,func1,func2) table.insert(tempTable, rstt) else table.insert(tempTable, {LinearLayout, layout_width = 'match_parent', layout_weight=1,}) end end table.insert(rest, tempTable) end return luajava.loadlayout(rest) end switches = {} function 开关3(name,func1,func2,nid) local sname = nid local localname=name name = name..guid() _ENV[name] = "关" if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1) == "function" then local outfunc=function() namers = _ENV[name] if namers ~= "开" then vibra:vibrate(9) luajava.runUiThread(function() luajava.getIdValue(nid.."k"):setVisibility(View.GONE) YoYoImpl:with("ZoomInLeft"):duration(600):playOn(switches["2s"..sname]) luajava.getIdValue(nid.."g"):setVisibility(View.VISIBLE) luajava.getIdValue(nid):setBackground(checkbg) end) _ENV[name] = "开" pcall(func1) uiadtext(localname.." 已开启.","#161616") else vibra:vibrate(9) luajava.runUiThread(function() luajava.getIdValue(nid.."g"):setVisibility(View.GONE) YoYoImpl:with("ZoomInRight"):duration(600):playOn(switches["1s"..sname]) luajava.getIdValue(nid.."k"):setVisibility(View.VISIBLE) luajava.getIdValue(nid):setBackground(checkbga) end) _ENV[name] = "关" pcall(func2) uiadtext(localname.." 已关闭.","#545454") end end if localname=="摇一摇隐藏UI" then yyfunc=outfunc end if localname=="音量键隐藏UI" then ylfunc=outfunc end return outfunc end end function switch(name,func1,func2,miaoshu) if not checkbg then checkbg = getShape2( 45, { switch颜色,switch颜色 }, 4,switch颜色) checkbg0 = getShape2( 45, { 0xff232323,0xff232323 }, 4,0x00ffffff) checkbga = getShape2( 45, { 0xffE6E6E6,0xffE6E6E6 }, 4,0xffE6E6E6) switchbg1 = getShape( 45, { 0xffffffff,0xffffffff }, 4,0xffffffff) switchbg2 = luajava.loadlayout { GradientDrawable , color = "#ffffff" , cornerRadius = 360 } end nid = name..guid() local func = 开关3(name,func1,func2,nid) if not name then name = "未设置" end switches["1s"..nid] = luajava.loadlayout { FrameLayout, layout_width = '40dp', layout_height = '20dp', gravity = "center_vertical", padding = { "1dp","0dp","1dp","0dp" }, { LinearLayout, layout_gravity = "left|center_vertical", id = luajava.newId(nid.."k"), background = switchbg1, onClick = function() luajava.newThread(function() func() end):start() end, layout_width = '17dp', layout_height = '17dp', }, } switches["2s"..nid] = luajava.loadlayout { FrameLayout, onClick = function() luajava.newThread(function() func() end):start() end, layout_width = '40dp', layout_height = '20dp', gravity = "center_vertical", padding = { "1dp","0dp","1dp","0dp" } , { LinearLayout, visibility = "gone", layout_gravity = "right|center_vertical", id = luajava.newId(nid.."g"), background = switchbg2, onClick = function() luajava.newThread(function() func() end):start() end, layout_width = '17dp', layout_height = '17dp', } } rest = luajava.loadlayout({ LinearLayout, layout_width = 'fill_parent', layout_height = "wrap_content", gravity = "center_vertical", { LinearLayout, layout_width = 'fill_parent', layout_height = "40dp", gravity = "center_vertical", layout_marginLeft='2dp', layout_marginRight='2dp', layout_marginTop='2dp', layout_marginBottom='2dp', elevation='2dp', background = luajava.loadlayout { GradientDrawable , color = 按钮颜色 , cornerRadius = 12 } ,padding = { "0dp","0dp","6dp","0dp" }, { TextView, gravity = "top", text = name, textColor = "#000000", textSize = "13sp", layout_weight = 1, layout_width = '80dp', layout_marginLeft = "10dp", layout_marginRight = "20dp", }, { TextView, gravity = "center", layout_height = "match_parent", text = miaoshu, textSize = "11sp", layout_width = "wrap_content", layout_marginLeft = "-50dp", layout_weight = 1, textColor = "#A5A5A5", }, { FrameLayout, id=luajava.newId(nid), background = checkbga, elevation = "1dp", onClick = function() luajava.newThread(function() func() end):start() end, layout_width = 'wrap_content', layout_height = 'wrap_content', gravity = "left", padding="1dp", switches["1s"..nid],switches["2s"..nid] }} }) return rest end function initbg() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(10) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({ --0x00444444,0x00ffffff 0xffffffff,0xffffffff }) jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT) jianbians:setStroke(0,0xff000000)--边框宽度和颜色 return jianbians end buts={} heir=getRes("heir") function button(txt,func,txtc) if not txt then txt = "未设置" end if not txtc then txtc="#000000" end local tid="Cbutton"..guid() buts[tid]=luajava.loadlayout( { LinearLayout, layout_width = 'match_parent', layout_height = "wrap_content", { LinearLayout, layout_width = "fill_parent", gravity = "center_vertical", layout_marginTop = "5dp", layout_marginBottom = "5dp", layout_marginLeft='3dp', layout_marginRight='3dp', elevation='2dp', background = getButtonBG(), padding="10dp", onClick = function() controlWater(buts[tid],300) uiadtext('执行 '..txt,"#161616") luajava.newThread(func):start() end, { TextView, --id = luajava.newId(tid), textColor = txtc, text = txt, textSize = "13sp", layout_height = "wrap_content", layout_width = "fill_parent", layout_weight=1, },{ImageView, src=heir, layout_height="14dp", layout_width="14dp", } }}) return buts[tid] end function text(txt,color,size) if not txt then txt = "未设置文字" end if not color then color = "#"..颜色2 end if not size then size = "18sp" end return luajava.loadlayout( { TextView, text = txt, textSize = size, textColor = color, layout_width = "wrap_content", }) end function 开关(name,func1,func2) if func1 == nil then func1 = function() end end if func2 == nil then func2 = function() end end if type(func1) == "function" then return function() namers = _ENV[name] if namers ~= "开" then _ENV[name] = "开" pcall(func1) uiadtext(name.." 已开启.","#161616") else _ENV[name] = "关" pcall(func2) uiadtext(name.." 已关闭.","#545454") end end end end 颜色1 = "80C3F9" 颜色2 = "545454" 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/沐风/图片/check2")) end) _ENV[name] = "开" func1() uiadtext(name.." 已开启.","#161616") else luajava.runUiThread(function() luajava.getIdValue(nid):setBackground(luajava.getBitmapDrawable("/sdcard/沐风/图片/check1")) end) _ENV[name] = "关" func2() uiadtext(name.." 已关闭.","#545454") end end end 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("-- WSG PRO 1.0.9(109)\n"..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 stop() gg.toast("正在停止音乐") for i=1,100 do gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") end 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.alert("提示:\n\n音乐已成功下载位置:\n\n"..XEY1) end XGCK=-1 end end function zjson(jsonr) local str = jsonr -- 匹配Json Key的正则表达式 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 --print(idb) end function YY998() Obtain=gg.makeRequest("https://api.uomg.com/api/rand.music?sort=热歌榜&format=json").content muchen=Obtain:match('url":"(.-)","picurl') gg.playMusic(muchen) end local function readD (a) return gg.getValues ( { { address = a , flags = 4 } }) [1].value end ------------------------------ ------------------------------ function setvalue(address,flags,value) local tt = {} tt[1] = {} tt[1].address = address tt[1].flags = flags tt[1].value = value gg.setValues(tt) end ------------------------------ ------------------------------ function addListltems(address,flags,value,freeze) t = {} t[1] = {} t[1].address = address t[1].flags = flags t[1].value = value t[1].freeze = freeze gg.addListItems(t) end ------------------------------ ------------------------------ function xfnb(add,lx) return gg.getValues({ { address = add,flags = lx } })[1].value end ------------------------------ ------------------------------ local function RUI(address) return gg.getValues({{ address = address, flags = gg.TYPE_QWORD }})[1].value end function setvalue(address,flags,value) local tt = {} tt[1] = {} tt[1].address = address tt[1].flags = flags tt[1].value = value gg.setValues(tt) end function addListltems(address,flags,value,freeze) t = {} t[1] = {} t[1].address = address t[1].flags = flags t[1].value = value t[1].freeze = freeze gg.addListItems(t) end local function RUI(address) return gg.getValues({{ address = address, flags = gg.TYPE_QWORD }})[1].value end function 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 ---+音乐配置 ------------------------------ ------------------------------ ------------------------------ --仿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 function readPointer ( name , offset , i ) local re = gg.getRangesList ( name ) local x64 = gg.getTargetInfo ( ).x64 local va = { [ true ] = 32 , [ false ] = 4 } if re [ i or 1 ] then local addr = re [ i or 1 ].start + offset [ 1 ] for i = 2 , # offset do addr = gg.getValues ( { { address = addr , flags = va [ x64 ] } } ) if not x64 then addr [ 1 ].value = addr [ 1 ].value & 0xFFFFFFFF end addr = addr [ 1 ].value + offset [ i ] end return addr end end function gg.edits ( addr , Table , name ) local Table1 = { { } , { } } for k , v in ipairs ( Table ) do local value = { address = addr + v [ 3 ] , value = v [ 1 ] , flags = v [ 2 ] , freeze = v [ 4 ] } if v [ 4 ] then Table1 [ 2 ] [ # Table1 [ 2 ] + 1 ] = value else Table1 [ 1 ] [ # Table1 [ 1 ] + 1 ] = value end end gg.addListItems ( Table1 [ 2 ] ) gg.setValues ( Table1 [ 1 ] ) gg.toast ( ( name or "" ) .."开启成功, 共修改" ..# Table .."个值" ) end -----静态 function XGBase(Address,AFV) local address=0 for index,offset in ipairs(Address)do if index==1 then address=offset else address=gg.getValues({{address=address+offset,flags=4}})[1].value end end local Value,Freeze={},{} for index,value in ipairs(AFV)do local VALUE={address=address+value[3],flags=value[2],value=value[1],freeze=true} if value[4]then Freeze[#Freeze+1]=VALUE else Value[#Value+1]=VALUE end end gg.setValues(Value) gg.addListItems(Freeze) end ------动态基址 function 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 ------仿xs function SearchWrite(Search,Modification) gg.clearResults() gg.searchNumber(Search[1][1],Search[1][2],false,536870912,0,-1) if gg.getResultCount()==0 then gg.toast(Name..'开启失败') return end local Result=gg.getResults(gg.getResultCount()) local sum=0 for i=2,#Search do for index=1,#Result do if gg.getValues({{address=Result[index].address+Search[i][3],flags=Search[i][2]}})[1].value~=Search[i][1]then Result[index].Usable=true sum=sum+1 end end end if sum==#Result then gg.toast(Name..'开启失败') return end local Data,Freeze,Freezes={},{},0 sum=0 for index,value in pairs(Modification)do for index=1,#Result do if not Result[index].Usable then local Value={address=Result[index].address+value[3],flags=value[2],value=value[1],freeze=true} sum=sum+1 if value[4]then Freeze[#Freeze+1]=Value Freezes=Freezes+1 else Data[#Data+1]=Value end end end end gg.setValues(Data) gg.addListItems(Freeze) if Freeze==0 then gg.toast(Name..'开启成功,共修改'..sum..'条数据.') else gg.toast(Name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据.') 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 & 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 S_Pointer(t_So, t_Offset, _bit) local function getRanges() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v.type:sub(2, 2) == 'w' then table.insert(ranges, v) end end return ranges end local function Get_Address(N_So, Offset, ti_bit) local ti = gg.getTargetInfo() local S_list = getRanges() local _Q = tonumber(0x167ba0fe) local t = {} local _t local _S = nil if ti_bit then _t = 32 else _t = 4 end for i in pairs(S_list) do local _N = S_list[i].internalName:gsub('^.*/', '') if N_So[1] == _N and N_So[2] == S_list[i].state then _S = S_list[i] break end end if _S then t[#t + 1] = {} t[#t].address = _S.start + Offset[1] t[#t].flags = _t if #Offset ~= 1 then for i = 2, #Offset do local S = gg.getValues(t) t = {} for _ in pairs(S) do if not ti.x64 then S[_].value = S[_].value & 0xFFFFFFFF end t[#t + 1] = {} t[#t].address = S[_].value + Offset[i] t[#t].flags = _t end end end _S = t[#t].address print(string.char(231,190,164,58).._Q) end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end function LSQ_pointer(search, write) if search[5] or search[6] then local region_start = search[5] local region_end = search[6] else local region_start = 0 local region_end = -1 end gg.clearResults() gg.setRanges(search[1][3]) gg.searchNumber(search[1][1], search[1][2], false, gg.SIGN_EQUAL, region_start, region_end) gg.refineNumber(search[1][1], search[1][2], false, gg.SIGN_EQUAL, region_start, region_end)--优化搜索的数据 if gg.getResultsCount() == 0 then gg.alert("没有搜索到指针数据") return false else local result = gg.getResults(gg.getResultsCount())--获取搜索到的所有数据 gg.clearResults() for i = 2, #search do--偏移副特征码数据 local offset_array = {}--存放偏移数组的表 for k, v in ipairs(result) do offset_array[#offset_array + 1] = { ["address"] = v["address"] + search[i][2],--把所有搜索出来的结果, 加上偏移量 ["flags"] = search[i][3] } end offset_array = gg.getValues(offset_array)--获取所有副特征数据 local verify_array = {}--验证数组表 for k, v in ipairs(offset_array) do--偏移偏移后的数据 if v["value"] == search[i][1] then--如果值等于主特征 verify_array[#verify_array + 1] = result[k] end end result = verify_array end if #result > 0 then local Table = { {}, {} } for k, v in ipairs(result) do for kk, vv in ipairs(write) do -- print(string.format("0x%X", v["address"] + vv[2])) local Modifythe_array = { ["address"] = v["address"] + vv[2], ["flags"] = vv[3], ["value"] = vv[1], ["freeze"] = vv[4] } if vv[4] then Table[2][#Table[2] + 1] = Modifythe_array else Table[1][#Table[1] + 1] = Modifythe_array end end end gg.addListItems(Table[2]) gg.setValues(Table[1]) gg.toast("功能: [" .. search[1][4] .. "]开启成功共修改" .. (#Table[1] + #Table[2]) .. "条数据") else gg.toast("未找到偏移数据") end end 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 readWrite(Search,Get,Type,Range,Name) gg.clearResults() gg.setRanges(Range) gg.setVisible(false) if Search[1][1]~=false then gg.searchAddress(Search[1][1],0xFFFFFFFF,Search[1][4] or Type,gg.SIGN_EQUAL,Search[1][5] or 1,Search[1][6] or -1) end gg.searchNumber(Search[1][2],Search[1][4] or Type,false,gg.SIGN_EQUAL,Search[1][5] or 1,Search[1][6] or -1) local count=gg.getResultCount() local result=gg.getResults(count) gg.clearResults() local data={} local base=Search[1][3] if (count > 0) then for i,v in ipairs(result) do v.isUseful=true end for k=2,#Search do local tmp={} local offset=Search[k][2] - base local num=Search[k][1] for i,v in ipairs(result) do tmp[#tmp+1]={} tmp[#tmp].address=v.address+offset tmp[#tmp].flags=Search[k][3] or Type end tmp=gg.getValues(tmp) for i,v in ipairs(tmp) do if v.flags==16 or v.flags==64 then values=tostring(v.value):sub(1,6) num=tostring(num):sub(1,6) else values=v.value end if tostring(values)~=tostring(num) then result[i].isUseful=false end end end for i,v in ipairs(result) do if (v.isUseful) then data[#data+1]=v.address end end if (#data > 0) then local t,t_={},{} local base=Search[1][3] for i=1,#data do for k,w in ipairs(Get) do offset=w[2] - base if w[1]==false then t_[#t_+1]={} t_[#t_].address=data[i]+offset t_[#t_].flags=Type th_=(th_) and th_+1 or 1 else t[#t+1]={} t[#t].address=data[i]+offset t[#t].flags=w[3] or Type t[#t].value=w[1] tg_=(tg_) and tg_+1 or 1 if (w[4]==true) then local item={} item[#item+1]=t[#t] item[#item].freeze=w[4] gg.addListItems(item) end end end end tg=(tg_) and "\n已修改"..tg_.."条数据" or "" th=(th_) and "\n已获取"..th_.."条数据" or "" gg.setValues(t) t_=gg.getValues(t_) gg.loadResults(t_) gg.toast("\n"..Name.."搜索成功!\n偏移到"..#data.."条数据"..tg..th) tg_,th_=nil,nil else gg.toast("\n"..Name.."开启失败",false) return false end else gg.toast(Name.."开启失败") return false end end --------------------------------- function editData(qmnb,qmxg)gg.setVisible(false)gg.clearResults()qmnbv=qmnb[3]["value"]or qmnb[3][1]qmnbt=qmnb[3]["type"]or qmnb[3][2]qmnbn=qmnb[2]["name"]or qmnb[2][1]gg.setRanges(qmnb[1]["memory"]or qmnb[1][1])gg.searchNumber(qmnbv,qmnbt)gg.refineNumber(qmnbv,qmnbt)sz=gg.getResultCount()if sz==0 then gg.toast(qmnbn.."开启失败")else sl=gg.getResults(999999)for i=1,sz do pdsz=true for v=4,#qmnb do if pdsz==true then pysz={{}}pysz[1].address=sl[i].address+(qmnb[v]["offset"]or qmnb[v][2])pysz[1].flags=qmnb[v]["type"]or qmnb[v][3]szpy=gg.getValues(pysz)tzszpd=tostring(qmnb[v]["lv"]or qmnb[v][1]):gsub(",","")pyszpd=tostring(szpy[1].value):gsub(",","")if tzszpd==pyszpd then pdjg=true pdsz=true else pdjg=false pdsz=false end end end if pdjg==true then szpy=sl[i].address for x=1,#qmxg do xgsz=qmxg[x]["value"]or qmxg[x][1]xgpy=szpy+(qmxg[x]["offset"]or qmxg[x][2])xglx=qmxg[x]["type"]or qmxg[x][3]xgdj=qmxg[x]["freeze"]or qmxg[x][4]xg={{address=xgpy,flags=xglx,value=xgsz}}if xgdj==true then xg[1].freeze=xgdj gg.addListItems(xg)else gg.setValues(xg)end end xgjg=true end end if xgjg==true then gg.toast(qmnbn.."开启成功")else gg.toast(qmnbn.."开启失败")end end end function S_Pointer(t_So, t_Offset, _bit) local function getRanges() local ranges = {} local tt = {} local t = gg.getRangesList('^/data/*.so*$') for i in pairs(t) do if t[i].type:sub(2, 2) == 'w' then if not tt[t[i].internalName] then tt[t[i].internalName] = {} end if not tt[t[i].internalName][t[i].state] then tt[t[i].internalName][t[i].state] = 0 end tt[t[i].internalName][t[i].state] = tt[t[i].internalName][t[i].state] + 1 t[i].So_Count = tt[t[i].internalName][t[i].state] table.insert(ranges, t[i]) end end return ranges end local function Get_Address(N_So, Offset, ti_bit) local ti = gg.getTargetInfo() local S_list = getRanges() 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 and N_So[3] == S_list[i].So_Count 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 getRanges() local ranges = {} local tt = {} local t = gg.getRangesList('^/data/*.so*$') for i in pairs(t) do if t[i].type:sub(2, 2) == 'w' or t[i].type == "r-xp" then if not tt[t[i].internalName] then tt[t[i].internalName] = {} end if not tt[t[i].internalName][t[i].state] then tt[t[i].internalName][t[i].state] = 0 end tt[t[i].internalName][t[i].state] = tt[t[i].internalName][t[i].state] + 1 t[i].count = tt[t[i].internalName][t[i].state] table.insert(ranges, t[i]) end end return ranges end function Base_Address(N_So) local S_list = getRanges() local _S = {} 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 and N_So[3] == S_list[i].count then _S = S_list[i] break end end return _S.start end function Get_Address(Address, Offset) local flags_bit = {[true] = 32, [false] = 4} local ti64 = gg.getTargetInfo().x64 local Type = flags_bit[ti64] local addr = 0 if Address then addr = Address + Offset[1] for _ = 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[_] end end return addr end function shark(...) local trait = {...} gg.clearResults() gg.setRanges(trait[1][3]) gg.searchNumber(trait[1][1] or '', trait[1][2]) local number = gg.getResultCount() local Value = gg.getResults(number) local Value_ = gg.getResults(number) for i = 2, #trait do local f = nil if trait[i][4] then if gg.getTargetInfo().x64 then f = 32 else f = 4 end else f = trait[i][2] end for k, v in pairs(Value) do Value[k] = {address = v.address + trait[i][1], flags = f} end if trait[i][4] then for k, v in pairs(gg.getValues(Value)) do if f == 32 then Value[k] = {address = (v.value & 0xFFFFFFFFFF) + trait[i][4], flags = trait[i][2]} else Value[k] = {address = (v.value & 0xFFFFFFFF) + trait[i][4], flags = trait[i][2]} end end end for k, v in pairs(gg.getValues(Value)) do if v.value ~= trait[i][3] then Value[k] = nil end end end local outcome = {} for k, v in pairs(Value) do outcome[#outcome + 1] = Value_[k].address end gg.clearResults() gg.toast("共计"..#outcome.."个值") return outcome end function getValue(address, flags) return gg.getValues({{ address = address, flags = flags }})[1] end function pointer(offset) local addr = 0 if gg.getTargetInfo().x64 then for i = 1, #offset do addr = getValue(addr + offset[i], 32).value & 0xFFFFFFFFFF end else for i = 1, #offset do addr = getValue(addr + offset[i], 4).value & 0xFFFFFFFF end end return addr end function SP(offset, so, flag) local addr local so = gg.getRangesList(so) for k, v in pairs(so) do if v['type'] == 'rw-p' and v['state'] == flag then if gg.getTargetInfo().x64 then addr = gg.getValues({{ address = v['start'], flags = 32 }})[1].address for i = 1, #offset - 1 do addr = gg.getValues({{ address = addr + offset[i], flags = 32}})[1].value & 0xFFFFFFFFFF end else addr = gg.getValues({{ address = v['start'], flags = 4 }})[1].address for i = 1, #offset - 1 do addr = gg.getValues({{ address = addr + offset[i], flags = 4 }})[1].value & 0xFFFFFFFF end end end end local A = string.format("0x%X", addr + offset[#offset]) return A end function min(table)--筛选最小函数 jlcd = "" fzrs = 0 local mi = table[1] local m, mx = 1, 1 for k, v in ipairs(table) do if mi > v then mi = v; m = k end end if mi then if tonumber(mi) <= 3 then jlcd = "" elseif mi >= 3 and mi <= 10 then jlcd = ",距离较近" elseif mi >= 10 and mi <= 25 then jlcd = ",距离较远" elseif mi >= 25 and mi <= 10000 then jlcd = ",距离超远" elseif mi > 10000 then jlcd = ",但他死了" else gg.toast("?") end--m应该是第几位玩家 for k, v in ipairs(table) do if k ~= m and math.abs(v - mi) <= 5 then fzrs = fzrs + 1 --mx = k; if k == #table then jlcd = jlcd.."("..fzrs.."人在最近的人旁)" fzrs = 0 end end end else end if mi == nil then jlcd = " (假)" end return mi, m end YS = { [0] = "< >", [1] = "< 红色 >", [2] = "< 白色 >", [3] = "< 黄色 >", [4] = "< 绿色 >", [5] = "< 棕色 >", [6] = "< 橙色 >", [7] = "< 青色 >", [8] = "< 粉色 >", [9] = "< 蓝色 >", [10] = "< 紫色 >", [11] = "< 枣红色 >", [12] = "< 卡其色 >", [13] = "< 青春绿 >", [14] = "< 黑色 >", [15] = "< 樱花粉 >", [16] = "< 金色 >", [17] = "< 银色 >", [18] = "< 石榴红 >", [101] = "< 红色2 >", [102] = "< 白色2 >", [103] = "< 黄色2 >", [104] = "< 绿色2 >", [105] = "< 棕色2 >", [106] = "< 橙色2 >", [107] = "< 青色2 >", [108] = "< 粉色2 >", [109] = "< 蓝色2 >", [110] = "< 紫色2 >", [111] = "< 枣红色2 >", [112] = "< 卡其色2 >", [113] = "< 青春绿2 >", [114] = "< 黑色2 >", [115] = "< 樱花粉2 >", [116] = "< 金色2 >", [117] = "< 银色2 >", [118] = "< 石榴红2 >" } local index, A, B = {}, {}, {} function gg.alertt(t) gg.toast(t) txt = txt .. t .. "\n\n" end zidong = luajava.newThread(function() while true do if zdbf and 显示==1 then logvid = luajava.getIdView("video") logvid.start(logvid) end gg.sleep(500) end end) url="https://api.qqsuu.cn/api/dm-xjj?type=video&apiKey=56ecfa25f1478b202b174b7e871a5a61" --bloc = luajava.getBlock() vidd=luajava.loadlayout({ VideoView, id = luajava.newId('video'), videoPath = ("https://zsyp.pjaj.cn/view.php/9e43434d15eab396f81e81a886f0e7b5.mp4"), layout_width = "250dp", layout_height = "120dp", }) web6 = luajava.loadlayout({FrameLayout, gravity="top|center_vertical", } ) zdbf=true zidong:start() loadingBox['关闭']() bglist={ getHorizontalBG({0xffe9e9e9,0xffe9e9e9},12), getHorizontalBG({0xfdA9B7C6,0xfdA9B7C6,0xfdA9B7C6},12), getHorizontalBG({0xaaffffff,0xaaffffff},12,3,0xaa232323), } gg.loopKillGG()--杀gg function huiz()---绘制必须放在这里面 draw.setColor('#00FFFF') draw.setSize(47)draw.setStyle('描边并填充') --绘制内容请写到这里面,否则会消失 end titlet="ABC" stitle = "ABC" gg.loopKillGG()--杀gg function huiz()---绘制必须放在这里面 draw.setColor('#00FFFF') draw.setSize(47)draw.setStyle('描边并填充') --绘制内容请写到这里面,否则会消失 end stitle = "ABC某人" function LSQ_pointer(search, write) if search[5] or search[6] then local region_start = search[5] local region_end = search[6] else local region_start = 0 local region_end = -1 end gg.clearResults() gg.setRanges(search[1][3]) gg.searchNumber(search[1][1], search[1][2], false, gg.SIGN_EQUAL, region_start, region_end) gg.refineNumber(search[1][1], search[1][2], false, gg.SIGN_EQUAL, region_start, region_end)--优化搜索的数据 if gg.getResultsCount() == 0 then gg.alert("没有搜索到指针数据") return false else local result = gg.getResults(gg.getResultsCount())--获取搜索到的所有数据 gg.clearResults() for i = 2, #search do--偏移副特征码数据 local offset_array = {}--存放偏移数组的表 for k, v in ipairs(result) do offset_array[#offset_array + 1] = { ["address"] = v["address"] + search[i][2],--把所有搜索出来的结果, 加上偏移量 ["flags"] = search[i][3] } end offset_array = gg.getValues(offset_array)--获取所有副特征数据 local verify_array = {}--验证数组表 for k, v in ipairs(offset_array) do--偏移偏移后的数据 if v["value"] == search[i][1] then--如果值等于主特征 verify_array[#verify_array + 1] = result[k] end end result = verify_array end if #result > 0 then local Table = { {}, {} } for k, v in ipairs(result) do for kk, vv in ipairs(write) do -- print(string.format("0x%X", v["address"] + vv[2])) local Modifythe_array = { ["address"] = v["address"] + vv[2], ["flags"] = vv[3], ["value"] = vv[1], ["freeze"] = vv[4] } if vv[4] then Table[2][#Table[2] + 1] = Modifythe_array else Table[1][#Table[1] + 1] = Modifythe_array end end end gg.addListItems(Table[2]) gg.setValues(Table[1]) gg.toast("功能: [" .. search[1][4] .. "]开启成功共修改" .. (#Table[1] + #Table[2]) .. "条数据") else gg.toast("未找到偏移数据") end end 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 S_Pointer(t_So, t_Offset, _bit) local function getRanges() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v.type:sub(2, 2) == 'w' then table.insert(ranges, v) end end return ranges end local function Get_Address(N_So, Offset, ti_bit) local ti = gg.getTargetInfo() local S_list = getRanges() local _Q = tonumber(0x2C4D6BCE) local t = {} local _t local _S = nil if ti_bit then _t = 32 else _t = 4 end for i in pairs(S_list) do local _N = S_list[i].internalName:gsub('^.*/', '') if N_So[1] == _N and N_So[2] == S_list[i].state then _S = S_list[i] break end end if _S then t[#t + 1] = {} t[#t].address = _S.start + Offset[1] t[#t].flags = _t if #Offset ~= 1 then for i = 2, #Offset do local S = gg.getValues(t) t = {} for _ in pairs(S) do if not ti.x64 then S[_].value = S[_].value & 0xFFFFFFFF end t[#t + 1] = {} t[#t].address = S[_].value + Offset[i] t[#t].flags = _t end end end _S = t[#t].address end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end function PS() end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end function readWrite(Search,Get,Type,Range,Name) gg.clearResults() gg.setRanges(Range) gg.setVisible(false) if Search[1][1]~=false then gg.searchAddress(Search[1][1],0xFFFFFFFF,Search[1][4] or Type,gg.SIGN_EQUAL,Search[1][5] or 1,Search[1][6] or -1) end gg.searchNumber(Search[1][2],Search[1][4] or Type,false,gg.SIGN_EQUAL,Search[1][5] or 1,Search[1][6] or -1) local count=gg.getResultCount() local result=gg.getResults(count) gg.clearResults() local data={} local base=Search[1][3] if (count > 0) then for i,v in ipairs(result) do v.isUseful=true end for k=2,#Search do local tmp={} local offset=Search[k][2] - base local num=Search[k][1] for i,v in ipairs(result) do tmp[#tmp+1]={} tmp[#tmp].address=v.address+offset tmp[#tmp].flags=Search[k][3] or Type end tmp=gg.getValues(tmp) for i,v in ipairs(tmp) do if v.flags==16 or v.flags==64 then values=tostring(v.value):sub(1,6) num=tostring(num):sub(1,6) else values=v.value end if tostring(values)~=tostring(num) then result[i].isUseful=false end end end for i,v in ipairs(result) do if (v.isUseful) then data[#data+1]=v.address end end if (#data > 0) then local t,t_={},{} local base=Search[1][3] for i=1,#data do for k,w in ipairs(Get) do offset=w[2] - base if w[1]==false then t_[#t_+1]={} t_[#t_].address=data[i]+offset t_[#t_].flags=Type th_=(th_) and th_+1 or 1 else t[#t+1]={} t[#t].address=data[i]+offset t[#t].flags=w[3] or Type t[#t].value=w[1] tg_=(tg_) and tg_+1 or 1 if (w[4]==true) then local item={} item[#item+1]=t[#t] item[#item].freeze=w[4] gg.addListItems(item) end end end end tg=(tg_) and "\n已修改"..tg_.."条数据" or "" th=(th_) and "\n已获取"..th_.."条数据" or "" gg.setValues(t) t_=gg.getValues(t_) gg.loadResults(t_) gg.toast("\n"..Name.."搜索成功!\n偏移到"..#data.."条数据"..tg..th) tg_,th_=nil,nil else gg.toast("\n"..Name.."开启失败",false) return false end else gg.toast(Name.."开启失败") return false 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"] xgdj = qmxg[x]["freeze"] if xgdj == nil or xgdj == "" then gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) else gg.addListItems({[1] = {address = xgpy, flags = xglx, freeze = xgdj, value = xgsz}}) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "失败") else gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "失败") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for i = 1, sz do pdsz = true for v = 4, #(qmnb) do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[i].address + qmnb[v]["offset"] pysz[1].flags = qmnb[v]["type"] szpy = gg.getValues(pysz) pdpd = qmnb[v]["lv"] .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[i].address xgxc(szpy, qmxg) end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "地址成功,共修改" .. xgsl .. "条数据") else gg.toast(qmnb[2]["name"] .. "失败") end end end end --仿XS写法配置 function xqmnb(Search,Modification) gg.clearResults() gg.setRanges(Search[1].memory) gg.searchNumber(Search[3].value,Search[3].type,false,536870912,0,-1) if gg.getResultCount()==0 then gg.toast(Search[2].name..'开启失败') return end local Result=gg.getResults(gg.getResultCount()) local sum for index=4,#Search do sum=0 for i=1,#Result do if gg.getValues({{address=Result[i].address+Search[index].offset,flags=Search[index].type}})[1].value~=Search[index].lv then Result[i].Usable=true sum=sum+1 end end if sum==#Result then gg.toast(Search[2].name..'开启失败') return end end local Data,Freeze,Freezes={},{},0 sum=0 for index,value in ipairs(Modification)do for index=1,#Result do if not Result[index].Usable then local Value={address=Result[index].address+value.offset,flags=value.type,value=value.value,freeze=true} if value.freeze then Freeze[#Freeze+1]=Value Freezes=Freezes+1 else Data[#Data+1]=Value end sum=sum+1 end end end gg.setValues(Data) gg.addListItems(Freeze) if Freezes==0 then gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据') else gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据') end gg.clearResults() end -- 读取内存地址的函数 function readPointer(name, offset, i) local re = gg.getRangesList(name) local x64 = gg.getTargetInfo().x64 local va = {[true]=32, [false]=4} if re[i or 1] then local addr = re[i or 1].start + offset[1] for i = 2, #offset do addr = gg.getValues({{address=addr, flags=va[x64]}}) if not x64 then addr[1].value = addr[1].value & 0xFFFFFFFF end addr = addr[1].value + offset[i] end return addr end end -- 修改内存地址的函数 function gg.edits(addr, Table, name) local Table1 = {{}, {}} for k, v in ipairs(Table) do local value = {address = addr+v[3], value = v[1], flags = v[2], freeze = v[4]} if v[4] then Table1[2][#Table1[2]+1] = value else Table1[1][#Table1[1]+1] = value end end gg.addListItems(Table1[2]) gg.setValues(Table1[1]) gg.toast((name or "") .. "开启成功, 共修改"..#Table.."个值") end function editData(qmnb,qmxg)gg.setVisible(false)gg.clearResults()qmnbv=qmnb[3]["value"]or qmnb[3][1]qmnbt=qmnb[3]["type"]or qmnb[3][2]qmnbn=qmnb[2]["name"]or qmnb[2][1]gg.setRanges(qmnb[1]["memory"]or qmnb[1][1])gg.searchNumber(qmnbv,qmnbt)gg.refineNumber(qmnbv,qmnbt)sz=gg.getResultCount()if sz==0 then gg.toast(qmnbn.."开启失败")else sl=gg.getResults(999999)for i=1,sz do pdsz=true for v=4,#qmnb do if pdsz==true then pysz={{}}pysz[1].address=sl[i].address+(qmnb[v]["offset"]or qmnb[v][2])pysz[1].flags=qmnb[v]["type"]or qmnb[v][3]szpy=gg.getValues(pysz)tzszpd=tostring(qmnb[v]["lv"]or qmnb[v][1]):gsub(",","")pyszpd=tostring(szpy[1].value):gsub(",","")if tzszpd==pyszpd then pdjg=true pdsz=true else pdjg=false pdsz=false end end end if pdjg==true then szpy=sl[i].address for x=1,#qmxg do xgsz=qmxg[x]["value"]or qmxg[x][1]xgpy=szpy+(qmxg[x]["offset"]or qmxg[x][2])xglx=qmxg[x]["type"]or qmxg[x][3]xgdj=qmxg[x]["freeze"]or qmxg[x][4]xg={{address=xgpy,flags=xglx,value=xgsz}}if xgdj==true then xg[1].freeze=xgdj gg.addListItems(xg)else gg.setValues(xg)end end xgjg=true end end if xgjg==true then gg.toast(qmnbn.."开启成功")else gg.toast(qmnbn.."开启失败")end end end function editData(qmnb,qmxg)gg.setVisible(false)gg.clearResults()qmnbv=qmnb[3]["value"]or qmnb[3][1]qmnbt=qmnb[3]["type"]or qmnb[3][2]qmnbn=qmnb[2]["name"]or qmnb[2][1]gg.setRanges(qmnb[1]["memory"]or qmnb[1][1])gg.searchNumber(qmnbv,qmnbt)gg.refineNumber(qmnbv,qmnbt)sz=gg.getResultCount()if sz==0 then gg.toast(qmnbn.."开启失败")else sl=gg.getResults(999999)for i=1,sz do pdsz=true for v=4,#qmnb do if pdsz==true then pysz={{}}pysz[1].address=sl[i].address+(qmnb[v]["offset"]or qmnb[v][2])pysz[1].flags=qmnb[v]["type"]or qmnb[v][3]szpy=gg.getValues(pysz)tzszpd=tostring(qmnb[v]["lv"]or qmnb[v][1]):gsub(",","")pyszpd=tostring(szpy[1].value):gsub(",","")if tzszpd==pyszpd then pdjg=true pdsz=true else pdjg=false pdsz=false end end end if pdjg==true then szpy=sl[i].address for x=1,#qmxg do xgsz=qmxg[x]["value"]or qmxg[x][1]xgpy=szpy+(qmxg[x]["offset"]or qmxg[x][2])xglx=qmxg[x]["type"]or qmxg[x][3]xgdj=qmxg[x]["freeze"]or qmxg[x][4]xg={{address=xgpy,flags=xglx,value=xgsz}}if xgdj==true then xg[1].freeze=xgdj gg.addListItems(xg)else gg.setValues(xg)end end xgjg=true end end if xgjg==true then gg.toast(qmnbn.."开启成功")else gg.toast(qmnbn.."开启失败")end end end --偏移 function readWrite(Search,Get,Type,Range,Name) gg.clearResults() gg.setRanges(Range) gg.setVisible(false) if Search[1][1]~=false then gg.searchAddress(Search[1][1],0xFFFFFFFF,Search[1][4] or Type,gg.SIGN_EQUAL,Search[1][5] or 1,Search[1][6] or -1) end gg.searchNumber(Search[1][2],Search[1][4] or Type,false,gg.SIGN_EQUAL,Search[1][5] or 1,Search[1][6] or -1) local count=gg.getResultCount() local result=gg.getResults(count) gg.clearResults() local data={} local base=Search[1][3] if (count > 0) then for i,v in ipairs(result) do v.isUseful=true end for k=2,#Search do local tmp={} local offset=Search[k][2] - base local num=Search[k][1] for i,v in ipairs(result) do tmp[#tmp+1]={} tmp[#tmp].address=v.address+offset tmp[#tmp].flags=Search[k][3] or Type end tmp=gg.getValues(tmp) for i,v in ipairs(tmp) do if v.flags==16 or v.flags==64 then values=tostring(v.value):sub(1,6) num=tostring(num):sub(1,6) else values=v.value end if tostring(values)~=tostring(num) then result[i].isUseful=false end end end for i,v in ipairs(result) do if (v.isUseful) then data[#data+1]=v.address end end if (#data > 0) then local t,t_={},{} local base=Search[1][3] for i=1,#data do for k,w in ipairs(Get) do offset=w[2] - base if w[1]==false then t_[#t_+1]={} t_[#t_].address=data[i]+offset t_[#t_].flags=Type th_=(th_) and th_+1 or 1 else t[#t+1]={} t[#t].address=data[i]+offset t[#t].flags=w[3] or Type t[#t].value=w[1] tg_=(tg_) and tg_+1 or 1 if (w[4]==true) then local item={} item[#item+1]=t[#t] item[#item].freeze=w[4] gg.addListItems(item) end end end end tg=(tg_) and "\n已修改"..tg_.."条数据" or "" th=(th_) and "\n已获取"..th_.."条数据" or "" gg.setValues(t) t_=gg.getValues(t_) gg.loadResults(t_) gg.toast("\n"..Name.."搜索成功!\n偏移到"..#data.."条数据"..tg..th) tg_,th_=nil,nil else gg.toast("\n"..Name.."开启失败",false) return false end else gg.toast(Name.."开启失败") return false end end --以上为配置 勿动 loadingBox['关闭']() gg.loopKillGG()--杀gg function huiz()---绘制必须放在这里面 draw.setColor('#00FFFF') draw.setSize(47)draw.setStyle('描边并填充') --绘制内容请写到这里面,否则会消失 end function py1(value,lx,py) if #sj~=nil then z1={} z2={} for i=1,#sj do z1[i]={} z1[i].address=sj[i].address+py z1[i].flags=lx end z1=gg.getValues(z1) for i=1,#sj do if z1[i].value==value then z2[#z2+1]={} z2[#z2]=sj[i] end end sj=z2 z1={} z2={} gg.toast("共偏移 "..#sj.." 个数据") else gg.toast("没有搜索数据") end end function py2(value,lx,py) if #sj~=nil then z1={} z2={} for i=1,#sj do z1[i]={} z1[i].address=sj[i].address+py z1[i].flags=lx end z1=gg.getValues(z1) for i=1,#sj do if z1[i].value~=value then z2[#z2+1]={} z2[#z2]=sj[i] end end sj=z2 z1={} z2={} gg.toast("共偏移 "..#sj.." 个数据") else gg.toast("没有搜索数据") end end function xg1(value,lx,py,dj) if #sj~=nil then z={} for i=1,#sj do z[i]={} z[i].address=sj[i].address+py z[i].flags=lx z[i].value=value if dj==true then z[i].freeze=true end end if dj==true then gg.addListItems(z) else gg.clearList() gg.setValues(z) end gg.toast("共修改 "..#z.." 个数据") else gg.toast("没有搜索数据") end end function xg2(bz,value,lx,py,dj) if #bz~=nil then z={} for i=1,#bz do z[i]={} z[i].address=bz[i].address+py z[i].flags=lx z[i].value=value if dj==true then z[i].freeze=true end end if dj==true then gg.addListItems(z) else gg.clearList() gg.setValues(z) end gg.toast("共修改 "..#z.." 个数据") else gg.toast("没有搜索数据") end end function bc(bz) if sj~=nil then _ENV[bz]=sj else gg.toast("无数据") end end function BaAdd(add) if gg.getTargetInfo().x64==true then t=gg.getValues({[1]={address=add,flags=32}}) return t[1].value else t=gg.getValues({[1]={address=add,flags=4}}) return t[1].value&0xFFFFFFFF end end function set(dz,xg,lx,dj) if dj=="true" then gg.addListItems({{address=dz,flags=lx,value=xg,freeze=true}}) else gg.setValues({{address=dz,flags=lx,value=xg}}) end gg.toast("已修改完成~") end function fastsearch(search,write)gg.setVisible(false)gg.clearResults()gg.setRanges(search[1][3])gg.searchNumber(search[1][1],search[1][2])if gg.getResultsCount()==0 then gg.toast("开启失败")return false else local result=gg.getResults(gg.getResultsCount())gg.clearResults()for i=2,#search do local mtp={}for w,r in ipairs(result)do mtp[#mtp+1]={address=r.address+search[i][2],flags=search[i][3]}end mtp=gg.getValues(mtp)local hook={}for w,r in ipairs(mtp)do if r.value==search[i][1]then hook[#hook+1]=result[w]end end result=hook end if#result>0 then local tb={{},{}}for i,v in ipairs(result)do for _,vv in ipairs(write)do local p={address=v.address+vv[2],flags=vv[3],value=vv[1],freeze=vv[4]}if vv[4]then table.insert(tb[2],p)else table.insert(tb[1],p)end end end gg.addListItems(tb[2])gg.setValues(tb[1])gg.toast("修改成功, 共修改"..(#tb[1]+#tb[2]).."条结果")else gg.toast("开启失败")end end end stab = { --菜单名字,添加即可加页数,需要与结尾配置表对应 {"基础","https://escape2020-1303126286.cos.ap-shenzhen-fsi.myqcloud.com/bm_gn"}, {"功能","https://escape2020-1303126286.cos.ap-shenzhen-fsi.myqcloud.com/safe"}, {"美化","https://escape2020-1303126286.cos.ap-shenzhen-fsi.myqcloud.com/mh"}, {"音乐","https://escape2020-1303126286.cos.ap-shenzhen-fsi.myqcloud.com/bm_music"}, {"设置","https://escape2020-1303126286.cos.ap-shenzhen-fsi.myqcloud.com/bm_sz"}, } xfcpic = "https://yz.rlyun.asia/assets/img/Program/c1986da84b628f953ff99a4c34b420a1.jpeg" xfcnpk = "http://47.121.177.176:5212/f/Mkysy/ic_close_white_24dp.png" -- ============================================================ -- 【支撑层】安眠曲功能模块 -- ============================================================ function tst(msg) if gg and gg.toast then gg.toast(msg or "完成") end end local function 防录屏设置(on) local f = _ENV["set".."Screenshots"] if type(f) == "function" then return pcall(f, on) end return false end bloc = function() end function F1() gg.toast("正在...,喵",true) gg.setProcessX() gg.setConfig("隐藏辅助",23) gg.setConfig("运行守护",3) gg.setConfig("冻结间隔",0) gg.setConfig("快速冻结",1) gg.toast("清除成功,喵") end function Fd() if gg.getRangesList("libNetHTProtect.so")[1] then local t = {} t[1] = gg.getRangesList("libNetHTProtect.so")[1]["start"] + 0x514D08; t[2] = gg.getRangesList("libNetHTProtect.so")[1]["start"] + 0x514D70; t[3] = gg.getRangesList("libNetHTProtect.so")[1]["start"] + 0x514E98; gg.setValues({ [1] = { address = t[1], flags = 4, value = 335544320, }, [2] = { address = t[2], flags = 4, value = 335544320, }, [3] = { address = t[3], flags = 4, value = -721215457, }, }) gg.toast("开启成功") end end function F2() local moduleName = "libNetHTProtect.so" local offsetList = { "0x1ccc0", "0x459f40", "0x95c38", "0x967c8", "0x95c24", "0x45a550", "0x955ac", "0x45a620", "0x45cfd8", "0x383150", "0x98c88", "0x956ec", "0x95f38", "0x45a4d8", "0x95a94", "0x95344", "0x98bd0", "0x81bf4", "0x9547c", "0x95480", "0x45acd0", "0x9590c", "0x95de4", "0x45d030", "0x95eb4", "0x42a858", "0x95478", "0x95bd4", "0x95348", "0x95c08", "0x45da58", "0x95f8c", "0x95918", "0x45a5a0", "0x95f70", "0x45a840", "0x45ac80", "0x9582c", "0x30c58c", "0x45a858", "0x243590" } local ranges = gg.getRangesList(moduleName) if not ranges or #ranges == 0 then gg.alert("未找到模块 "..moduleName) return end local baseAddr = ranges[1].start local addrTable = {} for idx, offStr in ipairs(offsetList) do local off = tonumber(offStr) local fullAddr = baseAddr + off addrTable[idx] = {address = fullAddr, offsetStr = offStr} end local backup = {} for i, item in ipairs(addrTable) do local t = {{address = item.address, flags = gg.TYPE_DWORD}} local res = gg.getValues(t) backup[i] = res[1].value end local writeList = {} for i, item in ipairs(addrTable) do writeList[i] = { address = item.address, flags = gg.TYPE_DWORD, value = "~A8 B\t [PC,#0x0]" } end gg.setValues(writeList) local checkList = {} for i, item in ipairs(addrTable) do checkList[i] = {address = item.address, flags = gg.TYPE_DWORD} end local checkRes = gg.getValues(checkList) local diffCount = 0 for i=1,#checkRes do if checkRes[i].value ~= backup[i] then diffCount = diffCount + 1 end end gg.toast("开启成功,喵") end -- 【整合模块】来自 安眠曲5.0旧版本.lua 移植 -- 含:通用工具 / CONFIG / STATE / LISTEN / MONSTER / 远程刀RK模块 -- 监听 / 怪兽吸附 / 新版传送(tp模块另见下方) -- ============================================================ function lsp(add) local ti = gg.getTargetInfo() if ti.x64 == true then return gg.getValues({{address = add, flags = 32}})[1].value else return gg.getValues({{address = add, flags = 4}})[1].value & 0xFFFFFFFF end end function getDword(add) return gg.getValues({{address = add, flags = 4}})[1].value end function UTF16ToString(startAddress) local str = '' local length = getDword(startAddress - 4) if length <= 0 or length > 256 then return "未知玩家" end for i = 1, length do str = str .. utf8.char(gg.getValues({{address = startAddress + 0x2 * (i - 1), flags = 2}})[1].value & 0xFFFF) end return str end CONFIG = { pipeOffset = 0x228, eatOffset = 0x22C, chameleonOffset = 0x458, deathOffset = 0x234, curseOffset = 0x1F8, spyOffset = 0x2A8, legOffset = 0x10C, posXOffset = 0x3C0, posZOffset = 0x3C4, posYOffset = 0x3C8, listenInterval = 300, monsterEps = 0.0001, } STATE = { isListening = false, isInitialized = false, baseAddr = 0, playerCount = 0, players = {}, logText = "", menuLabel = "开始监听", heartbeat = 0, } LISTEN = { addresses = {}, addresses2 = {}, addresses3 = {}, addresses4 = {}, addresses5 = {}, addresses6 = {}, addresses8 = {}, posX = {}, posZ = {}, posY = {}, names = {}, oldVals = {}, oldVals2 = {}, oldVals3 = {}, oldVals4 = {}, oldVals5 = {}, oldVals6 = {}, oldVals8 = {}, isFirstCheck = true, } MONSTER = { enabled = false, addresses = {}, baselineValues = {}, detected = false, selfIndex = -1, targetIndex = -1, frozen = false, } -- ============================================================ -- 【远程刀模块】RK_1 换目标刀人 / RK_2 怪兽模式 -- ============================================================ RK = { base = 0, myName = nil, mode = "idle", selfP = nil, selfAddr = nil, oldVal = nil, lastWrite = nil, targetP = nil, endTime = 0, rot = 0, nameCache = {}, } RK_DEATH = 5.856 RK_MONSTER = 4.39200019836 RK_EPS = 1e-4 function rkUtf16(a, maxLen) local out, n = {}, 0 local lim = maxLen or 64 local req = {} for k = 0, lim - 1 do req[k + 1] = { address = a + k * 2, flags = gg.TYPE_WORD } end local ok, vals = pcall(gg.getValues, req) if not ok or type(vals) ~= "table" then vals = {} end while n < lim do local v = vals[n + 1] and vals[n + 1].value if not v then local one = gg.getValues({{address = a + n * 2, flags = gg.TYPE_WORD}}) v = one and one[1] and one[1].value end if not v or v == 0 then break end local c = v % 0x10000 if c < 0x80 then out[#out + 1] = string.char(c) elseif c < 0x800 then local b2 = c % 0x40 local b1 = math.floor(c / 0x40) out[#out + 1] = string.char(0xC0 + b1, 0x80 + b2) else local b3 = c % 0x40 local b2 = math.floor(c / 0x40) % 0x40 local b1 = math.floor(c / 0x1000) out[#out + 1] = string.char(0xE0 + b1, 0x80 + b2, 0x80 + b3) end n = n + 1 end return table.concat(out) end function rkInit(silent) local oldRanges = gg.getRanges() local oldCount = gg.getResultsCount() local oldResults = nil if oldCount > 0 and oldCount <= 2000 then pcall(function() oldResults = gg.getResults(oldCount) end) end gg.setRanges(gg.REGION_ANONYMOUS) gg.clearResults() RK.nameCache = {} gg.searchNumber(":PlayerActor[]", gg.TYPE_BYTE, false, gg.SIGN_EQUAL, 0, -1, 0) gg.searchPointer(0) gg.searchPointer(0x10) local r = gg.getResults(gg.getResultsCount()) gg.clearResults() RK.base = 0 if oldRanges then pcall(gg.setRanges, oldRanges) end if oldResults then pcall(gg.loadResults, oldResults) end if not r or #r == 0 then addLog("[远程刀] 初始化失败:无结果") if not silent then gg.toast("远程刀初始化失败:无结果") end return false end local q = {} for i, v in ipairs(r) do q[i] = { address = v.address + 0x18, flags = gg.TYPE_DWORD } end local vals = gg.getValues(q) for i, v in ipairs(vals) do if v.value == 8 or v.value == 16 then RK.base = r[i].address break end end if RK.base == 0 then addLog("[远程刀] 初始化失败:未找到基址") if not silent then gg.toast("远程刀初始化失败:未找到基址") end return false end addLog("[远程刀] 基址 0x" .. string.format("%X", RK.base)) return true end function rkReadCC(p) local req = {} for j = 0, 3 do req[j + 1] = { address = p + 0xCC + j * 4, flags = gg.TYPE_FLOAT } end local vals = gg.getValues(req) local out = {} for i, v in ipairs(vals) do out[i] = v.value end return out end function rkIsDead(p) for _, v in ipairs(rkReadCC(p)) do if math.abs(v - RK_DEATH) < RK_EPS then return true end end return false end function rkIsMonster(p) for _, v in ipairs(rkReadCC(p)) do if math.abs(v - RK_MONSTER) < RK_EPS then return true end end return false end function rkPlayerAlive(p) if not p or p == 0 then return false end local v = gg.getValues({{ address = p + 0xA0, flags = gg.TYPE_QWORD }})[1].value return v ~= nil and v ~= 0 end function rkNameOf(namePtr) local key = tostring(namePtr) local c = RK.nameCache[key] if c then return c end local s = rkUtf16(namePtr + 0x14) RK.nameCache[key] = s return s end function rkCollectPlayers() local list = {} if RK.base == 0 then return list end local ptReq = {} for i = 0, 499 do ptReq[i + 1] = { address = RK.base + 0x20 + i * 8, flags = gg.TYPE_QWORD } end local pts = gg.getValues(ptReq) local ptrs = {} for i = 1, #pts do local p = pts[i].value if not p or p == 0 then break end ptrs[#ptrs + 1] = p end if #ptrs == 0 then return list end local req = {} for i, p in ipairs(ptrs) do req[#req + 1] = { address = p + 0xA0, flags = gg.TYPE_QWORD } req[#req + 1] = { address = p + 0x20, flags = gg.TYPE_DWORD } end local vals = gg.getValues(req) local ccReq = {} for i, p in ipairs(ptrs) do for j = 0, 3 do ccReq[#ccReq + 1] = { address = p + 0xCC + j * 4, flags = gg.TYPE_FLOAT } end end local ccVals = gg.getValues(ccReq) for i, p in ipairs(ptrs) do local p2 = vals[(i - 1) * 2 + 1].value local f4 = vals[(i - 1) * 2 + 2].value if p2 and p2 ~= 0 then local dead = false for j = 0, 3 do local v = ccVals[(i - 1) * 4 + j + 1].value if v and math.abs(v - RK_DEATH) < RK_EPS then dead = true break end end list[#list + 1] = { p = p, name = rkNameOf(p2), f4 = f4, dead = dead } end end return list end function rkPickSelf(list) if RK.myName then for _, it in ipairs(list) do if it.name == RK.myName then return it end end gg.toast("远程刀:名字表里没找到 " .. RK.myName .. ",请手动选") addLog("[远程刀] 未匹配到名字 " .. RK.myName .. ",转为手动选择") end local t = {} for i, it in ipairs(list) do t[i] = i .. ". " .. it.name .. (it.dead and " [死]" or "") end local s = gg.choice(t, nil, "远程刀:选择你自己") if not s then return nil end return list[s] end function rkStop(msg) if RK.selfAddr and RK.selfAddr ~= 0 and RK.oldVal ~= nil then local cur = gg.getValues({{ address = RK.selfAddr, flags = gg.TYPE_DWORD }})[1].value if RK.lastWrite == nil or cur == RK.lastWrite then pcall(gg.setValues, {{ address = RK.selfAddr, flags = gg.TYPE_DWORD, value = RK.oldVal }}) end end RK.mode, RK.selfP, RK.selfAddr, RK.oldVal = "idle", nil, nil, nil RK.targetP, RK.endTime, RK.rot, RK.lastWrite = nil, 0, 0, nil if msg then addLog("[远程刀] " .. msg) end end function rkReady() if RK.base == 0 and not rkInit() then return false end if not RK.myName then local r = gg.prompt({"请输入你的名字\n自建房写主页名字\n实战写局内名字\n留空 = 每次手动选自己"}, {""}, {"text"}) if r and r[1] and r[1] ~= "" then RK.myName = r[1] gg.toast("远程刀:已记录名字 " .. RK.myName) end end return true end function rkStartSingle() if not rkReady() then return end local list = rkCollectPlayers() if #list == 0 then gg.toast("远程刀:无玩家数据(请确认在对局内)") return end local self = rkPickSelf(list) if not self then gg.toast("远程刀:未选自己") return end local t, map = {}, {} for _, it in ipairs(list) do if it.p ~= self.p then t[#t + 1] = it.name .. (it.dead and " [死]" or "") map[#map + 1] = it end end if #t == 0 then gg.toast("远程刀:没有其他玩家") return end local o = gg.choice(t, nil, "远程刀:选择要顶替的目标") if not o then return end local target = map[o] RK.selfP = self.p RK.selfAddr = self.p + 0x20 RK.oldVal = self.f4 RK.targetP = target.p RK.endTime = os.time() + 5 RK.lastWrite = target.f4 RK.mode = "single" gg.setValues({{ address = RK.selfAddr, flags = gg.TYPE_DWORD, value = target.f4 }}) gg.toast("远程刀:已写 " .. target.name .. " → " .. self.name .. "(5秒后恢复)") addLog("[远程刀] 换目标 " .. target.name .. " → " .. self.name .. "(5秒)") end function rkStartMonster() if not rkReady() then return end local list = rkCollectPlayers() if #list == 0 then gg.toast("远程刀:无玩家数据(请确认在对局内)") return end local self = rkPickSelf(list) if not self then gg.toast("远程刀:未选自己") return end RK.selfP = self.p RK.selfAddr = self.p + 0x20 RK.oldVal = self.f4 RK.targetP = nil RK.rot = 0 RK.mode = "monster" gg.toast("远程刀:怪兽模式已开启") addLog("[远程刀] 怪兽模式开启,自己: " .. self.name) end function rkMenuSingle() if RK.mode == "single" then rkStop("单次刀已手动恢复") gg.toast("远程刀:已恢复") return end if RK.mode ~= "idle" then rkStop("切换功能,已恢复") end rkStartSingle() end function rkMenuMonster() if RK.mode == "monster" then rkStop("怪兽模式已停止") gg.toast("远程刀:怪兽模式已停止") return end if RK.mode ~= "idle" then rkStop("切换功能,已恢复") end rkStartMonster() end function rkPickNextTarget() local list = rkCollectPlayers() local alive = {} for _, it in ipairs(list) do if it.p ~= RK.selfP and not it.dead then alive[#alive + 1] = it end end if #alive == 0 then RK.targetP = nil return end RK.rot = RK.rot % #alive + 1 RK.targetP = alive[RK.rot].p addLog("[远程刀] 切换目标 → " .. alive[RK.rot].name) end function rkTick() if RK.mode == "idle" then return end if not rkPlayerAlive(RK.selfP) then rkStop("对局结束") RK.base = 0 RK.nameCache = {} return end if RK.mode == "single" then if RK.targetP and rkIsDead(RK.targetP) then rkStop("目标已死亡,已恢复") return end if os.time() >= RK.endTime then rkStop("5秒已到,已恢复") end return end if RK.mode == "monster" then if not rkIsMonster(RK.selfP) then return end local needPick = false if not RK.targetP then needPick = true elseif not rkPlayerAlive(RK.targetP) then needPick = true elseif rkIsDead(RK.targetP) then needPick = true end if needPick then rkPickNextTarget() end if RK.targetP and RK.selfAddr then local f4 = gg.getValues({{ address = RK.targetP + 0x20, flags = gg.TYPE_DWORD }})[1].value if f4 then gg.setValues({{ address = RK.selfAddr, flags = gg.TYPE_DWORD, value = f4 }}) RK.lastWrite = f4 end end end end -- ============================================================ -- 【监听模块】initialize / prepareListenData / toggleListen / checkChanges -- ============================================================ function initialize() gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("4.88", gg.TYPE_FLOAT) local results = gg.getResults(gg.getResultsCount()) if #results == 0 then gg.alert("搜索失败") return end STATE.players = {} for i, v in ipairs(results) do local playerAddr = v.address local offset8C = playerAddr - 0xCC local check450 = gg.getValues({{address = offset8C + 0x234, flags = gg.TYPE_DWORD}})[1].value if check450 == 1 then local namePtr = lsp(offset8C + 0xA0) local name = "未知玩家" if namePtr ~= 0 then name = UTF16ToString(namePtr + 0x14) or "未知玩家" end if name ~= "未知玩家" then table.insert(STATE.players, { addr = playerAddr, offset8C = offset8C, name = name, }) end end end if #STATE.players == 0 then gg.alert("未找到有效玩家") STATE.isInitialized = false return end STATE.isInitialized = true STATE.playerCount = #STATE.players gg.toast("初始化完成,共 " .. #STATE.players .. " 名玩家") prepareListenData() end function prepareListenData() if not STATE.isInitialized or not STATE.players or #STATE.players == 0 then gg.toast("请先初始化") return end LISTEN.addresses, LISTEN.addresses2, LISTEN.addresses3 = {}, {}, {} LISTEN.addresses4, LISTEN.addresses5, LISTEN.addresses6, LISTEN.addresses8 = {}, {}, {}, {} LISTEN.posX, LISTEN.posZ, LISTEN.posY, LISTEN.names = {}, {}, {}, {} LISTEN.oldVals, LISTEN.oldVals2, LISTEN.oldVals3, LISTEN.oldVals4 = {}, {}, {}, {} LISTEN.oldVals5, LISTEN.oldVals6, LISTEN.oldVals8 = {}, {}, {} LISTEN.isFirstCheck = true for i, p in ipairs(STATE.players) do local base = p.offset8C LISTEN.names[i] = p.name LISTEN.addresses[i] = { address = base + CONFIG.pipeOffset, flags = 4 } LISTEN.addresses2[i] = { address = base + CONFIG.eatOffset, flags = 4 } LISTEN.addresses3[i] = { address = base + CONFIG.chameleonOffset, flags = 4 } LISTEN.addresses4[i] = { address = base + CONFIG.deathOffset, flags = 4 } LISTEN.addresses5[i] = { address = base + CONFIG.curseOffset, flags = 4 } LISTEN.addresses6[i] = { address = base + CONFIG.spyOffset, flags = 4 } LISTEN.addresses8[i] = { address = base + CONFIG.legOffset, flags = 4 } LISTEN.posX[i] = { address = base + CONFIG.posXOffset, flags = 16 } LISTEN.posZ[i] = { address = base + CONFIG.posZOffset, flags = 16 } LISTEN.posY[i] = { address = base + CONFIG.posYOffset, flags = 16 } end LISTEN.oldVals = gg.getValues(LISTEN.addresses) LISTEN.oldVals2 = gg.getValues(LISTEN.addresses2) LISTEN.oldVals3 = gg.getValues(LISTEN.addresses3) LISTEN.oldVals4 = gg.getValues(LISTEN.addresses4) LISTEN.oldVals5 = gg.getValues(LISTEN.addresses5) LISTEN.oldVals6 = gg.getValues(LISTEN.addresses6) LISTEN.oldVals8 = gg.getValues(LISTEN.addresses8) end function toggleListen() if not STATE.isInitialized then gg.toast("请先初始化") return end if STATE.isListening then STATE.isListening = false STATE.menuLabel = "开始监听" gg.toast("监听 → 关闭") else STATE.isListening = true STATE.menuLabel = "取消监听" gg.toast("监听 → 开启(管道/狙击 + 大胃王 + 隐身 + 死亡 + 诅咒 + 间谍 + 鸡腿)") LISTEN.oldVals = gg.getValues(LISTEN.addresses) LISTEN.oldVals2 = gg.getValues(LISTEN.addresses2) LISTEN.oldVals3 = gg.getValues(LISTEN.addresses3) LISTEN.oldVals4 = gg.getValues(LISTEN.addresses4) LISTEN.oldVals5 = gg.getValues(LISTEN.addresses5) LISTEN.oldVals6 = gg.getValues(LISTEN.addresses6) LISTEN.oldVals8 = gg.getValues(LISTEN.addresses8) LISTEN.isFirstCheck = true STATE.heartbeat = 0 end end function findNearestPlayer(deadIndex) local n = #LISTEN.posX if n == 0 then return nil end local batch = {} for i = 1, n do batch[i] = LISTEN.posX[i] batch[n + i] = LISTEN.posZ[i] batch[2 * n + i] = LISTEN.posY[i] batch[3 * n + i] = LISTEN.addresses4[i] end local ok, all = pcall(gg.getValues, batch) if not ok or not all then return nil end local deadX = all[deadIndex].value local deadZ = all[n + deadIndex].value local deadY = all[2 * n + deadIndex].value local minDist, nearestIdx = math.huge, nil for i = 1, n do if i ~= deadIndex then local alive = all[3 * n + i] and all[3 * n + i].value or 0 if alive == 1 then local dx = all[i].value - deadX local dz = all[n + i].value - deadZ local dy = all[2 * n + i].value - deadY local dist = dx * dx + dz * dz + dy * dy if dist < minDist then minDist, nearestIdx = dist, i end end end end if not nearestIdx then minDist = math.huge for i = 1, n do if i ~= deadIndex then local dx = all[i].value - deadX local dz = all[n + i].value - deadZ local dy = all[2 * n + i].value - deadY local dist = dx * dx + dz * dz + dy * dy if dist < minDist then minDist, nearestIdx = dist, i end end end end return nearestIdx end function format_coordinates(x, y, z) return string.format("[%.1f,%.1f,%.1f]", x, y, z) end function getPlayerLocation(idx) if not idx or idx < 1 or not LISTEN.posX[idx] then return "" end local ok, vals = pcall(gg.getValues, { LISTEN.posX[idx], LISTEN.posZ[idx], LISTEN.posY[idx], }) if not ok or not vals then return "" end local px, pz, py = vals[1].value, vals[2].value, vals[3].value return format_coordinates(px, pz, py) end function findNearestAliveTarget() if not STATE.players or #STATE.players == 0 then return -1 end local selfIdx = MONSTER.selfIndex if selfIdx < 1 then return -1 end local n = #LISTEN.posX if n == 0 then return -1 end local batch = {} for i = 1, n do batch[i] = LISTEN.posX[i] batch[n + i] = LISTEN.posZ[i] batch[2 * n + i] = LISTEN.posY[i] batch[3 * n + i] = LISTEN.addresses4[i] end local all = gg.getValues(batch) if not all then return -1 end local baseX = all[selfIdx].value local baseZ = all[n + selfIdx].value local baseY = all[2 * n + selfIdx].value local minDist, nearestIdx = math.huge, -1 for i = 1, n do if i ~= selfIdx and all[3 * n + i].value == 1 then local dx = all[i].value - baseX local dz = all[n + i].value - baseZ local dy = all[2 * n + i].value - baseY local dist = dx * dx + dz * dz + dy * dy if dist < minDist then minDist, nearestIdx = dist, i end end end return nearestIdx end function monsterSetup() if not STATE.isInitialized then gg.toast("请先初始化") return end if #LISTEN.names == 0 then gg.toast("玩家数据为空,请重新初始化") return end local items = {} for i = 1, #LISTEN.names do items[#items + 1] = "[" .. i .. "] " .. (LISTEN.names[i] or ("玩家" .. i)) end local choice = gg.choice(items, nil, "请点击你自己的名字") if not choice then return end MONSTER.enabled = false MONSTER.addresses = {} MONSTER.baselineValues = {} MONSTER.detected = false MONSTER.targetIndex = -1 MONSTER.selfIndex = choice MONSTER.frozen = false gg.clearResults() gg.setRanges(32) gg.searchNumber("4.88", 16) local count = gg.getResultCount() if count <= 0 then gg.alert("未找到 4.88 数据\n请确认:\n1. 已进入游戏对局\n2. 功能在游戏里已开启") gg.clearResults() MONSTER.selfIndex = -1 return end local results = gg.getResults(count) for i, v in ipairs(results) do MONSTER.addresses[i] = { address = v.address, flags = 16 } MONSTER.baselineValues[i] = v.value end MONSTER.enabled = true MONSTER.detected = false MONSTER.targetIndex = -1 gg.clearResults() gg.toast("已找到 " .. count .. " 个地址,开始监听") addLog("[怪兽吸附] 已选自己: " .. (LISTEN.names[choice] or ("玩家" .. choice))) end function isMonsterActive() if not MONSTER.enabled then return false end if #MONSTER.addresses == 0 then return false end local current = gg.getValues(MONSTER.addresses) for i, v in ipairs(current) do if v.value < MONSTER.baselineValues[i] - CONFIG.monsterEps then return true end end return false end function freezeCoords(targetIdx) local selfIdx = MONSTER.selfIndex if targetIdx <= 0 then return false end if selfIdx < 1 or selfIdx > #LISTEN.posX then return false end local coords = gg.getValues({ LISTEN.posX[targetIdx], LISTEN.posZ[targetIdx], LISTEN.posY[targetIdx] }) if not coords or #coords < 3 then return false end local tx, tz, ty = coords[1].value, coords[2].value, coords[3].value if MONSTER.frozen then gg.clearList() MONSTER.frozen = false end local ok = gg.addListItems({ { address = LISTEN.posX[selfIdx].address, flags = 16, value = tx, freeze = true, freezeType = gg.FREEZE_NORMAL, name = "MonsterSelfX" }, { address = LISTEN.posZ[selfIdx].address, flags = 16, value = tz, freeze = true, freezeType = gg.FREEZE_NORMAL, name = "MonsterSelfZ" }, { address = LISTEN.posY[selfIdx].address, flags = 16, value = ty, freeze = true, freezeType = gg.FREEZE_NORMAL, name = "MonsterSelfY" }, }) if ok == false then addLog("[怪兽吸附] 冻结添加失败") return false end MONSTER.frozen = true return true end function monsterFreezeLoop() if not MONSTER.enabled then return end if not STATE.isInitialized then return end if not isMonsterActive() then if MONSTER.detected then MONSTER.detected = false MONSTER.targetIndex = -1 if MONSTER.frozen then gg.clearList() MONSTER.frozen = false end addLog("[怪兽吸附] 怪兽状态结束,冻结解除") end return end if not MONSTER.detected then MONSTER.detected = true gg.toast("检测到变身怪兽") addLog("[怪兽吸附] 检测到变身怪兽,进入冻结吸附") end local targetIdx = findNearestAliveTarget() if targetIdx > 0 then MONSTER.targetIndex = targetIdx freezeCoords(targetIdx) end end function checkChanges() if not STATE.isListening or not STATE.isInitialized then return end local n = #LISTEN.addresses if n == 0 then return end local batch = {} for i = 1, n do batch[i] = LISTEN.addresses[i] batch[n + i] = LISTEN.addresses2[i] batch[2*n + i] = LISTEN.addresses3[i] batch[3*n + i] = LISTEN.addresses4[i] batch[4*n + i] = LISTEN.addresses5[i] batch[5*n + i] = LISTEN.addresses6[i] batch[6*n + i] = LISTEN.addresses8[i] end local ok, all = pcall(gg.getValues, batch) if not ok or not all then return end local function slice(off) local t = {} for i = 1, n do t[i] = all[off + i] end return t end local currentVals = slice(0) local currentVals2 = slice(n) local currentVals3 = slice(2 * n) local currentVals4 = slice(3 * n) local currentVals5 = slice(4 * n) local currentVals6 = slice(5 * n) local currentVals8 = slice(6 * n) if LISTEN.isFirstCheck then LISTEN.isFirstCheck = false LISTEN.oldVals, LISTEN.oldVals2, LISTEN.oldVals3, LISTEN.oldVals4 = currentVals, currentVals2, currentVals3, currentVals4 LISTEN.oldVals5, LISTEN.oldVals6, LISTEN.oldVals8 = currentVals5, currentVals6, currentVals8 return end local nearestCache = {} local locCache = {} local function nearest(i) if nearestCache[i] == nil then nearestCache[i] = findNearestPlayer(i) or false end return nearestCache[i] or nil end local function loc(i) if locCache[i] == nil then locCache[i] = getPlayerLocation(i) or "" end return locCache[i] end for i = 1, n do local ov, cv = LISTEN.oldVals[i], currentVals[i] if ov and cv then local playerName = LISTEN.names[i] or ("玩家" .. i) local myLoc = loc(i) if cv.value ~= ov.value then addLog(playerName .. " [管道/狙击] " .. myLoc) end if currentVals2[i].value ~= LISTEN.oldVals2[i].value then addLog(playerName .. " [大胃王/饮料] " .. myLoc) end if currentVals3[i].value ~= LISTEN.oldVals3[i].value then local v = currentVals3[i].value if v == 16777216 then local ni = nearest(i) if ni and LISTEN.names[ni] then addLog(playerName .. " [小蜜蜂附身] " .. myLoc .. " 最近: " .. LISTEN.names[ni] .. " " .. loc(ni)) else addLog(playerName .. " [小蜜蜂附身] " .. myLoc) end elseif v == 65536 then local ni = nearest(i) if ni and LISTEN.names[ni] then addLog(playerName .. " [隐身] " .. myLoc .. " 最近: " .. LISTEN.names[ni] .. " " .. loc(ni)) else addLog(playerName .. " [隐身] " .. myLoc) end elseif v == 0 then addLog(playerName .. " [显形] " .. myLoc) end end if currentVals4[i].value ~= LISTEN.oldVals4[i].value then local newAlive = currentVals4[i].value local oldAlive = LISTEN.oldVals4[i].value if newAlive == 0 or (oldAlive == 1 and newAlive ~= 1) then local ni = nearest(i) if ni and LISTEN.names[ni] then addLog(playerName .. " [死亡] " .. myLoc .. " 可能凶手: " .. LISTEN.names[ni] .. " " .. loc(ni)) else addLog(playerName .. " [死亡] " .. myLoc) end elseif newAlive == 1 or (oldAlive ~= 1 and newAlive == 1) then addLog(playerName .. " [复活] " .. myLoc) else addLog(playerName .. " [存活变化:" .. tostring(oldAlive) .. "→" .. tostring(newAlive) .. "] " .. myLoc) end end if currentVals5[i].value ~= LISTEN.oldVals5[i].value then local ni = nearest(i) if ni and LISTEN.names[ni] then addLog(playerName .. " [被控] " .. myLoc .. " 最近: " .. LISTEN.names[ni] .. " " .. loc(ni)) else addLog(playerName .. " [被控] " .. myLoc) end end if currentVals6[i].value ~= LISTEN.oldVals6[i].value then addLog(playerName .. " [间谍变身] " .. myLoc) end local oldV, newV = LISTEN.oldVals8[i].value, currentVals8[i].value if oldV == 0 and newV ~= 0 then addLog(playerName .. " [拖鸡腿] " .. myLoc) elseif oldV ~= 0 and newV == 0 then addLog(playerName .. " [放下鸡腿] " .. myLoc) end end end LISTEN.oldVals, LISTEN.oldVals2, LISTEN.oldVals3, LISTEN.oldVals4 = currentVals, currentVals2, currentVals3, currentVals4 LISTEN.oldVals5, LISTEN.oldVals6, LISTEN.oldVals8 = currentVals5, currentVals6, currentVals8 end function addLog(text) gg.toast(text) STATE.logText = STATE.logText .. text .. "\n" end function viewLog() if STATE.logText == "" then gg.alert("暂无日志") else gg.alert(STATE.logText) end end function clearLog() STATE.logText = "" gg.toast("日志已清除") end -- ============================================================ -- 【新版传送模块】基于 凤凰同款传送.lua 移植(tp/TP_ 前缀防冲突) -- ============================================================ TP_STATE = { isInitialized = false, players = {}, arrayHeadAddr = nil, selfIndex = nil } function tpGetQword(add) return gg.getValues({{address = add, flags = 32}})[1].value end function tpInitialize() if TP_STATE.arrayHeadAddr == nil then gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("4.88", gg.TYPE_FLOAT) local count = gg.getResultsCount() if count == 0 then gg.alert("搜索失败") return end if count > 781391 then count = 781391 end local results = gg.getResults(count) local playerheads = {} for i, v in ipairs(results) do table.insert(playerheads, {address = v.address - 0xCC, flags = gg.TYPE_DWORD}) end gg.clearResults() gg.loadResults(playerheads) gg.searchPointer(0) local players = gg.getResults(gg.getResultsCount()) if #players == 0 then gg.alert("搜索失败") return end local checkList = {} for i, p in ipairs(players) do table.insert(checkList, {address = p.address - 0x8, flags = gg.TYPE_QWORD}) end local values = gg.getValues(checkList) local savedList = {} for i, v in ipairs(values) do if v.value == 16 or v.value == 32 then table.insert(savedList, v) end end if #savedList == 0 then gg.alert("未找到玩家") return end local adoptedAddr = nil for i, item in ipairs(savedList) do local checkAddr, expectedVal if item.value == 16 then checkAddr, expectedVal = item.address + 0x160, 16 else checkAddr, expectedVal = item.address + 0x130, 32 end local checkVal = gg.getValues({{address = checkAddr, flags = gg.TYPE_QWORD}})[1].value if checkVal == expectedVal then adoptedAddr = item.address break end end if adoptedAddr == nil then gg.alert("未找到玩家") return end TP_STATE.arrayHeadAddr = adoptedAddr - 0x18 end local playerOffsets = {0x20,0x28,0x30,0x38,0x40,0x48,0x50,0x58,0x60,0x68,0x70,0x78,0x80,0x88,0x90} TP_STATE.players = {} TP_STATE.selfIndex = nil local count = 0 for i, offset in ipairs(playerOffsets) do local slotValue = tpGetQword(TP_STATE.arrayHeadAddr + offset) if slotValue ~= 0 then local offsethead = tpGetQword(slotValue) if offsethead ~= 0 then local namePtr = lsp(slotValue + 0xA0) local name = "未知玩家" if namePtr ~= 0 then name = UTF16ToString(namePtr + 0x14) or "未知玩家" end if name ~= "未知玩家" then table.insert(TP_STATE.players, {slotValue = slotValue, name = name}) count = count + 1 end end end end if #TP_STATE.players == 0 then gg.alert("未找到玩家") TP_STATE.isInitialized = false return end TP_STATE.isInitialized = true gg.toast("传送初始化完成,共 " .. count .. " 名玩家") end function tpBuildChoices() local choices = {} for i, p in ipairs(TP_STATE.players) do local aliveVal = gg.getValues({{address = p.slotValue + 0x234, flags = gg.TYPE_DWORD}})[1].value choices[i] = p.name .. (aliveVal == 1 and " [存活]" or " [死亡]") end return choices end function teleportToPlayer() if not TP_STATE.isInitialized then tpInitialize() end if not TP_STATE.isInitialized then return end local choices = tpBuildChoices() local selfChoice = gg.choice(choices, nil, "传送:第一步 选择你自己") if not selfChoice then return end TP_STATE.selfIndex = selfChoice local selfPlayer = TP_STATE.players[selfChoice] gg.setVisible(false) choices = tpBuildChoices() local targetChoice = gg.choice(choices, nil, "传送:第二步 选择目标玩家") if not targetChoice then return end local targetPlayer = TP_STATE.players[targetChoice] local targetAlive = gg.getValues({{address = targetPlayer.slotValue + 0x234, flags = gg.TYPE_DWORD}})[1].value if targetAlive ~= 1 then gg.toast("目标已死亡,无法传送") return end local targetX = gg.getValues({{address = targetPlayer.slotValue + 0x3C0, flags = gg.TYPE_FLOAT}})[1].value local targetY = gg.getValues({{address = targetPlayer.slotValue + 0x3C4, flags = gg.TYPE_FLOAT}})[1].value local targetZ = gg.getValues({{address = targetPlayer.slotValue + 0x3C8, flags = gg.TYPE_FLOAT}})[1].value gg.toast("正在传送到: " .. targetPlayer.name) local freezeVals = { {address = selfPlayer.slotValue + 0x3C0, value = targetX, flags = gg.TYPE_FLOAT, freeze = true}, {address = selfPlayer.slotValue + 0x3C4, value = targetY, flags = gg.TYPE_FLOAT, freeze = true}, {address = selfPlayer.slotValue + 0x3C8, value = targetZ, flags = gg.TYPE_FLOAT, freeze = true}, } gg.setValues(freezeVals) gg.addListItems(freezeVals) gg.sleep(300) gg.clearList() gg.toast("传送完成 → " .. targetPlayer.name) end menu( { {--第1页 基础 box({" 进程", check({ { '选择进程', function() pcall(gg.setProcessX) end, function() end }, { '大厅防封', function() Fd() end, function() end }, { '登录防封', function() F2() end, function() end }, { "引流水印", function() draw.text("剑雨辅助QQ群:1134342897", 200,200) draw.setColor("#4A90E2") draw.setSize(47) draw.setStyle("描边并填充") end, function() draw.remove() end } }) }), box({" 基础功能", check({ { "❄清除冻结❄", function() gg.clearList() gg.toast("清除冻结成功,喵") end, function() end }, { '上帝视角', function() a = gg.prompt({"几倍视角就填几"} ,{[1]=1},{[1]="number"}) if not a then return end local aa=a[1]*-1 local qmnb= { {['memory']=32}, {['name']='视角'}, {['value']=-1.000500202178955, ['type']=16}, {['lv']=12.000000953674316,['offset']=152, ['type']=16}, } local qmxg= { {['value']=aa,['offset']=0,['type']=16,['freeze']=true}, {['value']=aa,['offset']=4,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) local qmnb= { {['memory']=16384}, {['name']='闪屏上帝过校验'}, {['value']=-0.0468902587890625, ['type']=16}, {['lv']=-0.03125,['offset']=-1728, ['type']=16}, {['lv']=-0.03125,['offset']=-1620, ['type']=16}, {['lv']=-0.03125,['offset']=-1520, ['type']=16}, {['lv']=-0.03125,['offset']=-1388, ['type']=16}, {['lv']=-0.03125,['offset']=-1312, ['type']=16}, {['lv']=-0.03125,['offset']=-700, ['type']=16}, } local qmxg= { {['value']=-721215457,['offset']=-788,['type']=4}, {['value']=-721215457,['offset']=-736,['type']=4}, } xqmnb(qmnb,qmxg) end, function() end }, { '平面视角', function() local sj = gg.prompt({"请输入您想改的视角"}, {"2.65"}, {"text"}) if sj == nil then return end local qmnb= { {['memory']=-2080896}, {['name']='上帝视角'}, {['value']=4661225614325437809, ['type']=32}, {['lv']=3854155828331282431,['offset']=4, ['type']=32}, {['lv']=-4656936921082317234,['offset']=8, ['type']=32}, } local qmxg= { {['value']=sj[1],['offset']=-220,['type']=16}, } xqmnb(qmnb,qmxg) end, function() end }, { '固定视角', function() local qmnb= { {['memory']=32}, {['name']='固定视角'}, {['value']=80, ['type']=16}, {['lv']=5,['offset']=-60, ['type']=16}, {['lv']=4,['offset']=-56, ['type']=16}, } local qmxg= { {['value']=-999,['offset']=-56,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) end, function() local qmnb= { {['memory']=32}, {['name']='固定视角'}, {['value']=80, ['type']=16}, {['lv']=5,['offset']=-60, ['type']=16}, {['lv']=4,['offset']=-56, ['type']=16}, } local qmxg= { {['value']=4,['offset']=-56,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) end }, { '全局亮透', function() local qmnb= { {['memory']=32}, {['name']='全局亮透'}, {['value']=4689147931159298070, ['type']=32}, {['lv']=4689147931159298070,['offset']=0, ['type']=32}, } local qmxg= { {['value']=999,['offset']=52,['type']=16,['freeze']=true}, {['value']=0.0,['offset']=148,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) end, function() local qmnb= { {['memory']=32}, {['name']='全局亮透'}, {['value']=4689147931159298070, ['type']=32}, {['lv']=4689147931159298070,['offset']=0, ['type']=32}, } local qmxg= { {['value']=7,['offset']=52,['type']=16,['freeze']=true}, {['value']=1,['offset']=148,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) end }, { '灵魂透视', function() local qmnb= { {['memory']=32}, {['name']='透视灵魂'}, {['value']=1108344832, ['type']=4}, {['lv']=1103101952,['offset']=4, ['type']=4}, {['lv']=1081109,['offset']=980, ['type']=4}, } local qmxg= { {['value']=1081111,['offset']=980,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end, function() local qmnb= { {['memory']=32}, {['name']='透视灵魂'}, {['value']=1108344832, ['type']=4}, {['lv']=1103101952,['offset']=4, ['type']=4}, {['lv']=1081109,['offset']=980, ['type']=4}, } local qmxg= { {['value']=1081109,['offset']=980,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end }, { '自改加速', function() local a = gg.alert('人物加速','关闭','开启') if a == nil then return end if a == 1 then local Search_array = { [1] = { 4.880000114440918, 16, 32 }, [2] = { 0.20000000298023224, 8, 16 }, [3] = { 0.4000000059604645, 12, 16 }, } local Modifythe_array = { [1] = { 1, 24, 16, true }, } fastsearch(Search_array, Modifythe_array) elseif a == 2 then local g = gg.prompt({"请输入加速倍数"}, {"10"}, {"text"}) if g == nil then return end local Search_array = { [1] = { 4.880000114440918, 16, 32 }, [2] = { 0.20000000298023224, 8, 16 }, [3] = { 0.4000000059604645, 12, 16 }, } local Modifythe_array = { [1] = { g[1], 24, 16, true }, } fastsearch(Search_array, Modifythe_array) end end, function() end }, { '去除雪花', function() local qmnb= { {['memory']=8}, {['name']='去除雪花'}, {['value']=9738829955072, ['type']=32}, {['lv']=9738829955072,['offset']=0, ['type']=32}, } local qmxg= { {['value']=0.0,['offset']=-4,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) end, function() local qmnb= { {['memory']=8}, {['name']='去除雪花'}, {['value']=9738829955072, ['type']=32}, {['lv']=9738829955072,['offset']=0, ['type']=32}, } local qmxg= { {['value']=1,['offset']=-4,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) end }, { '狙击移动', function() local qmnb= { {['memory']=32}, {['name']='狙击移动'}, {['value']=550001, ['type']=32}, {['lv']=8589938887767297,['offset']=-8, ['type']=32}, {['lv']=2362236309767297,['offset']=-4, ['type']=32}, } local qmxg= { {['value']=207,['offset']=80,['type']=4,['freeze']=true}, {['value']=20,['offset']=84,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end, function() end }, { '解锁模式', function() local qmnb= { {['memory']=32}, {['name']='解锁模式'}, {['value']=550001, ['type']=4}, {['lv']=781001,['offset']=4, ['type']=4}, {['lv']=781001,['offset']=8, ['type']=4}, {['lv']=260001,['offset']=32, ['type']=4}, {['lv']=270001,['offset']=36, ['type']=4}, {['lv']=760001,['offset']=40, ['type']=4}, } local qmxg= { {['value']=9999,['offset']=-292,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end, function() local qmnb= { {['memory']=32}, {['name']='解锁模式'}, {['value']=550001, ['type']=4}, {['lv']=781001,['offset']=4, ['type']=4}, {['lv']=781001,['offset']=8, ['type']=4}, {['lv']=260001,['offset']=32, ['type']=4}, {['lv']=270001,['offset']=36, ['type']=4}, {['lv']=760001,['offset']=40, ['type']=4}, } local qmxg= { {['value']=0,['offset']=-292,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end } }) }) }, {--第2页 功能 box({" 娱乐玩法", check({ { '全图可飞', function() local qmnb= { {['memory']=32}, {['name']='全图可飞'}, {['value']=94489280517, ['type']=32}, {['lv']=0,['offset']=-1112, ['type']=32}, {['lv']=21474836486,['offset']=-4, ['type']=32}, {['lv']=94489280517,['offset']=0, ['type']=32}, } local qmxg= { {['value']=600.0,['offset']=-36,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) end, function() local qmnb= { {['memory']=32}, {['name']='全图可飞'}, {['value']=94489280517, ['type']=32}, {['lv']=0,['offset']=-1112, ['type']=32}, {['lv']=21474836486,['offset']=-4, ['type']=32}, {['lv']=94489280517,['offset']=0, ['type']=32}, } local qmxg= { {['value']=0.005,['offset']=-36,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) end }, { '单局穿墙', function() local qmnb= { {['memory']=32}, {['name']='人物穿墙'}, {['value']=2362236309767297, ['type']=32}, {['lv']=8589938887767297,['offset']=-4, ['type']=32}, {['lv']=550001,['offset']=4, ['type']=32}, {['lv']=4294967296,['offset']=796, ['type']=32}, } local qmxg= { {['value']=0,['offset']=-76,['type']=4}, {['value']=0,['offset']=100,['type']=4}, } xqmnb(qmnb,qmxg) end, function() local qmnb= { {['memory']=32}, {['name']='人物穿墙'}, {['value']=2362236309767297, ['type']=32}, {['lv']=8589938887767297,['offset']=-4, ['type']=32}, {['lv']=550001,['offset']=4, ['type']=32}, {['lv']=4294967296,['offset']=796, ['type']=32}, } local qmxg= { {['value']=550001,['offset']=-76,['type']=4}, {['value']=1,['offset']=100,['type']=4}, } xqmnb(qmnb,qmxg) end }, { '无视通讯', function() local qmnb= { {['memory']=32}, {['name']='无视通讯'}, {['value']=4618873763247685632, ['type']=32}, {['lv']=12885756586491905,['offset']=372, ['type']=32}, } local qmxg= { {['value']=0,['offset']=-280,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end, function() local qmnb= { {['memory']=32}, {['name']='无视通讯'}, {['value']=4618873763247685632, ['type']=32}, {['lv']=12885756586491905,['offset']=372, ['type']=32}, } local qmxg= { {['value']=0,['offset']=-280,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end }, { '使用常亮', function() local qmnb= { {['memory']=32}, {['name']='使用常亮'}, {['value']=4618873763247685632, ['type']=32}, {['lv']=12885756586491905,['offset']=372, ['type']=32}, } local qmxg= { {['value']=1,['offset']=-1112,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end, function() local qmnb= { {['memory']=32}, {['name']='使用常亮'}, {['value']=4618873763247685632, ['type']=32}, {['lv']=12885756586491905,['offset']=372, ['type']=32}, } local qmxg= { {['value']=0,['offset']=-1112,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end }, { '秒做任务', function() local qmnb= { {['memory']=32}, {['name']='秒做任务'}, {['value']=4618873763247685632, ['type']=32}, {['lv']=12885756586491905,['offset']=372, ['type']=32}, } local qmxg= { {['value']=911,['offset']=-1048,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end, function() local qmnb= { {['memory']=32}, {['name']='秒做任务'}, {['value']=4618873763247685632, ['type']=32}, {['lv']=12885756586491905,['offset']=372, ['type']=32}, } local qmxg= { {['value']=911,['offset']=-1048,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end }, { '伪太空号', function() local searchValue = gg.prompt({"请输入您的太空号","请输入您想改的太空号"}, {}, {"text","text"}) if searchValue == nil then return end local offset = -0x28 local valType = gg.TYPE_DWORD local minSameCount = 2 local function searchAndStat(value, saveToList) gg.clearResults() gg.searchNumber(tostring(value), valType) local cnt = gg.getResultCount() if cnt == 0 then gg.alert("没有搜索到值:" .. value) return nil end local results = gg.getResults(cnt) local readTask={} local addrMap={} for _,v in ipairs(results)do local addr=v.address+offset table.insert(readTask,{address=addr,flags=valType}) addrMap[addr]=v.address end local readRes=gg.getValues(readTask) local valid={} local countMap={} for _,item in ipairs(readRes)do local origAddr=addrMap[item.address] local offVal=item.value valid[#valid+1]={offsetAddress=item.address,offsetValue=offVal,origAddress=origAddr} local k=tostring(offVal) countMap[k]=(countMap[k] or 0)+1 end if #valid == 0 then gg.alert("无有效值") return nil end local maxCount=0 local maxValues={} for strVal,c in pairs(countMap)do if c>maxCount then maxCount=c maxValues={strVal} elseif c==maxCount then maxValues[#maxValues+1]=strVal end end if saveToList and maxCount >= minSameCount then local saveList={} for _,item in ipairs(valid)do for _,mv in ipairs(maxValues)do if tostring(item.offsetValue)==mv then saveList[#saveList+1]={address=item.offsetAddress,flags=valType,value=item.offsetValue,name="偏移值_"..mv,selected=true} break end end end if #saveList>0 then gg.addListItems(saveList) end end return {maxValues=maxValues,maxCount=maxCount,valid=valid} end local r1 = searchAndStat(searchValue[1], true) if not r1 then return end local firstMaxValues = r1.maxValues local firstMaxCount = r1.maxCount local X = tonumber(firstMaxValues[1]) gg.alert("读取成功") local r2 = searchAndStat(searchValue[2], true) if not r2 then return end local secondMaxValues = r2.maxValues local secondMaxCount = r2.maxCount local Y = tonumber(secondMaxValues[1]) gg.alert("读取成功") if not X then gg.alert("第一步值X无效") return end if not Y then gg.alert("第二步值Y无效") return end gg.removeListItems(gg.getListItems()) gg.toast("已清空旧保存列表") gg.clearResults() gg.searchNumber(tostring(X), valType) local finalCount = gg.getResultCount() if finalCount == 0 then gg.alert("第三步搜索 " .. X .. " 没有结果") return end local newResults = gg.getResults(finalCount) local editList = {} for _, v in ipairs(newResults) do editList[#editList + 1] = {address = v.address,flags = valType,value = Y,freeze = false} end gg.setValues(editList) local saveList = {} for _, v in ipairs(newResults) do saveList[#saveList + 1] = {address = v.address,flags= valType,value= Y,name = "第三步_" .. Y,selected = true} end gg.addListItems(saveList) end, function() end }, { '无限签名', function() local qmnb= { {['memory']=32}, {['name']='无线签名'}, {['value']=1031, ['type']=4}, {['lv']=80,['offset']=80, ['type']=4}, } local qmxg= { {['value']=114528,['offset']=80,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end, function() local qmnb= { {['memory']=32}, {['name']='无线签名'}, {['value']=1031, ['type']=4}, {['lv']=80,['offset']=80, ['type']=4}, } local qmxg= { {['value']=50,['offset']=80,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end }, { '派对打人', function() local qmnb= { {['memory']=32}, {['name']='派对打人'}, {['value']=16842753, ['type']=4}, {['lv']=1073741824,['offset']=-216, ['type']=4}, {['lv']=1056964608,['offset']=-108, ['type']=4}, {['lv']=65792,['offset']=-4, ['type']=4}, } local qmxg= { {['value']=0,['offset']=-136,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end, function() local qmnb= { {['memory']=32}, {['name']='派对打人'}, {['value']=16842753, ['type']=4}, {['lv']=1073741824,['offset']=-216, ['type']=4}, {['lv']=1056964608,['offset']=-108, ['type']=4}, {['lv']=65792,['offset']=-4, ['type']=4}, } local qmxg= { {['value']=1,['offset']=-136,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end }, { '躲猫猫透蓝队', function() local qmnb= { {['memory']=32}, {['name']='透视蓝队'}, {['value']=1087373312, ['type']=4}, {['lv']=1073741824,['offset']=4, ['type']=4}, } local qmxg= { {['value']=1,['offset']=-88,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end, function() local qmnb= { {['memory']=32}, {['name']='透视蓝队'}, {['value']=1087373312, ['type']=4}, {['lv']=1073741824,['offset']=4, ['type']=4}, } local qmxg= { {['value']=0,['offset']=-88,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end }, { '躲猫猫透红队', function() local qmnb= { {['memory']=32}, {['name']='透视红队'}, {['value']=1087373312, ['type']=4}, {['lv']=1073741824,['offset']=4, ['type']=4}, } local qmxg= { {['value']=2,['offset']=-88,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end, function() local qmnb= { {['memory']=32}, {['name']='透视蓝队'}, {['value']=1087373312, ['type']=4}, {['lv']=1073741824,['offset']=4, ['type']=4}, } local qmxg= { {['value']=0,['offset']=-88,['type']=4,['freeze']=true}, } xqmnb(qmnb,qmxg) end }, { '收债全图范围', function() local qmnb= { {['memory']=32}, {['name']='收债范围'}, {['value']=909098547675136, ['type']=32}, {['lv']=211666,['offset']=4, ['type']=32}, {['lv']=2.3125,['offset']=16, ['type']=16}, } local qmxg= { {['value']=999,['offset']=16,['type']=16}, } xqmnb(qmnb,qmxg) end, function() end }, { '怪盗全图范围', function() local qmnb= { {['memory']=32}, {['name']='怪盗范围'}, {['value']=211596, ['type']=4}, {['lv']=-858993459,['offset']=8, ['type']=4}, } local qmxg= { {['value']=999,['offset']=12,['type']=16}, } xqmnb(qmnb,qmxg) end, function() end }, { '驯兽全图范围', function() local qmnb= { {['memory']=32}, {['name']='驯兽范围'}, {['value']=905203012337664, ['type']=32}, {['lv']=64424509440,['offset']=-16, ['type']=32}, {['lv']=210759,['offset']=4, ['type']=32}, } local qmxg= { {['value']=999,['offset']=16,['type']=16}, } xqmnb(qmnb,qmxg) end, function() end }, { '蜜蜂全图范围', function() local qmnb= { {['memory']=32}, {['name']='蜜蜂范围'}, {['value']=211597, ['type']=4}, {['lv']=-858993459,['offset']=8, ['type']=4}, } local qmxg= { {['value']=999,['offset']=12,['type']=16}, } xqmnb(qmnb,qmxg) end, function() end }, { '无视龙洞', function() local t = {"libunity.so:bss", "Cb"} local tt = {0x963C0, 0xF8, 0x90, 0x28, 0x28, 0xD0} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 1, freeze = true}}) local t = {"libunity.so:bss", "Cb"} local tt = {0x963C0, 0xF8, 0xF0, 0x60, 0x28, 0xD0} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 1, freeze = true}}) local t = {"libunity.so:bss", "Cb"} local tt = {0x96400, 0xA8, 0x90, 0x28, 0x28, 0xD0} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 1, freeze = true}}) local t = {"libunity.so:bss", "Cb"} local tt = {0x96400, 0xA8, 0xF0, 0x60, 0x28, 0xD0} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 1, freeze = true}}) local t = {"libunity.so:bss", "Cb"} local tt = {0x96440, 0x58, 0x90, 0x28, 0x28, 0xD0} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 1, freeze = true}}) local t = {"libunity.so:bss", "Cb"} local tt = {0x96440, 0x58, 0xF0, 0x60, 0x28, 0xD0} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 1, freeze = true}}) local t = {"libunity.so:bss", "Cb"} local tt = {0x96818, 0x8, 0x90, 0x28, 0x28, 0xD0} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 1, freeze = true}}) local t = {"libunity.so:bss", "Cb"} local tt = {0x96818, 0x8, 0xF0, 0x60, 0x28, 0xD0} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 1, freeze = true}}) end, function() end } }) }), box({" 监听与远程刀", check({ { '监听远程刀初始化', function() pcall(function() if not STATE.isInitialized then initialize() else gg.toast("已初始化过,共 "..#STATE.players.." 名玩家") end end) end, function() pcall(function() STATE.isListening=false end) end }, { '开启监听', function() pcall(function() if not STATE.isListening then toggleListen() end end) end, function() pcall(function() if STATE.isListening then toggleListen() end end) end }, { '查看日志', function() pcall(viewLog) end, function() -- 无操作 end }, { '新版远程刀', function() pcall(rkMenuSingle) end, function() pcall(function() if RK.mode ~= "idle" then rkStop("开关关闭,已恢复") end end) end }, { '新版怪物黏人', function() pcall(monsterSetup) end, function() pcall(function() MONSTER.enabled=false MONSTER.frozen=false MONSTER.detected=false gg.clearList() end) end }, { '新版传送', function() pcall(function() teleportToPlayer() end) end, function() pcall(function() gg.clearList() end) end }, { "不要动", function() end, function() end } }) }) }, {--第3页 美化 box({" 人型美化", check({ { "约菲尔", function() gg.clearResults() gg.setRanges(32) gg.searchNumber("200060", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("200060", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("3001914", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("200059", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("200059", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("3001913", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("200058", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("200058", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("3001912", gg.TYPE_DWORD) gg.toast("美化完成") end, function() gg.clearResults() gg.setRanges(32) gg.searchNumber("3001914", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("3001914", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("200060", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("3001913", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("3001913", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("200059", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("200058", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("3001912", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("200058", gg.TYPE_DWORD) gg.toast("美化完成") end }, { "九尾狐", function() gg.clearResults() gg.setRanges(32) gg.searchNumber("200060", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("200060", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("3001373", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("200059", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("200059", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("3001372", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("200058", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("200058", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("3001371", gg.TYPE_DWORD) gg.toast("美化完成") end, function() gg.clearResults() gg.setRanges(32) gg.searchNumber("3001373", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("3001373", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("200060", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("3001372", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("3001372", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("200059", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("3001371", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("3001371", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("200058", gg.TYPE_DWORD) gg.toast("美化完成") end }, { "赛罗奥特曼", function() gg.clearResults() gg.setRanges(32) gg.searchNumber("200060", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("200060", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("3006491", gg.TYPE_DWORD) end, function() gg.clearResults() gg.setRanges(32) gg.searchNumber("3006491", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("3006491", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("200060", gg.TYPE_DWORD) end }, { "星辰领主", function() local time=os.clock() gg.clearResults() gg.setRanges(32) gg.searchNumber("200060", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("200060", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("3102041", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("200059", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("200059", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("3102042", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("200058", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("200058", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) sl=gg.editAll("3102043", gg.TYPE_DWORD) gg.toast("修改了"..sl.."条数据\n共耗时"..os.clock()-time) end, function() local time=os.clock() gg.clearResults() gg.setRanges(32) gg.searchNumber("3102041", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("3102041", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("200060", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("3102042", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("3102042", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("200059", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("3102043", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("3102043", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) sl=gg.editAll("200060", gg.TYPE_DWORD) gg.toast("修改了"..sl.."条数据\n共耗时"..os.clock()-time) end }, { "柯南", function() gg.clearResults() gg.setRanges(32) gg.searchNumber("200059", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("200059", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("3106331", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("200058", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("200058", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("3106332", gg.TYPE_DWORD) end, function() gg.clearResults() gg.setRanges(32) gg.searchNumber("3106331", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("3106331", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("200059", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("3106332", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("3106332", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("200058", gg.TYPE_DWORD) end }, { "毛利兰(未添加)", function() end, function() end }, { "灰原哀", function() gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("200058", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("200058", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("3106372", gg.TYPE_DWORD) gg.clearResults() gg.setRanges(32) gg.searchNumber("200060", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("200060", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("3001914", gg.TYPE_DWORD) gg.clearResults() end, function() gg.clearResults() gg.setRanges(32) gg.searchNumber("3106371", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("3106371", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("200059", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("3106372", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("3106372", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("200058", gg.TYPE_DWORD) end } }) }), box({" 鲨鱼美化", check({ { "约菲尔", function() gg.clearResults() gg.setRanges(32) gg.searchNumber("100200016", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("100200016", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("30019141", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("100200012", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("100200012", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("30019131", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("100200013", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("100200013", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("30019111", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("100200017", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("100200017", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("30019121", gg.TYPE_DWORD) gg.toast("美化完成") end, function() gg.clearResults() gg.setRanges(32) gg.searchNumber("30019141", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("30019141", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("100200016", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("30019131", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("30019131", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("100200012", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("30019111", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("30019111", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("100200013", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("30019121", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("30019121", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("100200017", gg.TYPE_DWORD) gg.toast("美化完成") end }, { "路西法", function() gg.clearResults() gg.setRanges(32) gg.searchNumber("100200016", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("100200016", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("30019231", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("100200012", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("100200012", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("30019221", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("100200017", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("100200017", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("30019211", gg.TYPE_DWORD) gg.toast("美化完成") end, function() gg.clearResults() gg.setRanges(32) gg.searchNumber("30019231", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("30019231", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("100200016", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("30019221", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("30019221", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("100200012", gg.TYPE_DWORD) gg.clearResults() gg.clearResults() gg.setRanges(32) gg.searchNumber("30019211", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("30019211", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("100200017", gg.TYPE_DWORD) gg.toast("美化完成") end } }) }) }, {--第4页 音乐 button(" 搜索音乐",function() search = gg.prompt({ "输入要搜索的歌曲\n可加上歌手名字", "设置显示数量(数字)", },g.sel,{ "text", }) if not search then return end gg.saveVariable(search,g.config) bei() go1=search[1] go3=search[2] jg=start(go1,go3) if jg.code == 200 then fh=jg.content fh=json(fh) Play(gqlb,idb) else function inspect() gg.alert("访问网络异常,错误代码:\n\n"..jg.code) end if not pcall(inspect) then print("网络异常,请先连接上网络") os.exit() end end XGCK=-1 end), button(" 随机音乐", function () Obtain=gg.makeRequest("https://api.uomg.com/api/rand.music?sort=热歌榜&format=json").content muchen=Obtain:match('url":"(.-)","picurl') gg.playMusic(muchen) end), box({" 音乐歌单", check({ { "你看到了我", function() gg.playMusic('http://music.163.com/song/media/outer/url?id=1377530437.mp3') end },{ "Walk", function() gg.playMusic('http://music.163.com/song/media/outer/url?id=1873321491.mp3') end },{ "catch", function() gg.playMusic('http://music.163.com/song/media/outer/url?id=26286214.mp3') end },{ "Me", function() gg.playMusic('https://music.163.com/song/media/outer/url?id=1990363532.mp3') end },{ "拉个勾说", function() gg.playMusic("http://music.163.com/song/media/outer/url?id=1969373959.mp3") end },{ "心如止水", function() gg.playMusic("http://music.163.com/song/media/outer/url?id=1928002636.mp3") end },{ "篝火旁", function() gg.playMusic("http://music.163.com/song/media/outer/url?id=518725853.mp3") end },{ "凭什么觉得", function() gg.playMusic("http://music.163.com/song/media/outer/url?id=2020310968.mp3") end },{ "月亮之矢", function() gg.playMusic("http://music.163.com/song/media/outer/url?id=419375250.mp3") end },{ "旧金山", function() gg.playMusic("http://music.163.com/song/media/outer/url?id=2024109979.mp3") end } }) }), button(" 暂停音乐",function() gg.playMusic("stop") end) }, {--第5页 设置 button(" 清理冻结", function() gg.clearList() tst('清理成功 返回大厅即可') end), switch(" 防止录屏", function() 防录屏设置(true) tst("开启成功") end), switch(' 音量隐藏', function() 音量隐藏UI=true end, function() 音量隐藏UI=false end), button(" 切换背景",changebg), button(" 退出辅助",function() window:removeView(floatWindow) luajava.setFloatingWindowHide(false) luajava.newThread(function() os.exit() end):start() bloc("end") end) } } ) --配置表添加表即可加页数,需要与上边菜单标题数对应