

# include "versiondb.h"
void * MyAddress = NULL;
Non firmato lungo lungo myoffset = 0;
bool InitializeOffsets ()
{
//allocare sullo stack in modo che verrà scaricato quando usciamo da questa funzione.
//non c'è bisogno di caricare l'intero database e usare la memoria senza motivo.
VersionDb db;
//caricare database con la versione eseguibile corrente.
if (! db.Load ())
{
_FATALERROR("caricare il database delle versioni per l'eseguibile corrente! ");
}
Altrimenti.
{
//"SkyrimSE.exe", "1.5.97.0"
_MESSAGE("database caricato per %s versione %s. ", db.GetModuleName (). c_str (), db.GetLoadedVersionString (). c_str ());
}
//questo indirizzo include già l'indirizzo base del modulo in modo che possiamo usare l'indirizzo direttamente.
MyAddress=db.FindAddressById(123);
if (MyAddress == NULL)
{
_FATALERROR("non riesce a trovare l'indirizzo! ");
Restituire falso;
}
//questo offset non include l'indirizzo base. L'indirizzo effettivo sarebbe modulebase + MyOffset.
if (! db.FindOffsetById(123, MyOffset))
{
_FATALERROR("non riesce a trovare l'offset per la mia cosa! ");
}
//tutto ha avuto successo.
Restituisce vera;
}
# include "versiondb.h"
Dump booleano SpecificVersion ()
{
VersionDb db;
//prova a caricare il database della versione 1.5.62.0 indipendentemente dalla versione eseguibile in esecuzione.
if (! db.Load(1,5,62,0))
{
_FATALERROR("caricare database per 1.5.62.0 non riuscito! ");
Restituire falso;
}
//scrivere un file chiamato offsets-1.5.62.0.txt dove ogni riga è l'id e l'offset.
db.Dump ("offsets-1.5.62.0.txt");
_MESSAGE("offset dumped per 1.5.62.0 ");
Restituisce vera;
}
void * addressOf142F4DEF8 = db.FindAddressById(517014);
bool Dump (const std:: string & path); //scarica il database attualmente caricato nel file
Carico bool (int major, int minor, int revision, int build); //caricare una versione specifica se db-major-minor-revision-build.bin esiste nella directory data/SKSE/plugins
Carico bool (); //carica la versione per l'applicazione corrente
void Clear (); //cancellare il database attualmente caricato
void GetLoadedVersion(int & major, int & minor, int & revision, int & build) const; //ottenere la versione del file di database che abbiamo caricato ora
bool GetExecutableVersion(int & major, int & minor, int & revision, int & build) const; //ottenere la versione dell'applicazione attualmente in esecuzione
const std:: string & GetModuleName () const; //ottenere il nome del modulo di database attualmente caricato, questo dovrebbe mostrare "SkyrimSE.exe"
const std:: string & GetLoadedVersionString () const; //ottenere la versione attualmente caricata come stringa, ad esempio "1.5.62.0"
const std:: map& GetOffsetMap () const; //ottenere la mappa dell'ID da spostare se è necessario iterarla manualmente
void * FindAddressById (ID lungo lungo non firmato) const; //trovare indirizzo per ID, questo includerà già l'indirizzo base e l'indirizzo corretto. Ritornerà null se non trovato!
bool FindOffsetById(ID lungo non firmato, & risultato lungo non firmato) const; //trovare offset per id, questo verrà semplicemente offset senza base inclusa.
Bool finddbyaddress(void * ptr, unsigned long long & result) const; //trovare id per indirizzo, questo tenterà una ricerca inversa per convertire indirizzo in id
bool FindIdByOffset(offset lungo senza segno, & risultato lungo senza segno) const; //trovare id per offset, questo tenterà una ricerca inversa per convertire offset in id
bool LoadAll (std:: vettore& Tutti)
{
Versioni int statiche [] = {3, 16, 23, 39, 50, 53, 62, 73, 80, 97, -1};
Per (int i=0; versione [i] > = 0; i++)
{
VersionDb * db = new VersionDb ();
if (! db-> Load(1, 5, versioni [i], 0))
{
Cancellare db;
Restituire falso;
}
all.push_back(db);
}
Restituisce vera;
}
Bool existensinall (std):: vettore& tutti, ID lungo non firmato)
{
Risultato lungo lungo non firmato = 0;
{
if (! db-> FindOffsetById(id, risultato))
}
Restituisce vera;
}
void FreeAll (std:: vettore& Tutti)
{
for(db automatico: tutti)
Cancellare db;
all.clear ();
}
Boolean IsOk ()
{
std:: vettoreTutti;
if (! LoadAll(all))
{
_FATALERROR("caricare uno o più database di versione per l'eseguibile corrente! ");
FreeAll (all);
Restituire falso;
}
if (! Existensinall(all, 517014))
{
_FATALERROR("517014 non esiste in tutte le versioni del database! ");
}
FreeAll (all);
//Ok!
Restituisce vera;
}
int major = 0, minor = 0, revision = 0, build = 0;
if (! db.GetExecutableVersion(major, minor, revision, build))
{
_FATALERROR("qualcosa è andato storto! ");
Restituire falso;
}
//gioco in esecuzione è 1.5.x e almeno versione 1.5.39.0
if (maggiore == 1 & & minore == 5 & & revisione > = 39)
{
//roba...
}
Larvas Limited
Room 1201, 12/F Tai Sang Bank Building 130-132 Des Voeux Road Central HK