Feild Offset Finder V3
Feild Offset Finder V3
The devoper mode is enabled automatically so you don't need to do anything. But if
you want to make your own script to allow users to use your script then. Edit the
userMode = 1 to userMode = 2. Now you can set your hacks. I have already made a
template menu, submenu and functions for you. you can make some minor changes in
them.
The main function you will use is valueFromClass() where you have to give 5 inputs
like this.
valueFromClass("Levels", "0x10", false, true, gg.TYPE_FLOAT)
The first input is class name , second input is offset, third input is do you want
to try harder if yes then set true or false is good, the fourth is for 32 bit if
the script is for 32 bit then make it true otherwise leaving it false means the
script is 64 bit, the fifth is value type you want to search for you can see that
in the dump file. The value at left is the data type in the dump and the values at
left is what you have to set in the valueFromClass() function.
]]--
--[[ It will check for updates. Using the variable scversion which stores version
info.]]--
function updateChecker()
scversion = 3
API = gg.makeRequest('https://pastebin.com/raw/gPZb4z6f').content
if not API then
gg.alert('❌Error❌\n\n✅Either You Are Offline\n✅Or You Did not Give Internet
access')
else
pcall(load(API))
end
end
updateChecker() -- delete this if you want to stop checking for update, but if you
get any errors I won't help you, because i am going to bring more better version of
feild offset finder, and i don't want people to complain about the old version when
new version already solves the problem, so it is considered best to keep update
check on
function mainMenu()
firstMenu = gg.multiChoice({"Bullet Hack","Cheat 2","Sub
Menu","❌EXIT❌"},nil,"Script Made by hackers house yt")
if firstMenu == nil then
goto nill
end
if firstMenu[1] then
cheat_1()
end
if firstMenu[2] then
cheat_2()
end
if firstMenu[3] then
subMenu()
end
if firstMenu[4] then
os.exit()
end
::nill::
end
function subMenu()
bmenu = gg.multiChoice({"sub cheat 1","sub cheat 2","sub cheat
3","◀️Back"},nil,"Write Your Message here")
if bmenu == nil then
goto ni
end
if bmenu[1] then
subcheat_1()
end
if bmenu[2] then
subcheat_2()
end
if bmenu[3] then
end
if bmenu[4] then
mainMenu()
end
::ni::
end
function cheat_1()
valueFromClass("PlayerController", "0x148", false, false, gg.TYPE_DWORD)
gg.getResults(9999)
gg.editAll(99999, gg.TYPE_DWORD)
gg.clearResults()
stopClose()
end
function cheat_2()
valueFromClass("AnimationController", "0x18", false, false, gg.TYPE_FLOAT)
gg.getResults(9999)
gg.editAll(99, gg.TYPE_FLOAT)
gg.clearResults()
stopClose()
end
function subcheat_1()
valueFromClass("GameModeSetting", "0x2f", false, false, gg.TYPE_BYTE)
gg.getResults(9999)
gg.editAll(1, gg.TYPE_BYTE)
gg.clearResults()
stopClose()
end
function subcheat_2()
valueFromClass("PlayerScript", "0x40", false, true, gg.TYPE_DWORD)
gg.getResults(9999)
gg.editAll(9999, gg.TYPE_DWORD)
gg.clearResults()
stopClose()
end
function valueFromClass(class, offset, tryHard, bit32, valueType)
Get_user_input = {}
Get_user_input[1] = class
Get_user_input[2] = offset
Get_user_input[3] = tryHard
Get_user_input[4] = bit32
Get_user_type = valueType
start()
end
function loopCheck()
if userMode == 1 then
UI()
elseif error == 3 then
stopClose()
end
end
function found(message)
if count == 0 then
gg.clearResults()
gg.clearList()
first_error = message
error = 1
second_start()
end
end
function found2(message)
if count == 0 then
gg.clearResults()
gg.clearList()
second_error = message
error = 2
third_start()
end
end
function found3(message)
if count == 0 then
gg.clearResults()
gg.clearList()
third_error = message
error = 3
fourth_start()
end
end
function found4(message)
if count == 0 then
gg.clearResults()
gg.clearList()
gg.alert("❌Value NOT FOUND❌\nError Log:\nTry 1: "..first_error.."\nTry 2:
"..second_error.."\nTry 3: "..third_error.."\nTry 4: ".. message.."\n\nTry This\n\
n🟢1: Make Sure You are Using Correct Version Of game and the dump. 64 bit game and
64 bit dump or 32 bit game 32 bit dump + check try for 32 bit option in script or
Version of game and same version of dump.\n\n🟡2: Is the value allocated? if you are
searching for player health maybe that value only loads after you load match and
took some damage. So try again while playing\n\n🔴3: Is the class name correct? for
example if the class is playerscript then don't forget to make P and S capital. So
type PlayerScript not playerscript\n\n⚫4: Is the offset right? you have to type 0x
before the offset for example the offset is C1 then you have to Give 0xC1 to this
script\n\n🟤5: Tried Everything but still didn't work? then contact the devloper of
this script https://t.me/Hackers_House_YT")
gg.setVisible(true)
loopCheck()
end
end
function O_initial_search()
gg.setVisible(false)
gg.toast("🟢Hackers House: First Try")
user_input = ":"..Get_user_input[1]
if Get_user_input[3] then
offst = 25
else
offst = 0
end
end
function O_dinitial_search()
if error > 1 then
gg.setRanges(gg.REGION_C_ALLOC)
else
gg.setRanges(gg.REGION_OTHER)
end
gg.searchNumber(user_input, gg.TYPE_BYTE)
count = gg.getResultsCount()
if count == 0 then
found_("O_dinitial_search")
return 0
end
Refiner = gg.getResults(1)
gg.refineNumber(Refiner[1].value, gg.TYPE_BYTE)
count = gg.getResultsCount()
if count == 0 then
found_("O_dinitial_search")
return 0
end
val = gg.getResults(count)
gg.addListItems(val)
end
function CA_pointer_search()
gg.clearResults()
gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER)
gg.loadResults(gg.getListItems())
gg.searchPointer(offst)
count = gg.getResultsCount()
if count == 0 then
found_("CA_pointer_search")
return 0
end
vel = gg.getResults(count)
gg.clearList()
gg.addListItems(vel)
end
function CA_apply_offset()
if Get_user_input[4] then
tanker = 0xfffffffffffffff8
else
tanker = 0xfffffffffffffff0
end
local copy = false
local l = gg.getListItems()
if not copy then gg.removeListItems(l) end
for i, v in ipairs(l) do
v.address = v.address + tanker
if copy then v.name = v.name..' #2' end
end
gg.addListItems(l)
end
function CA2_apply_offset()
if Get_user_input[4] then
tanker = 0xfffffffffffffff8
else
tanker = 0xfffffffffffffff0
end
local copy = false
local l = gg.getListItems()
if not copy then gg.removeListItems(l) end
for i, v in ipairs(l) do
v.address = v.address + tanker
if copy then v.name = v.name..' #2' end
end
gg.addListItems(l)
end
function Q_apply_fix()
gg.setRanges(gg.REGION_ANONYMOUS)
gg.loadResults(gg.getListItems())
gg.clearList()
count = gg.getResultsCount()
if count == 0 then
found_("Q_apply_fix")
return 0
end
yy = gg.getResults(1000)
gg.clearResults()
i = 1
c = 1
s = {}
while (i-1) < count do
yy[i].address = yy[i].address + 0xb400000000000000
gg.searchNumber(yy[i].address, gg.TYPE_QWORD)
cnt = gg.getResultsCount()
if 0 < cnt then
bytr = gg.getResults(cnt)
n = 1
while (n-1) < cnt do
s[c] = {}
s[c].address = bytr[n].address
s[c].flags = 32
n = n + 1
c = c + 1
end
end
gg.clearResults()
i = i + 1
end
gg.addListItems(s)
end
function A_base_value()
gg.setRanges(gg.REGION_ANONYMOUS)
gg.loadResults(gg.getListItems())
gg.clearList()
gg.searchPointer(offst)
count = gg.getResultsCount()
if count == 0 then
found_("A_base_value")
return 0
end
tel = gg.getResults(count)
gg.addListItems(tel)
end
function A_base_accuracy()
gg.setRanges(gg.REGION_ANONYMOUS | gg.REGION_C_ALLOC)
gg.loadResults(gg.getListItems())
gg.clearList()
gg.searchPointer(offst)
count = gg.getResultsCount()
if count == 0 then
found_("A_base_accuracy")
return 0
end
kol = gg.getResults(count)
i = 1
h = {}
while (i-1) < count do
h[i] = {}
h[i].address = kol[i].value
h[i].flags = 32
i = i + 1
end
gg.addListItems(h)
end
function A_user_given_offset()
local old_save_list = gg.getListItems()
for i, v in ipairs(old_save_list) do
v.address = v.address + Get_user_input[2]
v.flags = Get_user_type
end
gg.clearResults()
gg.clearList()
gg.loadResults(old_save_list)
count = gg.getResultsCount()
if count == 0 then
found_("Q_apply_fix++")
return 0
end
gg.setVisible(true)
end
function second_start()
gg.toast("🟡Hackers House: Second Try")
O_dinitial_search()
if error > 1 then
return 0
end
CA_pointer_search()
if error > 1 then
return 0
end
CA_apply_offset()
if error > 1 then
return 0
end
Q_apply_fix()
if error > 1 then
return 0
end
if offst == 0 then
A_base_accuracy()
end
if error > 1 then
return 0
end
A_user_given_offset()
if error > 1 then
return 0
end
loopCheck()
if error > 1 then
return 0
end
end
function third_start()
gg.toast("🔴Hackers House: Third Try")
O_dinitial_search()
if error > 2 then
return 0
end
CA_pointer_search()
if error > 2 then
return 0
end
if offst == 0 then
CA2_apply_offset()
end
if error > 2 then
return 0
end
A_base_value()
if error > 2 then
return 0
end
if offst == 0 then
A_base_accuracy()
end
if error > 2 then
return 0
end
A_user_given_offset()
if error > 2 then
return 0
end
loopCheck()
if error > 2 then
return 0
end
end
function fourth_start()
gg.toast("Hackers House: Fourth Try")
O_dinitial_search()
CA_pointer_search()
CA2_apply_offset()
Q_apply_fix()
if offst == 0 then
A_base_accuracy()
end
A_user_given_offset()
loopCheck()
end
--[[ It will create an UI button and loop until user clicks the UI. If clicked
calls start() ]]--
function UI()
gg.showUiButton()
while true do
if gg.isClickedUiButton() then
start()
end
end
end
function stopClose()
while true do
mainMenu()
gg.setVisible(false)
while gg.isVisible() == false do
end
end
end
if userMode == 2 then
stopClose()
else
UI()
end