--泛滥频道:@HRHOOK
--泛滥频道:@HRHOOK
--泛滥频道:@HRHOOK
--泛滥频道:@HRHOOK
--泛滥频道:@HRHOOK
-- 暗渊工具 v20260117.0924
-- 作者: 暗渊
-- 处理时间: 2026-01-17 09:24:56
gg.toast('正在加载最新参数\n请保持网络良好不然无法加载成功!')
Chinese=gg.colorAlert("欢迎使用血雾国体范围","本插件暂时收费,\n请加入我的[Telegarm]频道→:@XWFWNB","English","好的")
function English()
English=gg.colorAlert("Welcome to the Maple Leaf PUBGM plugin","This plugin is permanently free .If you obtained it through a paid channel That can only congratulate you on successfully being deceived\nPlease join me on Telegarm channel →:@","OK")
end
if Chinese == 1 then English() end
--把以上代码复制到你脚本最前面即可
DM="欢迎使用血雾国体范围"--语音播报内容自己改
gg.playMusic("https://fanyi.baidu.com/gettts?lan=zh&text="..DM.."&spd=5&source=wise") --百度翻译
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的垃圾广告
end
return _S
end
local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit))
return _A
end
--基址配置↑
-- 字符串分割函数:按指定分隔符拆分字符串,返回数组
function stringSplit(fullString, separator)
local findStartIndex = 1
local splitIndex = 1
local splitArray = {}
while true do
local findLastIndex = string.find(fullString, separator, findStartIndex)
if not findLastIndex then
splitArray[splitIndex] = string.sub(fullString, findStartIndex, string.len(fullString))
break
end
splitArray[splitIndex] = string.sub(fullString, findStartIndex, findLastIndex - 1)
findStartIndex = findLastIndex + string.len(separator)
splitIndex = splitIndex + 1
end
return splitArray
end
-- 批量内存修改函数:接收基址和修改配置,支持普通修改/冻结
function batchModifyMemory(baseAddr, modifyConfigList)
local modifyCount = 0
local modifySuccess = false
for x = 1, #modifyConfigList do
local targetAddr = baseAddr + modifyConfigList[x]["offset"]
local valueType = modifyConfigList[x]["type"]
local targetValue = modifyConfigList[x]["value"]
local isFreeze = modifyConfigList[x]["freeze"]
if not isFreeze or isFreeze == "" then
gg.setValues({{address = targetAddr, flags = valueType, value = targetValue}})
else
gg.addListItems({{address = targetAddr, flags = valueType, freeze = isFreeze, value = targetValue}})
end
modifyCount = modifyCount + 1
modifySuccess = true
end
return modifySuccess, modifyCount
end
-- 精准内存搜索修改函数:多轮精炼搜索+多条件验证,支持批量修改
function preciseSearchAndModify(searchConfig)
gg.clearResults()
gg.setRanges(searchConfig[1]["memory"])
gg.searchNumber(searchConfig[3]["value"], searchConfig[3]["type"])
if gg.getResultCount() == 0 then
gg.toast(searchConfig[2]["name"] .. "开启失败")
return
end
-- 三次精炼搜索缩小结果范围
gg.refineNumber(searchConfig[3]["value"], searchConfig[3]["type"])
gg.refineNumber(searchConfig[3]["value"], searchConfig[3]["type"])
gg.refineNumber(searchConfig[3]["value"], searchConfig[3]["type"])
if gg.getResultCount() == 0 then
gg.toast(searchConfig[2]["name"] .. "开启失败")
return
end
local resultList = gg.getResults(999999)
local resultCount = gg.getResultCount()
local totalModifyCount = 0
local maxResultLimit = 999999
if resultCount > maxResultLimit then
resultCount = maxResultLimit
end
for i = 1, resultCount do
local isResultValid = true
for v = 4, #searchConfig do
if isResultValid then
local checkAddr = resultList[i].address + searchConfig[v]["offset"]
local checkType = searchConfig[v]["type"]
local checkResult = gg.getValues({{address = checkAddr, flags = checkType}})
local targetValue = tostring(searchConfig[v]["lv"])
local actualValue = tostring(checkResult[1].value)
if targetValue ~= actualValue then
isResultValid = false
end
end
end
if isResultValid then
local baseAddr = resultList[i].address
local success, count = batchModifyMemory(baseAddr, modifyConfigList) -- 依赖上面的批量修改函数
if success then
totalModifyCount = totalModifyCount + count
end
end
end
if totalModifyCount > 0 then
gg.toast(searchConfig[2]["name"] .. "开启成功,修改" .. totalModifyCount .. "条数据")
else
gg.toast(searchConfig[2]["name"] .. "未搜索到有效数据,开启失败")
end
end
-- 指定范围内存搜索修改函数:自定义内存范围,支持多条件验证+修改/冻结
function rangeSearchAndModify(memoryRange, valueType, searchRules, modifyRules)
gg.clearResults()
gg.setRanges(memoryRange)
gg.setVisible(false)
gg.searchNumber(searchRules[1][1], valueType)
local resultCount = gg.getResultCount()
local resultList = gg.getResults(resultCount)
gg.clearResults()
local validAddrList = {}
local baseOffset = searchRules[1][2]
if resultCount > 0 then
-- 标记所有结果为初始有效
for i, v in ipairs(resultList) do
v.isUseful = true
end
-- 多条件验证筛选有效结果
for k = 2, #searchRules do
local tempCheckList = {}
local offsetDiff = searchRules[k][2] - baseOffset
local targetValue = searchRules[k][1]
for i, v in ipairs(resultList) do
table.insert(tempCheckList, {
address = v.address + offsetDiff,
flags = v.flags
})
end
local checkResultList = gg.getValues(tempCheckList)
for i, v in ipairs(checkResultList) do
if tostring(v.value) ~= tostring(targetValue) then
resultList[i].isUseful = false
end
end
end
-- 收集有效地址
for i, v in ipairs(resultList) do
if v.isUseful then
table.insert(validAddrList, v.address)
end
end
-- 执行批量修改/冻结
if #validAddrList > 0 then
local modifyList = {}
for i = 1, #validAddrList do
for k, w in ipairs(modifyRules) do
local targetOffset = w[2] - baseOffset
table.insert(modifyList, {
address = validAddrList[i] + targetOffset,
flags = valueType,
value = w[1],
freeze = w[3] or false
})
end
end
gg.setValues(modifyList)
-- 单独处理需要冻结的项
for _, item in ipairs(modifyList) do
if item.freeze then
gg.addListItems({{
address = item.address,
flags = item.flags,
value = item.value,
freeze = true
}})
end
end
gg.sleep(400)
return true
end
end
return false
end
----------------上面为内存搜索配置-----
local function RUI(address)
return gg.getValues({{address = address, flags = gg.TYPE_QWORD}})[1].value
end
local function setvalue(address, flags, value, freeze)
local t = {{address = address, flags = flags, value = value, freeze = freeze or false}}
gg.setValues(t)
if freeze then gg.addListItems(t) end
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 BaseAddressWrite(data)
local so = gg.getRangesList(data.so)
if so[1] ~= nil then
local t = {}
for i = 1, #data do
t[#t + 1] = {address = so[1].start + data[i].offset, value = data[i].value, flags = data[i].type}
end
gg.setValues(t)
else
gg.toast("❌搜索不到")
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 _t = ti_bit and 32 or 4
local _S = nil
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
local t = {{address = _S.start + Offset[1], flags = _t}}
for i = 2, #Offset do
local S = gg.getValues(t)
t = {{address = S[1].value + Offset[i], flags = _t}}
if not ti.x64 then t[1].address = t[1].address & 0xFFFFFFFF end
end
return t[1].address
end
end
local addr = Get_Address(t_So, t_Offset, _bit)
return addr and string.format('0x%X', addr) or nil
end
function Unfreeze()
local t = gg.getListItems()
for k, v in pairs(t) do t[k].freeze = false end
return gg.addListItems(t)
end
function LSQ_Chain(so, offset, format, value, type, Function)
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 rest, ranges, sostart, valtype = {}, getRanges(), nil, gg.TYPE_DWORD
if gg.getTargetInfo().x64 then 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 and 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
sostart = valtype == gg.TYPE_DWORD and (rest[1].value & 0xFFFFFFFF) or rest[1].value
end
if #rest == 1 then return Format(rest, format, value, type, Function) end
end
gg.toast("功能:" .. Function .. "开启失败")
print("功能开启失败原因: 未找到基址头")
return os.exit()
end
function Format(tab, format, value, type, Function)
tab[1].flags = type
if format == "查看" then
return gg.getValues(tab)
elseif format == "修改" then
tab[1].value = value
return gg.setValues(tab)
elseif format == "冻结" then
tab[1].freeze = true
tab[1].value = value
tab[1].name = Function or "功能"
return gg.addListItems(tab)
elseif format == "加载" then
return gg.loadResults(tab)
end
end
function gai(addr, type, value)
local t = {{address = addr, flags = type, value = value}}
gg.setValues(t)
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
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 SearchWrite(Search, Write, Type)
gg.clearResults()
gg.setVisible(false)
gg.searchNumber(Search[1][1], Type)
local count = gg.getResultCount()
if count == 0 then return false end
local result = gg.getResults(count)
gg.clearResults()
local data = {}
local base = Search[1][2]
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] = {address = v.address + offset, flags = v.flags}
end
tmp = gg.getValues(tmp)
for i, v in ipairs(tmp) do
if tostring(v.value) ~= 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 return false end
local t = {}
base = Search[1][2]
for i = 1, #data do
for k, w in ipairs(Write) do
local offset = w[2] - base
t[#t + 1] = {address = data[i] + offset, flags = Type, value = w[1]}
if w[3] == true then
local item = {t[#t]}
item[1].freeze = true
gg.addListItems(item)
end
end
end
gg.setValues(t)
return true
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 _, value in ipairs(Modification) do
for _, res in ipairs(Result) do
if not res.Usable then
local val = {address = res.address + value.offset, flags = value.type, value = value.value, freeze = true}
if value.freeze then
Freeze[#Freeze + 1] = val
Freezes = Freezes + 1
else
Data[#Data + 1] = val
end
sum = sum + 1
end
end
end
gg.setValues(Data)
gg.addListItems(Freeze)
local toastMsg = Search[2].name .. '开启成功,共修改' .. sum .. '条数据'
if Freezes > 0 then toastMsg = toastMsg .. ',冻结' .. Freezes .. '条数据' end
gg.toast(toastMsg)
gg.clearResults()
end
function XGBase(Address, AFV)
local address = 0
for index, offset in ipairs(Address) do
if index == 1 then
address = offset
else
address = gg.getValues({{address = address + offset, flags = 4}})[1].value
end
end
local Value, Freeze = {}, {}
for _, value in ipairs(AFV) do
local val = {address = address + value[3], flags = value[2], value = value[1], freeze = true}
if value[4] then
Freeze[#Freeze + 1] = val
else
Value[#Value + 1] = val
end
end
gg.setValues(Value)
gg.addListItems(Freeze)
end
function getvalue(addr, flags)
local asbd = {{address = addr, flags = flags}}
local tmp = gg.getValues(asbd)
return tmp[1].value
end
function GotoPointer(start, offset)
local flags = {[true] = 32, [false] = 4}
local ti64 = gg.getTargetInfo().x64
local type = flags[ti64]
local addr = 0
if start then
addr = start + offset[1]
for index = 2, #offset do
local pointer = gg.getValues({{address = addr, flags = type}})
if not ti64 then pointer[1].value = pointer[1].value & 0xFFFFFFFF end
addr = pointer[1].value + offset[index]
end
end
return addr
end
local function interruptThread(thread)
if thread then pcall(function() thread:interrupt() end) end
end
------------------------------------------------
--RLGG
--gg.setConfig("隐藏辅助", 23)
--gg.setConfig("运行守护", 3)
--gg.setConfig("冻结间隔", 0)
--gg.setConfig("快速冻结", 1)
--此代码只能用于RLGG否则普通GG修改器将会报错
------------------------------------------------
-------------------↓内存修改示例↓--------------------
-- 分析:定义搜索配置:搜索a内存(对应 memory=1,a内存通常标识为1)、f类型(对应 type=64,f代表64位浮点数)、数值1
--local searchConfig =
--{
-- {["memory"] = 1}, -- 搜索范围:a内存(内存类型标识1=a内存)
-- {["name"] = "搜索a内存f类型数值1并修改为2"}, -- 配置名称(自定义,用于提示)
-- {["value"] = 1, ["type"] = 64}, -- 核心搜索条件:数值=1,类型=64(f类型即64位浮点数)
-- 分析:若无需额外验证条件,可删除此行;如需验证可保留并调整参数
--}
-- 分析:定义修改配置:找到目标地址后,修改数值为2(类型与搜索一致为64位浮点数,偏移量0=直接修改目标地址)
--local modifyConfig =
--{
-- {["value"] = 2, ["offset"] = 0, ["type"] = 64},-- 修改操作:数值改为2,偏移量0(直接修改搜索到的地址),类型=64(与搜索类型一致)
--}
-- 分析:调用规范化函数:执行搜索+修改操作
--preciseSearchAndModify(searchConfig, modifyConfig)
function getValue(address, flags)
local value = gg.getValues({{address = address, flags = flags}})[1].value
return value
end
function getvalue(addr,flags)
local asbd={} asbd[1]={} asbd[1].address=addr asbd[1].flags=flags
tmp=gg.getValues(asbd)
return tmp[1].value
end
function gai(addr,type,value)
local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].value=value
gg.setValues(t)
end
local function RUI(address)
return gg.getValues({{address = address, flags = gg.TYPE_DWORD}})[1].value
end
local function readD(addr)
return gg.getValues({{address = addr, flags = gg.TYPE_DWORD}})[1].value
end
local function readF(addr)
return gg.getValues({{address = addr, flags = gg.TYPE_FLOAT}})[1].value
end
local function RUI(addr)
return gg.getValues({{address = addr, flags = 32}})[1].value
end
function gai(addr,type,value)
local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].value=value
gg.setValues(t)
end
D=gg.TYPE_DWORD
F=gg.TYPE_FLOAT
function getZZ(address)
return gg.getValues({{address=address,flags=32}})[1].value
end
function getDword(address)
return gg.getValues({{address=address,flags=4}})[1].value
end
function getFloat(address)
return gg.getValues({{address=address,flags=16}})[1].value
end
function WriteFloat(address, value, freeze)
gg.setValues({{address = address, flags = 16, value = value}})
if freeze then
gg.addListItems({{address = address, flags = 16, value = value, freeze = freeze}})
end
end
function WriteDword(address, value, freeze)
gg.setValues({{address = address, flags = 4, value = value}})
if freeze then
gg.addListItems({{address = address, flags = 4, value = value, freeze = freeze}})
end
end
function UnfreezeF(address, freeze)
gg.addListItems({{address = address, flags = 16,freeze = freeze}})
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 Unfreeze()
--获取保存列表
local t = gg.getListItems()
for k, v in pairs(t) do
t[k]["freeze"] = false
end
return gg.addListItems(t)
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.a64 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
if (rlgg.VERSION < 2.09) then
gg.alert('请使用大于等于2.09版本的RLGG')
os.exit()
end
local baseWindow = require 'floatingWindowManager2'
if not baseWindow.getContext then
gg.alert('请重启一下RLGG')
app.exit()
end
import "android.graphics.Color"
import "android.content.res.ColorStateList"
local context = baseWindow:getContext()
import "android.view.animation.TranslateAnimation"
import "android.view.animation.Animation"
import "android.animation.ArgbEvaluator"
import "android.animation.LayoutTransition"
import "android.graphics.drawable.GradientDrawable"
import "android.graphics.drawable.ClipDrawable"
import "android.media.MediaPlayer"
MediaPlayer=MediaPlayer()
import "java.io.File"
import "android.graphics.Typeface"
import "android.animation.LayoutTransition"
layoutTransition=LayoutTransition()
layoutTransition:setDuration(500)
import 'com.google.android.material.imageview.ShapeableImageView'
import 'com.google.android.material.shape.CornerFamily'
import 'com.google.android.material.materialswitch.MaterialSwitch'
import 'com.google.android.material.button.MaterialButton'
import 'com.google.android.material.dialog.MaterialAlertDialogBuilder'
import 'com.google.android.material.slider.Slider'
import 'com.google.android.material.snackbar.Snackbar'
import 'com.google.android.material.sidesheet.SideSheetDialog'
import 'com.google.android.material.bottomsheet.BottomSheetDialog'
import 'com.google.android.material.bottomsheet.BottomSheetBehavior'
import 'com.google.android.material.progressindicator.LinearProgressIndicator'
import 'com.google.android.material.progressindicator.CircularProgressIndicator'
import 'com.google.android.material.chip.ChipGroup'
import 'com.google.android.material.chip.Chip'
import 'com.google.android.material.radiobutton.MaterialRadioButton'
import 'com.google.android.material.checkbox.MaterialCheckBox'
import 'com.google.android.material.dialog.MaterialAlertDialogBuilder'
import 'androidx.coordinatorlayout.widget.CoordinatorLayout'
import 'androidx.core.widget.NestedScrollView'
import 'android.graphics.drawable.Icon'
import 'android.widget.LinearLayout'
import 'android.widget.Button'
import 'android.widget.TextView'
import 'android.widget.ScrollView'
import 'android.widget.RadioGroup'
import 'java.lang.CharSequence'
import 'java.lang.Boolean'
import 'java.lang.reflect.Array'
baseWindow:darkMode()
baseWindow:lightMode()
print("本次运行包含套餐:个人版")
gg.setVisible(false)
luajava.setFloatingWindowHide(true)
local material3 = require 'material3'
local context=material3:getContext()
import'com.google.android.material.slider.Slider'
import'android.content.res.ColorStateList'
import'com.google.android.material.dialog.MaterialAlertDialogBuilder'
import'com.google.android.material.card.MaterialCardView'
if tonumber(device.width)==nil then
dwidth=1340
dheight=2300
else
dwidth=device.width
dheight=device.height
end
function getTimeStamp(t)
return str
end
colorvs={}
nankun = {} huiz = function() end
window = context:getSystemService("window") -- 获取窗口管理器
function panduan(rec) fille,err = io.open(rec) if fille == nil then return false else return true end end
function checkimg(tmp,ii)
if file.length("/sdcard/血雾/图片/"..tmp[1],false)<200 then
gg.toast("正在下载资源"..ii.."/"..#ckimg.."\n请耐心等待")
luajava.download(tmp[2],"/sdcard/血雾/图片/"..tmp[1])
end
end
ckimg = {
{'heir','https://image.rlyun.fun/down.php/1f8c38a24d8adda4f8f4f897ab2abfbd.'},
{'hei_right','https://image.rlyun.fun/down.php/dfcc155180c66711a66a1c6540db5e03.'},
{'quarkcheckoff','https://image.rlyun.fun/down.php/2569312c453c8e469a8da02236e21119.'},
{'quarkcheckon','https://image.rlyun.fun/down.php/7d969ed814699db3711dd7011e5398d5.'},
{'classes3.dex','https://image.rlyun.fun/down.php/29e1a4722ddf781d8f8d95a68f4e07ad.dex'},
{'lchome','https://mpimg.cn/view.php/741ff90203ca0b75152421e9f84013d1.'},
{'lcff','https://mpimg.cn/view.php/c19f61c99b9e3b74d1ff7412b37fb7ee.'},
{'lcsh','https://mpimg.cn/down.php/ba692fbc37bca463fab2a44b2328a96a.'},
{'lcsz','https://mpimg.cn/view.php/678202ab66fdae1909e6d8011ec30e64.'},
{'heir','https://image.rlyun.fun/down.php/1f8c38a24d8adda4f8f4f897ab2abfbd.'},
{'悬浮窗','https://xuanmo.xyz/f/wyjXFa/%E5%9B%BE%E6%A0%87.png'},
{'font.ttf','https://i.uik.cc/down.php/e1565b4e47084740ebb0fce1c70a5b28.ttf&cmnb'},
}
for i = 1,#ckimg do
checkimg(ckimg[i],i)
end
local typeface = import("android.graphics.Typeface")
local FontPath = "/sdcard/血雾/图片/font.ttf"--字体路径
local font = typeface:createFromFile(FontPath)
function 获取图片(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 获取图片("/sdcard/血雾/图片/"..x)
end
YoYoImpl = luajava.getYoYoImpl()
vibra = context:getSystemService(Context.VIBRATOR_SERVICE)
function getLayoutParams2()
LayoutParams2 = WindowManager.LayoutParams
layoutParams2 = luajava.new(LayoutParams2)
if (Build.VERSION.SDK_INT >= 26) then -- 设置悬浮窗方式
layoutParams2.type = LayoutParams2.TYPE_APPLICATION_OVERLAY
else
layoutParams2.type = LayoutParams2.TYPE_PHONE
end
layoutParams2.format = PixelFormat.RGBA_8888 -- 设置背景
layoutParams2.flags = LayoutParams2.FLAG_NOT_TOUCH_MODAL -- 焦点设置Finish
layoutParams2.gravity = Gravity.CENTER -- 重力设置
layoutParams2.width = LayoutParams2.WRAP_CONTENT -- 布局宽度
layoutParams2.height = LayoutParams2.WRAP_CONTENT -- 布局高度
return layoutParams2
end
function topSelect()
local selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, getVerticalBG({0x22161616,0x22161616},30))
selector:addState({
-android.R.attr.state_pressed
}, empty)
return selector
end
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_TOUCH_MODAL -- 焦点设置Finish
layoutParams.gravity = Gravity.TOP|Gravity.LEFT -- 重力设置
layoutParams.width = LayoutParams.WRAP_CONTENT -- 布局宽度
layoutParams.height = LayoutParams.WRAP_CONTENT -- 布局高度
return layoutParams
end
显2=false
function 隐藏2()
显2=true
ckou:setVisibility(View.GONE)
if smalltype==1 then
control2:setVisibility(View.GONE)
else
smallwindow:setVisibility(View.GONE)
end
smallc:setVisibility(View.VISIBLE)
end
function 显示2()
显2=false
if 显示==1 then
ckou:setVisibility(View.VISIBLE)
smallc:setVisibility(View.GONE)
else
if smalltype==1 then
control2:setVisibility(View.VISIBLE)
else
smallwindow:setVisibility(View.VISIBLE)
end
smallc:setVisibility(View.GONE)
隐藏()
end
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)
if mainLayoutParams.x<=0 then
mainLayoutParams.x=0
end
mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY)
window:updateViewLayout(floatWindow, mainLayoutParams)
elseif Action == MotionEvent.ACTION_UP then
mainLayoutParams.x = tonumber(x) + (event:getRawX() - RawX)
if mainLayoutParams.x<=0 then
mainLayoutParams.x=0
if 显示==0 and 显2==false then 隐藏2() end
end
if mainLayoutParams.x>=20 then
if 显2==true then 显示2() end
end
mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY)
window:updateViewLayout(floatWindow, mainLayoutParams)
if math.abs(event:getRawY()-RawY)>20 then return true end
if math.abs(event:getRawX()-RawX)>20 then return true end
end
end
function getCorner(gtvb1,gtvb3,gtvb4,gtvb5,g1,g2,g3,g4)
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)--边框宽度和颜色
jianbians:setCornerRadii({g1,g1,g2,g2,g3,g3,g4,g4})
return jianbians
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
mainLayoutParams = getLayoutParams()
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
yltype = 0
function jianting3(func)
if 音量键==false then return 0 end
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
qhkai = 0
qiehuan = function()
if qhkai == 0 then
qhkai = 1
draw.remove()
luajava.runUiThread(function()
YoYoImpl:with("FadeOut"):duration(300):playOn(floatWindow)
end)
gg.sleep(300)
luajava.runUiThread(function()
floatWindow:setVisibility(View.GONE)
end)
else
qhkai = 0
绘制文本()
luajava.runUiThread(function()
floatWindow:setVisibility(View.VISIBLE)
YoYoImpl:with("FadeIn"):duration(500):playOn(floatWindow)
end)
end
end
nankun.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
nankun.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
nankun.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
gg.setVisible(false)
function guid()
seed = {
'e','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'
}
tb = {}
for i = 1,32 do
table.insert(tb,seed[math.random(1,16)])
end
sid = table.concat(tb)
return string.format('%s%s%s',
string.sub(sid,1,8),
string.sub(sid,10,12),
string.sub(sid,21,22))
end
local ui = require('ui')
context:setTheme(0x7f090065)
nankun.menu = function(views)
slcta=getVerticalBG({
0xffE6EDF5,0xffE6EDF5
},17,5,0x33ffffff)--左侧选中控件边
if isswitch then
return false
end
isswitch = true
local layout = {
'ui.ViewPager',
layout_height='match_parent',
layout_width='match_parent',
focusable="false",
focusableInTouchMode="false",
}
cebian={
LinearLayout,
orientation="vertical",
gravity="center_horizontal",
layout_width='match_parent',
}
for i=1,#stab do
_ENV["jm"..i]=luajava.loadlayout({
LinearLayout,
gravity="center",
layout_width='match_parent',
orientation="horizontal",
layout_marginTop='5dp',
layout_marginBottom='5dp',
padding={"3dp","1dp","6dp","1dp"},
onClick=function() 切换(i) end,
--onTouch=hanshu,
{ImageView,
src=stab[i][2],
layout_height='20dp',
layout_width='20dp',
ColorFilter=0xff000000,
layout_margin='5dp'
},
{
TextView,
id='jm'..i..'t',
layout_marginLeft='4dp',
text = stab[i][1],
textSize='17sp',---左侧按钮字体
Typeface=font,
textColor='#000000',
gravity = "center",
}
})
cebian[#cebian+1]=_ENV["jm"..i]
tmp={
LinearLayout,
layout_height="wrap_content",
layout_width="match_parent",
orientation="vertical",
}
for k=1,#views[i] do
if type(views[i])=="table" then
tmp[#tmp+1]=views[i][k].view
else
tmp[#tmp+1]=views[i][k]
end
end
_ENV["layout"..i]={
ScrollView,
--orientation="vertical",
layout_height="match_parent",
layout_width="match_parent",
tmp,
--onTouch=Gundong,
padding={"8dp","3dp","8dp","3dp"},
}
end
for i=1,#stab do
layout[#layout + 1] =_ENV["layout"..i]
end
for i=2,#stab do
_ENV["jm"..i .."t"]:setTextColor(0xffaaaaaa)
end
ViewPager = ui.ViewPager(layout)
luajava.setInterface(ViewPager, 'addOnPageChangeListener',
{onPageSelected=function(view)
view=tonumber(string.sub(view,1,1))
for i=1,#stab do
_ENV["jm"..i .."t"]:setTextColor(0xffaaaaaa)
_ENV['jm'..i]:setBackground(nil)
end
当前ui=view+1
滚(当前ui)
_ENV["jm"..view+1 .."t"]:setTextColor('0xff000000')
_ENV['jm'..view+1]:setBackground(slcta)
end})
quarkmoon=getRes("quarkmoon")
quarksun=getRes("quarksun")
_ENV["tosearch"]="tosearch"
snow=luajava.loadlayout({ImageView,
layout_height = "40dp",
layout_width = "40dp",
layout_marginTop="0dp",
layout_marginLeft="0dp",
padding="3dp",
src=getRes("quarksearchw"),
onClick=function() searchStart() nankun.controlWater(snow,200) vibra:vibrate(10) end,
onTouch=hanshu,
background = getVerticalBG({
0x22161616,0x22161616
},360,5,0x33ffffff),
})
ckou={
LinearLayout,
layout_height="wrap_content",
layout_width="wrap_content",
{LinearLayout,
layout_height="match_parent",
id=luajava.newId('jianbian'),
elevation="2dp",
background = newbg2(0xffffffff,15),
padding = {
"0dp","0dp","6dp","0dp"
},
layout_margin='6dp',
orientation='vertical',
{
ImageView,
layout_height='65dp',
layout_width='65dp',
onClick=隐藏,
onTouch=hanshu,
gravity='center',
src=获取图片(悬浮窗),
layout_marginTop='5dp',
layout_marginLeft='5dp',
},{
TextView,
textSize = "16sp",
text = 侧边文字,
Typeface=font,
textColor = "#000000",
layout_width = "match_parent",
layout_height = "wrap_content",
gravity = "center",
background=newbg2(0xffffffff,15),--左侧logo字体背景
padding = {
"5dp","6dp","0dp","0dp"
},
Typeface=font,
},{
LinearLayout,
layout_width='match_parent',
layout_height="wrap_content",
orientation='horizontal',
},
{LinearLayout,
layout_height="match_parent",
orientation='vertical',
{ScrollView,
layout_width='match_parent',
layout_marginTop='10dp',
layout_marginLeft='5dp',
id=luajava.newId("cbscro"),
layout_height="wrap_content",
layout_marginBottom='10dp',
cebian,},{
TextView,
layout_width='match_parent',
gravity='center|bottom',
layout_height='match_parent',
textSize='11.5sp',
textColor='#000000',
Typeface=font,
gg.sleep(1000)
},
}},
{FrameLayout,
layout_height='match_parent',
layout_width='match_parent',
layout_marginTop='10dp',
layout_marginBottom='10dp',
layout_marginRight='3dp',
elevation='2dp',
id=luajava.newId("ckb"),
id="parentv",ViewPager},
}
ckou = {
LinearLayout,
id = "chuangk",
visibility = "gone",
layout_width = "wrap_content",
layout_height = "wrap_content",
orientation = "vertical",
background = newbg2(0xffffffff,15),--右侧背景图
padding = {
"0dp","0dp","6dp","0dp"
},
ckou
}
ckou = luajava.loadlayout(ckou)
extralis={LinearLayout,
layout_height="match_parent",
layout_width="match_parent",
id=luajava.newId("extralist"),
orientation="vertical",
}
for k,v in pairs(ewsv) do
if type(ewsv[k])=="table" then
extralis[#extralis+1]=ewsv[k].view
else
extralis[#extralis+1]=ewsv[k]
end
end
smallwindow=luajava.loadlayout({LinearLayout,
visibility='gone',
{LinearLayout,
layout_height='50dp',
layout_width='110dp',
gravity='center_vertical',
onClick=隐藏,
onTouch=hanshu,
layout_margin='3dp',
elevation='3dp',
background=getVerticalBG({0xff161616,0xff161616},15,3,0xffffffff),
}
})
floatWindow = {
FrameLayout,
id = "motion",
elevation = "10dp",
onTouch = hanshu,
onClick = function() end,
layout_width = "wrap_content",
orientation = "vertical",
gravity = "center_vertical",
layout_height = "wrap_content",
ckou,
{LinearLayout,
visibility="gone",
id=luajava.newId("extra"),
layout_height = "match_parent",
layout_width='match_parent',
orientation="vertical",
background=getVerticalBG({0xffF2F3F5,0xffF2F3F5},15),
{ScrollView,
padding="10dp",
layout_height="match_parent",
layout_width="match_parent",
extralis
}
},
smallwindow,
{
ImageView,
id = "control2",
visibility='gone',
src = 获取图片(悬浮窗),
layout_width = "50dp",
layout_height = "100dp",
onTouch = hanshu,
onClick = 隐藏,
},{LinearLayout,
id="smallc",
visibility="gone",
onClick=显示2,
onTouch=hanshu,
layout_height="60dp",
layout_width="15dp",
gravity="center",
background=getCorner({0x88161616,0x88161616},12,0,0xff232323,0,15,15,0),
},{
ImageView,
id="sf",
padding = "2dp",
src = getRes("sscoR"),
layout_width = "30dp",
layout_height = "30dp",
layout_marginRight = "0dp",
layout_marginBottom = "0dp",
ColorFilter=0xff000000,
layout_gravity = "right|bottom",
onClick = function() end,
onTouch = suofang,
}}
mubx=getpx(mubx)
muby=getpx(muby)
local function invoke()
local ok
local RawX, RawY, x, y
mainLayoutParams = getLayoutParams()
mainLayoutParams.x = 10
mainLayoutParams.y = dheight/4
mainLayoutParams.height = mubx
mainLayoutParams.width = muby
params2=getLayoutParams2()
floatWindow = luajava.loadlayout(floatWindow)
local function invoke2()
window:addView(floatWindow, mainLayoutParams)
end
local runnable = luajava.getRunnable(invoke2)
local handler = luajava.getHandler()
handler:post(runnable)
local isMove
end
invoke(swib1,swib2)
gg.setVisible(false)
jm1t:setTextColor('0xff000000')
jm1:setBackground(slcta)
隐藏()
huiz()
draw.text('.', -9200,-9200)
if loadingBox~=nil then loadingBox['关闭']() end
setOnExitListener(function()
luajava.post(function()
window:removeView(floatWindow)
end)
tuichu=1
luajava.setFloatingWindowHide(false)
end)
qhkai = 0
qiehuan = function()
if qhkai == 0 then
qhkai = 1
luajava.runUiThread(function()
nankun.controlSmall(floatWindow,400)
end)
gg.sleep(400)
luajava.runUiThread(function()
floatWindow:setVisibility(View.GONE)
end)
else
qhkai = 0
luajava.runUiThread(function() floatWindow:setVisibility(View.VISIBLE) end)
luajava.runUiThread(function()
nankun.controlBig(floatWindow,400)
end)
end
end
jlts=1
import'android.hardware.*';
dexloader=dex.loadfile('/sdcard/血雾/图片/classes3.dex')
MySensorManager = dexloader:loadClass('yaocn.rlyun.yaoyiyao.MySensorManager')
luajava.runOnUiThread(function()
MySensorManager(context, sensor)
end)
if yyfunc~=nil then yyfunc() end
if ylfunc~=nil then ylfunc() end
while true do
if tuichu == 1 then break end
if 音量键 then
jianting3(qiehuan) end
gg.sleep(300)
end
radon=getRes("quarkcheckon")
radoff=getRes("quarkcheckoff")
radiog={}
function nankun.intradio(nid,name,func)
return {
LinearLayout ,
layout_width = 'match_parent' ,
layout_height = "wrap_content" ,
layout_weight=1,
layout_marginLeft = "2dp" ,
layout_marginRight = "5dp" ,
layout_marginTop='2dp',
layout_marginBottom='8dp',
gravity = "center_vertical" ,
onClick = function ()
func()
end,
{
ImageView ,
id = luajava.newId (nid) ,
layout_width = '15dp' ,
layout_height = "15dp" ,
layout_marginLeft = "2dp" ,
layout_marginRight = "4dp" ,
src =radoff ,
padding='-4dp',
} , {
TextView ,
gravity = "top" ,
text = name ,
textSize="12sp",
textColor = '#000000' ,
layout_width = 'wrap_content' ,
layout_height = 'wrap_content' ,
}
}
end
function nankun.radio(cklist)
local rid=guid()
radiog[rid]={}
rest = {
LinearLayout ,
layout_width = 'match_parent' ,
layout_height = "wrap_content" ,
layout_marginTop = "10dp" ,
}
if type (cklist [1]) == "string" then
rest [# rest + 1] = {
TextView ,
gravity = "left" ,
text = cklist [1] ,
textSize = "13sp" ,
textColor = '#000000' ,
layout_width = '80dp' ,
layout_height = 'wrap_content' ,
layout_marginLeft = "10dp" ,
layout_marginRight = "5dp" ,
layout_marginTop = "0dp" ,
layout_marginBottom = "0dp" ,
}
table.remove(cklist,1)
end
local restt={
LinearLayout ,
layout_width = 'match_parent' ,
layout_weight=1,
layout_height = "wrap_content" ,
gravity = "left" ,
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 nid = name..guid ()
local name = cklist[i + j][1]
radiog[rid][nid]=false
local func1 = radin(rid,nid,cklist[i + j][2])
if not name then name = "未设置" end
local rstt = nankun.intradio(nid,name,func1)
table.insert(tempTable, rstt)
else
table.insert(tempTable, {LinearLayout,
layout_width = 'match_parent',
layout_weight=1,})
end
end
table.insert(restt, tempTable)
end
rest [# rest + 1] = restt
return luajava.loadlayout (rest)
end
function radin(rid,nid,func)
return function()
for k,v in pairs(radiog[rid]) do
luajava.getIdValue(k):setImageDrawable(radoff)
if k==nid and v~=true then
luajava.getIdValue(k):setImageDrawable(radon)
v=true
luajava.newThread(func):start()
end
end
end
end
function nankun.image(img,height,width,pad,func)
if not func then func=function() end end
if not pad then pad="0dp" end
if not height then height="300dp" end
if not width then width="300dp" end
return luajava.loadlayout({
LinearLayout,
layout_height="wrap_content",
layout_width="fill_parent",
gravity="center",
{
ImageView,
layout_height=height,
layout_width=width,
padding=pad,
src=获取图片(img),
onClick=function() luajava.newThread(func):start() end,
}})
end
luajava.setFloatingWindowHide(false)
end
extco={
0xffffffff,
0xff161616
}
function nankun.text(text,color,size,isjz)
if not color then color="#161616" end
if isjz then
return luajava.loadlayout(
{
TextView,
text=text,
textColor=color,
textSize=size,
gravity="center",
layout_height="wrap_content",
layout_width="match_parent",
autoSizeTextType="uniform",
})
else
return luajava.loadlayout({
TextView,
text=text,
textColor=color,
textSize=size,
layout_height="wrap_content",
layout_width="match_parent",
autoSizeTextType="uniform",
})
end
end
function 滚(x)
luajava.runUiThread(function()
local cbsc=luajava.getIdView("cbscro")
local targetLeft = _ENV["jm"..x]:getTop()
cbsc:smoothScrollTo(0, targetLeft);
end)
end
x=1
function 切换(x)
窗口=false
luajava.runUiThread(function()
当前ui=x
ViewPager:setCurrentItem(x-1)
end)
end
显示=0
function 隐藏()
if not already then already=true end
if 显2==true then return 0 end
luajava.runUiThread(function()
if 显示 == 0 then
if smalltype==1 then
control2:setVisibility(View.GONE)
else
smallwindow:setVisibility(View.GONE)
end
sf:setVisibility(View.VISIBLE)
显示 = 1
if 窗口 then
luajava.getIdView("extra"):setVisibility(View.VISIBLE)
else
ckou:setVisibility(View.VISIBLE)
end
mainLayoutParams.height = mubx
mainLayoutParams.width = muby
mainLayoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
window : updateViewLayout (floatWindow , mainLayoutParams)
YoYoImpl:with("FadeIn"):duration(300):playOn(floatWindow)
else
sf:setVisibility(View.GONE)
if tuichuing then return 0 end
tuichuing=true
luajava.newThread(function()
luajava.runUiThread(function()
YoYoImpl:with("FadeOut"):duration(200):playOn(floatWindow)
end)
gg.sleep(200)
luajava.runUiThread(function()
ckou:setVisibility(View.GONE)
YoYoImpl:with("FadeIn"):duration(200):playOn(floatWindow)
luajava.getIdView("extra"):setVisibility(View.GONE)
mainLayoutParams.width = LayoutParams.WRAP_CONTENT -- 布局宽度
mainLayoutParams.height = LayoutParams.WRAP_CONTENT -- 布局高度
if smalltype==1 then
control2:setVisibility(View.VISIBLE)
else
smallwindow:setVisibility(View.VISIBLE)
end
显示 = 0
mainLayoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE
window : updateViewLayout (floatWindow , mainLayoutParams)
if mainLayoutParams.x==0 then 隐藏2() end
end)
tuichuing=false
end):start()
end
end)
end
ewsv={} ewsv2={}
function 创建窗口(name,v)
if type(v)~="table" then gg.alert("窗口"..name.."格式错误") end
local t={
LinearLayout,
orientation="vertical",
visibility="gone",
layout_width="match_parent",
}
local ew={}
for i=1,#v do
if type(v[i])=="table" then
t[#t+1]=v[i].view
ew[#ew+1]=v[i]
else
t[#t+1]=v[i]
ew[#ew+1]=v[i]
end
end
ewsv2[name]=ew
ewsv[name]=luajava.loadlayout(t)
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(7,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(24,tmp3)--边框宽度和颜色
return jianbians
end
checkbg1 = getRes("quarkcheckoff")
checkbg2 = getRes("quarkcheckon")
switchs={}
function nankun.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 = "25dp",
layout_marginTop = "1dp",
layout_marginBottom = "1dp",
padding = "1dp",
{
LinearLayout,
padding="1dp",
onClick = function()
luajava.newThread(function() func() end):start() end,
layout_width = 'fill_parent',
layout_height = "wrap_content",
gravity = "center_vertical",
{
FrameLayout,
id = luajava.newId(nid),
background = checkbg1,
layout_width = '23dp',
layout_height = '23dp',
padding = "0dp",
},{
TextView,
id=luajava.newId(nid.."t"),
gravity = "left",
Typeface=font,
text = name,
textColor=0xff000000,
textSize = "10sp",
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颜色)
end)
_ENV[name] = "开"
pcall(func1)
else
vibra:vibrate(9)
luajava.runUiThread(function()
luajava.getIdValue(nid):setBackground(checkbg1)
luajava.getIdValue(nid.."t"):setTextColor(0xff232323)
end)
_ENV[name] = "关"
pcall(func2)
end
end
end
end
function nankun.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 = nankun.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
function nankun.switch(name,func1,func2,miaoshu)
nid = name..guid()
local kid=guid().."switch"
rest = luajava.loadlayout({
LinearLayout,
layout_width = 'fill_parent',
layout_height = "48dp",
gravity = "center_vertical",
{
LinearLayout,
id=luajava.newId(kid),
layout_width = 'fill_parent',
layout_height = "40dp",
layout_marginLeft="3dp",
layout_marginRight="3dp",
layout_marginTop="3dp",
layout_marginBottom="3dp",
gravity = "center_vertical",
elevation="2dp",
background = newbg2(0xffffffff,15),
padding = {
"0dp","0dp","6dp","0dp"
},
{
TextView,
id=luajava.newId(kid.."sw"),
gravity = "top",
text = name,
Typeface=font,
textColor = "#000000",
textSize = "11sp",--按钮字体大小
layout_weight = 1,
layout_width = '150dp',
layout_marginLeft = "10dp",
layout_marginRight = "20dp",
},
{
TextView,
gravity = "center",
layout_height = "match_parent",
text = miaoshu,
textSize = "11sp",
layout_width = "wrap_content",
layout_marginLeft = "-50dp",
textColor = "#A5A5A5",
},
{
MaterialSwitch,
checked=ztai,
id=luajava.newId(nid),
layout_weight = 1,
trackTintList=(ColorStateList({{android.R.attr.state_checked},{}},{0xFF000000,0x28FFFFFF})),
thumbTintList=(ColorStateList({{android.R.attr.state_checked},{-android.R.attr.state_checked}},{0xFFFFFFFF,0xFF4B484F})),
layout_weight=1,
layout_marginTop="-3.5dp",
layout_marginBottom="-3.5dp",
layout_width='match_parent',
layout_height='wrap_content',
onCheckedChange=function(compoundButton,isChecked)
if isChecked then
luajava.newThread(function()
pcall(func1)
end):start()
else
luajava.newThread(function()
pcall(func2)
end):start()
end
end
}}
})
return {["view"] = rest,
["name"] = name,
["func"] = func,
["type"] = "开关",
}
end
spics={
}
for i=1,55 do
spics[i]="opo"..i
end
switchs={}
tcheck=10
function nankun.intgroup(name,func1,func2,ii,gid,pic)
if pic~=nil then
tocheck=获取图片(pic)
else
if tcheck==56 then
tcheck=1
else
tcheck=tcheck+1
end
tocheck=getRes(spics[tcheck])
end
local func = 开关group(name,func1,func2,gid..ii)
if not name then name = "未设置" end
switchs[gid..ii] = {
LinearLayout,
id = luajava.newId(gid..ii),
layout_width = "match_parent",
layout_weight=1,
layout_height = "wrap_content",
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_horizontal",
orientation="vertical",
{
ImageView,
id = luajava.newId(gid..ii.."p"),
src=tocheck,
gravity="center",
layout_width = '30dp',
layout_height = '30dp',
padding = "2dp",
},{
TextView,
id=luajava.newId(gid..ii.."t"),
gravity = "center",
text = name,
textColor="#d7d7d7",
textSize = "9sp",
layout_width = 'match_parent',
layout_weight=1,
},
}
}
colorvs[gid..ii.."p"]={false,"img"}
colorvs[gid..ii.."t"]={gid..ii.."t",false,"txt"}
return {["view"] = switchs[gid..ii],
["name"] = name,
["func"] = func,
["type"] = "勾选",
}
end
function 开关group(name,func1,func2,nid)
local sname = nid
local localname=name
name = name
kgs[name] = "关"
if func1 == nil then func1 = "" end
if func2 == nil then func2 = "" end
if type(func1) == "function" then
return function()
namers = kgs[name]
if namers ~= "开" then
vibra:vibrate(9)
luajava.runUiThread(function()
luajava.getIdValue(nid.."t"):setTextColor('0xff'.._ENV['控件颜色'])
luajava.getIdValue(nid.."p"):setColorFilter('0xff'.._ENV['控件颜色'])
colorvs[nid.."p"]={true,"img"}
colorvs[nid.."t"]={true,"txt"}
--nankun.controlWater(switchs[nid],300)
end)
kgs[name] = "开"
pcall(func1)
else
vibra:vibrate(9)
luajava.runUiThread(function()
luajava.getIdValue(nid.."t"):setTextColor(0xffd7d7d7)
luajava.getIdValue(nid.."p"):setColorFilter(0xffd7d7d7)
colorvs[nid.."p"]={false,"img"}
colorvs[nid.."t"]={false,"txt"}
--nankun.controlWater(switchs[nid],300)
end)
kgs[name] = "关"
pcall(func2)
end
end
end
end
local nulfunc=function() end
nankun.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 visi (tid , ttid)
vibra:vibrate(4)
luajava.runUiThread(function()
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])
nankun.controlRotation9(boxpic[tid],0,90)
else
tview : setVisibility (View.GONE)
nankun.controlWater (_ENV [tid.."6"] , 200)
nankun.controlRotation9(boxpic[tid],90,0)
end
end)
end
boxes = {} boxpic = {}
function nankun.box (views)
local tid = "box"..guid ()
boxpic[tid] = luajava.loadlayout {
ImageView ,
src = 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" ,
}
local kid=guid().."box"
if type (views [1]) == "string" or type (views [1]) == "number" then
firadio [# firadio + 1] = {
LinearLayout ,
id=luajava.newId(kid),
layout_width = 'fill_parent' ,
layout_height = "40dp" ,
gravity = "center_vertical" ,
layout_marginTop = "3dp" ,
layout_marginLeft="3dp",
layout_marginRight="3dp",
layout_marginBottom = "3dp" ,
elevation="2dp",
onClick = function ()
visi (tid , ttid)
end,
background = getButtonB(),
{
TextView ,
id=luajava.newId(kid.."bt"),
text = views [1] ,
Typeface=font,
textSize = "10sp" ,
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 ("nankun.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' ,
}
local vs={}
for i = 2,#views do
if type(views[i]) == "userdata" then
radios[#radios+1] = views[i]
else
radios[#radios+1] = views[i].view
vs[#vs+1]=views[i]
end
end
boxes[tid] = luajava.loadlayout(radios)
firadio [# firadio + 1] = boxes[tid]
_ENV [t1id] = luajava.loadlayout (firadio)
if views[1]=="" then bxn="BOX" else bxn=views[1] end
return {["view"] = _ENV [t1id],
["name"] = bxn,
["type"] = "BOX",
["vs"]=vs
}
end
buts={}
heir=getRes("heir")
function nankun.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,
id=luajava.newId(tid),
layout_width = "fill_parent",
gravity = "center_vertical",
layout_marginTop = "5dp",
layout_marginBottom = "5dp",
layout_marginLeft="3dp",
layout_marginRight="3dp",
elevation="2dp",
background = getButtonB(),
padding="10dp",
onClick = function()
nankun.controlWater(buts[tid],300)
vibra:vibrate(10)
luajava.newThread(func):start() end,
{
TextView,
id = luajava.newId(tid.."bt"),
textColor = txtc,
text = txt,
Typeface=font,
textSize = "11sp",
layout_height = "wrap_content",
layout_width = "fill_parent",
layout_weight=1,
},{ImageView,
src=heir,
layout_height="14dp",
layout_width="14dp",
}
}})
return {["view"]= buts[tid],
["name"] = txt,
["func1"] = func,
["type"] = "按钮",
}
end
function newbg2(gtvb1,gtvb3)
local jianbians = luajava.loadlayout({
GradientDrawable,
color = gtvb1,
cornerRadius=gtvb3,
gradientType = GradientDrawable.LINEAR_GRADIENT,
orientation = GradientDrawable.Orientation.TOP_BOTTOM,
strokeWidth = 0,
strokeColor = 0xff000000
})
return jianbians
end
function getButtonBG()
local selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, newbg2(0xff000000,35))
selector:addState({
-android.R.attr.state_pressed
}, newbg2(0xff161616,35))
return selector
end
function getButtonB()
local selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, newbg2(0xffd7d7d7,15))
selector:addState({
-android.R.attr.state_pressed
}, newbg2(0xffffffff,15))
return selector
end
当前ui=1
function nankun.image(img,height,width,pad,func)
if not func then func=function() end end
if not pad then pad="0dp" end
if not height then height="80dp" end
if not width then width="80dp" end
return {view=luajava.loadlayout({
LinearLayout,
layout_height="wrap_content",
layout_width="fill_parent",
gravity="center",
{
ImageView,
layout_height=height,
layout_width=width,
padding=pad,
src=获取图片(img),
onClick=function() luajava.newThread(func):start() end,
}}),
type="图片",
}
end
function nankun.getedit (name)
edit = tostring (luajava.getIdValue (_ENV [name]) : getText ())
return edit
end
function nankun.setedit (name , txt)
txt = tostring (txt)
luajava.runUiThread (function ()
luajava.getIdValue (_ENV [name]) : setText (txt)
end
)
end
local dpi=context:getResources():getDisplayMetrics().densityDpi
function getpx(x)
if type(x)=='string' then
if string.find(x,'dp') then
x=string.gsub(x,'dp','')
x=tonumber(x)
end
return x*(dpi/160)
else
return x
end
end
function getdp(x)
if type(x)=='number' then
return x/(dpi/160)..'dp'
else
return x
end
end
sliders={}
function nankun.toast2s(title,neir,qiucolor,bgcolor)
if qiucolor == nil then qiucolor=0xFF55FFAA end
if bgcolor == nil then bgcolor=0xFFFFFEFE end
if title[2] == nil then title[2]=0xff55AAFF end
if neir[2] == nil then neir[2]=0xffffFFFF end
local toast2id="toast2"..title[1]..string.randomUUID(true)
_ENV[toast2id] = luajava.loadlayout({
LinearLayout,
visibility = "gone",
layout_height = "wrap_content",
layout_width = "wrap_content",
{
LinearLayout,
layout_height = "50dp",
layout_width = "100dp",
gravity = 'center',
background = luajava.loadlayout({
GradientDrawable,
color = bgcolor,
cornerRadius = 20,
}),
layout_marginTop="5dp",
layout_marginBottom="5dp",
{LinearLayout,
layout_height = "match_parent",
layout_width="wrap_content",
{
LinearLayout ,
background=luajava.loadlayout {
GradientDrawable ,
color = qiucolor ,
cornerRadius = 360
},
layout_width = "15dp" ,
layout_height = "15dp" ,
layout_marginRight="8dp",
layout_marginLeft="8dp",
layout_marginTop="8dp",
layout_marginBottom="8dp",
layout_gravity="center",
},
{LinearLayout,
layout_width="fill_parent",
layout_height = "match_parent",
orientation = 'vertical',
{
TextView,
text = title[1],
textColor=title[2],
textSize = "13sp",
layout_width = "match_parent",
layout_height = "wrap_content",
layout_marginTop="5dp",
layout_marginBottom="2dp",
},
{
TextView,
text = neir[1],
textSize = "10sp",
textColor=neir[2],
layout_width = "match_parent",
layout_height = "wrap_content",
},
},
}
}
})
luajava.newThread(function()
luajava.runUiThread(function()
toast2lay:addView(_ENV[toast2id])
_ENV[toast2id]:setVisibility(View.VISIBLE)
_ENV[toast2id]:setAlpha(0)
_ENV[toast2id]:animate():alpha(1):setDuration(1000):start()
end)
gg.sleep(2000)
luajava.runUiThread(function()
_ENV[toast2id]:animate()
:alpha(0)
:setDuration(1000)
:withEndAction(function()
local function invoke2()
toast2lay:removeView(_ENV[toast2id])
end
luajava.post(invoke2)
end)
:start()
end)
end):start()
end
function huiz()
draw.remove()--隐藏
end
音量键=false
muby='350dp'--初始宽度
mubx='250dp'--初始高度
侧边文字="血 雾"
--初始颜色,填写十六进制RGB
_ENV['控件颜色']='0xffA5A5A5'
smalltype=1
悬浮窗='https://img14.360buyimg.com/ddimg/jfs/t1/377829/35/10182/20245/693d5340F97b4ae52/0015282280b9b85f.jpg'
stab = {
{"主页", getRes("lchome")},
{"范围", getRes("lcff")},
{"音乐", getRes("lcsh")},
{"设置", getRes("lcsz")},}
nankun.menu({
{--第一页
nankun.button("选择进程",
function()
string.toMusic('请选择游戏进程')
gg.setProcessX()
end),
nankun.button(
"公告[必看]",
function()
gg.alert("欢迎您的每一次使用 感谢您的每一次支持 作者:血雾 本产品仅供参考,用户不得使用,否则所有后果一切均由用户自己承担")
end),
},{--第二页
nankun.switch("LOGO防闪",
function()
local items, count = {}, 0
local liblist = {
{"libUE4.so", {
{0x7E0, 4096, 4},
{0x808, 4096, 4},
{0xCA4, 4096, 4},
{0xCCC, 4096, 4}
}},
{"libanogs.so", {
{0x300, 4096, 4},
{0x3F8, 4096, 4},
{0x430, 4096, 4},
{0x550, 4096, 4},
{0x5D8, 4096, 4},
{0x45E0, 4096, 4},
{0x4610, 4096, 4},
{0x463C, 4096, 4}
}}
}
for i=1,#liblist do
local r = gg.getRangesList(liblist[i][1] .. ":bss")[1]
if r then
local base = r.start
for j=1,#liblist[i][2] do
count = count + 1
items[count] = {
address = base + liblist[i][2][j][1],
flags = liblist[i][2][j][3],
value = liblist[i][2][j][2]
}
end
end
end
if count > 0 then
gg.setValues(items)
gg.toast("开启成功")
end
string.toMusic('LOGO防闪开启成功')
end),
nankun.switch("hook头部",
function()
local 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
-- 执行修改/冻结函数
local function xgxc(szpy, qmxg)
local xgsl = 0
local xgjg = false
for x = 1, #qmxg do
local xgpy = szpy + qmxg[x]["offset"]
local xglx = qmxg[x]["type"]
local xgsz = qmxg[x]["value"]
local 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
return xgsl, xgjg
end
-- 内存搜索与匹配函数(修复qmxg参数传递)
local function xqmnb(qmnb, qmxg)
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"] .. "开启成功")
return false, 0
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"] .. "开启成功")
return false, 0
else
local sl = gg.getResults(999999)
local sz = gg.getResultCount()
local xgsl = 0
local xgjg = false
if sz > 999999 then sz = 999999 end
for i = 1, sz do
local pdsz = true
local pdjg = false
for v = 4, #qmnb do
if pdsz == true then
local pysz = {[1] = {address = sl[i].address + qmnb[v]["offset"], flags = qmnb[v]["type"]}}
local szpy = gg.getValues(pysz)
local pdpd = qmnb[v]["lv"] .. ";" .. szpy[1].value
local szpd = split(pdpd, ";")
local tzszpd = szpd[1]
local pyszpd = szpd[2]
if tzszpd == pyszpd then
pdjg = true
pdsz = true
else
pdjg = false
pdsz = false
end
end
end
if pdjg == true then
local szpy_addr = sl[i].address
local add_sl, add_jg = xgxc(szpy_addr, qmxg)
xgsl = xgsl + add_sl
xgjg = add_jg or xgjg
end
end
gg.toast(xgjg and (qmnb[2]["name"] .. "开启成功,一共修改" .. xgsl .. "条数据") or (qmnb[2]["name"] .. "未搜索到数据,开启失败"))
return xgjg, xgsl
end
end
end
-- 自定义范围修改函数
local function ziGaiFanWei()
local OP = gg.prompt({'100-300'}, {[1] = '200'}, {[1] = 'number'})
if OP == nil or OP[1] == '' or OP[1] == '0' then
gg.toast("取消")
return
end
gg.clearResults()
gg.setRanges(gg.REGION_ANONYMOUS)
gg.searchNumber("9.20161819458;23;25;30.5", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
gg.searchNumber("25;30.5", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
gg.getResults(1000)
gg.editAll(OP[1], gg.TYPE_FLOAT)
gg.clearResults()
gg.setRanges(gg.REGION_CODE_APP)
gg.searchNumber("-443715560;-299365883", gg.TYPE_DWORD)
gg.refineNumber("-443715560", gg.TYPE_DWORD)
gg.getResults(10)
gg.editAll("0", gg.TYPE_DWORD)
gg.clearResults()
gg.setRanges(16384)
gg.searchNumber("-289596733;-308983296;-298640831;-298370492;-294581562;-298706367:193", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
gg.searchNumber("-289596733;-308983296;-298640831;-298370492;-294581562;-298706367:193", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
gg.getResults(100)
gg.editAll("0", gg.TYPE_DWORD)
gg.clearResults()
gg.setRanges(gg.REGION_CODE_APP)
gg.searchNumber("-299365883", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1, 0)
local revert = gg.getResults(200)
gg.editAll("10", gg.TYPE_DWORD)
gg.processResume()
gg.clearResults()
gg.setRanges(32)
gg.toast("范围开启成功")
end
-- 第一组修改参数与执行
local qmnb1 = {
{["memory"] = 32},
{["name"] = "头部100%"},
{["value"] = 4740038608910024704, ["type"] = 32},
{["lv"] = 4752423507886342144, ["offset"] = 4, ["type"] = 32},
{["lv"] = 1106509824, ["offset"] = 8, ["type"] = 32},
}
local qmxg1 = {
{["value"] = 150, ["offset"] = 0, ["type"] = 16},
{["value"] = 150, ["offset"] = 4, ["type"] = 16},
{["value"] = 150, ["offset"] = 8, ["type"] = 16},
}
xqmnb(qmnb1, qmxg1)
gg.toast("修伤")
-- 第二组修改参数与执行
local qmnb2 = {
{["memory"] = 32},
{["name"] = " "},
{["value"] = 4771563806291656704, ["type"] = 32},
{["lv"] = 1110966272, ["offset"] = 4, ["type"] = 32},
{["lv"] = 4692750811720056832, ["offset"] = -4, ["type"] = 32},
}
local qmxg2 = {
{["value"] = 9999, ["offset"] = 0, ["type"] = 16},
}
xqmnb(qmnb2, qmxg2)
-- 批量数值修改
gg.searchNumber("-298284466", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
gg.getResults(15)
gg.editAll("0", gg.TYPE_DWORD)
gg.clearResults()
gg.setRanges(gg.REGION_ANONYMOUS)
gg.searchNumber("90000", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
gg.searchNumber("90000", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
gg.getResults(100)
gg.editAll("500000", gg.TYPE_FLOAT)
gg.clearResults()
gg.setRanges(gg.REGION_ANONYMOUS)
gg.searchNumber("15;28;16;26;8;18", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
gg.setRanges(gg.REGION_CODE_APP)
gg.searchNumber("-3.77830899e28;-3.74440972e28;-3.71834013e28;-1.7334334e28", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0)
gg.refineNumber("-5.77775931e27", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
gg.getResults(2)
gg.editAll("-560", gg.TYPE_FLOAT)
gg.clearResults()
gg.toast("开启完成")
string.toMusic('hook头部范围开启成功')
end),
nankun.switch("循环(单开)",
function()
function SearchWrite(Search, Write, Type)
gg.clearResults()
gg.setVisible(false)
gg.searchNumber(Search[1][1], Type)
local count = gg.getResultCount()
local result = gg.getResults(count)
gg.clearResults()
local data = {}
local base = Search[1][2]
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 = v.flags
end
tmp = gg.getValues(tmp)
for i, v in ipairs(tmp) do
if ( tostring(v.value) ~= 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 = {}
local base = Search[1][2]
for i=1, #data do
for k, w in ipairs(Write) do
offset = w[2] - base
t[#t+1] = {}
t[#t].address = data[i] + offset
t[#t].flags = Type
t[#t].value = w[1]
if (w[3] == true) then
local item = {}
item[#item+1] = t[#t]
item[#item].freeze = true
gg.addListItems(item)
end
end
end
gg.setValues(t)
else
return false
end
else
return false
end
end
-- 循环执行核心逻辑
gg.setRanges(32)
local dataType = 32
local tb1 = {{-4636236325277451820,0}, {4752423507886342144,28}, {1106509824,32}, }
local tb2 = {{4860791373948059648,28}, {1131741184,32},}
-- 无限循环:执行修改 → 等待1秒 → 清除旧冻结项(避免重复添加)
while true do
SearchWrite(tb1,tb2, dataType)
gg.sleep(1000) -- 循环间隔1000毫秒(1秒),可根据需求调整
gg.clearList() -- 清除上一轮冻结项,防止列表堆积
end
-- 注:循环模式下,"开启成功"提示会被循环覆盖,故移除;如需提示可在循环内添加 gg.toast("循环执行中")
string.toMusic('循环范围开启成功')
end),
nankun.switch("Q类型范围",
function()
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 function SearchWrite(Search, Write, Type) gg.clearResults() gg.setVisible(false) gg.searchNumber(Search[1][1], Type) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][2] 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 = v.flags end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= 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 = {} local base = Search[1][2] for i=1, #data do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = Type t[#t].value = w[1] if (w[3] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast("开启成功,一共修改"..#t.."条数据") gg.addListItems(t) else gg.toast("未搜索到数据,开启失败", false) return false end else gg.toast("Not Found") return false end end
function HaoGe(Nc,Type,Search,Write) gg.clearResults() gg.setRanges(Nc) gg.setVisible(false) gg.searchNumber(Search[1][1],Type) local count=gg.getResultCount() local result=gg.getResults(count) gg.clearResults() local data={} local base=Search[1][2] if(count>0)then for i,v in ipairs(result)do v.isUseful=true end for k=2,#Search do local tPUBGMH={} local offset=Search[k][2]-base local num=Search[k][1] for i,v in ipairs(result)do tPUBGMH[#tPUBGMH+1]={} tPUBGMH[#tPUBGMH].address=v.address+offset tPUBGMH[#tPUBGMH].flags=v.flags end tPUBGMH=gg.getValues(tPUBGMH) for i,v in ipairs(tPUBGMH)do if(tostring(v.value)~=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={} local base=Search[1][2] for i=1,#data do for k,w in ipairs(Write)do offset=w[2]-base t[#t+1]={} t[#t].address=data[i]+offset t[#t].flags=Type t[#t].value=w[1] if(w[3]==true)then local item={} item[#item+1]=t[#t] item[#item].freeze=true gg.addListItems(item) end end end gg.setValues(t) gg.sleep(400) else return false end else return false end end
Name = "成功"
local Nc = 16384
local Lx = 16
local Sz1 = {{-1.42781105e28, 0}}
local Sz2 = {{0, 0}}
HaoGe(Nc, Lx, Sz1, Sz2)
qmnb =
{
{["memory"] = 32},
{["name"] = "不减伤头部范围开启成功"},
{["value"] = 4740038608910024704, ["type"] = 32},
{["lv"] = 4752423507886342144, ["offset"] = 4, ["type"] = 32},
{["lv"] = 1106509824, ["offset"] = 8, ["type"] = 32},
--{["lv"] = 4740038608910024704, ["offset"] = 8, ["type"] = 32},
}
qmxg =
{
{["value"] = 400, ["offset"] = 4, ["type"] = 16},
{["value"] = 400, ["offset"] = 8, ["type"] = 16},
{["value"] = 400, ["offset"] = 8, ["type"] = 16},
}
xqmnb(qmnb)
qmnb =
{
{["memory"] = 32},
{["name"] = "不减伤头部范围开启成功"},
{["value"] = 4719772412750681353, ["type"] = 32},
{["lv"] = 4742290408720039936, ["offset"] = 4, ["type"] = 32},
}
qmxg =
{
{["value"] = -10e10, ["offset"] = 8, ["type"] = 16},
}
xqmnb(qmnb)
qmnb =
{
{["memory"] = 32},
{["name"] = "不减伤头部范围开启成功"},
{["value"] = -4417614866316724128, ["type"] = 32},
{["lv"] = 4724276012378061487, ["offset"] = 4, ["type"] = 32},
}
qmxg =
{
{["value"] = -10e10, ["offset"] = 12, ["type"] = 16},
}
xqmnb(qmnb)
qmnb =
{
{["memory"] = 32},
{["name"] = "开启成功"},
{["value"] = -4416487068034336677, ["type"] = 32},
{["lv"] = 4724276012378324073, ["offset"] = 4, ["type"] = 32},
}
qmxg =
{
{["value"] = -10e10, ["offset"] = 8, ["type"] = 16},
{["value"] = -10e10, ["offset"] = 12, ["type"] = 16},
}
xqmnb(qmnb)
string.toMusic('Q类型范围开启成功')
end),
nankun.switch("爆头",
function()
function split(A0_984, A1_985)
local L2_986, L3_987, L4_988
L2_986 = 1
L3_987 = 1
L4_988 = { }
while true do
if not string.find(A0_984, A1_985, L2_986) then
L4_988[L3_987] = string.sub(A0_984, L2_986, string.len(A0_984))
break
end
L4_988[L3_987] = string.sub(A0_984, L2_986, string.find(A0_984, A1_985, L2_986) - 1)
L2_986 = string.find(A0_984, A1_985, L2_986) + string.len(A1_985)
L3_987 = L3_987 + 1
end
return L4_988
end
function xgxc(A0_989, A1_990)
local L2_991, L3_992, L4_993, L5_994
L2_991 = 1
L3_992 = #A1_990
for _FORV_5_ = 1, #A1_990 do
xgpy = A0_989 + A1_990[_FORV_5_].offset
xglx = A1_990[_FORV_5_].type
xgsz = A1_990[_FORV_5_].value
xgdj = A1_990[_FORV_5_].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(A0_995)
gg.clearResults()
gg.setRanges(A0_995[1].memory)
gg.searchNumber(A0_995[3].value, A0_995[3].type)
if gg.getResultCount() == 0 then
gg.toast(A0_995[2].name .. "开启失败")
else
gg.refineNumber(A0_995[3].value, A0_995[3].type)
gg.refineNumber(A0_995[3].value, A0_995[3].type)
gg.refineNumber(A0_995[3].value, A0_995[3].type)
if gg.getResultCount() == 0 then
gg.toast(A0_995[2].name .. "开启失败")
else
sl = gg.getResults(999999)
sz = gg.getResultCount()
xgsl = 0
if sz > 999999 then
sz = 999999
end
for _FORV_4_ = 1, sz do
pdsz = true
for _FORV_8_ = 4, #A0_995 do
if pdsz == true then
pysz = { }
pysz[1] = { }
pysz[1].address = sl[_FORV_4_].address + A0_995[_FORV_8_].offset
pysz[1].flags = A0_995[_FORV_8_].type
szpy = gg.getValues(pysz)
pdpd = A0_995[_FORV_8_].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[_FORV_4_].address
xgxc(szpy, qmxg)
end
end
if xgjg == true then
gg.toast(A0_995[2].name .. "开启成功,一共修改" .. xgsl .. "条数据")
else
gg.toast(A0_995[2].name .. "未搜索到数据,开启失败")
end
end
end
end
function SearchWrite(A0_996, A1_997, A2_998)
local L3_999, L4_1000, L5_1001, L6_1002, L7_1003, L8_1004, L9_1005, L10_1006, L11_1007, L12_1008, L13_1009, L14_1010, L15_1011, L16_1012, L17_1013, L18_1014, L19_1015, L20_1016, L21_1017
end
function HaoGe(A0_1018, A1_1019, A2_1020, A3_1021)
local L4_1022, L5_1023, L6_1024, L7_1025, L8_1026, L9_1027, L10_1028, L11_1029, L12_1030, L13_1031, L14_1032, L15_1033, L16_1034, L17_1035, L18_1036, L19_1037, L20_1038, L21_1039, L22_1040
end
function PS()
local L0_1041, L1_1042
end
function _UPVALUE1_(A0_1043, A1_1044, A2_1045)
PS("修改地址数值(地址,数值类型,要修改的值)");
( {[1] = { } })[1].address = A0_1043;
( {[1] = { } })[1].flags = A1_1044;
( {[1] = { } })[1].value = A2_1045
gg.setValues( {[1] = { } })
end
gg.clearResults()
gg.setRanges(gg.REGION_ANONYMOUS)
gg.searchNumber("4,752,423,507,886,342,144", gg.TYPE_QWORD, false, gg.SIGN_EQUAL, 0, -1, 0)
gg.getResults(100)
gg.editAll("4,752,423,507,916,455,936", gg.TYPE_QWORD)
gg.clearResults()
gg.setRanges(gg.REGION_ANONYMOUS)
gg.searchNumber("1,106,509,824", gg.TYPE_QWORD, false, gg.SIGN_EQUAL, 0, -1, 0)
gg.getResults(100)
gg.editAll("1,138,425,856", gg.TYPE_QWORD)
gg.clearResults()
gg.setRanges(gg.REGION_ANONYMOUS)
gg.searchNumber("10.0F;10.0F;10.0F;10.0F;45:193", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
gg.searchNumber("10", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
gg.getResults(100)
gg.editAll("250", gg.TYPE_FLOAT)
gg.alert("血雾")
gg.clearResults()
gg.setRanges(gg.REGION_BAD)
gg.searchNumber("-88.66608428955;26:512", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
gg.searchNumber("26", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
gg.getResults(2)
gg.editAll("-460", gg.TYPE_FLOAT)
gg.searchNumber("-88.73961639404;28:512", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
gg.searchNumber("28", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
gg.getResults(2)
gg.editAll("-560", gg.TYPE_FLOAT)
string.toMusic('爆头范围开启成功')
end),
nankun.switch("指针",
function()
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 function SearchWrite(Search, Write, Type) gg.clearResults() gg.setVisible(false) gg.searchNumber(Search[1][1], Type) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][2] 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 = v.flags end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= 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 = {} local base = Search[1][2] for i=1, #data do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = Type t[#t].value = w[1] if (w[3] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast("开启成功,一共修改"..#t.."条数据") gg.addListItems(t) else gg.toast("未搜索到数据,开启失败", false) return false end else gg.toast("Not Found") return false end end
function HaoGe(Nc,Type,Search,Write) gg.clearResults() gg.setRanges(Nc) gg.setVisible(false) gg.searchNumber(Search[1][1],Type) local count=gg.getResultCount() local result=gg.getResults(count) gg.clearResults() local data={} local base=Search[1][2] if(count>0)then for i,v in ipairs(result)do v.isUseful=true end for k=2,#Search do local tPUBGMH={} local offset=Search[k][2]-base local num=Search[k][1] for i,v in ipairs(result)do tPUBGMH[#tPUBGMH+1]={} tPUBGMH[#tPUBGMH].address=v.address+offset tPUBGMH[#tPUBGMH].flags=v.flags end tPUBGMH=gg.getValues(tPUBGMH) for i,v in ipairs(tPUBGMH)do if(tostring(v.value)~=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={} local base=Search[1][2] for i=1,#data do for k,w in ipairs(Write)do offset=w[2]-base t[#t+1]={} t[#t].address=data[i]+offset t[#t].flags=Type t[#t].value=w[1] if(w[3]==true)then local item={} item[#item+1]=t[#t] item[#item].freeze=true gg.addListItems(item) end end end gg.setValues(t) gg.sleep(400) else return false end else return false end end
function HaoGe(Nc,Type,Search,Write) gg.clearResults() gg.setRanges(Nc) gg.setVisible(false) gg.searchNumber(Search[1][1],Type) local count=gg.getResultCount() local result=gg.getResults(count) gg.clearResults() local data={} local base=Search[1][2] 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=v.flags end tmp=gg.getValues(tmp) for i,v in ipairs(tmp)do if(tostring(v.value)~=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 gg.toast("\n🔍搜索到"..#data.."数据\n🔰开始进行偏移") local t={} local base=Search[1][2] for i=1,#data do for k,w in ipairs(Write)do offset=w[2]-base t[#t+1]={} t[#t].address=data[i]+offset t[#t].flags=Type t[#t].value=w[1] if(w[3]==true)then local item={} item[#item+1]=t[#t] item[#item].freeze=true gg.addListItems(item) end end end gg.setValues(t) gg.sleep(400) gg.toast("\n🚬"..Name.."成功\n🛠共修改"..#t.."数据") else gg.toast("\n❌"..Name.."失败") return false end else gg.toast("\n❌"..Name.."失败 ") return false end end
gg.searchNumber("15;28;16;26;8;18", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
gg.getResults(56)
gg.editAll("-1339", gg.TYPE_FLOAT)
gg.clearResults()
gg.setRanges(gg.REGION_ANONYMOUS)
gg.searchNumber("4746794008348459008", gg.TYPE_QWORD, false, gg.SIGN_EQUAL, 0, -1)
gg.getResults(20)
gg.editAll("4746794010547806208", gg.TYPE_QWORD)
gg.clearResults()
gg.setRanges(gg.REGION_ANONYMOUS)
gg.searchNumber("-5846769645006094336", gg.TYPE_QWORD, false, gg.SIGN_EQUAL, 0, -1)
gg.getResults(20)
gg.editAll("-5846769642811990016", gg.TYPE_QWORD)
gg.clearResults()
gg.setRanges(gg.REGION_ANONYMOUS)
gg.searchNumber("1106509824", gg.TYPE_QWORD, false, gg.SIGN_EQUAL, 0, -1)
gg.getResults(10)
gg.editAll("1128726528", gg.TYPE_QWORD)
gg.setRanges(gg.REGION_C_DATA | gg.REGION_CODE_APP)
gg.searchNumber("-298284466;-1.304566e23F", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
gg.searchNumber("-298284466", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
gg.getResults(99)
gg.editAll("0", gg.TYPE_DWORD)
gg.clearResults()
gg.setRanges(gg.REGION_C_DATA | gg.REGION_CODE_APP)
gg.searchNumber("-298284466;-1.304566e23F", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
gg.searchNumber("-298284466", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
gg.getResults(99)
gg.editAll("0", gg.TYPE_DWORD)
gg.toast(" 指针偏移 ")
string.toMusic('指针范围开启成功')
end),
},{--第三页
},{--第四页
nankun.switch("音量键隐藏",--默认开启,改名就是默认关闭
function()
音量键=true
end,
function()
音量键=false
end),
nankun.switch("隐藏字体",
function()
draw.remove()--隐藏
gg.alert("少开隐藏水印,多多宣传谢谢!")
end,
function()
draw.setStyle("描边")
draw3 = require("draw3")
draw.text("血雾", 200, 250)
draw.setColor("#00ffff")
draw.setSize(50)
draw.setStyle("描边并填充")
end),
nankun.button("退出",
function()
tuichu=1
end)
}
})
--泛滥频道:@HRHOOK
--泛滥频道:@HRHOOK
--泛滥频道:@HRHOOK
--泛滥频道:@HRHOOK
--泛滥频道:@HRHOOK
-- 处理完成 --