Темы

Если не можете найти ответа на свой вопрос, то создайте нужную тему.

Уведомления

Здесь получаете уведомления со всех тем, в которых проявлялась активность.

Связь с администрацией

Пишите, если необходима помощь администрации или решение других вопросов.

Address Library for SKSE Plugins / Адресная библиотека для плагинов SKSE

Address Library for SKSE Plugins / Адресная библиотека для плагинов SKSE V2

Автор
Источник
Тип
Утилиты
Язык
Перевод не требуется
Распространение
Свободное распространение
Размер
5.42 Мб
Требуется

Описание​

Для пользователей:​

Здесь представлены все базы для поддержки SKSE64. Для игроков они необходимы для поддержки большинства модов.

Установка:​

Необходима установка SKSE - Current SE build 2.0.19 (runtime 1.5.97) или выше. (Устанавливается в папку игры \Skyrim Special Edition на замену)
Скачайте и установите содержимое из каталога "All in one" в папку игры \Skyrim Special Edition\ на замену. Вы можете установить через файловый менеджер или вручную. Файлы .bin должны находиться здесь: Data\SKSE\Plugins\
Остальное содержимое каталога вам не нужно, оно для разработчиков.

Утилита не имеет никаких известных зависимостей, кроме базовой игры.
(FR) iEquip
A Closer Look SSE
Alchemist's journal
Animation Motion RevolutionТребуется для работы в версиях до 1.5.97
Arcing Spells
Armor Rating Rescaled SKSE RemakeAll-in-one
Auto Kill Move ScreenshotsВозьмите базу данных для вашей версии игры.
Auto Walk
Best In Class Plus Plus SKSE RemakeAll-in-one или ваша версия игры
Better Combat Escape - SSE
Better Jumping SE
Better Power Attack Direction Control - SSE
Bunny Hopper Of SkyrimAll-in-one
Challenging Spell LearningТребуется с версии 2.0.0
Classic RPG Archtypes AND FULL NPC Perks GAME OVERHAUL
Classic Sprinting Redone (SKSE64)
Cold Region Behavior - Beta TestНеобходимо
Conditional Expressions - Subtle Face Animations - Polish Translation
Console Commands Extender
ConsoleUtilSSE
Copy Character Appearance
Dialogue Movement Enabler
Difficulty Balance
Disable Follower Collision
Display Enemy Level
Diziet's Player Home Bath Undressing for SkyrimSEЭто поддержка для расширителя Papyrus Extender от powerofthree.
Don't Eat Spell Tomes (Modder's Resource)
Dynamic Animation Replacer
Dynamic Equipment Manager SKSE UpdatedAll-in-one
Dynamic Volumetric Lighting and Sun Shadows
Enchanted Arsenal - SSE
Encounter Zones Unlocked SE
Enhanced Death Cam
Enhanced Reanimation
Equip Enchantment Fix
Essential Favorites
Essential Reading
Essentials Be Gone SKSE RebornAll-in-one
Face Discoloration Fix
Fatal Wedgies
Favorite Misc Items
Flasks - A Potion Utility Mod
Flat Map Markers SSE
Floating Damage
Frozen Electrocuted CombustionЗагрузите bin-файл, соответствующий вашей версии SSE
Glow Be Gone SKSE Updatedmh-hm
Horse Stamina HUD - Script-Free
I'm Walkin' Here
iEquipВажный
iEquip - PORTUGUES BRВажный
Immersive Spell Learning - DESTified
Improvement Names Customized SSE
Individual Shout Cooldown RemakeAll-in-one или ваша версия игры
Injuries for both PC AND NPCs
kj's Lightweight Skyrim Setup
Lesen bildet 1.0.4 DV
LibFire
LibMathf
Locational Damage(SKSE Plugin)
Master of Disguise SSEКрайне необходимо для Master of Disguise SSE v1.5.x
Mfg Fix
MiniMap
Misc High Heels Sitting Height Fix
Misc Hkx Xml Converter SSE
monster race crash fix
More Informative ConsoleТребуется для версий 0.40 и выше
moreHUD SE
moreHUD SE - Polish Translation
Name Those Ash Piles
No Attack Messages
No Enchantment Restriction SKSE Remake
No Lockpick Activate (SKSE) - UpdatedЗагрузите "All-in-one" или версию для той версии игры, которую используете.
Notification Log SSE
NPC AI Process Position Fix - SSE
NPC Stamina Matters (SKSE)All-in-one или ваша текущая версия
OnHit Animations Framework - SSE
OStim - OSex overhaul and API
OStim - OSex overhaul and API (RUS)
Papyrus INI Getter Plugin-SSE
Passive Weapon Enchantment Recharging - Enchanted Weapons Recharge Over Time
Perk Point Awards ReduxЖесткое требование для Spell Perk Item Distributor
Play as a Dragon SE
Player Rotation in ShowRaceMenu
Poser Hotkeys Plus SSE
Poser Hotkeys Plus SSE - For 2.5.1 - Simplifiled Chinese Translation
Potion Combining
powerofthree's Papyrus Extenderзагрузите bin-файл, соответствующий вашей версии SSE
Project Proteus - SE - TR
Quick Loot RE
RandomIdleAnimation
Reading Is Good (SKSE)
Realistic Body System 2020(SSE)
Regen Adjuster SKSE
Remember Lockpick Angle - UpdatedОбязательно возьмите обновленную базу данных для любой версии игры, которую вы используете - они НЕ включены!
Sales Overflow Solved
Scaleform Translation Plus Plus
Simple Dual Sheath
Simple Offence Suppression
Simple Weapon Swing Parry - Scripts Free - SSE
SKO - Simple Knock OutТребуется для Spell Perk Item Distributor.
Sky Idles SE
Sky Sprint SE
Skyrim Outfit System SE Revived
Skyrim Souls RE - Updated
Slayable Offspring SKSE
Sleep to Gain Experience
Smart Harvest SEДля CommonLibSSE
SmoothCam
Souls-Like SmoothCam PresetSmoothcam также нуждается в этом
Speed Casting SKSE RemakeAll-in-one или ваша версия игры
Spell Perk Item Distributor (SPID)Загрузить файл .bin, соответствующий вашей версии SSE (не требуется для пользователей VR)
SSE Display Tweaks
SSE Engine Fixes (skse64 plugin)
SSE FPS StabilizerЕсли только вы не используете Skyrim версии 1.5.97
SSE HooksПо желанию
Stagger Direction Fix - SSE
Stay At The System Page - Updated
Stay With Me SSE
Strange RunesЖесткое требование
Survival Control Panel
Time Format Changer
True Spear Combat - DAR
Unequip Quiver SE
Unlimited Fast Travel
Vampire Lords Can Fly (With Collision)
waxton's quickstart tutorial
Where s the keyAll-in-one или ваша текущая версия
Whose Quest Is It Anyway
Whose Quest Is It Anyway EspanolВы должны установить его требования, если они необходимы.
Yes Im Sure
You Can Sleep SKSE RemakeAll-in-one или ваша текущая версия
zone magicНеобходимо для версии 0.2 и выше
zxlice BackStab and Parry SSE - Script Free
zxlice hitStop SSE - Script Free
zxlice's ultimate potion animation - ZUPA

Остальное вам читать не нужно. Оно для разработчиков.​

Для авторов плагинов SKSE DLL:
Это материал для мододелов (заголовочный файл). Вы можете загрузить базу данных, которая хранит смещения, чтобы ваш DLL-плагин мог быть независимым от версии без необходимости перекомпиляции. Заголовочный файл можно загрузить из дополнительной секции файлов.

Как использовать​

Самый быстрый способ:
Код:
#include "versiondb.h"

void * MyAddress = NULL;
unsigned long long MyOffset = 0;

bool InitializeOffsets()
{
// Allocate on stack so it will be unloaded when we exit this function.
// No need to have the whole database loaded and using up memory for no reason.
VersionDb db;

// Load database with current executable version.
if (!db.Load())
{
_FATALERROR("Failed to load version database for current executable!");
return false;
}
else
{
// "SkyrimSE.exe", "1.5.97.0"
_MESSAGE("Loaded database for %s version %s.", db.GetModuleName().c_str(), db.GetLoadedVersionString().c_str());
}

// This address already includes the base address of module so we can use the address directly.
MyAddress = db.FindAddressById(123);
if (MyAddress == NULL)
{
_FATALERROR("Failed to find address!");
return false;
}

// This offset does not include base address. Actual address would be ModuleBase + MyOffset.
if (!db.FindOffsetById(123, MyOffset))
{
_FATALERROR("Failed to find offset for my thing!");
return false;
}

// Everything was successful.
return true;
}
Теперь вы задаетесь вопросом, что это за значение "123". Это идентификатор адреса. Базы данных разных версий будут иметь один и тот же ID для адреса, но он может указывать на разные значения. Чтобы получить список всех пар ID и значений для конкретной версии, сделайте следующее:
Код:
#include "versiondb.h"

bool DumpSpecificVersion()
{
VersionDb db;

// Try to load database of version 1.5.62.0 regardless of running executable version.
if (!db.Load(1, 5, 62, 0))
{
_FATALERROR("Failed to load database for 1.5.62.0!");
return false;
}

// Write out a file called offsets-1.5.62.0.txt where each line is the ID and offset.
db.Dump("offsets-1.5.62.0.txt");
_MESSAGE("Dumped offsets for 1.5.62.0");
return true;
}
Вместо 1, 5, 62, 0 поставьте версию, с которой вы меняете и знакомы. Сначала у вас должен быть соответствующий файл базы данных в каталоге \Data\SKSE\Plugins.

После этого в главном каталоге Skyrim должен появиться новый файл под названием "offsets-1.5.62.0.txt" или как угодно, что вы указали в качестве имени файла. Он будет в формате, в котором каждая строка:
Decimal ID<tab>Hex Offset<newline>

Например, если у вас есть адрес 142F4DEF8 (статический указатель персонажа игрока) в версии 1.5.62.0, который вы хотите сделать независимым от версии, вы должны сделать следующее:
1. Найдите 2F4DEF8 в файле смещений. Потому что это смещение без базы 140000000
2. Убедитесь, что ID 517014 (десятичный!).
3. Если вы хотите, чтобы этот адрес был в вашей DLL во время выполнения, сделайте следующее:
void* addressOf142F4DEF8 = db.FindAddressById(517014);
Вот и все.

Структура VersionDb имеет следующие функции:
Код:
bool Dump(const std::string& path); // Dump currently loaded database to file
bool Load(int major, int minor, int revision, int build); // Load a specific version if the db-major-minor-revision-build.bin exists in Data/SKSE/Plugins directory
bool Load(); // Load the version for current application
void Clear(); // Clear currently loaded database
void GetLoadedVersion(int& major, int& minor, int& revision, int& build) const; // Get the version of database file we have loaded right now
bool GetExecutableVersion(int& major, int& minor, int& revision, int& build) const; // Get the version of currently executing application
const std::string& GetModuleName() const; // Get the name of currently loaded database module, this should show "SkyrimSE.exe"
const std::string& GetLoadedVersionString() const; // Get the currently loaded version as string, e.g. "1.5.62.0"
const std::map<unsigned long long, unsigned long long>& GetOffsetMap() const; // Get the map of ID to offset if you need to iterate it manually
void* FindAddressById(unsigned long long id) const; // Find address by ID, this will already include base and be correct address. It will return NULL if not found!
bool FindOffsetById(unsigned long long id, unsigned long long& result) const; // Find offset by ID, this will just be offset without base included.
bool FindIdByAddress(void* ptr, unsigned long long& result) const; // Find ID by address, this will attempt a reverse lookup to convert address to ID
bool FindIdByOffset(unsigned long long offset, unsigned long long& result) const; // Find ID by offset, this will attempt a reverse lookup to convert offset to ID

То, что вы должны знать и иметь в виду:

1. Вы можете включить любой (или все) файлы базы данных в ваш плагин, но это может значительно увеличить размер файла (примерно на 2,5 мб). Я бы рекомендовал включать только последнюю версию (которая на момент написания статьи была 1.5.97.0), а если пользователям нужна более старая версия, вы можете указать им на эту страницу и позволить им самим скачать базу данных определенной версии. Хотя у меня нет никаких проблем, если вы решите включить все версии базы данных в свой плагин или даже загрузить их на другие сайты.

2. Вы ВСЕГДА должны загружать базу данных только один раз при запуске, инициализировать/кэшировать нужные вам адреса и позволить ей выгрузиться. Выгрузка означает, что структура VersionDb будет удалена или потеряна (если вы выделили ее в стеке). Это позволит вам не использовать ненужный объем памяти во время работы игры. Нет необходимости держать базу данных загруженной во время игры.

3. База данных содержит адреса функций, глобальных переменных, RTTI, vtables и всего остального, на что может быть ссылка. Она не содержит адресов, которые находятся в середине функций или середине глобальных переменных. Если вам нужен адрес в середине функции, вы должны найти базовый адрес функции и добавить дополнительное смещение самостоятельно.

4. Вы всегда должны проверять результат, чтобы убедиться, что база данных загрузилась успешно (bool Load returned true) и что запрашиваемые адреса действительно вернули действительный результат (не NULL). Если загрузка не удалась, это означает, что, скорее всего, отсутствует файл. Если запрос не выполняется, это означает, что адрес не может быть найден в данной версии. Это может означать, что либо код игры изменился настолько, что адрес больше не действителен для этой версии, либо сама база данных не смогла определить правильный адрес. Если произошло одно из этих событий, вам следует отменить инициализацию плагина, чтобы сообщить SKSE о неправильной загрузке. Или вручную показать сообщение об ошибке.

5. Также будет лучше, если вы проверите, существует ли адрес во всех версиях игры, прежде чем публиковать свой DLL-плагин. Для этого загрузите файл базы данных каждой версии и запросите один и тот же ID адреса в каждой из них, чтобы убедиться, что он существует:
Код:
bool LoadAll(std::vector<VersionDb*>& all)
{
static int versions[] = { 3, 16, 23, 39, 50, 53, 62, 73, 80, 97, -1 };
for (int i = 0; versions[i] >= 0; i++)
{
VersionDb * db = new VersionDb();
if (!db->Load(1, 5, versions[i], 0))
{
delete db;
return false;
}
all.push_back(db);
}
return true;
}

bool ExistsInAll(std::vector<VersionDb*>& all, unsigned long long id)
{
unsigned long long result = 0;
for (auto db : all)
{
if (!db->FindOffsetById(id, result))
return false;
}
return true;
}

void FreeAll(std::vector<VersionDb*>& all)
{
for (auto db : all)
delete db;
all.clear();
}

bool IsOk()
{
std::vector<VersionDb*> all;
if (!LoadAll(all))
{
_FATALERROR("Failed to load one or more version databases for current executable!");
FreeAll(all);
return false;
}

if (!ExistsInAll(all, 517014))
{
_FATALERROR("517014 does not exist in all versions of the database!");
FreeAll(all);
return false;
}

FreeAll(all);
// Ok!
return true;
}
Таким образом, вы можете быть уверены, что ваш DLL-мод будет работать во всех версиях, или если он не работает в некоторых версиях, вы можете написать об этом на странице вашего мода.

6. Иногда вам нужно сделать что-то другое в зависимости от версии игры. Вы можете сделать это с помощью этого фрагмента кода:
Код:
int major = 0, minor = 0, revision = 0, build = 0;
if (!db.GetExecutableVersion(major, minor, revision, build))
{
_FATALERROR("Something went wrong!");
return false;
}

// Running game is 1.5.x and at least version 1.5.39.0
if (major == 1 && minor == 5 && revision >= 39)
{
// Stuff ... ?
}
7. Пожалуйста, имейте в виду: если вы компилируете вашу SKSE DLL в режиме отладки, время загрузки базы данных может составлять около 14 секунд! В режиме релиза это время составляет около 0,2 секунды.

Credits:​

Special thanks to the author of meh321 for the work done! / Отдельная благодарность автору meh321 за проделанную работу!
Загрузил
Sado Yasashii
Загрузок
1
Просмотры
114
Релиз
Обновления
Рейтинг
0,00 звёзд Оценок: 0

Другие моды от Sado Yasashii

shape1
shape2
shape3
shape4
shape4-2
shape5
shape6
Верх Низ