local json = json local g = {} g.file = gg.getFile() g.sel = nil gqlb={"请先搜索歌曲",} idb={"1010"} menu,gc=1,nil g.config = gg.getFile():gsub("%lua$", "").."cfg" function bei() g.data = loadfile("-- WSG PRO 1.0.9(109)\n"..g.config) if g.data ~= nil then g.sel = g.data() g.data = nil end if g.sel == nil then g.sel = {"","20"} end end bei() --搜索歌曲 function start(name,sl) fw=gg.makeRequest("http://music.163.com/api/search/get?s="..name.."&type=1&offset=0&total=true&limit="..sl) return fw end --歌词 --播放音乐 function play(id,name) gg.toast("正在播放音乐:"..name,true) gg.playMusic("http://music.163.com/song/media/outer/url?id="..id..".mp3") end --停止播放 function stop() gg.toast("正在停止音乐") for i=1,100 do gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") end end ---- function Play(gqlb,idb) menu = gg.choice(gqlb,nil,ts) if menu == nil then XGCK =-1 else menu=gg.choice({"播放歌曲","下载歌曲"},nil,"歌曲:"..gqlb[menu]) if menu == nil then end if menu == 1 then play(idb[menu],gqlb[menu]) end if menu == 2 then local WQ=gg.makeRequest("http://music.163.com/song/media/outer/url?id="..idb[menu]..".mp3").content local WQ1=gg.getFile():gsub("[^/]+$","")..gqlb[menu]..".mp3" io.open(WQ1,"w"):write(WQ) gg.alert("王权:\n\n音乐已成功下载位置:\n\n"..WQ1) end XGCK=-1 end end function zjson(jsonr) local str = jsonr -- 匹配Json Key的正则表达式 local pattern = "\"[%w]+\":" string.gsub(str, pattern, function(v) if string.find(str, v) then str = string.gsub(str, v, string.gsub(v, "\"", "")) end end) str = string.gsub(str, ":", "=") str = string.gsub(str, "%[", "{") str = string.gsub(str, "%]", "}") local data = "-- WSG PRO 1.0.9(109)\nreturn " .. str local res = load(data)() return res end function json(con) res=zjson(con) zd=res.result.songCount pd=go3-zd if pd <= 0 then else go3=zd end ts="《"..go1.."》找到"..zd.."首歌曲,当前显示"..go3.."首" gqlb={} idb={} for i=1,go3 do if res.result.songs[i] then gqlb[i]=res.result.songs[i].name idb[i]=res.result.songs[i].id end end --print(idb) end function readWrite(Search,Get,Type,Range,Name) gg.clearResults() gg.setRanges(Range) gg.setVisible(false) if Search[1][1]~=false then gg.searchAddress(Search[1][1],0xFFFFFFFF,Search[1][4] or Type,gg.SIGN_EQUAL,Search[1][5] or 1,Search[1][6] or -1) end gg.searchNumber(Search[1][2],Search[1][4] or Type,false,gg.SIGN_EQUAL,Search[1][5] or 1,Search[1][6] or -1) local count=gg.getResultCount() local result=gg.getResults(count) gg.clearResults() local data={} local base=Search[1][3] if (count > 0) then for i,v in ipairs(result) do v.isUseful=true end for k=2,#Search do local tmp={} local offset=Search[k][2] - base local num=Search[k][1] for i,v in ipairs(result) do tmp[#tmp+1]={} tmp[#tmp].address=v.address+offset tmp[#tmp].flags=Search[k][3] or Type end tmp=gg.getValues(tmp) for i,v in ipairs(tmp) do if v.flags==16 or v.flags==64 then values=tostring(v.value):sub(1,6) num=tostring(num):sub(1,6) else values=v.value end if tostring(values)~=tostring(num) then result[i].isUseful=false end end end for i,v in ipairs(result) do if (v.isUseful) then data[#data+1]=v.address end end if (#data > 0) then local t,t_={},{} local base=Search[1][3] for i=1,#data do for k,w in ipairs(Get) do offset=w[2] - base if w[1]==false then t_[#t_+1]={} t_[#t_].address=data[i]+offset t_[#t_].flags=Type th_=(th_) and th_+1 or 1 else t[#t+1]={} t[#t].address=data[i]+offset t[#t].flags=w[3] or Type t[#t].value=w[1] tg_=(tg_) and tg_+1 or 1 if (w[4]==true) then local item={} item[#item+1]=t[#t] item[#item].freeze=w[4] gg.addListItems(item) end end end end tg=(tg_) and "\n已修改"..tg_.."条数据" or "" th=(th_) and "\n已获取"..th_.."条数据" or "" gg.setValues(t) t_=gg.getValues(t_) gg.loadResults(t_) gg.toast("\n"..Name.."搜索成功!\n偏移到"..#data.."条数据"..tg..th) tg_,th_=nil,nil else gg.toast("\n"..Name.."开启失败",false) return false end else gg.toast(Name.."开启失败") return false end end function fastsearch(search, write,we) gg.setVisible(false) gg.clearResults() gg.setRanges(search[1][3]) gg.searchNumber(search[1][1], search[1][2]) if gg.getResultsCount() == 0 then if we~=nil then gg.toast(we.." -> 主特征码不存在") end return false else local result = gg.getResults(gg.getResultsCount()) gg.clearResults() for i = 2, #search do local mtp = {} for w, r in ipairs(result) do mtp[#mtp + 1] = { address = r.address + search[i][2], flags = search[i][3] } end mtp = gg.getValues(mtp) local hook = {} for w, r in ipairs(mtp) do if r.value == search[i][1] then hook[#hook + 1] = result[w] end end result = hook end if #result > 0 then local tb = {{}, {}} for i, v in ipairs(result) do --- 遍历每个结果 for _, vv in ipairs(write) do local p = {address = v.address + vv[2], flags = vv[3], value = vv[1], freeze = vv[4]} if vv[4] then --- true 就是冻结 table.insert(tb[2], p) else table.insert(tb[1], p) end end end gg.addListItems(tb[2]) gg.setValues(tb[1]) if we~=nil then gg.toast(we.." -> 共修改" .. (#tb[1] + #tb[2]) .. "条结果") end else if we~=nil then gg.toast(we.." -> 开启失败") end end 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 xyss(tzb,xgb,gnlx) gg.setRanges(tzb[1][3]) if tzb[1][4]==nil or tzb[1][5]==nil then tzb[1][4]=0 tzb[1][5]=-1 end if tzb[1]["name"]==nil then tzb[1]["name"]="" end gg.clearResults() local time = os.clock() gg.searchNumber(tzb[1][1],tzb[1][2], false, gg.SIGN_EQUAL, tzb[1][4], tzb[1][5]) local k=gg.getResults(gg.getResultsCount()) if #k==0 then gg.toast("开启失败") return end gg.clearResults() local writetable={{},{}} for a=2,#tzb do local b,hook={},{} for i,v in ipairs(k) do b[#b+1]={address=v.address+tzb[a][3],flags=tzb[a][2]} end b=gg.getValues(b) for x,y in ipairs(b) do if y.value==tzb[a][1] then hook[#hook+1]=k[x] end end k=hook end if #k>0 then for i=1,#k do for v=1,#xgb do if xgb[v][4] then writetable[1][#writetable[1]+1]={address=k[i].address+xgb[v][3],flags=xgb[v][2],value=xgb[v][1],freeze=true} else writetable[2][#writetable[2]+1]={address=k[i].address+xgb[v][3],flags=xgb[v][2],value=xgb[v][1]} end end end if gnlx=="修改" then gg.setValues(writetable[2]) gg.addListItems(writetable[1]) gg.toast(tzb[1]["name"].."解析成功\n共修改"..#writetable[2]..",冻结"..#writetable[1].."个值\n耗时:"..os.clock()-time.."秒") elseif gnlx=="载入" then gg.loadResults(writetable[2]) gg.toast(tzb[1]["name"].."解析成功\n共载入"..#writetable[2].."个值\n耗时:"..os.clock()-time.."秒") end else gg.toast(tzb[1]["name"].."开启失败") end end function xqmnb(Search, Modification) gg.clearResults() gg.setRanges(Search[1].memory) gg.searchNumber(Search[3].value, Search[3].type, false, gg.SIGN_EQUAL, 0, -1) if gg.getResultCount() == 0 then gg.toast(Search[2].name .. '开启失败') return false end local Result = gg.getResults(gg.getResultCount()) local sum for index = 4, #Search do sum = 0 for i = 1, #Result do local value = gg.getValues({{address = Result[i].address + Search[index].offset, flags = Search[index].type}})[1].value if value ~= Search[index].lv then Result[i].Usable = true sum = sum + 1 end end if sum == #Result then gg.toast(Search[2].name .. '开启失败') return false end end local Data, Freeze, Freezes = {}, {}, 0 sum = 0 for _, value in ipairs(Modification) do for i = 1, #Result do if not Result[i].Usable then local Value = { address = Result[i].address + value.offset, flags = value.type, value = value.value, freeze = value.freeze or false } if value.freeze then Freeze[#Freeze + 1] = Value Freezes = Freezes + 1 else Data[#Data + 1] = Value end sum = sum + 1 end end end if #Data > 0 then gg.setValues(Data) end if #Freeze > 0 then gg.addListItems(Freeze) end if Freezes == 0 then gg.toast(Search[2].name .. '开启成功,共修改' .. sum .. '条数据') else gg.toast(Search[2].name .. '开启成功,共修改' .. sum .. '条数据,冻结' .. Freezes .. '条数据') end gg.clearResults() return true end -- ========== 主菜单 ========== function Main() menu = gg.choice({ '武器区域', '美化区域', '传棺椁', '除雾显馆', '视频音乐', '退出脚本'}, 2018,'公益超超自然摸金辅助无群') if menu == 1 then A() end if menu == 2 then B() end if menu == 3 then C() end if menu == 4 then D() end if menu == 5 then V() end if menu == 6 then Exit() end XGCK=-1 end function A() menu1 = gg.multiChoice({ '选择进程', '防闪过检', '桃木剑范围', '桃木剑去除后摇', '折扇范围', '铲子后摇加范围', '自定义范围拾取', '枪械无后', '枪械自瞄', '折扇后摇', '返回上一页'}, nil,'游戏设置') if menu1 == nil then else if menu1[1] == true then a0() end if menu1[2] == true then a1() end if menu1[3] == true then a2() end if menu1[4] == true then a3() end if menu1[5] == true then a4() end if menu1[6] == true then a5() end if menu1[7] == true then a6() end if menu1[8] == true then a7() end if menu1[9] == true then a8() end if menu1[10] == true then a9() end if menu1[11] == true then HOME() end end GLWW=-1 end function B() menu1 = gg.multiChoice({ '遗失的童话', '青丘之梦', '叶罗丽', '爱丽丝血色玛丽', '冰公主', '圣光之谕', '返回上一页'}, nil,'角色美化') if menu1 == nil then else if menu1[1] == true then b1() end if menu1[2] == true then b2() end if menu1[3] == true then b3() end if menu1[4] == true then b4() end if menu1[5] == true then b5() end if menu1[6] == true then b6() end if menu1[7] == true then HOME() end end GLWW=-1 end function C() menu1 = gg.multiChoice({ '传送棺椁', '返回上一页'}, nil,'已无效果') if menu1 == nil then else if menu1[1] == true then c1() end if menu1[2] == true then HOME() end end GLWW=-1 end function D() menu1 = gg.multiChoice({ '局内亮度', '地图除雾', '地图显管', '去磁场', '备用全局除雾', '秦岭显馆', '备用夜视', '返回上一页'}, nil,'这里也可以随便填') if menu1 == nil then else if menu1[1] == true then d1() end if menu1[2] == true then d2() end if menu1[3] == true then d3() end if menu1[4] == true then d4() end if menu1[5] == true then d5() end if menu1[6] == true then d6() end if menu1[7] == true then d7() end if menu1[8] == true then HOME() end end GLWW=-1 end -- ========== 视频音乐区域(保留视频 + 新增音乐搜索) ========== function V() menu1 = gg.choice({ "搜索音乐", "启动视频音乐", "启动美女视频", "启动白子", "启动换轴视频音乐", "启动洪荒视频音乐", "启动2洪荒视频音乐", "启我动星野视频", "启动白子2", "启动鸡哥视频", "启动档案视频", "停止音乐播放", "返回上一页" }, nil, "视频音乐区域") if menu1 == nil then GLWW = -1 return end if menu1 == 1 then -- 进入音乐搜索子菜单 MusicSubMenu() elseif menu1 == 2 then v1() elseif menu1 == 3 then v2() elseif menu1 == 4 then v3() elseif menu1 == 5 then v4() elseif menu1 == 6 then v5() elseif menu1 == 7 then v6() elseif menu1 == 8 then v7() elseif menu1 == 9 then v8() elseif menu1 == 10 then v9() elseif menu1 == 11 then v10() elseif menu1 == 12 then stop() elseif menu1 == 13 then HOME() end GLWW = -1 end function a0() gg.clearList() gg.clearResults() gg.setProcessX() end function a1() fastsearch({{"h 50 72 6F 63 65 73 73 49 64",1,4}},{{0,0,1,true}},"绕过检查") local addr = readPointer("libtersafe2.so", {3866432}, 1) gg.edits(addr, {{"~A8 B [PC,#0x0]", 4, 0, false}}) local addr = readPointer("libtersafe2.so", {3866444}, 1) gg.edits(addr, {{"~A8 B [PC,#0x0]", 4, 0, false}}) end function a2() local qmnb= { {['memory']=32}, {['name']='桃木剑范围伤害'}, {['value']=0.029999999329447746, ['type']=16}, {['lv']=1.5,['offset']=-16, ['type']=16}, {['lv']=0.5,['offset']=-12, ['type']=16}, {['lv']=0.30000001192092896,['offset']=-8, ['type']=16}, {['lv']=2.0,['offset']=4, ['type']=16}, } local qmxg= { {['value']=7,['offset']=-12,['type']=16}, {['value']=5,['offset']=0,['type']=16}, } xqmnb(qmnb,qmxg) end function a3() local qmnb= { {['memory']=32}, {['name']='桃木剑'}, {['value']=8.224729605810946E19, ['type']=16}, {['lv']=4081010934505107419,['offset']=-100, ['type']=32}, {['lv']=8.224729605810946E19,['offset']=0, ['type']=16}, } local qmxg= { {['value']=0.01,['offset']=-468,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) end function a4() local qmnb= { {['memory']=32}, {['name']='折扇范围'}, {['value']=4787326405004230656, ['type']=32}, {['lv']=4787326405004230656,['offset']=0, ['type']=32}, {['lv']=1114636288,['offset']=4, ['type']=32}, {['lv']=1065353216,['offset']=72, ['type']=32}, } local qmxg= { {['value']=6,['offset']=24,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) end function a5() ShuJu = { ["内存值"] = 32, ["主特征"] = {["值"] = 19850149888.0, ["类型"] = 16, ["偏移"] = 1036}, ["副特征"] = { {["值"] = 19850149888.0, ["类型"] = 16, ["偏移"] = -3092}, {["值"] = -0.3969131410121918, ["类型"] = 16, ["偏移"] = -32}, {["值"] = 3.6899445056915283, ["类型"] = 16, ["偏移"] = -3196}, {["值"] = -46.0, ["类型"] = 16, ["偏移"] = 4216} }, ["操作值"] = { {["值"] = 9.99999968e37, ["类型"] = 16, ["增量"] = 0, ["操作"] = "修改"}, {["值"] = 0.1, ["类型"] = 16, ["增量"] = -396, ["操作"] = "修改"}, {["值"] = 0.1, ["类型"] = 16, ["增量"] = -212, ["操作"] = "修改"} } } end function a6() gg.alert("作者声明;此功能建议不开") local 修改值 = tonumber(gg.prompt({"输入修改值:"},{"1"},{"number"})[1]) local qmnb= { {['memory']=32}, {['name']='拾取范围'}, {['value']=9288837440208902, ['type']=32}, {['lv']=9288837440208902,['offset']=0, ['type']=32}, {['lv']=1077936128,['offset']=156, ['type']=32}, } local qmxg= { {['value']=修改值,['offset']=8,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) end function a7() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("0.800000011920929;1.0;0.5;0.8999999761581421;1.2000000476837158;1.7999999523162842", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("0.5", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(1000) gg.editAll("0", gg.TYPE_FLOAT) gg.alert("枪械无后开启成功!") end function a8() local function xqmnb_silent(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 false 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 false end end local Data, Freeze, Freezes = {}, {}, 0 sum = 0 for _, value in ipairs(Modification) do for i = 1, #Result do if not Result[i].Usable then local Value = { address = Result[i].address + value.offset, flags = value.type, value = value.value, freeze = value.freeze } if value.freeze then Freeze[#Freeze + 1] = Value Freezes = Freezes + 1 else Data[#Data + 1] = Value end sum = sum + 1 end end end gg.setValues(Data) if #Freeze > 0 then gg.addListItems(Freeze) end if Freezes == 0 then gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据') else gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据') end gg.clearResults() return true end local qmnb = { {['memory'] = 32}, {['name'] = '枪械'}, {['value'] = 66.0, ['type'] = 16}, {['lv'] = 55.0, ['offset'] = -4, ['type'] = 16}, {['lv'] = 56.0, ['offset'] = 20, ['type'] = 16}, {['lv'] = -56.0, ['offset'] = 24, ['type'] = 16}, } local qmxg = { {['value'] = 4.623762130737305, ['offset'] = 212, ['type'] = 16, ['freeze'] = true}, {['value'] = -371.9354553222656, ['offset'] = 216, ['type'] = 16, ['freeze'] = true}, } local success = xqmnb_silent(qmnb, qmxg) end function b1() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000002", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000259", gg.TYPE_DWORD) gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000005", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000260", gg.TYPE_DWORD) gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000008", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000258", gg.TYPE_DWORD) gg.toast("开启成功") end function a9() local qmnb= { {['memory']=32}, {['name']='折扇后摇'}, {['value']=4575657221408425104, ['type']=32}, {['lv']=1028443341,['offset']=-592, ['type']=32}, {['lv']=4575657221408425104,['offset']=0, ['type']=32}, } local qmxg= { {['value']=0.25,['offset']=-496,['type']=16,['freeze']=true}, {['value']=0.3,['offset']=-180,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) end function b2() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000002", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000218", gg.TYPE_DWORD) gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000005", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000229", gg.TYPE_DWORD) gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000008", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000210", gg.TYPE_DWORD) gg.toast("开启成功") end function b3() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000002", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000285", gg.TYPE_DWORD) gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000005", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000286", gg.TYPE_DWORD) gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000008", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000287", gg.TYPE_DWORD) gg.toast("开启成功") end function b4() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000010", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000233", gg.TYPE_DWORD) gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000011", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000234", gg.TYPE_DWORD) gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000012", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000232", gg.TYPE_DWORD) gg.toast("开启成功") end function b5() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000010", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000278", gg.TYPE_DWORD) gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000011", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000279", gg.TYPE_DWORD) gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000012", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000280", gg.TYPE_DWORD) gg.toast("开启成功") end function b6() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000701", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000275", gg.TYPE_DWORD) gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000702", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000276", gg.TYPE_DWORD) gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("20000703", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(500) gg.editAll("20000274", gg.TYPE_DWORD) gg.alert('已切换') end function c1() -- Zero function getDword(add) if not add or add == 0 then return 0 end local r = gg.getValues({{address=add,flags=4}}) if r and r[1] then return r[1].value or 0 end return 0 end function getFloat(add) if not add or add == 0 then return 0 end local r = gg.getValues({{address=add,flags=16}}) if r and r[1] then return r[1].value or 0 end return 0 end function getQword(add) if not add or add == 0 then return 0 end local r = gg.getValues({{address=add,flags=32}}) if r and r[1] then return r[1].value or 0 end return 0 end function getPointer(add, flags) flags = flags or (gg.getTargetInfo().x64 and 32 or 4) if gg.getTargetInfo().x64 then local r = gg.getValues({{address=add,flags=flags}}) if r and r[1] then return r[1].value or 0 end return 0 else if flags == 32 then flags = 4 end local r = gg.getValues({{address=add,flags=flags}}) if r and r[1] then return (r[1].value or 0) & 0xFFFFFFFF end return 0 end end function ReadUTF16String(addr) if not addr or addr == 0 then return "" end local length = getDword(addr - 4) if not length or length <= 0 or length > 100 then return "" end local str = '' for i = 1, length do local val = getPointer(addr + 0x2*(i-1), 2) if val and val ~= 0 then str = str .. utf8.char(val & 0xFFFF) end end return str end -- ========== 全局变量 ========== Position = nil AllCoffinName = nil CoffinAxis = nil AllObjectName = nil AllObjectAddrs = nil isStart = nil -- 扫描保存的结果 SavedPlayerClass = nil SavedPlayerOffset = nil SavedCoffinClass = nil SavedCoffinOffset = nil SavedWorldClass = nil SavedWorldOffset = nil -- ========== 终极扫描 ========== UltimateScan = function() gg.toast("正在扫描...") gg.clearResults() gg.setRanges(32) gg.searchNumber("1084227584", 4) local results = gg.getResults(99999) if #results == 0 then gg.alert("搜索无结果!请确认已进入游戏对局") return false end local allCandidates = {} local scanCount = math.min(3, #results) for idx = 1, scanCount do local baseAddr = results[idx].address for offset = -0x400, 0x400, 8 do local val = getQword(baseAddr + offset) if val ~= 0 and val > 0x7000000000 then local p18 = getQword(val + 0x18) local p20 = getDword(val + 0x20) if p18 ~= 0 and p20 > 0 and p20 < 100 then local firstPtr = getQword(p18 + 0x30) if firstPtr ~= 0 and firstPtr > 0x7000000000 then local selfId = getDword(firstPtr + 0x98) local posX = getFloat(firstPtr + 0x51C) if posX > -100000 and posX < 100000 then table.insert(allCandidates, { resultIdx = idx, baseAddr = baseAddr, offset = offset, classPtr = val, playerCount = p20, selfId = selfId, posX = posX, posZ = getFloat(firstPtr + 0x520), posY = getFloat(firstPtr + 0x524) }) end end end end end end if #allCandidates == 0 then gg.alert("未找到任何有效的玩家类!\n游戏结构可能已大幅变化。") return false end -- 显示候选 local options = {} for i, c in ipairs(allCandidates) do table.insert(options, string.format("[%d] 玩家%d 标识=%d 坐标=%.0f,%.0f,%.0f", i, c.playerCount, c.selfId, c.posX, c.posZ, c.posY)) end local choice = gg.choice(options, nil, "选择正确的玩家类(标识=1或坐标合理)") if not choice then return false end local selected = allCandidates[choice] SavedPlayerClass = selected.classPtr SavedPlayerOffset = selected.offset gg.toast(string.format("已保存: 类=0x%X 偏移=%d", SavedPlayerClass, SavedPlayerOffset)) -- 尝试找棺椁类和世界类(同一baseAddr的其他偏移) for offset = -0x400, 0x400, 8 do if offset ~= SavedPlayerOffset then local val = getQword(selected.baseAddr + offset) if val ~= 0 and val > 0x7000000000 then -- 棺椁类特征 local c10 = getQword(val + 0x10) local c18 = getDword(val + 0x18) if c10 ~= 0 and c18 > 0 and c18 < 100 and not SavedCoffinClass then SavedCoffinClass = val SavedCoffinOffset = offset end -- 世界类特征 local w18 = getQword(val + 0x18) local w20 = getDword(val + 0x20) if w18 ~= 0 and w20 > 0 and w20 < 500 and not SavedWorldClass then SavedWorldClass = val SavedWorldOffset = offset end end end end return true end -- ========== 核心数据获取 ========== GetGameData = function() -- 首次运行扫描 if not SavedPlayerClass then if not UltimateScan() then return end end if isStart == nil then gg.clearResults() gg.setRanges(32) gg.searchNumber("1084227584", 4) local results = gg.getResults(99999) if #results == 0 then gg.alert("搜索失败!") isStart = false return end -- 使用保存的偏移重新定位 PlayerArray = {} for _, v in ipairs(results) do if getDword(v.address - 0x4) == 1080033280 then local classPtr = getQword(v.address + SavedPlayerOffset) if classPtr ~= 0 then table.insert(PlayerArray, {address = classPtr, flags = 32}) end end end CoffinArray = {} if SavedCoffinOffset then for _, v in ipairs(results) do if getDword(v.address - 0x4) == 1080033280 then local classPtr = getQword(v.address + SavedCoffinOffset) if classPtr ~= 0 then table.insert(CoffinArray, {address = classPtr, flags = 32}) end end end end ThingArray = {} if SavedWorldOffset then for _, v in ipairs(results) do if getDword(v.address - 0x4) == 1080033280 then local classPtr = getQword(v.address + SavedWorldOffset) if classPtr ~= 0 then table.insert(ThingArray, {address = classPtr, flags = 32}) end end end end gg.clearResults() isStart = true end if isStart == false then return end -- ========== 玩家数据 ========== local paVals = gg.getValues(PlayerArray) local Count, Pointer, check = {}, {}, {} for _, v in ipairs(paVals) do if v.value and v.value ~= 0 then table.insert(Count, {address = v.value + 0x20, flags = 4}) table.insert(Pointer, {address = v.value + 0x18, flags = 32}) table.insert(check, {address = v.value, flags = 4}) end end if #check == 0 then gg.toast("❌ 无有效玩家类") return end local checkVals = gg.getValues(check) local ArrayPointer, ArrayCount = {}, {} for k, v in ipairs(checkVals) do if v.value and v.value ~= 0 then table.insert(ArrayPointer, Pointer[k]) table.insert(ArrayCount, Count[k]) end end if #ArrayCount == 0 then gg.toast("❌ 玩家数组为空") return end local countVals = gg.getValues(ArrayCount) local playerCount = (countVals and countVals[1] and countVals[1].value) or 0 if playerCount <= 0 or playerCount > 100 then gg.toast("❌ 玩家数量异常: " .. playerCount) return end local ptrVals = gg.getValues(ArrayPointer) PlayerName, PlayerPosition, PlayerSelf = {}, {}, {} Position = nil for _, v in ipairs(ptrVals) do if v.value and v.value ~= 0 then local base = v.value + 0x30 for i = 1, playerCount do local structPtr = getPointer(base + (i-1) * 0x18) if structPtr and structPtr ~= 0 then local selfId = getDword(structPtr + 0x98) local name = "未知" local np1 = getPointer(structPtr + 0xC0) if np1 ~= 0 then local np2 = getPointer(np1 + 0x28) if np2 ~= 0 then name = ReadUTF16String(np2 + 0x14) end end table.insert(PlayerName, name) table.insert(PlayerPosition, structPtr + 0x51C) table.insert(PlayerSelf, selfId) if selfId == 1 or selfId == 256 or selfId == 65793 then Position = structPtr + 0x51C end end end end end if not Position and #PlayerPosition > 0 then Position = PlayerPosition[1] end -- ========== 物资数据 ========== AllThing, ThingPointer = {}, {} if #ThingArray > 0 then local taVals = gg.getValues(ThingArray) local ThingCount, ThingStart, printThing = {}, {}, {} for _, v in ipairs(taVals) do if v.value and v.value ~= 0 then table.insert(ThingCount, {address = v.value + 0x20, flags = 4}) table.insert(ThingStart, {address = v.value + 0x18, flags = 32}) table.insert(printThing, {address = v.value, flags = 4}) end end local notThing, Thing_Count = {}, {} if #printThing > 0 then local ptVals = gg.getValues(printThing) for k, v in ipairs(ptVals) do if v.value and v.value ~= 0 then table.insert(notThing, ThingStart[k]) table.insert(Thing_Count, ThingCount[k]) end end end local thingCountVal = 0 if #Thing_Count > 0 then local tc = gg.getValues(Thing_Count) if tc and tc[1] then thingCountVal = tc[1].value or 0 end end local startJump = {} if #notThing > 0 then local ntVals = gg.getValues(notThing) for _, v in ipairs(ntVals) do if v.value and v.value ~= 0 then table.insert(startJump, {address = v.value + 0x30, flags = 32}) end end end if #startJump > 0 and thingCountVal > 0 then local sjVals = gg.getValues(startJump) for _, v in ipairs(sjVals) do if v.value and v.value ~= 0 then for i = 1, thingCountVal do local thingPtr = getPointer(v.address + (i-1) * 0x18) if thingPtr and thingPtr ~= 0 then local name = "未知" local np1 = getPointer(thingPtr + 0xB0) if np1 ~= 0 then local np2 = getPointer(np1 + 0x28) if np2 ~= 0 then name = ReadUTF16String(np2 + 0x14) end end table.insert(AllThing, name) table.insert(ThingPointer, thingPtr + 0x278) end end end end end end ObjectName, ObjectAddrs = {}, {} for k, v in ipairs(AllThing) do if v == '金色头簪' or v == '金元宝' or v == '金樽' or v == '双鱼玉佩' or v == '镂空编花金戒指' or v == '尸香魔芋' or v == '鬼玺' or v == '黄金纵目面具' or v == '天下第一剑' or v == '金鸟' or v == '龙珠' then table.insert(ObjectName, v) table.insert(ObjectAddrs, ThingPointer[k]) end end AllObjectName = ObjectName AllObjectAddrs = {} for _, v in ipairs(ObjectAddrs) do table.insert(AllObjectAddrs, {address = v, flags = 16}) end -- ========== 棺椁数据 ========== CoffinName, CoffinPosition = {}, {} if #CoffinArray > 0 then local caVals = gg.getValues(CoffinArray) local CoffinCountValue, CoffinStart, isCheck = {}, {}, {} for _, v in ipairs(caVals) do if v.value and v.value ~= 0 then table.insert(CoffinCountValue, {address = v.value + 0x18, flags = 4}) table.insert(CoffinStart, {address = v.value + 0x10, flags = 32}) table.insert(isCheck, {address = v.value, flags = 4}) end end local istrue, isCount = {}, {} if #isCheck > 0 then local icVals = gg.getValues(isCheck) for k, v in ipairs(icVals) do if v.value and v.value ~= 0 then table.insert(istrue, CoffinStart[k]) table.insert(isCount, CoffinCountValue[k]) end end end local coffinCountVal = 0 local CoffinPointer = {} if #istrue > 0 then local itVals = gg.getValues(istrue) for _, v in ipairs(itVals) do if v.value and v.value ~= 0 then table.insert(CoffinPointer, {address = v.value + 0x20, flags = 32}) end end if #isCount > 0 then local cc = gg.getValues(isCount) if cc and cc[1] then coffinCountVal = cc[1].value or 0 end end end if #CoffinPointer > 0 and coffinCountVal > 0 then local cpVals = gg.getValues(CoffinPointer) for _, v in ipairs(cpVals) do if v.value and v.value ~= 0 then for i = 1, coffinCountVal do local structAddr = v.address + (i-1) * 0x8 local coffinPtr = getPointer(structAddr) if coffinPtr and coffinPtr ~= 0 then local name = "未知棺椁" local np1 = getPointer(coffinPtr + 0xC0) if np1 ~= 0 then local np2 = getPointer(np1 + 0x28) if np2 ~= 0 then name = ReadUTF16String(np2 + 0x14) end end table.insert(CoffinName, name) table.insert(CoffinPosition, {address = coffinPtr + 0x288, flags = 16}) end end end end end end AllCoffinName = CoffinName CoffinAxis = CoffinPosition gg.toast("✓ 玩家=" .. #PlayerName .. " 棺椁=" .. #CoffinName .. " 物资=" .. #AllThing) end -- ========== 传送功能 ========== function teleportAllCoffins() GetGameData() local targetCount = #AllCoffinName if targetCount == 0 then gg.alert("本局未找到任何棺椁") return end if not Position then gg.alert("未找到自身坐标!") return end local filtered = {} for i = 1, targetCount do local addr = CoffinAxis[i] and CoffinAxis[i]["address"] if addr and addr ~= 0 then table.insert(filtered, {name = AllCoffinName[i] or ("棺椁"..i), address = addr}) end end if #filtered == 0 then gg.alert("未找到有效棺椁坐标") return end gg.toast("开始传送 " .. #filtered .. " 个棺椁...") for i, coffin in ipairs(filtered) do gg.toast("传送第" .. i .. "/" .. #filtered .. ": " .. coffin.name) local vals = gg.getValues({ {address = coffin.address, flags = 16}, {address = coffin.address + 4, flags = 16}, {address = coffin.address + 8, flags = 16} }) if vals and #vals >= 3 then gg.setValues({ {address = Position, flags = 16, value = vals[1].value}, {address = Position + 4, flags = 16, value = vals[2].value}, {address = Position + 8, flags = 16, value = vals[3].value} }) end if i < #filtered then gg.sleep(1000) end end gg.alert("传送完成!") end StartCoffin = function() GetGameData() local targetCount = #AllCoffinName if targetCount == 0 then gg.alert("本局未找到任何棺椁") return end if not Position then gg.alert("未找到自身坐标!") return end local mode = gg.choice({ "单个传送 - 选择棺椁", "一键传送 - 全部棺椁" }, nil, "找到 " .. targetCount .. " 个棺椁") if not mode then return end if mode == 1 then local list = {} for i = 1, targetCount do table.insert(list, i .. ". " .. (AllCoffinName[i] or "未知")) end local idx = gg.choice(list, nil, "选择棺椁") if not idx then return end if CoffinAxis[idx] then local vals = gg.getValues({ {address = CoffinAxis[idx]["address"], flags = 16}, {address = CoffinAxis[idx]["address"] + 4, flags = 16}, {address = CoffinAxis[idx]["address"] + 8, flags = 16} }) gg.setValues({ {address = Position, flags = 16, value = vals[1].value}, {address = Position + 4, flags = 16, value = vals[2].value}, {address = Position + 8, flags = 16, value = vals[3].value} }) gg.toast("已传送至: " .. (AllCoffinName[idx] or "未知")) end elseif mode == 2 then teleportAllCoffins() end end StartObject = function() GetGameData() if not AllObjectName or #AllObjectName == 0 then gg.alert("本局未找到任何物资") return end if not Position then gg.alert("未找到自身坐标!") return end local idx = gg.choice(AllObjectName, nil, "选择物资 (共" .. #AllObjectName .. "个)") if not idx then return end if AllObjectAddrs[idx] then local vals = gg.getValues({ {address = AllObjectAddrs[idx]["address"], flags = 16}, {address = AllObjectAddrs[idx]["address"] + 4, flags = 16}, {address = AllObjectAddrs[idx]["address"] + 8, flags = 16} }) gg.setValues({ {address = Position, flags = 16, value = vals[1].value}, {address = Position + 4, flags = 16, value = vals[2].value}, {address = Position + 8, flags = 16, value = vals[3].value} }) gg.toast("已传送至: " .. AllObjectName[idx]) end end ScriptStart = function() ScriptMenu = gg.choice({ "初始化", "寻棺材", "寻物资", "返回主页" },0) if ScriptMenu == 1 then GetGameData() end if ScriptMenu == 2 then StartCoffin() end if ScriptMenu == 3 then StartObject() end if ScriptMenu == 4 then HOME() end while true do if gg.isVisible() then gg.setVisible(false) ScriptStart() break end end end while(true)do if gg.isVisible(true) then XGCK = 1 gg.setVisible(false) end if XGCK==1 then ScriptStart() end end end function d1() local qmnb= { {['memory']=32}, {['name']='备用夜视'}, {['value']=1001, ['type']=32}, {['lv']=1001,['offset']=0, ['type']=32}, {['lv']=1065353216,['offset']=436, ['type']=32}, } local qmxg= { {['value']=55,['offset']=424,['type']=16,['freeze']=true}, {['value']=15,['offset']=432,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) end function d2() local qmnb= { {['memory']=32}, {['name']='除雾'}, {['value']=1061023017, ['type']=32}, {['lv']=1084227584,['offset']=-280, ['type']=32}, {['lv']=1061023017,['offset']=0, ['type']=32}, } local qmxg= { {['value']=0,['offset']=-420,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) end function d3() local qmnb= { {['memory']=32}, {['name']='显馆'}, {['value']=4728779609795985408, ['type']=32}, {['lv']=4728779609795985408,['offset']=0, ['type']=32}, {['lv']=1084227584,['offset']=120, ['type']=32}, } local qmxg= { {['value']=9999,['offset']=60,['type']=16,['freeze']=true}, {['value']=9999,['offset']=64,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) end function d4() local qmnb= { {['memory']=32}, {['name']='除兹'}, {['value']=4866983823437135872, ['type']=32}, {['lv']=4866983823437135872,['offset']=0, ['type']=32}, {['lv']=5415370752,['offset']=120, ['type']=32}, } local qmxg= { {['value']=0,['offset']=40,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) end function d5() gg.searchNumber("0.43", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0) revert = gg.getResults(99999, nil, nil, nil, nil, nil, nil, nil, nil) gg.editAll("0", gg.TYPE_FLOAT) end function d6() local qmnb= { {['memory']=32}, {['name']='秦岭显馆'}, {['value']=4746794010511409152, ['type']=32}, {['lv']=256,['offset']=-136, ['type']=32}, {['lv']=4746794010511409152,['offset']=0, ['type']=32}, } local qmxg= { {['value']=99999,['offset']=-252,['type']=16,['freeze']=true}, {['value']=99999,['offset']=-248,['type']=16,['freeze']=true}, } xqmnb(qmnb,qmxg) end function d7() xyss({{-4647714814368415744,32,32,['name']='全局夜视'},{4525216906440867840,32,-28},{4528099208507215053,32,-24},{4523775752693811773,32,-20},{4575657222461697556,32,-16},{4674736414275928064,32,-12}},{{99,16,-8,false},{7,16,0,false}},"修改") end -- ========== 原来的视频播放功能(全部保留) ========== function v1() gg.playVideo("https://image.rlyun.fun/view.php/3b77eb0bc0b4aaa8f09cd2090b7ef33c.mp4") gg.toast("加载成功") end function v2() gg.playVideo("https://image.rlyun.fun/view.php/f70cf48e8a5b0454d15a7dc2d0af4604.mp4") gg.toast("加载成功") end function v3() gg.playVideo("https://image.rlyun.fun/view.php/af68053621023b575345eafe0842e967.mp4") gg.toast("加载成功") end function v4() gg.playVideo("https://image.rlyun.fun/view.php/f3a4547d9f39274b885d78dc0eb10cab.mp4") gg.toast("加载成功") end function v5() gg.playVideo("https://image.rlyun.fun/view.php/a8dec0c7aea4f50d213e5059f944fda1.mp4") gg.toast("加载成功") end function v6() gg.playVideo("https://image.rlyun.fun/view.php/9176afdd6df8d9310465edd53708d989.mp4") gg.toast("加载成功") end function v7() gg.playVideo("https://image.rlyun.fun/view.php/5352607e5dc357b0a29e2cce444c5c9b.mp4") gg.toast("加载成功") end function v8() gg.playVideo("https://image.rlyun.fun/view.php/88753e6d73e02a8889c863eb956e42c1.mp4") gg.toast("加载成功") end function v9() gg.playVideo("https://image.rlyun.fun/view.php/4972ea31e97464a5026694cb6ea6ce47.mp4") gg.toast("加载成功") end function v10() gg.playVideo("https://image.rlyun.fun/view.php/6f7713091e027d77247ccb5f90bd6c0f.mp4") gg.toast("加载成功") end function Exit() print("这里是退出脚本后的提示文字") os.exit() end function HOME() lw=1 Main() end cs = '作者QQ;3350304557' while(true)do if gg.isVisible(true) then XGCK=1 gg.setVisible(false) end gg.clearResults() if XGCK==1 then Main() end end