function PS() end function setvalue(address,flags,value) PS('TANG INA MO LUDE๐Ÿ˜)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end function setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] xgdj = qmxg[x]["freeze"] if xgdj == nil or xgdj == "" then gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) else gg.addListItems({[1] = {address = xgpy, flags = xglx, freeze = xgdj, value = xgsz}}) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(qmnb) gg.clearResults() gg.setVisible(false) gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. " Failed") 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"]) yyy=gg.getResultCount() if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. " Failed") 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"] .. "\nFound: "..yyy.." Edited: " .. xgsl .. "") else gg.toast(qmnb[2]["name"] .. " Failed") end end end gg.clearResults() end function setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end local hex = {} function mahdiprog(lib,offset,edit,type) local ranges = gg.getRangesList(lib) local xy = {} xy[1] = {} xy[1].address = ranges[1].start + offset xy[1].flags = type xy[1].value = edit gg.setValues(xy) end function setvalue(address,flags,value) PS('Modify address value (address, numeric type, value to be modified)') local tt={} tt[1]={} tt[1].address=address tt[ 1].flags=flags tt[1].value=value gg.setValues(tt) end function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] xgdj = qmxg[x]["freeze"] if xgdj == nil or xgdj == "" then gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) else gg.addListItems({[1] = {address = xgpy, flags = xglx, freeze = xgdj, value = xgsz}}) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(qmnb) gg.clearResults() gg.setVisible(false) gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. " Failed") 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"]) yyy=gg.getResultCount() if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. " Failed") 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"] .. "\nFound: "..yyy.." Edited: " .. xgsl .. "") else gg.toast(qmnb[2]["name"] .. " Failed") end end end gg.clearResults() end function setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end local hex = {} function mahdiprog(lib,offset,edit,type) local ranges = gg.getRangesList(lib) local xy = {} xy[1] = {} xy[1].address = ranges[1].start + offset xy[1].flags = type xy[1].value = edit gg.setValues(xy) end local HexPatches = {} local memFrom, memTo, lib, num, lim, results, src, ok = 0, -1, nil, 0, 32, {}, nil, false function name(n) if lib ~= n then lib = n local ranges = gg.getRangesList(lib) if #ranges == 0 then print("Error!"..lib.." IS NOT FOUND, MAKE SURE YOU OPEN THE GAME FIRST. BEFORE EXECUTING THE SCRIPT") gg.toast("แด‡ส€ส€แดส€! "..lib.." ษชs ษดแดแด› า“แดแดœษดแด…") gg.sleep(1800) gg.toast("MAKE SURE YOU OPEN THE GAME FIRST") gg.sleep(1800) gg.setVisible(true) os.exit() else memFrom = ranges[1].start memTo = ranges[#ranges]["end"] end end end function hex2tbl(hex) local ret = {} hex:gsub("%S%S", function (ch) ret[#ret + 1] = ch return "" end) return ret end function original(orig,longoff) local tbl = hex2tbl(orig) local len = #tbl if len == 0 then return end local used = len if len > lim then used = lim end local s = "" for i = 1, used do if i ~= 1 then s = s..";" end local v = tbl[i] if v == "??" or v == "**" then v = "0~~0" end s = s..v.."r" end s = s.."::"..used gg.searchNumber(s, gg.TYPE_BYTE, false, gg.SIGN_EQUAL, memFrom, memTo) if len > used then for i = used + 1, len do local v = tbl[i] if v == "??" or v == "**" then v = 256 else v = ("0x"..v) + 0 if v > 127 then v = v - 256 end end tbl[i] = v end end local found = gg.getResultCount(); results = {} local count = 0 local checked = 0 while true do if checked >= found then break end local all = gg.getResults(8) local total = #all local start = checked if checked + used > total then break end for i, v in ipairs(all) do v.address = v.address + longoff end gg.loadResults(all) while start < total do local good = true local offset = all[1 + start].address - 1 if used < len then local get = {} for i = lim + 1, len do get[i - lim] = {address = offset + i, flags = gg.TYPE_BYTE, value = 0} end get = gg.getValues(get) for i = lim + 1, len do local ch = tbl[i] if ch ~= 256 and get[i - lim].value ~= ch then good = false break end end end if good then count = count + 1 results[count] = offset checked = checked + used else local del = {} for i = 1, used do del[i] = all[i + start] end gg.removeResults(del) end start = start + used end end end function replaced(repl) num = num + 1 local tbl = hex2tbl(repl) if src ~= nil then local source = hex2tbl(src) for i, v in ipairs(tbl) do if v ~= "??" and v ~= "" and v == source[i] then tbl[i] = "" end end src = nil end local cnt = #tbl local set = {} local s = 0 for _, addr in ipairs(results) do for i, v in ipairs(tbl) do if v ~= "??" and v ~= "**" then s = s + 1 set[s] = { ["address"] = addr + i, ["value"] = v.."r", ["flags"] = gg.TYPE_BYTE, } end end end if s ~= 0 then gg.setValues(set) end ok = true end function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) xgsl = xgsl + 1 end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "ๅผ€ๅฏๅคฑ่ดฅ") else gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "ๅผ€ๅฏๅคฑ่ดฅ") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for i = 1, sz do pdsz = true for v = 4, #(qmnb) do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[i].address + qmnb[v]["offset"] pysz[1].flags = qmnb[v]["type"] szpy = gg.getValues(pysz) pdpd = qmnb[v]["lv"] .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[i].address xgxc(szpy, qmxg) xgjg = true end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "ๅผ€ๅฏๆˆๅŠŸ,ๅ…ฑไฟฎๆ”น" .. xgsl .. "ๆกๆ•ฐๆฎ") else gg.toast(qmnb[2]["name"] .. "ๅผ€ๅฏๅคฑ่ดฅ") end end end end function 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, Loading1) for x = 1, #(Loading1) do xgpy = szpy + Loading1[x]["address"] xglx = Loading1[x]["flags"] xgsz = Loading1[x]["value"] xgdj = Loading1[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 LoadingQ(Loading) gg.setRanges(Loading[1]["memory"]) gg.searchNumber(Loading[3]["value"], Loading[3]["flags"]) if gg.getResultCount() == 0 then gg.toast(Loading[2]["Projects"] .. "Loadๅคฑ่ดฅโŒ") else gg.refineNumber(Loading[3]["value"], Loading[3]["flags"]) gg.refineNumber(Loading[3]["value"], Loading[3]["flags"]) gg.refineNumber(Loading[3]["value"], Loading[3]["flags"]) if gg.getResultCount() == 0 then gg.toast(Loading[2]["Projects"] .. "Loadๅคฑ่ดฅโŒ") 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, #(Loading) do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[i].address + Loading[v]["address"] pysz[1].flags = Loading[v]["flags"] szpy = gg.getValues(pysz) pdpd = Loading[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, Loading1) end end if xgjg == true then end end end end function edit(orig,ret)_om=orig[1].memory or orig[1][1]_ov=orig[3].value or orig[3][1]_on=orig[2].name or orig[2][1] gg.clearResults()gg.setRanges(_om)gg.searchNumber(_ov,orig[3].type or orig[3][2])sz=gg.getResultCount()if sz<1 then gg.toast(_on.." ๅผ€ๅฏๅคฑ่ดฅ")else sl=gg.getResults(50000)for i =1,sz do ist=true for v=4,#orig do if ist==true and sl[i].value==_ov then cd={{}}cd[1].address=sl[i].address+(orig[v].offset or orig[v][2])cd[1].flags=orig[v].type or orig[v][3]szpy=gg.getValues(cd)cdlv=orig[v].lv or orig[v][1]cdv=szpy[1].value if cdlv==cdv then pdjg=true ist=true else pdjg=false ist=false end end end if pdjg==true then szpy=sl[i].address for x=1,#(ret)do xgpy=szpy+(ret[x].offset or ret[x][2])xglx=ret[x].type or ret[x][3]xgsz=ret[x].value or ret[x][1]xgdj=ret[x].freeze or ret[x][4]xgsj={{address=xgpy,flags=xglx,value=xgsz}}if xgdj==true then xgsj[1].freeze=xgdj gg.addListItems(xgsj)else gg.setValues(xgsj)end end xgjg=true end end if xgjg==true then gg.toast(_on.." ๅผ€ๅฏๆˆๅŠŸ")else gg.toast(_on.." ๅผ€ๅฏๅคฑ่ดฅ")end end end local app = {} app.memorySearchMode = function(MEMORY) if (MEMORY == 2) then gg.setRanges(gg.REGION_JAVA_HEAP | gg.REGION_C_HEAP | gg.REGION_C_ALLOC | gg.REGION_C_DATA | gg.REGION_C_BSS | gg.REGION_PPSSPP) end if (MEMORY == -1) then gg.setRanges(gg.REGION_VIDEO) end if (MEMORY == -2) then gg.setRanges(gg.REGION_CODE_APP | gg.REGION_CODE_SYS) end if (MEMORY == 0) then gg.setRanges(gg.REGION_ANONYMOUS) end end function checkType(dataType) local type if dataType =="D" or dataType == "D" then type = gg.TYPE_DWORD end if dataType == "F" then type = gg.TYPE_FLOAT end if dataType == "E" then type = gg.TYPE_DOUBLE end if dataType == "B" or dataType == "B" then type = gg.TYPE_BYTE end if dataType == "W" or dataType == "W" then type = gg.TYPE_WORD os.exit() end return type end app.memorySearch = function(pkgName, isNewSearch, address, tb, dataType) gg.clearResults() gg.setVisible(false) local isSucess = gg.searchNumber(tb[1]["lv"], checkType(dataType), false, gg.SIGN_EQUAL, address, -1); local t = gg.getResults(9999); local tab = {} local data = {} for i =1, #t do for j=2, #tb do tab[j] = {} tab[j].address = t[i].address + tb[j]["offset"] if(tb[j]["type"] == nil) then tab[j].flags = t[i].flags else tab[j].flags = checkType(tb[j]["type"]) end tab = gg.getValues(tab) if (tab[j].value == tb[j]["lv"]) then data[#data+1] = t[i].address end end end gg.clearResults() return isSucess, data end app.memoryWrite = function(pkgName, address, value, dataType) gg.setVisible(false) local t = {} t[1] ={} t[1].address = address t[1].flags = checkType(dataType) t[1].value = value return gg.setValues(t) end GG = {Read,Write} function GG.ReadWrite(Read,Writw)TZ = {} dataTZ = Read[1] offset = dataTZ[2] for i =1,#Read do TZA = Read[i] LV = {["lv"] = TZA[1],["offset"] = TZA[2]-offset} table.insert(TZ, i, LV) end app.memorySearchMode(Memory) isSuuess,TUG = app.memorySearch(pkgName, true, 0, TZ, Type) if TUG[1] == nil then else for ii =1,#TUG do for iii =1,#Write do dataxg = Write[iii] value = dataxg[1] Deviant = dataxg[2] app.memoryWrite(pkgName,TUG[ii]+Deviant-offset,value,Type) end end gg.toast(ID.. "ๅผ€ๅฏๆˆๅŠŸ") end end function SearchWrite(Search, Write, Type) gg.clearResults() gg.setVisible(false) gg.searchNumber(Search[1][1], Type) local t = gg.getResults(9999) gg.clearResults() if t ~= nil then local r = {} for j=2, #Search do for i, v in ipairs(t) do r[i] = {} r[i].address = v.address + Search[j][2] - Search[1][2] r[i].flags = v.flags end r = gg.getValues(r) for i = #t, 1, -1 do if (tostring(r[i].value) ~= tostring(Search[j][1]) ) then table.remove(t, i) table.remove(r, i) end end end --ๅ†™ๅ…ฅๆ•ฐๆฎ local r = {} for i =1, #t do for j=1, #Write do r[#r+1] = {} r[#r].address = t[i].address + Write[j][2] - Search[1][2] r[#r].flags = t[i].flags r[#r].value = Write[j][1] r[#r].freeze = true--ๅ†ป็ป“็š„่ฏไฟฎๆ”นๅŽ้ขๅŠ false end end gg.setValues(r) end end --gg.addListItems(r) function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) xgsl = xgsl + 1 end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "ๅผ€ๅฏๅคฑ่ดฅ") else gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "ๅผ€ๅฏๅคฑ่ดฅ") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for i = 1, sz do pdsz = true for v = 4, #(qmnb) do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[i].address + qmnb[v]["offset"] pysz[1].flags = qmnb[v]["type"] szpy = gg.getValues(pysz) pdpd = qmnb[v]["lv"] .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[i].address xgxc(szpy, qmxg) xgjg = true end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "ๅผ€ๅฏๆˆๅŠŸ,ๅ…ฑไฟฎๆ”น" .. xgsl .. "ๆกๆ•ฐๆฎ") else gg.toast(qmnb[2]["name"] .. "ๅผ€ๅฏๅคฑ่ดฅ") end end end end function 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("not found", false) return false end else gg.toast("Not Found") return false end end function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] xgdj = qmxg[x]["freeze"] if xgdj == nil or xgdj == "" then gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) else gg.addListItems({[1] = {address = xgpy, flags = xglx, freeze = xgdj, value = xgsz}}) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(qmnb) gg.clearResults() gg.setVisible(false) gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. " Failed") 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"]) yyy=gg.getResultCount() if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. " Failed") 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"] .. "\nFound: "..yyy.." Edited: " .. xgsl .. "") else gg.toast(qmnb[2]["name"] .. " Failed") end end end gg.clearResults() end function PS() end function setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end gg.alert("ฤฑllฤฑllฤฑ VIP CHEAT ฤฑllฤฑllฤฑ") vip = 1 function HOME() MENU = gg.multiChoice({ "โ– ๐‘ฉ๐’š๐’‘๐’‚๐’”๐’” ๐‘ด๐’†๐’๐’– โ–", "โ– ๐‘ด๐’†๐’๐’– ๐‘ช๐’‰๐’†๐’‚๐’• ๐‘ณ๐’๐’ƒ๐’ƒ๐’š โ–", "โ– ๐‘ด๐’†๐’๐’– ๐‘ช๐’‰๐’†๐’‚๐’• ๐‘ฎ๐’‚๐’Ž๐’† โ–", "โ– ๐‘จ๐’ƒ๐’๐’–๐’• โ–", "โœ˜ ๐‘ฌ๐’™๐’Š๐’• โœ˜", },nil, (os.date("๐™ผ๐™ฐ๐™ท๐™ณ๐™ธ ๐šˆ๐šƒ"))) if MENU == nil then else if MENU[1] == true then m1() end if MENU[2] == true then m2() end if MENU[3] == true then m3() end if MENU[4] == true then m4() end if MENU[5] == true then EXIT() end end vip = -1 end function m1() byp = gg.multiChoice({ "ฯŸ ๐‹๐Ž๐†๐Ž ๐๐˜๐๐€๐’๐’ ๐”๐’๐„ ๐‹๐Ž๐†๐Ž ๐“๐ˆ๐Œ๐ˆ ฯŸ ", "ฯŸ ๐…๐ˆ๐— ๐‚๐‘๐€๐’๐‡ ๐”๐’๐„ ๐‹๐Ž๐†๐ˆ๐ ฯŸ ", "ฯŸ ๐“๐„๐’๐“ ๐€๐๐“๐ˆ ๐‚๐‡๐„๐€๐“ ๐”๐’๐„ ๐‹๐Ž๐๐๐˜ ฯŸ", "โ†บ ๐™—๐™–๐™˜๐™  โ†บ", },nil, (os.date("๐™ผ๐™ฐ๐™ท๐™ณ๐™ธ ๐šˆ๐šƒ"))) if byp == nil then else if byp[1] == true then logo() end if byp[2] == true then login() end if byp[3] == true then check() end if byp[4] == true then back() end end end function logo() so = gg.getRangesList('libil2cpp.so')[1].start py = 0x79987 setvalue(so + py, 4, -1) gg.alert("gg logo ON") end function login() so = gg.getRangesList('libanogs.so')[1].start py = 0x7655 setvalue(so + py, 4, 0) gg.alert("fixCRASH on") end function check() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("67109633", gg.TYPE_DWORD) result = gg.getResultCount() if 2< result then gg.alert("แด€ษดแด›ษชแด„สœแด‡แด€แด› ส€แด‡๊œฑแดœสŸแด› โžช " .. result .. "\n๊œฑแด›แด€แด›แดœ๊œฑ โžช ส€ษชsแด‹y โœ˜\nส€แด‡สŸแดษข โžช yแด‡s") gg.processKill() os.exit() else gg.alert("แด€ษดแด›ษชแด„สœแด‡แด€แด› ส€แด‡๊œฑแดœสŸแด› โžช " .. result .. "\n๊œฑแด›แด€แด›แดœ๊œฑ โžช sแด€า“แด‡ โœ”๏ธŽ\nส€แด‡สŸแดษข โžช ษดแด ") gg.clearResults() end end function back() HOME() end function m2() ch1 = gg.multiChoice({ "ฯŸ ๐€๐ˆ๐Œ๐๐Ž๐“ ฯŸ", "ฯŸ ๐๐Ž ๐’๐๐‘๐„๐€๐ƒ ฯŸ", "ฯŸ ๐๐Ž ๐‘๐„๐‹๐Ž๐€๐ƒ ฯŸ", "ฯŸ ๐๐Ž ๐‘๐„๐‚๐Ž๐ˆ๐‹ ฯŸ", "ฯŸ ๐Œ๐€๐†๐ˆ๐‚ ๐๐”๐‹๐‹๐„๐“ ฯŸ", "โ†บ ๐™—๐™–๐™˜๐™  โ†บ", },nil, (os.date("๐™ผ๐™ฐ๐™ท๐™ณ๐™ธ ๐šˆ๐šƒ"))) if ch1 == nil then else if ch1[1] == true then aim() end if ch1[2] == true then hip() end if ch1[3] == true then rel() end if ch1[4] == true then rec() end if ch1[5] == true then magic() end if ch1[6] == true then back1() end end end function magic() local SEARCH = {{1041462460, 0}, {1050924810, 4}} local WRITE = {{1071462460, 0}} local TYPE = 4 SearchWrite(SEARCH, WRITE, TYPE) gg.clearResults() local SEARCH = {{1040724263, 0}} local WRITE = {{1059936128, 0}} local TYPE = 4 SearchWrite(SEARCH, WRITE, TYPE) gg.clearResults()------- magic gg.setRanges(gg.REGION_VIDEO) gg.searchNumber("16", gg.TYPE_FLOAT) gg.refineNumber("16", gg.TYPE_FLOAT) gg.getResults(9999) gg.editAll("0", gg.TYPE_FLOAT) gg.clearResults() --------FIX LAG end function aim() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("1.40129846e-45;0.44999998808:5", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0) gg.refineNumber("0.44999998808", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0) gg.getResults(99999, nil, nil, nil, nil, nil, nil, nil, nil) gg.editAll("3", gg.TYPE_FLOAT) gg.clearResults() gg.toast("AIM BOT ACTIVATEDโœ…") end function hip() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("2.29999995232;2.5;1", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0) gg.refineNumber("1.0", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0) gg.getResults(99999, nil, nil, nil, nil, nil, nil, nil, nil) gg.editAll("9.99999972e-10", gg.TYPE_FLOAT) gg.clearResults() gg.toast("NO SPREED ACTIVATEDโœ…") end function rel() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("3.09999990463;3.40000009537", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0) gg.refineNumber("3.09999990463;3.40000009537", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0) gg.getResults(99999, nil, nil, nil, nil, nil, nil, nil, nil) gg.editAll("9.99999972e-10", gg.TYPE_FLOAT) gg.clearResults() gg.toast("NO RELOAD ACTIVATEDโœ…") end function rec() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("0.12999999523", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(1020) gg.editAll("2", gg.TYPE_FLOAT) gg.clearResults() gg.toast("แดแด€ษขษชแด„ ส™แดœสŸสŸแด‡แด› ") gg.toast("NO RECOIL ACTIVATEDโœ…") end function back1() HOME() end function m3() ch2 = gg.multiChoice({ "ฯŸ ๐‘๐„๐ƒ ๐‹๐ˆ๐†๐‡๐“ ฯŸ", "ฯŸ ๐‘๐„๐ƒ ๐‹๐ˆ๐๐„ ฯŸ", "ฯŸ ๐Œ๐€๐†๐ˆ๐‚ ๐๐”๐‹๐‹๐„๐“ ฯŸ", "ฯŸ ๐’๐๐„๐„๐ƒ ๐‡๐€๐‚๐Š ฯŸ", "ฯŸ ๐‡๐ˆ๐†๐‡ ๐‰๐”๐Œ๐ ฯŸ", "ฯŸ ๐๐‹๐€๐‚๐Š ๐๐Ž๐ƒ๐˜ ฯŸ", "ฯŸ ๐€๐๐“๐„๐ ฯŸ", "โ†บ ๐™—๐™–๐™˜๐™  โ†บ", },nil, (os.date("๐™ผ๐™ฐ๐™ท๐™ณ๐™ธ ๐šˆ๐šƒ"))) if ch2 == nil then else if ch2[1] == true then light() end if ch2[2] == true then line() end if ch2[3] == true then magic() end if ch2[4] == true then speed() end if ch2[5] == true then jump() end if ch2[6] == true then black() end if ch2[7] == true then anten() end if ch2[8] == true then back2() end end end function light() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("256;4", gg.TYPE_FLOAT) gg.refineNumber("4", gg.TYPE_FLOAT) gg.getResults(9999) gg.editAll("100", gg.TYPE_FLOAT) gg.clearResults() gg.toast("RED LIGHT ACTIVATEDโœ…") end function line() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("4575657222490554368;1065353216:9", gg.TYPE_QWORD, false, gg.SIGN_EQUAL, 0, -1, 0) gg.refineNumber("4575657222490554368;1065353216", gg.TYPE_QWORD, false, gg.SIGN_EQUAL, 0, -1, 0) gg.getResults(9999) gg.editAll("4575657222520438784;1133903872", gg.TYPE_QWORD) gg.clearResults() gg.toast("RED LINE ACTIVATEDโœ…") end function magic() end function speed() gg.setRanges(gg.REGION_ANONYMOUS) V=gg.prompt({"๐Ÿƒ??sแด‡แด› sแด˜แด‡แด‡แด… แด›แด๐Ÿƒ๐Ÿปโ€โ™€[5;20]","ษดแด สŸแด€ษข(ษขแดแดแด… า“แดส€ ส™ส€)"},{Y},{"number","checkbox"}) for i = 1,5 do gg.sleep(100) gg.setVisible(false) gg.toast("Starting SpeedHack: "..V[1]) end if V[2] == true then gg.searchNumber("4.28000020981;3.20000004768", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) else gg.searchNumber("4.28000020981;3.20000004768", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) end -------------------------------(NoLag_Test)------------------------ speedmenubar=tonumber(V[1]) --------------------------------------------------------------------------- if speedmenubar == 5 then gg.getResults(999) gg.editAll("5", gg.TYPE_FLOAT) gg.clearResults() gg.toast("Active") else end if speedmenubar == 6 then gg.getResults(999) gg.editAll("6", gg.TYPE_FLOAT) gg.clearResults() gg.toast("Active") else end if speedmenubar == 7 then gg.getResults(999) gg.editAll("7", gg.TYPE_FLOAT) gg.clearResults() gg.toast("Active") else end if speedmenubar == 8 then gg.getResults(999) gg.editAll("8", gg.TYPE_FLOAT) gg.clearResults() gg.toast("Active") else end if speedmenubar == 9 then gg.getResults(999) gg.editAll("9", gg.TYPE_FLOAT) gg.clearResults() gg.toast("Active") else end if speedmenubar == 10 then gg.getResults(999) gg.editAll("10", gg.TYPE_FLOAT) gg.clearResults() gg.toast("Active") else end if speedmenubar == 11 then gg.getResults(999) gg.editAll("11", gg.TYPE_FLOAT) gg.clearResults() gg.toast("Active") else end if speedmenubar == 12 then gg.getResults(999) gg.editAll("12", gg.TYPE_FLOAT) gg.clearResults() gg.toast("Active") else end if speedmenubar == 13 then gg.getResults(999) gg.editAll("13", gg.TYPE_FLOAT) gg.clearResults() gg.toast("Active") else end if speedmenubar == 14 then gg.getResults(999) gg.editAll("14", gg.TYPE_FLOAT) gg.clearResults() gg.toast("Active") else end if speedmenubar == 15 then gg.getResults(999) gg.editAll("15", gg.TYPE_FLOAT) gg.clearResults() gg.toast("Active") else end if speedmenubar == 16 then gg.getResults(999) gg.editAll("16", gg.TYPE_FLOAT) gg.clearResults() gg.toast("Active") else end if speedmenubar == 17 then gg.getResults(999) gg.editAll("17", gg.TYPE_FLOAT) gg.clearResults() gg.toast("Active") else end if speedmenubar == 18 then gg.getResults(999) gg.editAll("18", gg.TYPE_FLOAT) gg.clearResults() gg.toast("Active") else end if speedmenubar == 19 then gg.getResults(999) gg.editAll("19", gg.TYPE_FLOAT) gg.clearResults() gg.toast("Active") else end if speedmenubar == 20 then gg.getResults(999) gg.editAll("20", gg.TYPE_FLOAT) gg.clearResults() gg.toast("Active") else end end function jump() jumpm = gg.alert("Choose Mode ","MP","BR") if jumpm == 1 then gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("7.5;0.8", gg.TYPE_FLOAT) gg.refineNumber("0.8", gg.TYPE_FLOAT) gg.getResults(9999) gg.editAll("4", gg.TYPE_FLOAT) gg.clearResults() gg.toast("Active") end if jumpm == 2 then gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("1,065,353,216;1,069,547,520;1,050,253,722:9", gg.TYPE_DWORD) gg.refineNumber("1,065,353,216", gg.TYPE_DWORD) gg.getResults(9999) gg.editAll("1,082,130,432", gg.TYPE_DWORD) gg.clearResults() gg.toast("Active") end end function black() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("1048592;1048596;1048680;1048700", gg.TYPE_DWORD) gg.getResults(9999) gg.editAll("0", gg.TYPE_DWORD) gg.clearResults() gg.toast("BLAC SKY ACTIVATEDโœ…") end function anten() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("10,126,001;100,423;10,126,001::9", gg.TYPE_DWORD) gg.getResults(10000) gg.editAll("10,126,002;100,424;10,126,002", gg.TYPE_DWORD) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("73890;10126001;1,057,803,469::31", gg.TYPE_DWORD) gg.refineNumber("73890", gg.TYPE_DWORD) gg.getResults(10000) gg.editAll("74013", gg.TYPE_DWORD) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("2;100,423;73,877;73,903;73,890::21", gg.TYPE_DWORD) gg.getResults(10000) gg.editAll("100,583;100,424;74,002;74,024;74,013", gg.TYPE_DWORD) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("10,126,001;56;1,880,000,001;45;0;0;0;0;0;0;0;0;0::65", gg.TYPE_DWORD) gg.getResults(10000) gg.editAll("0;0;0;0;0;400,010;200,157;300,150;5", gg.TYPE_DWORD) gg.setVisible(false) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("0.18500000238", gg.TYPE_FLOAT) gg.refineNumber("0.18500000238", gg.TYPE_FLOAT) gg.getResults(9999) gg.editAll("1.8", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("0.18500000238", gg.TYPE_FLOAT) gg.refineNumber("0.18500000238", gg.TYPE_FLOAT) gg.getResults(9999) gg.editAll("1.8", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("0.1439999938", gg.TYPE_FLOAT) gg.refineNumber("0.1439999938", gg.TYPE_FLOAT) gg.getResults(9999) gg.editAll("2", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("0.1439999938", gg.TYPE_FLOAT) gg.refineNumber("0.1439999938", gg.TYPE_FLOAT) gg.getResults(9999) gg.editAll("2", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("1041462460", gg.TYPE_DWORD) gg.refineNumber("1041462460", gg.TYPE_DWORD) gg.getResults(9999) gg.editAll("1092616192", gg.TYPE_DWORD) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("1041462460", gg.TYPE_DWORD) gg.refineNumber("1041462460", gg.TYPE_DWORD) gg.getResults(9999) gg.editAll("1092616192", gg.TYPE_DWORD) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("1041462460", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.refineNumber("1041462460", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(99999) gg.editAll("1071462460", gg.TYPE_DWORD) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("1041462460", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.refineNumber("1041462460", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(999999) gg.editAll("1071462460", gg.TYPE_DWORD) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("1041462460", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.refineNumber("1041462460", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(99999) gg.editAll("1071462460", gg.TYPE_DWORD) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("1041462460", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.refineNumber("1041462460", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(9999) gg.editAll("1071462460", gg.TYPE_DWORD) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("1041462460",gg.TYPE_DWORD) var = gg.getResults(9999) gg.editAll("1077936128",gg.TYPE_DWORD)gg.clearResults() -- [๐‹๐จ๐ -๐‡๐จ๐จ๐ค] ๐๐ฒ ๐Ž๐ง๐ฅ๐ฒ๐“๐ซ๐ข๐ฌ gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("0.1439999938",gg.POINTER_WRITABLE,TYPE_FLOAT,gg.SIGN_EQUAL,0,-1) var = gg.getResults(1000) gg.editAll("3",gg.POINTER_WRITABLE)gg.clearResults() -- [๐‹๐จ๐ -๐‡๐จ๐จ๐ค] ๐๐ฒ ๐Ž๐ง๐ฅ๐ฒ๐“๐ซ๐ข๐ฌ gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("1041462460",gg.TYPE_DWORD,TYPE_DWORD,gg.SIGN_EQUAL,0,-1) var = gg.getResults(1000) gg.editAll("1059936128",gg.TYPE_DWORD)gg.clearResults() -- [๐‹๐จ๐ -๐‡๐จ๐จ๐ค] ๐๐ฒ ๐Ž๐ง๐ฅ๐ฒ๐“๐ซ๐ข๐ฌ gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("1040724263",gg.TYPE_DWORD,TYPE_DWORD,gg.SIGN_EQUAL,0,-1) var = gg.getResults(1000) gg.editAll("1059936128",gg.TYPE_DWORD)gg.clearResults() end function back2() HOME() end function m4() ab = gg.multiChoice({ "ฯŸ ๐Œ๐˜ ๐‚๐‡๐€๐๐„๐‹ ฯŸ", "ฯŸ ๐“๐„๐‹๐‹ ๐Œ๐„ ฯŸ", "โ†บ ๐™—๐™–๐™˜๐™  โ†บ", },nil, (os.date("๐™ผ๐™ฐ๐™ท๐™ณ๐™ธ ๐šˆ๐šƒ"))) if ab == nil then else if ab[1] == true then chan() end if ab[2] == true then me() end if ab[3] == true then back3() end end end function chan() -----๐™ผ๐™ฐ๐™ท๐™ณ๐™ธ ๐šˆ๐šƒ end function me() gg.alert("๐™ผ๐™ฐ๐™ท๐™ณ๐™ธ ๐šˆ๐šƒ") end function back3() HOME() end function EXIT() ex = gg.alert("๐™š๐™ญ๐™ž๐™ฉ ?","๐™ฎ๐™š๐™จ","๐™ฃ๐™ค") if ex == nil then else if ex == 1 then exit() end if ex == 3 then end end end function exit() gg.alert("GoodBye ๐Ÿ‘‹๐Ÿป") os.exit() end while true do if gg.isVisible(true) then vip = 1 gg.setVisible(false) end if vip == 1 then HOME() end end