Offsets do Roblox · acesso por key

Os offsets num raw,
só com a sua key.

Uma URL que devolve os offsets em texto puro. O external baixa e lê. Roblox atualizou? Eu subo o dump novo e o mesmo binário já pega os valores certos, sem recompilar.

Começar

O raw

Abre no navegador, no curl, no que você quiser. Só responde com a key.

GET /api/v1/offsets.txt?key=…
# AnimeSouls Offsets | roblox
# version=version-a1b2c3d4
# hash=9f2c1a...e4
DataModel=0x6926BB8
Humanoid::Health=0x190
Humanoid::MaxHealth=0x194
Camera::CameraType=0x114
Workspace::CurrentCamera=0x38

Uma linha por offset, Nome=0xVALOR. Offset de grupo vira Grupo::Campo. Linha com # é metadado. Você parseia com um split — não precisa de lib de JSON.

Leitor pronto, se quiser

~40 linhas, só WinHTTP. Baixa o raw e devolve um mapa. Vem no painel com a sua key já dentro.

main.cpp
#include "AnimeSoulsOffsets.h"

int main() {
    auto off = AnimeSouls::Fetch();
    if (off.empty()) { /* API fora ou key invalida */ }

    uintptr_t hp  = off["Humanoid::Health"];
    uintptr_t cam = off["Workspace::CurrentCamera"];
}
Nome que não existe devolve 0. Como o mapa é montado em runtime, offset novo que eu subir no painel já aparece no seu external na próxima execução — sem recompilar e sem você mexer em nada.
Autenticação

Toda rota /api/v1/* exige key

Três formas de mandar. Escolha uma.

headers
X-API-Key: as_SUA_KEY                 <- recomendado
Authorization: Bearer as_SUA_KEY
?key=as_SUA_KEY                       <- só pra testar no navegador
A key é do seu external, não do usuário final. Ela fica embutida no binário e todos os seus users batem na API com ela. Por isso não existe trava de HWID nem limite de IP. O que existe é limite de requisições por minuto por IP, pra ninguém conseguir floodar a API usando a sua key.
Referência

Endpoints

Base: https://animesouls.xyz/api/v1

RotaO que devolve
GET /offsets.txt É o que o Update() consome. Nome=0xVALOR por linha, parseia sem lib de JSON.
GET /offsets.hHeader C/C++ com #define, para quem prefere compilar os valores. Não se atualiza sozinho.
GET /offsetsJSON cru, estruturado.
GET /versionSó hash, version e updated_at. Resposta minúscula, pra checar se mudou.
GET /statusDados da sua key: validade e rate limit.

ETag: não baixa o que você já tem

Toda resposta vem com ETag. Mande de volta em If-None-Match e, se nada mudou, o servidor responde 304 com corpo vazio.

terminal
$ curl -sI -H "X-API-Key: as_SUA_KEY" \
    "https://animesouls.xyz/api/v1/offsets.txt"

ETag: "9f2c1a...e4"
X-Offsets-Version: version-a1b2c3d4
X-Offsets-Updated: 1758300000

$ curl -s -o /dev/null -w "%{http_code}" \
    -H "X-API-Key: as_SUA_KEY" \
    -H 'If-None-Match: "9f2c1a...e4"' \
    "https://animesouls.xyz/api/v1/offsets.txt"

304
Alternativa

Sem rede em runtime

Se você não quer chamada de rede quando o external abre, baixe o header com #define e compile os valores. O custo é recompilar a cada atualização do Roblox.

Recomendado

Raw em runtime

O external baixa e lê. Offset novo e valor novo chegam sozinhos, no mesmo binário. Custa uma requisição na inicialização.

Manual

offsets.h

Zero rede, zero WinHTTP, e os offsets viram identificador de verdade. Mas Roblox atualizou, você baixa, recompila e redistribui.

terminal
curl -o Offsets.h      "https://animesouls.xyz/api/v1/offsets.h?key=as_SUA_KEY"
Offsets.h
#define DataModel           0x6926BB8

/* Humanoid */
#define Humanoid_Health     0x190
#define Humanoid_MaxHealth  0x194
Aqui offset de grupo vira Grupo_Campo, porque :: não vale em #define. No raw o mesmo offset é Grupo::Campo.