Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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 .. " are not found!⚠")
- gg.toast("⚠ERROR: " .. lib .. " are not found!⚠")
- 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)
- 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 + myoffset
- 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 SearchWrite(Search, Write, Type)
- gg.clearResults()
- gg.setVisible(false)
- gg.searchNumber(Search[1][1], Type)
- local count = gg.getResultsCount()
- 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("Found " .. #data .. " results")
- 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")
- 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"]
- 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.getResultsCount() == 0 then
- gg.toast(qmnb[2]["name"] .. " not found")
- 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.getResultsCount() == 0 then
- gg.toast(qmnb[2]["name"] .. " not found")
- else
- sl = gg.getResults(999999)
- sz = gg.getResultsCount()
- 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"] .. " success, replaced " .. xgsl .. " data")
- else
- gg.toast(qmnb[2]["name"] .. " not found")
- end
- end
- end
- end
- gg.setVisible(true)
- function HOME()
- A =
- gg.multiChoice(
- {
- "Enable GM",
- "Speed x5",
- "No Skill CD",
- "Exit"
- },
- nil,
- "Cheat by TekMonts"
- )
- if A == nil then
- else
- if A[1] == true then
- gmtenable()
- end
- if A[2] == true then
- speedx5()
- end
- if A[3] == true then
- nocd()
- end
- if A[4] == true then
- Exit()
- end
- end
- HOMEDM = -1
- end
- function gmtenable()
- gg.clearResults()
- gg.setRanges ( gg .REGION_CODE_APP | gg .REGION_C_DATA)
- name('libil2cpp.so')
- myoffset = 0xB58284
- original('7F 45 4C 46 02 01 01 00')
- replaced('01 00 A0 E3 1E FF 2F E1')
- gg.toast("GM Menu Visible")
- gg.clearResults()
- gg.setRanges ( gg .REGION_CODE_APP | gg .REGION_C_DATA)
- name('libil2cpp.so')
- myoffset = 0xB56E8C
- original('7F 45 4C 46 02 01 01 00')
- replaced('01 00 A0 E3 1E FF 2F E1')
- gg.toast("Visual Visible")
- end
- function speedx5()
- gg.clearResults()
- gg.setRanges ( gg .REGION_CODE_APP | gg .REGION_C_DATA)
- name('libil2cpp.so')
- myoffset = 0xDBC91C
- original('7F 45 4C 46 02 01 01 00')
- replaced('05 00 A0 E3 1E FF 2F E1')
- gg.toast("Speed x5 enable")
- gg.clearResults()
- gg.setRanges ( gg .REGION_CODE_APP | gg .REGION_C_DATA)
- name('libil2cpp.so')
- myoffset = 0xDBCA38
- original('7F 45 4C 46 02 01 01 00')
- replaced('10 00 A0 E3 1E FF 2F E1')
- gg.toast("Horse speed x10 enable")
- end
- function nocd()
- gg.clearResults()
- gg.setRanges ( gg .REGION_CODE_APP | gg .REGION_C_DATA)
- name('libil2cpp.so')
- myoffset = 0xB47124
- original('7F 45 4C 46 02 01 01 00')
- replaced('00 00 A0 E3 1E FF 2F E1')
- gg.toast("No skill cd enable")
- gg.clearResults()
- end
- function Exit()
- os.exit()
- end
- while true do
- if gg.isVisible(true) then
- HOMEDM = 1
- gg.setVisible(false)
- end
- --Iғ
- if HOMEDM == 1 then
- HOME()
- end
- --Iғ
- end
Add Comment
Please, Sign In to add comment