function xqmnb(Search,Modification) gg.clearResults() gg.setRanges(Search[1].memory) gg.searchNumber(Search[3].value,Search[3].type,false,536870912,0,-1) if gg.getResultCount()==0 then print(Search[2].name..'开启失败 getResultCount = 0') return end local Result=gg.getResults(gg.getResultCount()) local sum for index=4,#Search do sum=0 for i=1,#Result do if gg.getValues({{address=Result[i].address+Search[index].offset,flags=Search[index].type}})[1].value~=Search[index].lv then Result[i].Usable=true sum=sum+1 end end if sum==#Result then print(Search[2].name..'开启失败') return end end local Data,Freeze,Freezes={},{},0 sum=0 for index,value in ipairs(Modification)do for index=1,#Result do if not Result[index].Usable then local Value={address=Result[index].address+value.offset,flags=value.type,value=value.value,freeze=true} if value.freeze then Freeze[#Freeze+1]=Value Freezes=Freezes+1 else Data[#Data+1]=Value end sum=sum+1 end end end gg.removeListItems(Data) gg.setValues(Data) gg.addListItems(Data) gg.addListItems(Freeze) if Freezes==0 then print(Search[2].name..'成功 共修改'..sum..'条数据') else print(Search[2].name..'成功 共修改'..sum..'条数据 冻结'..Freezes..'条数据') end gg.clearResults() 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end function GetValue(Address , Flag) return gg.getValues({{address = Address , flags = Flag}})[1].value end function SetValue(Address , Flag , Value) return gg.setValues({{address = Address , flags = Flag , value = Value}}) end function GetSo(So) local So_List = gg.getRangesList('^/data/*.so*$') for i = 1 , #So_List do if So_List[i].internalName:gsub('^.*/', '') == So[1] and So_List[i].state == So[2] then return So_List[i].start end end end function ToPointer(So_Start,Offsets) local Address = So_Start for i = 1 , #Offsets do Address = gg.getValues({{ address = Address + Offsets[i] , flags = 32 }})[1]["value"] end return Address end function ToAddress(So_Start,offsets) local address = So_Start for i = 1 , #offsets do address = gg.getValues({{ address = address + offsets[i] , flags = 32 }})[1]["value"] end return address end function FH_Pointer(So,Pointer,Flag) Temp_So = gg.getRangesList(So)[1].start Address = Temp_So + Pointer return Address end function toast(content) gg.toast(content..'~') end function findMinValue(numbers) if #numbers == 0 then return nil -- 如果列表为空,返回nil end local minValue = numbers[1] -- 初始化最小值为列表中的第一个数值 for i = 2, #numbers do if numbers[i] < minValue then minValue = numbers[i] -- 如果当前数值小于最小值,则更新最小值 ListLocation = i end end return minValue end function findThreeSmallestValues(list) -- 先将列表复制一份 local sortedList = {} for i = 1, #list do sortedList[i] = list[i] end -- 对列表进行排序 table.sort(sortedList) -- 获取前三个最小值 local smallestValues = {} smallestValuesList = {} for i = 1, math.min(3, #sortedList) do table.insert(smallestValues, sortedList[i]) for o=1, #list do if list[o] == smallestValues[i] then smallestValuesList[i] = o end end end return smallestValues end function Motion(Speed,Duration) if Duration == nil then Duration = 10 gg.toast('Duration = nil') end for i=1,Duration do if Speed[1] == nil then else gg.setValues({{address = Self.MotionY - 4 , flags = 16 , value = Speed[1]}}) end if Speed[2] == nil then else gg.setValues({{address = Self.MotionY , flags = 16 , value = Speed[2]}}) end if Speed[3] == nil then else gg.setValues({{address = Self.MotionY + 4 , flags = 16 , value = Speed[3]}}) end end end function Kill(Duration) if Duration == nil then Duration = 3 gg.toast('Duration = nil') end for i=1,Duration do gg.setValues({{address = Self.Kill , flags = 4 , value = 16973832}}) end end function Move(Site) gg.setValues({ {address = Self.Y-4 , flags = 16 , value = Site[1]}, {address = Self.Y , flags = 16 , value = Site[2]}, {address = Self.Y+4 , flags = 16, value = Site[3]}, {address = Self.Y2-4 , flags = 16 , value = Site[1] + 0.5999755859400011}, {address = Self.Y2 , flags = 16 , value = Site[2] + 1.80000305176}, {address = Self.Y2+4 , flags = 16, value = Site[3] + 0.5999755859400011} }) end function CountDistance(ax, ay, az, x, y, z) return math.sqrt((ax - x)^2 + (ay - y)^2 + (az - z)^2) end--CountDistance function RefreshPlayer() --if Player.Quantity > (RefreshQuantity - 1) then Temp_Times = 3 end --if Player.Quantity == (RefreshQuantity - 1) then Temp_Times = 2 end --if Player.Quantity < (RefreshQuantity - 1) then Temp_Times = 1 end if RefreshQuantity > Player.Quantity then RefreshQuantity = Player.Quantity toast('刷新数量大于原玩家数量 已设置为['..RefreshQuantity..']') end for i=1, RefreshQuantity do o = smallestValuesList[i] Player_L.vX[i] = GetValue(Player_List.Y[o] - 4, 16) Player_L.vY[i] = GetValue(Player_List.Y[o] , 16) Player_L.vZ[i] = GetValue(Player_List.Y[o] + 4, 16) --print(o) end Aim.X, Aim.Y, Aim.Z = Player_L.vX[1], Player_L.vY[1], Player_L.vZ[1] MinPlayer_Distance = CountDistance(Aim.X, Aim.Y, Aim.Z, Self.vX, Self.vY, Self.vZ) toast('最近玩家距离:['..MinPlayer_Distance..'\n我的坐标'..Self.vX..' '..Self.vY..' '..Self.vZ..'\n敌人坐标 '..Aim.X..' '..Aim.Y..' '..Aim.Z..'\n主计算最近距离:'..findMinValue(Player_List.Distance)) end--RefreshPlayer function GetPlayers() Entity_Offset , Player.Quantity , NotPlayer.Quantity = 0,0,0 Player_List.X , Player_List.Y , Player_List.Z = {},{},{} Player_List.HitBoxX , Player_List.HitBoxY = {},{} Player_List.vX , Player_List.vY , Player_List.vZ = {},{},{} Player_List.HitBoxvX , Player_List.HitBoxvY = {},{} Player_List.Distance , Aim , Distance_Count = {},{},{} Lately_Players = {} Player_L = {} Player_L.vX , Player_L.vY , Player_L.vZ = {},{},{} Player_L.X , Player_L.Y , Player_L.Z = {},{},{} while true do Entity_Offset = Entity_Offset + 32 Entity_Hitbox = gg.getValues({{address = Self.HitBox + Entity_Offset, flags = 16}}) Entity = Entity_Hitbox[1].value Entity_HitboxY = gg.getValues({{address = Self.HitBox + Entity_Offset + 4, flags = 16}}) EntityY = Entity_HitboxY[1].value if Entity <= 0.0 then end if Entity <= 0 then Entity_Offset = 0 break end if Entity == 0.6000000238418579 and EntityY > 1.7 and EntityY < 1.9 then Player.Quantity = Player.Quantity + 1 Temp_Addr = Self.HitBox + Entity_Offset gg.addListItems({{address = Temp_Addr , flags = 16 , name = '实体:'..Player.Quantity}}) Player_List.HitBoxX[Player.Quantity], Player_List.HitBoxY[Player.Quantity] = Temp_Addr, Temp_Addr + 4 Player_List.HitBoxvX[Player.Quantity] , Player_List.HitBoxvY[Player.Quantity] = GetValue(Temp_Addr, 16) , GetValue(Temp_Addr + 4, 16) Player_List.Y[Player.Quantity] = Temp_Addr - 20 Player_List.X[Player.Quantity] = Player_List.Y[Player.Quantity] - 4 Player_List.Z[Player.Quantity] = Player_List.Y[Player.Quantity] + 4 else NotPlayer.Quantity = NotPlayer.Quantity + 1 end--if Entity end--while for i=1,Player.Quantity do Player_List.vX[i] = GetValue(Player_List.Y[i] - 4, 16) Player_List.vY[i] = GetValue(Player_List.Y[i] , 16) Player_List.vZ[i] = GetValue(Player_List.Y[i] + 4, 16) Player_List.Distance[i] = CountDistance(Player_List.vX[i], Player_List.vY[i], Player_List.vZ[i], Self.vX, Self.vY, Self.vZ) end local Lately_Players = findThreeSmallestValues(Player_List.Distance) --RefreshPlayer() end--GetPlayers function Refresh(GPM) Self.vMotionY = GetValue(Self.MotionY,16) Self.vX, Self.vY, Self.vZ = GetValue(Self.X,16), GetValue(Self.Y,16), GetValue(Self.Z,16) Self.ViewvX, Self.ViewvY = GetValue(Self.ViewX, 16), GetValue(Self.ViewY, 16) if AutoExcavateBed_Y == nil then AutoExcavateBed_Y = Self.vY end if GPM == true then if RefreshPlayer_Timing == nil then RefreshPlayer_Timing = 100 end RefreshPlayer_Timing = RefreshPlayer_Timing + 1 if RefreshPlayer_Timing > RefreshPlayer_MaxTime then RefreshPlayer_Timing = 0 GetPlayers() end end RefreshPlayer() if MinPlayer_List > 0 then if Player_List.Y[MinPlayer_List] == nil or Player_List.Y[MinPlayer_List] == '' then else Player_List.vY[MinPlayer_List] = GetValue(Player_List.Y[MinPlayer_List] , 16) Player_List.vX[MinPlayer_List] = Player_List.vY[MinPlayer_List] - 4 Player_List.vZ[MinPlayer_List] = Player_List.vY[MinPlayer_List] + 4 end TempDistance_X, TempDistance_Y, TempDistance_Z = Aim.X - Self.vX, Aim.Y - Self.vY, Aim.Z - Self.vZ MinPlayer_Distance = math.sqrt(TempDistance_X * TempDistance_X + TempDistance_Z * TempDistance_Z) + TempDistance_Y end end--Refresh Cb_So , Xa_So = {"libminecraftpe.so:bss", "Cb"} , {"libminecraftpe.so", "Xa"}--so立表 So_Start_Cb , So_Start_Xa = GetSo(Cb_So) , GetSo(Xa_So) So_Cb , So_Xa = So_Start_Cb , So_Start_Xa if not So_Cb then os.exit(print('无法获取到so')) end MinPlayer_List = 0 Self.MotionY = S_Pointer(Cb_So, {0x334440, 0x18, 0xF8, 0x2F0, 0x1C}, true) if GetValue(Self.MotionY,16) < 0 then Self.MotionX, Self.MotionZ = Self.MotionY - 4, Self.MotionY + 4 Self.MotionPosY = Self.MotionY - 18 Self.MotionViewY = Self.MotionY - 0xC Self.HitBox = S_Pointer(Cb_So, {0x334440, 0x18, 0xF8, 0x2F8,0x18}, true) Self.Y = Self.HitBox - 20 Self.Y2 = Self.Y + 12 Self.X, Self.Z = Self.Y - 4, Self.Y + 4 else os.exit(print('无法获取到self motion')) end Self.ViewX = S_Pointer(Cb_So, {0x332E60,0x180,0x1F0,0x8,0x88,0x110,0x48,0x0}, true) Self.ViewY = Self.ViewX + 4 Self.ContourY = S_Pointer(Cb_So, {0x411678, 0x68, 0x4B8, 0x20, 0x7BC}, true) Self.ContourX, Self.ContourZ = Self.ContourY - 4, Self.ContourY + 4 while true do Refresh(true) end