Шаг #1 - Страница с исходным кодом для его полного копирования / скачивания (Raw)
Для этого нам нужен hazedumper: https://github.com/frk1/hazedumper
Переходим в hazedumper > csgo.json, справа сверху над блоком кода нажимаем на Raw:
Нас переадресовывает на данную страницу: https://raw.githubusercontent.com/frk1/hazedumper/master/csgo.json
Вот она нам и нужна для обновления файла оффсетов.
Шаг #2 - Участок кода для скачивания в .json файл и изменение содержимого файла
• Скачиваем содержимое raw страницы:
URLDownloadToFile, https://raw.githubusercontent.com/frk1/hazedumper/master/csgo.json, download.json
• Редактирование содержимого по шаблону, изменение файла offsets:
filename=offsets.ahk
FileDelete, %filename%
FileAppend,class offsets`n, %filename%
FileAppend,{`n, %filename%
loop, Read, download.json
{
curloop:=a_index
parts:=StrSplit(A_LoopReadLine, " ")
for k,v in parts
{
val := makePlain(v)
if(val)
{
if val is not integer
{
if(val!="{" and val!="{" and v!="}," and val!="}")
{
valVal:=makePlain(parts[k+1])
valReal := int2hex(valVal)
strtowrite:= "static " . val . " = " . valReal
FileAppend, %strtowrite%`n, %filename%
}
}
}
}
}
FileAppend, static entityLoopDistance:=0x10`n, %filename%
FileAppend, }, %filename%
makePlain(val)
{
val:=StrReplace(val, "`,")
val:=StrReplace(val, """")
val:=StrReplace(val, ":")
val:=StrReplace(val, " ")
val:=StrReplace(val, " ")
return val
}
Шаг #3 - Изменение значений из 10-й в 16-ю систему счисления
• Изменяем:
int2hex(int)
{
HEX_INT := 8
while (HEX_INT--)
{
n := (int >> (HEX_INT * 4)) & 0xf
ret .= n > 9 ? chr(55 + n) : n
if (HEX_INT == 0 && HEX_INT//2 == 0)
ret .= " "
}
return "0x" ret
}
• Готовый код
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
#SingleInstance force
URLDownloadToFile, https://raw.githubusercontent.com/frk1/hazedumper/master/csgo.json, download.json
filename=offsets.ahk
FileDelete, %filename%
FileAppend,class offsets`n, %filename%
FileAppend,{`n, %filename%
loop, Read, download.json
{
curloop:=a_index
parts:=StrSplit(A_LoopReadLine, " ")
for k,v in parts
{
val := makePlain(v)
if(val)
{
if val is not integer
{
if(val!="{" and val!="{" and v!="}," and val!="}")
{
valVal:=makePlain(parts[k+1])
valReal := int2hex(valVal)
strtowrite:= "static " . val . " = " . valReal
FileAppend, %strtowrite%`n, %filename%
}
}
}
}
}
FileAppend, static entityLoopDistance:=0x10`n, %filename%
FileAppend, }, %filename%
makePlain(val)
{
val:=StrReplace(val, "`,")
val:=StrReplace(val, """")
val:=StrReplace(val, ":")
val:=StrReplace(val, " ")
val:=StrReplace(val, " ")
return val
}
int2hex(int)
{
HEX_INT := 8
while (HEX_INT--)
{
n := (int >> (HEX_INT * 4)) & 0xf
ret .= n > 9 ? chr(55 + n) : n
if (HEX_INT == 0 && HEX_INT//2 == 0)
ret .= " "
}
return "0x" ret
}