local gg = gg.fastApi()
--64xa内存
local 加速64 = 0x63602C4
local 地皮64 = 0xCAF4D58
local x64px1=0x64--趴下快起
local x64px2=0x68--趴下快起
--64ag
local 基质头64 = 0x559B70
local 自身64 = 0x4B8
local 运动页64 = 0x518
local 趴下半高64 = 0x2d08--50
local 坐标隔层64 = 0x208
local 坐标x64 = 0x18C
local 坐标y64 = 0x190
local 坐标z64 = 0x194
local x64a1 = 0x268---8192。
local x64a2 = 0x28c---0:05。
local x64a3 = 0x298---停止惯性
local x64a4 = 0x2b8---13680。
--local x64a5 = 0x27C---479.5。
local x64a6 = 0x1168--微加速
local x64a7 = 0x610--240。
local x64a8 = 0x19A8--秒趴
local x64a9 = 0x250
local x64a10 = 0x364
local x64a11 = 0xE4--全局变速
local x64a12 = 0xE8--人物灵魂
local x64a13 = 0x21C--高跳
local x64a14 = 0x214--重力
local x64a15 = 0x24ac
local x64a16 = 0x218--上下坡
local x64a17 = 0x2af4
local x64a18 = 0x2AF0
local x64a19 = 0x4e0--垂直角度
local 变速一64 = 0x758 --正常上
local 变速二64 = 0x75c--下
local 减速64 = 0x770--0.4
--32xa内存
local 锁地皮32 = 0x6AF5414
local 加速32 = 0x6B47110
local x32px1=0x48
local x32px2=0x4C
--32a内存
local 基址头32 = 0x3DFBA0
local 自身32 = 0x3b0
local 运动页32 = 0x3f4
local 趴下半高32 = 0x22a0
local 坐标隔层32 = 0x1b0
local 坐标x32 = 0x1B0
local 坐标y32 = 0x1B4
local 坐标z32 = 0x1B8
local x32a1 = 0xcd8
local x32a2 = 0x198
local x32a3 = 0x564
local x32a4 = 0x1e8
local x32a5 = 0x20c
local x32a6 = 0xB4
local x32a7 = 0xB8
local x32a8 = 0x1c34
local x32a9 = 0x194
local x32a10 = 0x19c
local x32a11 = 0x1308
local 变速一32 = 0x5d8
local 变速二32 = 0x5dc
local 减速32 = 0x5f0
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
local function setvalue(address, flags, value, freeze)
local t = {}
t[1] = {}
t[1].address = address
t[1].flags = flags
t[1].value = value
t[1].freeze = freeze
gg.setValues(t)
gg.addListItems(t)
end
function clearaddr(addr)
gg.addListItems({{address = addr, flags = 16, freeze = false}})
end
D=gg.TYPE_DWORD
F=gg.TYPE_FLOAT
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 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 = {}
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
local function setvalue(address,flags,value,freeze)
local t={}
t[1]={}
t[1].address=address
t[1].flags=flags
t[1].value=value
t[1].freeze=freeze
gg.setValues(t)
gg.addListItems(t)
end
local function RUI(address)
return gg.getValues({{address = address, flags = gg.TYPE_DWORD}})[1].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
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
local function setvalue ( address , flags , value , freeze )
local t = { }
t [ 1 ] = { }
t [ 1 ].address = address
t [ 1 ].flags = flags
t [ 1 ].value = value
t [ 1 ].freeze = freeze
gg.setValues ( t )
gg.addListItems ( t )
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 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 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 & 0xFFFFFFFF--对值进行补位操作
else
sostart = rest[1].value
end
end
end
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]["value"] = value
tab[1]["name"] = Function or "功能"
return gg.addListItems(tab)
elseif format == "加载" then
tab[1]["flags"] = type
return gg.loadResults(tab)
end
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
---以下放置你的脚本代码
string.toMusic(os.date("欢迎老板使用小可乐范围内部版"))
-- 把以上代码复制到你脚本最前面即可
-------------------配置------------------
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
gg.toast("修改"..#data.."条数据.修改成功")
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
gg.toast(":搜索0条数据.修改失败", false)
return false
end
else gg.toast("搜索0条数据.修改失败")
return false
end
end
function search(ss,lx,nc,dz1,dz2) gg.setVisible(false) if ss~=nil then if lx~=nil then if nc==nil then nc=32 end gg.setRanges(nc) if dz1==nil then dz1="-1" end if dz2==nil then dz1="0" end gg.searchNumber(ss,lx,false,536870912,dz1,dz2) sl=gg.getResultCount() if sl~=0 then sj=gg.getResults(sl) gg.toast("搜索到 "..sl.." 个结果") gg.clearResults() else gg.toast("未搜索到结果") end else gg.toast("无搜索值类型") end else gg.toast("无需搜索值") end 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 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 TL_TL(a,b,c,d,e)
local time = os.clock()
kv = {}
ks={}
if a == "libil2cpp.so" then
local aa = gg.getRangesList(a)[2].start
if aa == nil then
toMusic("模块未加载\n或选错游戏进程")
return
end
for i, k in ipairs(b) do
local v = aa + k
kv[#kv+1] = {address = v, flags = c, value = d, freeze = true}
ks[#ks+1] = {address = v+4, flags = c, value = -698416192, freeze = true}
end
else
local aa = gg.getRangesList(a)
if aa[1] == nil then
toMusic("模块未加载\n或选错游戏进程")
end
local l = gg.getRangesList(a)[1].start
for i, k in ipairs (b) do
local v = l + k
kv[#kv+1] = {address = v, flags = c, value = d, freeze = true}
end
end
gg.addListItems(kv)
gg.addListItems(ks)
gg.toast(e.."开启成功\n共耗时"..os.clock() - time.."秒\n共修改"..#b.."条值")
end
function readValue(address, flags) return gg.getValues({{address = address, flags = flags}})[1]["value"]end
ms = { }
function setvalue ( add , value , falgs , dj )
local WY = { } WY [ 1 ] = { } WY [ 1 ].address = add WY [ 1 ].value = value WY [ 1 ].flags = falgs
if dj == true then
WY [ 1 ].freeze = true gg.addListItems ( WY )
else
gg.setValues ( WY )
end
end
function ms.ss ( num , ty , nc )
local GGNUMBER_1 = num
local GGNUMBER_2 = ty
local GGNUMBER_3 = false
local GGNUMBER_4 = gg.SIGN_EQUAL
local GGNUMBER_5 = 0x3000000000
local GGNUMBER_6 = 0xFFFFFFFFFF
local GGNUMBER_7 = 0
gg.clearResults ( )
gg.setRanges ( nc )
gg.searchNumber ( GGNUMBER_1 , GGNUMBER_2 , GGNUMBER_3 , GGNUMBER_4 , GGNUMBER_5 , GGNUMBER_6 , GGNUMBER_7 )
Result = gg.getResults ( gg.getResultCount ( ) )
end
function ms.py ( num , py , ty )
if ( Result and # Result ~= 0 ) then
t = { }
for i , v in ipairs ( Result ) do
t [ i ] = { } t [ i ].address = v.address + py t [ i ].flags = ty
end
t = gg.getValues ( t )
for i , v in ipairs ( t ) do
if v.value ~= num then
Result [ i ] = nil
end
end
local MS = { }
for i , v in pairs ( Result ) do
MS [ # MS + 1 ] = v
end
Result = MS
end
end
function ms.bc ( )
data = { }
if Result == nil or # Result == 0 then
toMusic ( "开启失败" )
else
for i , v in pairs ( Result ) do
data [ # data + 1 ] = v.address
end
end
Result = nil
end
function ms.edit ( nn , off , ty , dj )
if ( Result ) then
ms.bc ( )
end
if # data > 0 then
for i , v in ipairs ( data ) do
setvalue ( v + off , nn , ty , dj or false )
end
gg.toast ( Name.."成功" )
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 xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) if gg.searchNumber(qmnb[3]["value"],qmnb[3]["type"],false,gg.SIGN_EQUAL,0,-1)~=true then gg.searchAddress(qmnb[3]["value"],-1,qmnb[3]["type"]) end if gg.getResultCount()==0 then gg.toast(qmnb[2]["name"].."开启失败")return end szxx=gg.getResults(gg.getResultCount()) szpd={} a=0 for i=4,#qmnb do for s=1,#szxx do if szpd[s]~="false" then if gg.getValues({{address=szxx[s].address+qmnb[i]["offset"],flags=qmnb[i]["type"]}})[1].value+0~=qmnb[i]["lv"]then szpd[s]="false" a=a+1 end end end end if a==#szxx then gg.toast(qmnb[2]["name"].."开启失败")return end b=0 t={} for x=1,#qmxg do if qmxg[x]["freeze"]==true then a=1 end for i=1,#szxx do if szpd[i]==nil then b=b+1 table.insert(t,{address=szxx[i].address+qmxg[x]["offset"],flags=qmxg[x]["type"],freeze=qmxg[x]["freeze"],value=qmxg[x]["value"]}) end end end gg.setValues(t) gg.addListItems(t) gg.clearResults() if a~=1 then gg.clearList()else a=nil end gg.toast(qmnb[2]["name"].."开启成功,共修改了"..b.."条数据") end
qmnb = function(daarr)
local array = {}
for i = 1, #daarr["搜索数组"] do
local data = {["lv"] =daarr["搜索数组"][i][1], ["offset"] = daarr["搜索数组"][i][2], ["type"] = daarr["搜索类型"]}
table.insert(array, i, data)
end
local isok, data = app.memorysearch(daarr["搜索内存"], array)
if isok then
for i = 1, #data do
for x = 1, #daarr["修改数组"] do
app.memorywrite(data[i] + daarr["修改数组"][x][2], daarr["搜索类型"], daarr["修改数组"][x][1])
end
end
gg.toast(daarr["功能名称"] .. "共修改" .. #data * #daarr["修改数组"] .. "条数据")
else
gg.toast(daarr["功能名称"] .. "开启失败")
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(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 SOGSPY_ST(HDZ,DYZ)
if HDZ >= DYZ then
py=string.format("0x%X",HDZ-DYZ)
return tostring(string.format("-0x%X",py))
else
py=string.format("0x%X",DYZ-HDZ)
return tostring(string.format("0x%X",py))
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
else
-- addr[1].value = addr[1].value & 0xFFFFFFFFFF
end
addr = addr[1].value + offset[i]
end
return addr
end
end
function gg.edits(addr, Table, name)
if not addr then
gg.toast('修改失败, 可能是模块不存在')
return
end
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 SO_PT(FUNCTIONADD,TYPE,VALUE)
local SOMOD=gg.getRangesList("il2cpp.so")
if SOMOD[2]==nil then toMusic("开启失败\n━━━━━━━━━━━━━━━\n错误原因:未找到相关内存\n解决方法:请重新选择游戏进程\n━━━━━━━━━━━━━━━") else
gg.setValues({{address=SOMOD[2].start+FUNCTIONADD,flags=TYPE,value=VALUE}})
gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+4,flags=TYPE,value="~A8 RET"}})
end
end
function txl(zhi,lx,xg,dj) if dj == true then gg.addListItems({{address=zhi,flags=lx,value=xg,freeze=true}}) else gg.setValues({{address=zhi,flags=lx,value=xg}}) end end
function SO_PT(FUNCTIONADD,TYPE,VALUE)
local SOMOD=gg.getRangesList("il2cpp.so")
if SOMOD[2]==nil then toMusic("开启失败\n━━━━━━━━━━━━━━━\n错误原因:未找到相关内存\n解决方法:请重新选择游戏进程\n━━━━━━━━━━━━━━━") else
gg.setValues({{address=SOMOD[2].start+FUNCTIONADD,flags=TYPE,value=VALUE}})
gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+4,flags=TYPE,value="~A8 RET"}})
end
end
-------------------配置------------------
vibra = context:getSystemService(Context.VIBRATOR_SERVICE)
changan = {}
local changan = changan
local android = import('android.*')
write=file.write
function panduan(rec) fille,err = io.open(rec) if fille == nil then return false else return true end end
read=file.read
function checkimg(tmp)
if panduan("/sdcard/长安/图片/"..tmp) ~= true then
gg.toast("正在加载资源"..tmp)
download("https://escape2020-1303126286.cos.ap-shenzhen-fsi.myqcloud.com/"..tmp,"/sdcard/长安/图片/"..tmp)
end
end
function 获取图片(txt)
ntxt=string.sub(string.gsub(txt,"/","."),-10,-1)
if string.find(tostring(txt),"http")~=nil then
if panduan("/sdcard/长安/图片/"..ntxt)==false then
download(txt,"/sdcard/长安/图片/"..ntxt)
end
txt="/sdcard/长安/图片/"..ntxt
end
return luajava.getBitmapDrawable(txt)
end
ckimg = {
"blackx",
}
for i = 1,#ckimg do
checkimg(ckimg[i])
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 getj6()
jianbian6 = luajava.new(GradientDrawable)
jianbian6:setCornerRadius(20)
jianbian6:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbian6:setColors({0xffffffff,0xffffffff})
jianbian6:setStroke(5,"0xffffffff")--边框宽度和颜色
return jianbian6
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
slctb1 = luajava.loadlayout({
GradientDrawable,
color = "#661E1C27",
cornerRadius = 20
})
slcta1 = luajava.loadlayout({
GradientDrawable,
color = "#331E1C27",
cornerRadius = 20
})
function getSelector3()
selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, slcta1) -- 点击时候的背景
selector:addState({
-android.R.attr.state_pressed
}, slctb1) -- 没点击的背景
return selector
end
slctb = luajava.loadlayout({
GradientDrawable,
color = "#001E1C27",
cornerRadius = 0
})
slcta = luajava.loadlayout({
GradientDrawable,
color = "0xff0086F1",
cornerRadius = 4
})
slctc = luajava.loadlayout {
GradientDrawable,
color = "#ffffffff",
cornerRadius = 16
}
slctd = luajava.loadlayout {
GradientDrawable,
color = "#ddE0E0E0",
cornerRadius = 16
}
slcte = luajava.loadlayout {
GradientDrawable,
color = "#11ffffff",
cornerRadius = 12
}
slctf = luajava.loadlayout {
GradientDrawable,
color = "#aa1E1C27",
cornerRadius = 12
}
changan.controlFlip = function(control,time)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotationY", {0, 360})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.REVERSE)
xuanzhuandonghua:setDuration(time)
xuanzhuandonghua:start()
end) 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
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 particlelz()
local webView = luajava.webView(function(webView)
webView:loadData([[
]], 'text/html', 'UTF-8')
webView:setBackgroundColor(0x0)
webView:setVerticalScrollBarEnabled(false)
webView:setHorizontalScrollBarEnabled(false)
webView:setScrollContainer(false)
end)
return webView
end
function wvbgd()
webvlz_:setVisibility(View.GONE)
end
----
local isswitch
YoYoImpl = luajava.getYoYoImpl()
changan.menu = function(sview)
if isswitch then
return false
end
for i=1,#stab do
_ENV["jmb"..i]=getSelector()
end
isswitch = true
cebian = {
LinearLayout,
id = "侧边",
gravity = "center",
visibility = "gone",
layout_height = "wrap_content",
layout_width = "match_parent",
}
gund = {
LinearLayout,
background=getblue(),
gravity = "center",
orientation = "horizontal",
layout_height = "wrap_content",
layout_width = "wrap_content",
}
for i = 1,#stab do
_ENV["jm"..i]=luajava.loadlayout({
LinearLayout,
id = "jm"..i,
layout_height = "28dp",
layout_width = "68dp",
gravity = "center",
layout_marginTop = "2dp",
layout_marginBottom = "2dp",
background = _ENV["jmb"..i],
onClick=function()
--changan.controlFlip(_ENV["jm"..i],500)
切换(i) end,
{
TextView,
id="jm"..i.."t",
gravity = "center",
textColor="#0086F1",
text = stab[i],
--onClick = function() 切换(i) end
}})
gund[#gund+1] = _ENV["jm"..i]
if i< #stab then
gund[#gund+1] = luajava.loadlayout({
LinearLayout,
layout_height="match_parent",
layout_width="1.3dp",
background="#0086F1"
})
end
end
cebian[#cebian+1] = {
HorizontalScrollView,
gravity = "center",
fillViewport = "true",
layout_height = "wrap_content",
layout_width = "wrap_content",
gund,
}
cebian = luajava.loadlayout(cebian)
for i = 1,#stab do
_ENV["layout"..i] = luajava.loadlayout(
{
ScrollView,
--background = getj6(),
fillViewport = "true",
padding = "3dp",
id = "layout"..i,
visibility = "gone",
padding="10dp",
layout_width = "wrap_content",
layout_height = "280dp",
orientation = "vertical",
{
LinearLayout,
--background = getj6(),
id = "layoutm"..i,
gravity = "top",
layout_width = "250dp",
orientation = "vertical",
gravity = "center_horizontal",
},
})
end
ckou = {
LinearLayout,
id = "chuangk",
padding="4dp",
visibility = "gone",
layout_width = "wrap_content",
layout_height = "wrap_content",
orientation = "vertical",
cebian,
}
for i = 1,#stab do
ckou[#ckou+1] = _ENV["layout"..i]
end
--luajava.newThread(function() develo(ckou) end):start()
ckou = luajava.loadlayout(ckou)
title = luajava.loadlayout({
TextView,
id = "title",
visibility = "gone",
text = stitle,
--background="#80FF00",
textColor="#000000",
gravity = "center",
textSize = "19sp",
layout_marginTop = "20dp",
layout_width = "280dp",
})
floatWindow = {
LinearLayout,
id = "motion",
orientation="vertical",
{FrameLayout,
layout_width="wrap_content",
--background="#ffffff",
{
LinearLayout,
gravity = "center", {
ImageView,
id = "control",
background = 获取图片(xfcpic),
layout_width = "40dp",
layout_height = "40dp",
}},
{
ImageView,
id = "exit",
layout_gravity="right",
visibility="gone",
src = "https://cccimg.com/view.php/1631f943c3cad4fd0aee9e611638198e.jpg",
layout_width = "20dp",
layout_height = "20dp",
layout_marginTop = "5dp",
layout_marginRight = "20dp",
},
{LinearLayout,
layout_width = "wrap_content",
orientation = "vertical",
gravity = "center_vertical",
layout_height = "wrap_content",
{
LinearLayout,
layout_width = "wrap_content",
layout_height = "wrap_content",
orientation = "horizontal",
gravity = "center",
title,
},
}},
{FrameLayout,
layout_width = "wrap_content",
orientation = "vertical",
layout_height = "wrap_content",
{LinearLayout,
id="webvlz_",
layout_height="280dp",
layout_width="260dp",
},
ckou
},
}
stitle2lz=particlelz()
local function invoke()
local ok
local RawX, RawY, x, y
mainLayoutParams = getLayoutParams()
floatWindow = luajava.loadlayout(floatWindow)
local function invoke2()
block('start')
for k = 1,#sview do
for i = 1,#sview[k] do
_ENV["layoutm"..k]:addView(sview[k][i])
end
end
webvlz_:addView(stitle2lz)
window:addView(floatWindow, mainLayoutParams)
block('end')
end
wvbgd()
local runnable = luajava.getRunnable(invoke2)
local handler = luajava.getHandler()
handler:post(runnable)
block('join')
control.onClick = 隐藏
exit.onClick = 隐藏
local isMove
motion.onTouch = hanshu
control.onTouch = hanshu
exit.onTouch = hanshu
end
invoke(swib1,swib2)
gg.setVisible(false)
luajava.setFloatingWindowHide(true)
切换(1)
end
function changan.line()
rest = luajava.loadlayout({
LinearLayout,
layout_width = 'fill_parent',
layout_height = "1dp",
background = "#C2CAD7",
})
return rest
end
function changan.line2()
rest = luajava.loadlayout({
LinearLayout,
layout_width = '180dp',
layout_height = "5dp",
layout_marginLeft="35dp",
background = "#0087FF",
layout_marginTop="10dp",
})
return rest
end
function getblue()
jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(6)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors({0xffffffff,0xffffffff})
jianbians:setStroke(4,"0xff0086F1")--边框宽度和颜色
return jianbians
end
function getShape3()
jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(10)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors({0xffffffff,0xffffffff})
jianbians:setStroke(4,"0x77000000")--边框宽度和颜色
return jianbians
end
function getShape5()
jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(4)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors({0xffffffff,0xff007AFF})
jianbians:setOrientation(GradientDrawable.Orientation.TL_BR)
jianbians:setStroke(2,"0x77000000")--边框宽度和颜色
return jianbians
end
function getShape()
jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(90)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors({0xff49C263,0xff49C263})
jianbians:setStroke(0,"0xffffffff")--边框宽度和颜色
return jianbians
end
function getShape2()
jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(10)
jianbians:setShape(GradientDrawable.RECTANGLE)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors({0xffffffff,0xffffffff})
jianbians:setStroke(8,"0xffffffff")--边框宽度和颜色
return jianbians
end
corbk = true
当前ui = 1
显示 = 0
beij = luajava.new(GradientDrawable)
beij:setCornerRadius(29)
beij:setGradientType(GradientDrawable.LINEAR_GRADIENT)
beij:setColors({0xffffffff,0x5FFFFFFF,})
beij:setStroke(1,"0xffffffff")--边框宽度和颜色
--beijw
beij2 = luajava.loadlayout({
GradientDrawable,
color = "#001E1C27",
cornerRadius = 10
})
function visi(tid,ttid)
local tview = luajava.getIdValue(tid)
local ttview = luajava.getIdValue(ttid)
if not tview then return 0 end
if tonumber(tostring(tview:getVisibility())) == 8.0 then
tview:setVisibility(View.VISIBLE)
ttview:setBackground(luajava.getBitmapDrawable("/sdcard/长安/图片/hsj"))
else
tview:setVisibility(View.GONE)
ttview:setBackground(luajava.getBitmapDrawable("/sdcard/长安/图片/sj"))
end
end
function changan.box2(views,boxi)
local tid = "box"..guid()
local ttid = tid.."678"
firadio = {
LinearLayout,
layout_width = '250dp',
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 = "28dp",
gravity = "center_vertical",
layout_marginTop = "2dp",
layout_marginBottom = "4dp",
onClick = function() visi(tid,ttid) end,
background = getSelector3(),
{
ImageView,
layout_marginLeft = "10dp",
id = luajava.newId(ttid),
background = "/sdcard/长安/图片/hsj",
layout_width = "20dp",
layout_height = "20dp",
layout_marginTop = "0dp",
},
{
TextView,text = views[1],
textSize = "16sp",
layout_marginLeft = "15dp",
layout_width = "100dp",
textColor = "#ffffff",
gravity = "left",
}} else
gg.alert("changan.box第一个参数必须是string") os.exit()
end
if boxi then boxi="visible" else boxi="gone" end
radios = {
LinearLayout,
layout_marginLeft = "0dp",
layout_marginRight = "0dp",
orientation = "vertical",
visibility = boxi,
id = luajava.newId(tid),
padding = "0dp",
layout_width = 'fill_parent',
}
for i = 2,#views do
radios[#radios+1] = views[i]
end
firadio[#firadio+1] = radios
return luajava.loadlayout(firadio)
end
function changan.box(views)
local tid = "box"..guid()
local ttid = tid.."6"
firadio = {
LinearLayout,
gravity = "center",
layout_width = 'fill_parent',
layout_height = "wrap_content",
orientation = "vertical",
}
if type(views[1]) == "string" or type(views[1]) == "number" then
if views[1]~="" then tsiz="14sp" else tsiz="0sp"end
firadio[#firadio+1] = {
LinearLayout,
layout_height = "wrap_content",
layout_width = "fill_parent",
{
TextView,
text = views[1],
textSize = tsiz,
layout_width = "match_parent",
textColor = "#000000",
gravity = "center",
}} else
end
radios = {
LinearLayout,
layout_marginLeft = "0dp",
layout_marginRight = "0dp",
orientation = "vertical",
padding = "0dp",
background = getj6(),
layout_width = 'fill_parent',
}
for i = 2,#views do
radios[#radios+1] = views[i]
if i~=#views then
radios[#radios+1] = changan.line()
end
end
firadio[#firadio+1] = radios
return luajava.loadlayout(firadio)
end
当前ui = 1
function 切换(x)
当前ui = x
luajava.runUiThread(function()
for i = 1,#stab do
_ENV["jm"..i]:setBackground(_ENV["jmb"..i])
_ENV["jm"..i.."t"]:setTextColor(0xff0086F1)
_ENV["layout"..i]:setVisibility(View.GONE)
end
_ENV["layout"..当前ui]:setVisibility(View.VISIBLE)
_ENV["jm"..当前ui]:setBackground(slcta)
_ENV["jm"..当前ui.."t"]:setTextColor(0xffffffff)
--YoYoImpl:with("FadeIn"):duration(200):playOn(_ENV["layout"..当前ui])
end)
end
function 隐藏()
luajava.runUiThread(function()
if tonumber(tostring(exit:getVisibility())) == 8.0 then
control:setVisibility(View.GONE)
chuangk:setVisibility(View.VISIBLE)
exit:setVisibility(View.VISIBLE)
title:setVisibility(View.VISIBLE)
cebian:setVisibility(View.VISIBLE)
webvlz_:setVisibility(View.VISIBLE)
mainLayoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
window:updateViewLayout(floatWindow, mainLayoutParams)
--YoYoImpl:with("FadeIn"):duration(300):playOn(title)
_ENV["layout"..当前ui]:setVisibility(View.VISIBLE)
YoYoImpl:with("FadeIn"):duration(200):playOn(floatWindow)
floatWindow:setBackground(beij)
else
control:setVisibility(View.VISIBLE)
mainLayoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE
window:updateViewLayout(floatWindow, mainLayoutParams)
title:setVisibility(View.GONE)
webvlz_:setVisibility(View.GONE)
cebian:setVisibility(View.GONE)
floatWindow:setBackground(beij2)
chuangk:setVisibility(View.GONE)
exit:setVisibility(View.GONE)
YoYoImpl:with("FadeIn"):duration(200):playOn(floatWindow)
_ENV["layout"..当前ui]:setVisibility(View.GONE)
end
end)
end
function 退出UI()
window:removeView(floatWindow)
luajava.setFloatingWindowHide(false)
bloc("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
chazhi={} chajv={}
function changan.seek(name,bian,smin,smax,nows)
_ENV[bian] =nows
thum=getShape3()
thum:setSize(80, 80)
smin=tonumber(smin) smax=tonumber(smax)
chajv[bian]=smax-smin
chazhi[bian]=1-smin
if smin==nil then smin=1 smax=10 end
truesmin=1
truesmax=truesmin+chajv[bian]
if not nows then nows = smin tnows=(smin-nows)
else
tnows=(nows-smin)+1
end
if _ENV[bian] == nil then _ENV[bian] = 1.0 end
if not name then name = "未设置" end
local names = name..guid()
rest = luajava.loadlayout({
LinearLayout,
layout_width = 'fill_parent',
layout_height = "36dp",
{
LinearLayout,
layout_width = 'fill_parent',
layout_hight = "fill_parent",
layout_marginTop = "5dp",
layout_marginBottom = "5dp",
gravity = "center_vertical",
--background = getShape(),
{
TextView,
gravity = "top",
textColor="#00A4FF",
textSize="16sp",
text = name..":"..nows,
id = luajava.newId(names),
layout_width = '100dp',
layout_marginLeft = "10dp",
layout_marginRight = "0dp",
},
{
SeekBar,
layout_width = '140dp',
id=luajava.newId(name.."seekbar"),
min = truesmin,
max = truesmax,
progress=tnows,
--paddingStart="0dp",
--paddingEnd="0dp",
progressDrawable={getShape5()},
thumb=thum,
progressHeight="2dp",
onSeekBarChange = {
onProgressChanged = function(SeekBar, var2, var3)
if not var3 then
return
end
local resultvar=tonumber(string.sub(var2,0,-3))-chazhi[bian]
luajava.runUiThread(function()
luajava.getIdValue(names):setText(name..":".. resultvar)
end)
_ENV[bian] = resultvar
end
}}
}})
return rest
end
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(4,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(8,tmp3)--边框宽度和颜色
return jianbians
end
checkbg=getShape(
45,
{0xffB8B8B8,0xffffffff},
4,0xffffffff)
checkbga=getShape(
45,
{0xff0086F1,0xffffffff},
4,0xff0086F1)
checkbg1=getShape2(
45,
{0xffffffff,0xffffffff},
4,0xffffffff)
checkbg2=getShape2(
45,
{0xffffffff,0xffffffff},
4,0xffffffff)
function 开关3(name,func1,func2,nid)
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
luajava.runUiThread(function()
luajava.getIdValue(nid.."k"):setVisibility(View.GONE)
luajava.getIdValue(nid.."g"):setVisibility(View.VISIBLE)
luajava.getIdValue(nid):setBackground(checkbga)
end)
_ENV[name] = "开"
vibra:vibrate(10)
pcall(func1)
else
luajava.runUiThread(function()
luajava.getIdValue(nid.."g"):setVisibility(View.GONE)
luajava.getIdValue(nid.."k"):setVisibility(View.VISIBLE)
luajava.getIdValue(nid):setBackground(checkbg)
end)
_ENV[name] = "关"
vibra:vibrate(10)
pcall(func2)
end
end
end
end
function changan.switch(name,func1,func2,yans)
nid = name..guid()
if not yans then yans="#00A4FF" end
local func = 开关3(name,func1,func2,nid)
if not name then name = "未设置" end
rest = luajava.loadlayout({
LinearLayout,
layout_width = 'fill_parent',
layout_height = "36dp",
gravity = "center_vertical",
{
LinearLayout,
layout_width = 'fill_parent',
layout_height = "35dp",
gravity = "center_vertical",
{
TextView,
gravity = "top",
text = name,
textColor=yans,
textSize="16sp",
layout_width = '170dp',
layout_marginLeft = "10dp",
layout_marginRight = "10dp",
},
{
FrameLayout,
id = luajava.newId(nid),
background = checkbg,
onClick = function() luajava.newThread(function() func() end):start() end,
layout_width = '43dp',
layout_height = 'wrap_content',
padding="1dp",
{
LinearLayout,
layout_gravity="left",
id = luajava.newId(nid.."k"),
background = checkbg1,
onClick = function() luajava.newThread(function() func() end):start() end,
layout_width = '21dp',
layout_height = '21dp',
},{
LinearLayout,
visibility="gone",
layout_gravity="right",
id = luajava.newId(nid.."g"),
background = checkbg2,
onClick = function() luajava.newThread(function() func() end):start() end,
layout_width = '21dp',
layout_height = '21dp',
}
}}
})
return rest
end
function changan.edit(name)
_ENV[name] = name..guid()
if not name then name = "点击输入文字" end
rest = luajava.loadlayout({
LinearLayout,
layout_width = 'fill_parent',
layout_height = "40dp",
{
FrameLayout,
layout_width = 'fill_parent',
layout_hight = "fill_parent",
gravity = "center",
--orientation="vertical",
{
EditText,
gravity = "top",
background = getShape(),
hint = name,
textColor="#383C3F",
gravity="center",
textSize="15sp",
--layout_marginBottom="-20dp",
id = luajava.newId(_ENV[name]),
layout_width = 'fill_parent',
},
{
LinearLayout,
layout_width = '220dp',
layout_height = "2dp",
layout_gravity="center",
background = "#0087FF",
layout_marginTop="10dp",
}
}
})
luajava.getIdValue(_ENV[name]):setHintTextColor(0xff787878)
return rest
end
function changan.radio(radio)
firadio = {
LinearLayout,
layout_width = 'fill_parent',
layout_hight = "fill_parent",
padding="10dp",
orientation = "vertical"
}
if type(radio[1]) == "string" or type(radio[1]) == "number" then
firadio[#firadio+1] = {
TextView,text = radio[1]} end
radios = {
RadioGroup,background = getShape(),
layout_width = 'fill_parent',
}
for i = 2,#radio do
radios[#radios+1] = {
RadioButton,
layout_width = 'fill_parent',
text = radio[i][1],
onClick = function() luajava.newThread(function() pcall(radio[i][2]) end):start() end,
}
end
firadio[#firadio+1] = radios
return luajava.loadlayout(firadio)
end
function changan.button(txt,func,yans)
if not yans then yans="#00A4FF" end
if not txt then txt = "未设置" end
return luajava.loadlayout(
{LinearLayout,
layout_width = 'fill_parent',
layout_hight = "30dp",
background=getSelector2(),
onClick=function() luajava.newThread(func):start() end,
{
LinearLayout,
layout_width = "fill_parent",
layout_hight="wrap_content",
gravity="center_horizontal",
layout_marginTop = "6dp",
layout_marginBottom = "6dp",
{
TextView,
textStyle="bold",
textColor=yans,
--id = luajava.newId(tid),
text = txt,
textSize="15sp",
layout_width = "wrap_content",
},
}})
end
function changan.text(txt,color,size)
if not txt then txt = "未设置文字" end
if not color then color = "#ffffff" end
if not size then size = "18sp" end
return luajava.loadlayout(
{
TextView,
text = txt,
textSize = size,
textColor = color,
layout_width = "wrap_content",
})
end
corb = true
function changan.setedit(name,txt)
txt = tostring(txt)
luajava.runUiThread(function()
luajava.getIdValue(_ENV[name]):setText(txt)
end)
end
function changan.getedit(name)
edit = tostring(luajava.getIdValue(_ENV[name]):getText())
return edit
end
function 开关(name,func1,func2)
if func1 == nil then func1 = "" end
if func2 == nil then func2 = "" end
if type(func1) == "function" then
return function()
namers = _ENV[name]
if namers ~= "开" then
_ENV[name] = "开"
pcall(func1)
else
_ENV[name] = "关"
pcall(func2)
end
end
end
end
---↓↓↓你的脚本放在这里,结尾菜单调用
-------------------配置------------------
function 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
gg.toast("修改"..#data.."条数据.修改成功")
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
gg.toast(":搜索0条数据.修改失败", false)
return false
end
else gg.toast("搜索0条数据.修改失败")
return false
end
end
function search(ss,lx,nc,dz1,dz2) gg.setVisible(false) if ss~=nil then if lx~=nil then if nc==nil then nc=32 end gg.setRanges(nc) if dz1==nil then dz1="-1" end if dz2==nil then dz1="0" end gg.searchNumber(ss,lx,false,536870912,dz1,dz2) sl=gg.getResultCount() if sl~=0 then sj=gg.getResults(sl) gg.toast("搜索到 "..sl.." 个结果") gg.clearResults() else gg.toast("未搜索到结果") end else gg.toast("无搜索值类型") end else gg.toast("无需搜索值") end 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 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 TL_TL(a,b,c,d,e)
local time = os.clock()
kv = {}
ks={}
if a == "libil2cpp.so" then
local aa = gg.getRangesList(a)[2].start
if aa == nil then
toMusic("模块未加载\n或选错游戏进程")
return
end
for i, k in ipairs(b) do
local v = aa + k
kv[#kv+1] = {address = v, flags = c, value = d, freeze = true}
ks[#ks+1] = {address = v+4, flags = c, value = -698416192, freeze = true}
end
else
local aa = gg.getRangesList(a)
if aa[1] == nil then
toMusic("模块未加载\n或选错游戏进程")
end
local l = gg.getRangesList(a)[1].start
for i, k in ipairs (b) do
local v = l + k
kv[#kv+1] = {address = v, flags = c, value = d, freeze = true}
end
end
gg.addListItems(kv)
gg.addListItems(ks)
gg.toast(e.."开启成功\n共耗时"..os.clock() - time.."秒\n共修改"..#b.."条值")
end
function readValue(address, flags) return gg.getValues({{address = address, flags = flags}})[1]["value"]end
ms = { }
function setvalue ( add , value , falgs , dj )
local WY = { } WY [ 1 ] = { } WY [ 1 ].address = add WY [ 1 ].value = value WY [ 1 ].flags = falgs
if dj == true then
WY [ 1 ].freeze = true gg.addListItems ( WY )
else
gg.setValues ( WY )
end
end
function ms.ss ( num , ty , nc )
local GGNUMBER_1 = num
local GGNUMBER_2 = ty
local GGNUMBER_3 = false
local GGNUMBER_4 = gg.SIGN_EQUAL
local GGNUMBER_5 = 0x3000000000
local GGNUMBER_6 = 0xFFFFFFFFFF
local GGNUMBER_7 = 0
gg.clearResults ( )
gg.setRanges ( nc )
gg.searchNumber ( GGNUMBER_1 , GGNUMBER_2 , GGNUMBER_3 , GGNUMBER_4 , GGNUMBER_5 , GGNUMBER_6 , GGNUMBER_7 )
Result = gg.getResults ( gg.getResultCount ( ) )
end
function ms.py ( num , py , ty )
if ( Result and # Result ~= 0 ) then
t = { }
for i , v in ipairs ( Result ) do
t [ i ] = { } t [ i ].address = v.address + py t [ i ].flags = ty
end
t = gg.getValues ( t )
for i , v in ipairs ( t ) do
if v.value ~= num then
Result [ i ] = nil
end
end
local MS = { }
for i , v in pairs ( Result ) do
MS [ # MS + 1 ] = v
end
Result = MS
end
end
function ms.bc ( )
data = { }
if Result == nil or # Result == 0 then
toMusic ( "开启失败" )
else
for i , v in pairs ( Result ) do
data [ # data + 1 ] = v.address
end
end
Result = nil
end
function ms.edit ( nn , off , ty , dj )
if ( Result ) then
ms.bc ( )
end
if # data > 0 then
for i , v in ipairs ( data ) do
setvalue ( v + off , nn , ty , dj or false )
end
gg.toast ( Name.."成功" )
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 xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) if gg.searchNumber(qmnb[3]["value"],qmnb[3]["type"],false,gg.SIGN_EQUAL,0,-1)~=true then gg.searchAddress(qmnb[3]["value"],-1,qmnb[3]["type"]) end if gg.getResultCount()==0 then gg.toast(qmnb[2]["name"].."开启失败")return end szxx=gg.getResults(gg.getResultCount()) szpd={} a=0 for i=4,#qmnb do for s=1,#szxx do if szpd[s]~="false" then if gg.getValues({{address=szxx[s].address+qmnb[i]["offset"],flags=qmnb[i]["type"]}})[1].value+0~=qmnb[i]["lv"]then szpd[s]="false" a=a+1 end end end end if a==#szxx then gg.toast(qmnb[2]["name"].."开启失败")return end b=0 t={} for x=1,#qmxg do if qmxg[x]["freeze"]==true then a=1 end for i=1,#szxx do if szpd[i]==nil then b=b+1 table.insert(t,{address=szxx[i].address+qmxg[x]["offset"],flags=qmxg[x]["type"],freeze=qmxg[x]["freeze"],value=qmxg[x]["value"]}) end end end gg.setValues(t) gg.addListItems(t) gg.clearResults() if a~=1 then gg.clearList()else a=nil end gg.toast(qmnb[2]["name"].."开启成功,共修改了"..b.."条数据") end
qmnb = function(daarr)
local array = {}
for i = 1, #daarr["搜索数组"] do
local data = {["lv"] =daarr["搜索数组"][i][1], ["offset"] = daarr["搜索数组"][i][2], ["type"] = daarr["搜索类型"]}
table.insert(array, i, data)
end
local isok, data = app.memorysearch(daarr["搜索内存"], array)
if isok then
for i = 1, #data do
for x = 1, #daarr["修改数组"] do
app.memorywrite(data[i] + daarr["修改数组"][x][2], daarr["搜索类型"], daarr["修改数组"][x][1])
end
end
gg.toast(daarr["功能名称"] .. "共修改" .. #data * #daarr["修改数组"] .. "条数据")
else
gg.toast(daarr["功能名称"] .. "开启失败")
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(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 SOGSPY_ST(HDZ,DYZ)
if HDZ >= DYZ then
py=string.format("0x%X",HDZ-DYZ)
return tostring(string.format("-0x%X",py))
else
py=string.format("0x%X",DYZ-HDZ)
return tostring(string.format("0x%X",py))
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
else
-- addr[1].value = addr[1].value & 0xFFFFFFFFFF
end
addr = addr[1].value + offset[i]
end
return addr
end
end
function gg.edits(addr, Table, name)
if not addr then
gg.toast('修改失败, 可能是模块不存在')
return
end
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 SO_PT(FUNCTIONADD,TYPE,VALUE)
local SOMOD=gg.getRangesList("il2cpp.so")
if SOMOD[2]==nil then toMusic("开启失败\n━━━━━━━━━━━━━━━\n错误原因:未找到相关内存\n解决方法:请重新选择游戏进程\n━━━━━━━━━━━━━━━") else
gg.setValues({{address=SOMOD[2].start+FUNCTIONADD,flags=TYPE,value=VALUE}})
gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+4,flags=TYPE,value="~A8 RET"}})
end
end
function txl(zhi,lx,xg,dj) if dj == true then gg.addListItems({{address=zhi,flags=lx,value=xg,freeze=true}}) else gg.setValues({{address=zhi,flags=lx,value=xg}}) end end
function SO_PT(FUNCTIONADD,TYPE,VALUE)
local SOMOD=gg.getRangesList("il2cpp.so")
if SOMOD[2]==nil then toMusic("开启失败\n━━━━━━━━━━━━━━━\n错误原因:未找到相关内存\n解决方法:请重新选择游戏进程\n━━━━━━━━━━━━━━━") else
gg.setValues({{address=SOMOD[2].start+FUNCTIONADD,flags=TYPE,value=VALUE}})
gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+4,flags=TYPE,value="~A8 RET"}})
end
end
-------------------配置------------------
---↑↑↑你的脚本放在这里,下面菜单调用
stitle = "小可乐范围内部版"--←大标题
stab = {--←菜单导航栏
"主页",
"范围",
"设置",
--"功能4",--可自行拓展,需要对应下边菜单配置
}
xfcpic = "https://img11.360buyimg.com/ddimg/jfs/t1/424341/39/18684/15601/69f352e8F7dffe323/0015123122178734.jpg"
--↑悬浮窗链接或路径↑
changan.menu(
{
{----1
changan.text('作者:恒秋','#018CF0','15sp',true),
changan.text('小可乐范围内部版','#018CF0','15sp',true),
changan.text('TG:XKLhookNB','#018CF0','15sp',true),
changan.button("选择进程",
function ()
gg.setConfig("冻结间隔", 0)
string.toMusic('请选择游戏进程')
gg.setProcessX()
end),
changan.switch("防标记", function()
--过标记① 原值:1033081774
so=gg.getRangesList('libgcloud.so')[1].start
py=0x487128 setvalue(so+py,4,-698416192)
--过标记②原值:16843522
so=gg.getRangesList('libgcloud.so')[1].start
py=0x487CC4 setvalue(so+py,4,-698416192)
gg.setConfig("冻结间隔", 0)
gg.setConfig("快速冻结", 1)
string.toMusic("开启成功")
end),
changan.switch("七图加速", function()
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0xE8},"修改","0",4,"灵魂")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x208,0x220},"冻结","136525.0",16,"x")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x208,0x224},"冻结","163002.0",16,"y")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x208,0x228},"冻结","5937.0",16,"z")
gg.sleep(1700)
--[1].地址:7A22614E68 数值:506149161
so=gg.getRangesList('libUE4.so')[1].start--冻结加速
py=0x63602C4
setvalue(so+py,4,-721215457)
--[2].地址:7A29039AEC 数值:-117270918
so=gg.getRangesList('libUE4.so')[1].start--锁地皮
py=0xCAF4D58
setvalue(so+py,4,-721215457)
gg.sleep(700)
local t = {"libUE4.so:bss", "Cb"}
local tt = {0x559B70,0x30,0x4B8,0x208,0x220}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, freeze = false}})
local t = {"libUE4.so:bss", "Cb"}
local tt = {0x559B70,0x30,0x4B8,0x208,0x224}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, freeze = false}})
local t = {"libUE4.so:bss", "Cb"}
local tt = {0x559B70,0x30,0x4B8,0x208,0x228}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, freeze = false}})
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0xE8},"修改","167838216",4,"灵魂")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x218},"冻结","150",16,"上下坡防拉")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x250},"修改","999",16,"8")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x268},"修改","4000",16,"8192")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x28C},"冻结","9999",16,"0.05")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x610},"修改","0",16,"240")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x2b8},"冻结","-1",16,"13860")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0xe4},"修改","99999",16,"防拉原1")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x27C},"冻结","999999",16,"2048防拉")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x450,0x4C0,0x200},"修改","0",16,"60000防拉")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x270},"冻结","8",16,"2")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x288},"修改","999999",16,"0")
OP=gg.prompt({'自改加速60帧0.003-0.0035 90帧0.0025-0.0027 120帧0.0015-0.002'},{[1]='0.0026'},{[1]='number'})
if OP == nil or OP[1] == '' or OP[1] == '0' then gg.toast("取消")
else
local t = {"libUE4.so:bss", "Cb"}
local tt = {0x559B70,0x30,0x4B8,0x518,0x364}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = OP[1], freeze = true}})
end
DM="开启成功"--语音播报内容自己改
gg.playMusic("https://fanyi.baidu.com/gettts?lan=zh&text="..DM.."&spd=5&source=wise") --百度翻译
end),
changan.switch("自改高跳", function()
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x2d08},"修改","34",16,"50")
--LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0xE4},"冻结","0.9",16,"慢动作")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x68},"冻结","0.0001",16,"趴下快起")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x64},"冻结","0.001",16,"趴下快起")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x19A8},"冻结","0.001",16,"老谭64位国体秒趴")
--LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x448},"冻结","54148",4,"卡脚16896")
--LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x21C},"修改","4500",16,"高跳")
--LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x214},"修改","6",16,"重力")
--LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x1168},"修改","4",16,"空中移速")
-- 弹窗获取自定义数值,修正参数+容错判断
local h = gg.prompt(
{"超级高跳6000-8000", "防摔自改4~9推荐改8.5", "趴下移速自改3~5推荐改4.5"},
{6000, 6.6, 7.5}, -- 默认值改为数值,更规范
{"text", "text", "text"},
{true, true, true} -- 修正:布尔值true,不是字符串
)
-- 容错:用户取消弹窗则直接退出
if not h then
gg.toast("已取消修改")
return
end
-- 链式冻结修改(LSQ_Chain需你提前定义)
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x21C},"冻结",h[1],16,"443")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x214},"冻结",h[2],16,"重力")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x1168},"冻结",h[3],16,"微")
string.toMusic('开启成功')
end),
changan.switch("趴下开镜", function()
LSQ_Chain({'libUE4.so:bss','Cb'},{0x558CF0,0x30,0x4B8,0x1058},"冻结","8",4,"8 趴下开火")
DM="开启成功"--语音播报内容自己改
gg.playMusic("https://fanyi.baidu.com/gettts?lan=zh&text="..DM.."&spd=5&source=wise") --百度翻译
end),
changan.switch("一建关闭加速过标记", function()
so=gg.getRangesList('libUE4.so')[1].start--锁地皮
py=0xCAF4D58
setvalue(so+py,4,-117270918)
--[1].地址:7A22614E68 数值:506149161
so=gg.getRangesList('libUE4.so')[1].start--冻结加速
py=0x63602C4
setvalue(so+py,4,506149161)
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x364},"冻结","0.1",16,"0.1加速")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x218},"冻结","45",16,"上下坡防拉")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x250},"修改","8",16,"8")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x268},"修改","8192",16,"8192")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x28C},"冻结","0.05",16,"0.05")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x610},"修改","240",16,"240")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x2b8},"冻结","13860",4,"13860")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0xe4},"修改","1",16,"防拉原1")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x27C},"冻结","2048",16,"2048防拉")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x450,0x4C0,0x200},"修改","60000",16,"60000防拉")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x270},"冻结","2",16,"2")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x288},"修改","0",16,"0")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x2d08},"冻结","50",16,"50")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x68},"冻结","0.1",16,"趴下快起")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x64},"冻结","0.1",16,"趴下快起")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x19A8},"冻结","0.1",16,"天仔")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x21C},"冻结","443",16,"高跳")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x214},"冻结","1",16,"重力")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x1168},"冻结","1",16,"空中移速")
gg.clearList() -- 清空搜索
Unfreeze()-- 解除冻结
--过标记① 原值:1033081774
so=gg.getRangesList('libgcloud.so')[1].start
py=0x487128 setvalue(so+py,4,1033081774)
--过标记②原值:16843522
so=gg.getRangesList('libgcloud.so')[1].start
py=0x487CC4 setvalue(so+py,4,16843522)
end),
},{--范围
changan.text("小可乐&防卡伤","#161616","18sp"),
changan.switch("防卡伤[大厅开启]", function()
gg.searchNumber("-3.77830899e28;-3.74440972e28;-3.71834013e28;-1.7334334e28", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0)
gg.refineNumber("-3.77830899e28", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0)
revert = gg.getResults(999999, nil, nil, nil, nil, nil, nil, nil, nil)
gg.editAll("0", gg.TYPE_FLOAT)
--
batchSetValues("libUE4.so", {115847668}, 16, -1.1935767235290156E-24)
string.toMusic('防卡伤开启成功')
end),
changan.text("小可乐&范围","#161616","18sp"),
changan.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
gg.clearResults()
gg.setRanges(gg.REGION_ANONYMOUS)
gg.searchNumber("15.75", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
gg.searchNumber("15.75", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
gg.getResults(100)
gg.editAll("110", 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.getResults(56)
gg.editAll("-1339", gg.TYPE_FLOAT)
qmnb =
{
{["memory"] = 32},
{["name"] = "不减伤头部范围开启成功"},
{["value"] = 4719772412750681353, ["type"] = 32},
{["lv"] = 4742290408720039936, ["offset"] = 4, ["type"] = 32},
}
qmxg =
{
{["value"] = -10, ["offset"] = 8, ["type"] = 16},
}
xqmnb(qmnb)
qmnb =
{
{["memory"] = 32},
{["name"] = "不减伤头部范围开启成功"},
{["value"] = -4417614866316724128, ["type"] = 32},
{["lv"] = 4724276012378061487, ["offset"] = 4, ["type"] = 32},
}
qmxg =
{
{["value"] = -10, ["offset"] = 12, ["type"] = 16},
}
xqmnb(qmnb)
qmnb =
{
{["memory"] = 32},
{["name"] = "开启成功"},
{["value"] = -4416487068034336677, ["type"] = 32},
{["lv"] = 4724276012378324073, ["offset"] = 4, ["type"] = 32},
}
qmxg =
{
{["value"] = -10, ["offset"] = 8, ["type"] = 16},
{["value"] = -10, ["offset"] = 12, ["type"] = 16},
}
xqmnb(qmnb)
string.toMusic('不减伤范围开启成功')
end),
},{----7
changan.text("小可乐范围内部版","#000000","17sp"),
changan.switch("退出UI",退出UI),
}
})
bloc = luajava.getBlock()
bloc('join')
luajava.setFloatingWindowHide(false)