Бібліотека адрес для плагінів SKSE Mod Menu

Бібліотека адрес для плагінів SKSE

Автор: meh321
Оновлено:2024-02-14 09:19:54
2.3MB
Verified by McAfee SECURE
Автентифікація
Нам довіряють 200,000,000+ користувачів

Про цей мод

Містить заголовковий файл та базу даних, що дозволяє легко створювати незалежні версії плагінів SKSE DLL.
Важливо! Тепер це розділено на 2 версії: спеціальна версія (1.5.x) і Anniversary Edition (1.6.x). Ідентифікатори, які вказують на адресу, не відповідають між цими двома версіями (виконувані гри занадто відрізняються, і навіть якщо вони відповідають коду в цих функціях у

Опис

Для звичайних користувачів MOD: Звантажте та встановіть пакет "Все в одне" з розділу Файли. Ви можете використовувати менеджер Mod або зробити це вручну. Файли. bin повинні бути тут:
Дані/SKSE/плагін/
Вам не потрібно читати решту.

Для авторів додатків DLL SKSE:
Це ресурс моддера (файл заголовка). Ви можете завантажити базу даних, яка зберігає компенсації, щоб ваш додаток DLL може бути незалежним версіями без Файл заголовка можна завантажити з додаткового розділу файлів. Для видання річниці файл заголовка називається versionlibdb.h замість versiondb.h! Якщо ви використовуєте Commonlib, то все це вже вбудовано і вам нічого не потрібно звідси.


Як використовувати

Найшвидший спосіб:
Спойлер:  
Показати


# include "versiondb.h"

void * myaddres=NULL;
Непідписаний довгий MyOffset=0;

bool InitializeOffsets ()
{
//Відповідати на стеку, щоб він буде розвантажено після виходу з цієї функції.
//Немає необхідності завантаження всієї бази даних і використовувати пам'ять без причин.
версія DB;

//Завантажити базу даних з поточною версією виконується.
if (! db.Load ())
{
_FATALERROR («Не вдалося завантажити базу даних версії для поточного виконуваного виконуваного! »);

}
Інше
{
//"SkyrimSE.exe", "1.5.97.0"
_MESSAGE («Завантажена база даних для %s версії %s. », db.GetModuleName (). c_str (), db.GetLoadedVersionString (). c_str ());
}

//Ця адреса вже включає основну адресу модуля, тому ми можемо використовувати адресу безпосередньо.
MyAddress=db.FindAddressById (123);
if (myaddres== NULL)
{
_FATALERROR ("Не вдалося знайти адресу!");
Повернути false;
}

//Цей зміщення не включає базову адресу. Фактична адреса буде Modulebase+MyOffset.
if (! db.FindOffsetById (123, MyOffset))
{
_FATALERROR("Не вдалося знайти компенсацію для мого рівня! ");

}

//Все було успішно.
Повернути true;
}



Тепер вам цікаво, яка значення "123" там. Це ідентифікатор адреси. Різні версії бази даних будуть мати однаковий ідентифікатор для адреси, але вона може вказувати на різні Щоб отримати список всіх парів ідентифікаторів і значень для певної версії, зробите це:

Спойлер:  
Показати


# include "versiondb.h"

Булічний скид SpecificVersion ()
{
версія DB;

//Спробуйте завантажити базу даних версії 1.5.62.0 незалежно від запуску виконуваної
if (! db.Load (1, 5, 62, 0))
{
_FATALERROR ("Не вдалося завантажити бази даних за 1. 5. 62. 0!");
Повернути false;
}

//Напишіть файл під назвою offsets-1.5.62. 0. txt, де кожен рядок є ID і зміщенням.
db.Dump ("offsets-1.5.62.0.txt");
_MESSAGE ("Damping Compensations for 1.5.62.0");
Повернути true;
}



Замість 1, 5, 62, 0 поставити версію, яку ви зворотите і знайомите. Спочатку повинен мати відповідний файл бази даних у каталогі/Data/ SKSE/ plugins.

Після того, як ви викликаєте цю цього, вам слід мати новий файл у головному каталогі Skyrim під назвою « offsets-1. 5. 62. 0. txt » або як назва файла. Він буде у форматі, де кожен рядок знаходиться:
Десятковий ідентифікаторГексовий зміст

Наприклад, якщо у вас є адреса 142F4Def8 (статичний показувач символів гравця) у 1. 5. 62. 0, яку ви хочете зробити версію незалежною, ви зробите це:
1. Пошук 2F4Def8 у файлі компенсації. Тому що це зменшення без бази 140000000
2. Подивіться, що ID є 517014 (десятковий!)
3. Якщо ви хочете цю адресу в вашому DLL під час виконання, зробите це:


void * addresso142f4def8 = db.FindAddressById (517014);


І ось це.

Структура версії DB має такі функції:
Спойлер:  
Показати


bool Dump (const std:: string & path); //Скинути поточну завантажену базу даних до файла
bool Load (int major, int minor, int revision, int build); //Завантажити певну версію, якщо існує db- major- minor- revision- build. bin у каталогі data/ SKSE/ plugins
bool Load (); //Завантажити версію поточної програми
void Clear (); //Очистити поточну завантажену базу
void GetLoadedVersion (int & major, int & minor, int & revision, int & build) const; //Отримайте версію файла бази даних, яку ми завантажені прямо зараз
bool GetExecutableVersion (int & major, int & minor, int & revision, int & build) const; //Отримати версію програми, яка поточно виконує
const std:: string & GetModuleName () const; //Отримати назву модуля бази даних, який поточно завантажено, повинен показувати « skyrimse. exe »
const std:: string & GetLoadedVersionString () const; //Отримати поточну завантажену версію як рядкок, наприклад, « 1. 5. 62. 0 »
const std:: map& GetOffsetMap () const; //Отримати карту ідентифікатора, яка змінює, якщо вам потрібно його вручну ітерацію
void * FindAddressById (без підписаних довгого ідентифікатора) const; //Знайти адресу за ідентифікатором, вже включає базу і буде правильною адресою. Він повернеться NULL, якщо не знайдено!
bool FindOffsetById (непідписаний довгий ідентифікатор, непідписаний довгий & результат) const; //Знайти змінити ідентифікатором, це буде змінено без включення бази.
bool FindIdByAddress (void * ptr, unsigned long long & результат) const; //Знайти ідентифікатор за адресою, це спробує зворотний пошук для перетворення адреси на ID
bool FindIdByOffset (непідписаний довгий зміст, непідписаний довгий & результат) const; //Знайти ідентифікатор за змінітом, це спробує зворотний пошук для перетворення змінітому змінітому в ідентифікатор



Речі, які ви повинні знати і пам’ятаєте:

1. Ви можете включити будь-який (або всі) файли бази даних з вашим додатком, але він може значно збільшити розмір файла (приблизно на 2,5 МБ). Поки що було поширено позначити цей mod як залежність.

2. Ви завжди повинні завантажити базу даних лише один раз під час запуску, ініціалізувати/кешувати необхідні адреси і Розвантаження означає, що структура версії DB видаляється або втрачається (якщо ви розділили на стеку). Це переконатиме, що ви не використовуєте непотрібну кількість пам'яті під час виконання гри. Немає потреби зберігати базу даних завантаженою під час геймплею. Це момент спрямованого, якщо ви використовуєте CommonLib, оскільки він завантажує його лише один раз замість кожної DLL.

3. База даних містить адреси функцій, глобальних змінних, RTTI, vtables та все інше, що може мати посилання на нього. Він не містить адрес, які знаходяться в середині функцій або середині глобалів. Якщо вам потрібна адреса посередині функції, ви повинні пошукати адресу базової функції та додати додаткову компенсування. Він також не містить безкорисних речей, таких як вирівнювання навколо функцій (які посилані в rdata), розділ PDATA відкинується, а деякі компілятори, створені SEH інформації з rdata,

4. Вам завжди слід перевірити результат, щоб переконатися, що база даних успішно завантажено (завантаження BOOL повернуто TRUE) і що запитані адреси фактично повернуть дійсний результат (не Якщо він не вдалося завантажити, це означає, що файл відсутніше найбільш ймовірнішою або неправильною версією (наприклад, намагається використовувати заголовку SE у AE). Якщо запит не вдає запиту, це означає, що адресу не можна знайти у цій версії. Це може означає, що код гри достатньо змінюється, що адреса вже не є дійсною для цієї версії або сама база даних не вдалося виявити правильну адресу. Якщо буде одна з цих речей, ви повинні невдати ініціалізацію додатка, щоб сказати, що ви не завантажили правильно. Або вручну показувати повідомлення про помилку.

5. Крім того, найкраще було б, якщо ви перевірите, щоб переконатися, що адреса існує у всіх версіях гри перед публікацією вашого Щоб зробити це, завантажте кожну версію файла бази даних і запитайте однакову адресу в кожному з них, щоб переконатися, що він існує:
Спойлер:  
Показати


bool LoadAll (std:: vector& Всі)
{
Статичні int версії [] = {3, 16, 23, 39, 50, 53, 62, 73, 80, 97, -1};
Для (int i=0; версія [i] > =0; i++)
{
версія db * db = нова версія db ();
if (! db-> Load (1, 5, versions [i], 0))
{
Вилучити dB;
Повернути false;
}
all.push_back (db);
}
Повернути true;
}

Bool existinall (std:: vector& Всі, без підписаних довгого ID)
{
Непідписаний довгий результат = 0;

{
if (! db-> FindOffsetById (id, результат))

}
Повернути true;
}

void FreeAll (std:: vector& Всі)
{
для (автоматичний DB: всі)
Вилучити dB;
all.clear ();
}

Булевий IsOk ()
{
std:: vectorВсе;
if (! LoadAll (all))
{
_FATALERROR («Не вдалося завантажити одну або декілька баз даних версій для поточного виконуваного
Free all (все);
Повернути false;
}

if (! Existinall (all, 517014))
{
_FATALERROR ("517014 не існує у всіх версіях бази даних!");


}

Free all (все);
Гаразд!
Повернути true;
}



Таким чином ви можете бути переконаний, що ваш MOD працюватиме у всіх версіях, або якщо він не працює у деяких версіях, ви можете записати це на вашому сторінці MOD.

6. Іноді вам потрібно зробити щось інше на основі запуску ігрової версії. Це можна зробити за допомогою цього фрагменту коду:
Спойлер:  
Показати


int major = 0, minor = 0, revision = 0, build = 0;
if (! db.GetExecutableVersion (major, minor, revision, build))
{
_FATALERROR("Щось пошло не так! ");
Повернути false;
}

//Запускання гри є 1. 5. x і принаймні версія 1. 5. 39. 0
if (major = = 1 & & minor = 5 & & revision > = 39)
{
-То...?
}



7. Пам'ятайте про увазі: якщо ви скільки ви скільки DLL у режимі зневадження, час завантаження бази даних може становити близько 14 секунд! У режимі випуску це близько 0, 2 секунди. Це пов'язано з тому, що стандартні бібліотечні контейнери дуже повільні в цьому режимі (карта STD).


Права

Добре, що хочеш.

Найкращі моди для The Elder Scrolls V: Skyrim Special Edition

Перегляньте найкращі моди для The Elder Scrolls V: Skyrim Special Edition, які додають нові можливості, покращену графіку та захопливі способи змінити ваш геймплей.
2025-12-16 11:53:50
前置必备Mod
MOD必备前置工具
ModOrganizerTeam2024-08-04 16:31:44
Організатор mod (MO) — це інструмент для керування колекціями mod довільного розміру. Він спеціально розроблений для людей, які люблять експериментувати з MODS, і, отже, потребують легких та надійних способів встановлення та
SkyUI
schlangster2017-10-04 05:03:26
Елегантний, зручний для ПК інтерфейс моду з багатьма розширеними функціями.
Неофіційний патч Skyrim Special Edition - USSEP
Arthmoor2025-09-01 07:56:09
Комплексний мод для виправлення помилок у The Elder Scrolls V: Skyrim - Special Edition. Мета неофіційного патча Skyrim Special Edition (також відомого як USSEP) — зрештою виправити всі помилки Skyrim Special Edition, які офіційно не виправлені.
Мод покращення статичної сітки - SMIM
Brumbek2018-07-05 02:28:26
Масштабний проєкт, спрямований на значне покращення зовнішнього вигляду незліченних статичних 3D-моделей у Skyrim. По суті, це моя спроба зробити архітектуру, безлад, меблі та ландшафтний дизайн Skyrim набагато приємнішими.
Бібліотека адрес для плагінів SKSE
meh3212024-02-14 09:19:54
Містить заголовковий файл та базу даних, що дозволяє легко створювати незалежні версії плагінів SKSE DLL.
Меню гонок
expired69782024-01-27 03:38:17
Повний перегляд меню створення персонажів, включаючи нові функції налаштування, такі як кілька бойових розфарбувань RGBA, розфарбування тіла, розфарбування рук та ніг. (Потрібне SKSE)
Новий розпуск у Skyrim SE-FNIS SE
NexusModsCaretaker2020-02-19 01:47:03
Неможлива анімація для Skyrim? Неправильно. Поведінка FNIS дозволяє додати різні типи анімацій до гри: розпустки/пози, послідовність, меблі, пари, кillmoves, істоти тощо.

Розкрийте весь потенціал The Elder Scrolls V: Skyrim Special Edition разом із XMODhub — спробуйте ці найкращі моди вже сьогодні!

Verified by McAfee SECURE
Автентифікація
Нам довіряють 200,000,000+ користувачів

Потрібна допомога із завантаженням чи встановленням? Долучайтеся до нашої спільноти Discord, щоб отримати допомогу.

XMODhub Home
Мова
Змінити мову на Chinese Traditional
Змінити мову на English
Змінити мову на German
Змінити мову на Korean
Змінити мову на Thai
Змінити мову на Indonesian
Змінити мову на Vietnamese
Змінити мову на Turkish
Змінити мову на Portuguese
Змінити мову на Japanese
Змінити мову на Polish
Змінити мову на French
Змінити мову на Spanish
Змінити мову на Italian
Змінити мову на اللغة العربية
Змінити мову на Ukrainian

Ігрові рішення

Ресурси

Партнери

Ми в соцмережах

Відвідати Discord XMODhubВідвідати Facebook XMODhubВідвідати XMODhub у XВідвідати YouTube XMODhubВідвідати TikTok XMODhubВідвідати Reddit XMODhub
Підтримка:
support@xmodhub.com
Xmod_Lily
Ділові запити:
dc@xmodhub.com or lynn@business.xmodhub.com
catherine_79237

Larvas Limited

UNIT D 18/F GOLDEN SUN CENTRE 59-67 BONHAM STRAND WEST SHEUNG WAN HK