Партнеры

В этой теме покажу, как написать на AHK скрипт для обновления файла с оффсетами для любых AHK "читов" на примере hezedumper для CS:GO.

Шаг #1 - Страница с исходным кодом для его полного копирования / скачивания (Raw)

Для этого нам нужен hazedumper: 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:

C++:
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-ю систему счисления

• Изменяем:

C++:
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
}
• Готовый код

C++:
#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
}
 
Верх