logo
pl
Polski

Biblioteca de direcciones para complementos SKSE

Twórca: meh321
Zaktualizowano:2024-02-14 09:19:54
2.3MB
mcafee
Uwierzytelnianie
Zaufane przez 200,000,000+ użytkowników

O tym modzie

Contiene un archivo de cabecera y una base de datos para facilitar la independencia de versión de los plugins DLL de SKSE.
¡Importante! Esto ahora se divide en dos versiones: Especial (1.5.x) y Aniversario (1.6.x). Los IDs que apuntan a las direcciones no coinciden entre estas dos versiones (los ejecutables del juego son demasiado diferentes para coincidir, e incluso si lo hacen, el código en estas funciones es diferente).

Descripción

Para usuarios normales de mod: Descargue e instale el paquete "Todo en uno" desde la sección de archivos. Puede hacerlo usando el administrador de mods o manualmente. El archivo. bin debe colocarse aquí:
Datos/SKSE/Plugins/
No es necesario que leas el resto.

Para el autor del plugin SKSE DLL:
Este es un recurso modder (archivo de encabezado). Puede cargar una base de datos que almacena los desplazamientos para que su complemento DLL sea independiente de la versión sin necesidad de recompilar. Los archivos de encabezado se pueden descargar desde una sección opcional del archivo. Para la edición de aniversario, el nombre del archivo de encabezado es versionlibdb.h, ¡no versiondb.h! Si estás usando CommonLib, entonces todo esto ya está incorporado y no necesitas nada aquí.


Cómo utilizar

La forma más rápida:
Spoiler:  
Mostrar


# Incluye "versiondb.h"

void*MyAddress=NULL
Sin signo largo largo MyOffset=0;

bool InitializeOffsets ()
{
//Asignar en la pila para que cuando salgamos de esta función, se descargue.
//No es necesario cargar toda la base de datos y quedarse sin memoria sin razón.
Base de datos de base de datos de versiones;

//Carga la base de datos con la versión ejecutable actual.
if (! db.Load ())
{
_FATALERROR("¡No se pudo cargar la base de datos de versiones del ejecutable actual! ");

}
else
{
//"SkyrimSE.exe", "1.5.97.0"
_MESSAGE("Base de datos de %s versión %s cargada ", db.GetModuleName (). c_str (), db.GetLoadedVersionString (). c_str ());
}

//Esta dirección ya contiene la dirección base del módulo, por lo que podemos usar esta dirección directamente.
MyAddress=db.FindAddressById(123);
Si (MyAddress==NULL)
{
_FATALERROR("¡No se encontró la dirección! ");
Devuelve false;
}

//Este desplazamiento no incluye la dirección base. La dirección física será ModuleBase+MyOffset.
if(!db.FindOffsetById(123, MyOffset))
{
_FATALERROR("¡No se pudo encontrar el desplazamiento de mis cosas! ");

}

//Todo fue un éxito.
Devuelve verdadero;
}



Ahora quieres saber cuál es el valor de "123" allí. Esta es la identificación de una dirección. Diferentes versiones de la base de datos tendrán el mismo ID de dirección, pero puede apuntar a diferentes valores. Para obtener una lista de todos los pares de ID y valor para una versión específica:

Spoiler:  
Mostrar


# Incluye "versiondb.h"

Volcado booleano SpecificVersion ()
{
Base de datos de base de datos de versiones;

//Intenta cargar la versión 1.5.62.0 de la base de datos, independientemente de la versión ejecutable que se está ejecutando.
if(!db.Load(1,5,62,0))
{
_FATALERROR("¡No se pudo cargar la base de datos para 1.5.62.0! ");
Devuelve false;
}

//Escriba un archivo llamado offsets-1.5.62.0.txt donde cada línea es el ID y el desplazamiento.
db.Dump("offsets-1.5.62.0.txt ");
_MESSAGE("Desplazamiento de volcado para 1.5.62.0 ");
Devuelve verdadero;
}



No utilice 1, 5, 62, 0, sino la versión que estás invertiendo y con la que estás familiarizado. Primero debe tener el archivo de base de datos correspondiente en el directorio /Data/SKSE/Plugins.

Después de la llamada, debe tener un nuevo archivo llamado "offsets-1.5.62.0.txt" en el directorio de inicio de Skyrim, o cualquier nombre de archivo que introduzca. Cada línea tendrá el siguiente formato:
ID decimalOffset hexagonal

Por ejemplo, si tienes una dirección 142F4DEF8 (puntero estático del personaje del jugador) en la versión 1.5.62.0 y quieres hacerlo independiente de la versión, puedes hacerlo así:
1. Busque 2F4DEF8 en el archivo offsets. Porque este es un desplazamiento sin base 140000000
2. Ver que el ID es 517014 (¡decimal!)
3. Si desea incluir esta dirección en la DLL en tiempo de ejecución, haga lo siguiente:


void*dirección142f4def8=db.FindAddressById(517014);


Ahora lo tienes.

La estructura VersionDb tiene las siguientes funciones:
Spoiler:  
Mostrar


Volcado booleano (constantes estándares:: cadenas y rutas); //Volcar la base de datos actualmente cargada en un archivo
Bull carga (int major, int minor, int revision, int build); //Cargar una versión específica si db-major-minor-revision-build.bin está presente en el directorio Data/SKSE/Plugins
bool Load (); //Carga la versión de la aplicación actual
void Clear (); //Limpiar la base de datos actualmente cargada
void GetLoadedVersion (int&major, int&minor, int&revision, int&build) constantes; //Obtener la versión del archivo de base de datos que estamos cargando ahora
bool GetExecutableVersion(int&major, int&minor, int&revision, int&build) constantes; //Obtener la versión de la aplicación que se está ejecutando actualmente
const std::cadena &GetModuleName () const; //Obtiene el nombre del módulo de base de datos actualmente cargado, que debe mostrar "SkyrimSE.exe"
const std::string&GetLoadedVersionString () const; //Obtenga la versión actualmente cargada como una cadena, por ejemplo "1.5.62.0"
const std:: mapaConstante & GetOffsetMap (); //Obtenga la asignación de ID a offset si es necesario iterar manualmente
void*FindAddressById (id larga sin signo) constante; //Busca la dirección por ID, esto ya incluirá la dirección base y será la correcta. Si no se encuentra, devolverá NULL!
bool FindOffsetById (id largo sin signo, id largo sin signo //Encuentra el desplazamiento por ID, que será solo el desplazamiento que no incluye la cardinalidad.
bool FindIdByAddress(void * ptr, sin signo long long&result) constante; //Búsqueda de ID por dirección, esto intentará revertir la búsqueda para traducir la dirección en ID
bool FindIdByOffset (desplazamiento de longitud sin signo, longitud sin signo //Buscar ID por desplazamiento, esto intentará invertir la búsqueda para convertir el desplazamiento en ID



Cosas que debe saber y recordar:

1. Puede incluir cualquier (o todos) archivos de base de datos en el plugin, pero esto puede aumentar considerablemente el tamaño del archivo (alrededor de 2.5 mb). Hasta ahora, es común marcar este mod como una dependencia.

2. Siempre debe cargar la base de datos solo una vez al inicio, inicializar/almacenar en caché las direcciones que necesita y dejar que se descargue. Desinstalar simplemente significa que la estructura de VersionDb se elimina o se pierde (si se asigna en la pila). Esto se asegurará de que no usará memoria innecesaria mientras el juego se ejecuta. No es necesario mantener la base de datos cargada durante el juego. Este es un asunto controvertido si usas CommonLib, ya que solo se carga una vez, en lugar de cargarse para cada DLL.

3. La base de datos contiene direcciones de funciones, variables globales, RTTI, vtables y cualquier otra cosa que pueda hacer referencia a ella. No contiene direcciones que se encuentran en el medio de la función o en el medio global. Si necesita una dirección en el medio de la función, debe buscar la dirección base de la función y agregar un desplazamiento adicional usted mismo. Tampoco contiene cosas inútiles como la alineación alrededor de la función (referenciada en rdata), la sección pdata se descarta y la información SEH generada por algún compilador a partir de rdata se descarta.

4. Siempre debe comprobar los resultados para asegurarse de que la base de datos se carga correctamente (bool Load devuelve true) y que la dirección consultada realmente devuelve un resultado válido (en lugar de NULL). Si no SE carga, significa que es probable que el archivo falte o esté mal versionado (por ejemplo, tratando de usar el encabezado SE en AE). Si la consulta falla, significa que la dirección no se encuentra en esa versión. Esto podría significar que el código del juego ha cambiado lo suficiente como para que la dirección ya no sea válida para esa versión, o que la base de datos misma no ha detectado la dirección correcta. Si ocurre cualquiera de estos dos casos, debe dejar que la inicialización del plugin falle y dejar saber a SKSE que no está cargando correctamente. O muestra manualmente el mensaje de error.

5. También sería mejor si usted comprobó para asegurarse de que la dirección existe en todas las versiones del juego antes de lanzar el plugin DLL. Para hacer esto, cargue cada versión del archivo de la base de datos y consulte el mismo ID de dirección en cada versión para asegurarse de que existe:
Spoiler:  
Mostrar


bool LoadAll(std::vector& todos
{
Estático int versión [] = {3, 16, 23, 39, 50, 53, 62, 73, 80, 97, -1};
Para (int i=0; versión [i] > = 0; i++)
{
Versión db*db=nueva versión db ();
if(!db- > Carga(1, 5, versión [i], 0))
{
Eliminar la base de datos;
Devuelve false;
}
all.push_back (db);
}
Devuelve verdadero;
}

bool ExistsInAll(std::vector& all, id largo sin signo
{
Resultado de longitud sin signo = 0;

{
if(!db->FindOffsetById(id,result))

}
Devuelve verdadero;
}

void FreeAll(std::vector& todos
{
Para (bases de datos automáticas: todos)
Eliminar la base de datos;
All. clear ();
}

Boolean IsOk ()
{
std::vectorTodos;
if(!LoadAll(all))
{
_FATALERROR("¡No se pudo cargar una o más versiones de la base de datos del ejecutable actual! ");
FreeAll (Todos);
Devuelve false;
}

if(!ExistsInAll(todo,517014))
{
_FATALERROR("¡517014 no existe en todas las versiones de la base de datos! ");


}

FreeAll (Todos);
//¡Está bien!
Devuelve verdadero;
}



De esta manera puedes asegurarte de que tu DLL mod funcionará en todas las versiones, o si no funciona en algunas versiones, puedes escribirlo en tu página de mods.

6. A veces necesitas hacer algo diferente dependiendo de la versión del juego que estás ejecutando. Puedes hacer esto con el siguiente fragmento de código:
Spoiler:  
Mostrar


int major = 0, minor = 0, revision = 0, build = 0;
if(!db.GetExecutableVersion(major, minor, revision, build))
{
_FATALERROR("¡Algo salió mal! ");
Devuelve false;
}

//El juego que se está ejecutando es 1.5.x y al menos la versión 1.5.39.0
Si (mayores==1&&menores==5&&revisión > =39)
{
//algo...?
}



7. Recuerde: si compila su DLL SKSE en modo de depuración, el tiempo de carga de la base de datos puede ser de aproximadamente 14 segundos! En el modo de liberación, esto es de aproximadamente 0,2 segundos. Esto se debe a que el contenedor de la biblioteca estándar es muy lento en este modo (std map).


Permiso

Puedes hacer lo que quieras.

Najlepsze mody do The Elder Scrolls V: Skyrim Special Edition

Odkryj najlepsze mody do The Elder Scrolls V: Skyrim Special Edition, które wprowadzają nowe funkcje, ulepszoną grafikę i ekscytujące sposoby przekształcenia rozgrywki.
SkyUI
schlangster2017-10-04 05:03:26
Modificación de interfaz elegante y compatible con PC con muchas funciones avanzadas.
Parche no oficial de Skyrim Special Edition - USSEP
Arthmoor2025-09-01 07:56:09
Un mod integral para corregir errores en The Elder Scrolls V: Skyrim - Special Edition. El objetivo del Parche No Oficial de Skyrim Special Edition (USSEP) es solucionar todos los errores de Skyrim Special Edition que no hayan sido resueltos oficialmente.
Mod Organizador 2
ModOrganizerTeam2024-08-04 16:31:44
Mod Organizer (MO) es una herramienta para administrar colecciones de mods de cualquier tamaño. Está diseñado específicamente para aquellos que prefieren experimentar con mods y, por lo tanto, necesitan una forma fácil y confiable de instalarlos y desinstalarlos.
Modificación de mejora de malla estática - SMIM
Brumbek2018-07-05 02:28:26
Un proyecto ambicioso para mejorar notablemente el aspecto de innumerables modelos 3D estáticos en Skyrim. Básicamente, se trata de mi intento por embellecer la arquitectura, los objetos, el mobiliario y el paisaje de Skyrim.
Biblioteca de direcciones para complementos SKSE
meh3212024-02-14 09:19:54
Contiene un archivo de cabecera y una base de datos para facilitar la independencia de versión de los plugins DLL de SKSE.
Menú de carreras
expired69782024-01-27 03:38:17
Revisión completa del menú de creación de personajes, incluyendo nuevas opciones de personalización como múltiples pinturas de guerra RGBA, pinturas corporales, de manos y de pies. (Requiere SKSE)
Nuevo inactivo en Fores Skyrim SE-FNIS SE
NexusModsCaretaker2020-02-19 01:47:03
¿Skyrim no tiene posibles animaciones personalizadas? Está equivocado. El comportamiento fanático permite agregar diferentes tipos de animación al juego: inactivo/pose, secuencia, muebles, emparejamiento, matanza, criaturas, y más.
Un mapa mundial de calidad
Chesko2016-12-11 16:48:33
Proporciona un nuevo conjunto de texturas de mapas del mundo en 3D o en papel de gran detalle, ¡con carreteras incluidas! También añade un mapa detallado de Solstheim.

Odblokuj pełny potencjał The Elder Scrolls V: Skyrim Special Edition z Xmod — odkryj dziś te najlepsze mody!

mcafee
Uwierzytelnianie
Zaufane przez 200,000,000+ użytkowników

Potrzebujesz pomocy z pobieraniem lub instalacją? Dołącz do naszej społeczności Discord po wsparcie!

logo
Język

Rozwiązania dla graczy

Zasoby

Wzmacniacz

Śledź nas na

discordfacebooktwitteryoutube
dc@xmodhub.com or cathy@business.xmodhub.com
Discord: catherine_79237
Regulamin
Polityka prywatności
Wsparcie

Larvas Limited

Room 1201, 12/F Tai Sang Bank Building 130-132 Des Voeux Road Central HK