-- 把以上代码复制到你脚本最前面即可
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)
}
}
)
--配置表添加表即可加页数,需要与上边菜单标题数对应