logo
pl
Polski

Biblioteka adresów dla wtyczek SKSE

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

Moduły wymagane wstępnie

zostanie automatycznie zainstalowany po użyciu Biblioteka adresów dla wtyczek SKSE

O tym modzie

Zawiera plik nagłówkowy i bazę danych, dzięki czemu wtyczki DLL SKSE mogą być łatwo niezależne od wersji.
Ważne! Teraz jest podzielona na 2 wersji: Special Edition (1.5.x) i Anniversary Edition (1.6.x). ID, które wskazują adresy, nie pasują między tymi dwoma wersjami (wykonywane gra jest zbyt różna, aby pasować, a nawet jeśli pasują do kodu tych funkcji różne).

Opis

Dla normalnych użytkowników MOD: Zawierajcie i zinstalować pakiet "Wszystko w jedno" z sekcji Plików. Możesz używać Manager Mod lub zrobić to ręcznie. Piki. bin powinny tu zostać:
Dane/SKSE/Wtyczka/
Nie ma potrzeby przeczytać resztę tego.

Dla autorów włączenia DLL SKSE:
To zasoby moddera (plik zagłowy). Możesz załadować bazę danych, która przechowywała kompensaty, tak, że twoja włączka DLL może być niezależna bez wymagania Plik zagłówka można zawierać z opcjonalnej sekcji pliku. W wydaniu rocznicy pliku główka nazywa się versionlibb.h zamiast versionDb.h! Jeśli używasz Commonlib, to wszystko jest już wbudowane i nic stąd nie potrzebujesz.


Jak stosować

Najszybszy sposób:
Spoiler:  
Pokaż


# Włączenie "versiondb.h"

void * myaddres=NULL;
Niezpisane długi myoffset = 0;

bool InitializeOffsets ()
{
//Przydzielaj na stack, tak zostanie rozładowany gdy wychodzimy z tej funkcji.
//Nie potrzebują załadowania całej bazy danych i używania pamięci bez powodu.
Wersję DB;

//Zładź bazę danych z aktualną wersją wykonującą.
if (! db.Load ())
{
_FATALERROR ("Nie udało się wciągnąć bazy danych wersji dla aktualnego wykonującego!");

}
Inaczej
{
//"SkyrimSE.exe", "1.5.97.0"
_MESSAGE ("Zładowana bazę danych dla %s wersji %s.", db.GetModuleName (). c_str (), db.GetLoadedVersionString (). c_str ());
}

//Adres ten zawiera już bazowy adres modułu, więc możemy użyć adresu bezpośrednio.
Myaddres=db.FindAddressById(123);
if (myaddres== NULL)
{
_FATALERROR ("Nie znalazły adresa!");
Zwrócić fałszy;
}

//Ten zmian nie obejmuje adres bazowego. Prawdziwy adres byłby Modulebase + MyOffset.
if (! db.FindOffsetById(123, MyOffset))
{
_FATALERROR ("Nie znalazłem kompensacie dla mojego rzeczy!");

}

//Wszystko było sukcesne.
Wrócić true;
}



Zastanawiajcie się, jaką jest to wartość "123". To identyfikacja adres. Różne wersji bazy danych będą mieli ten sam ID dla adres, ale może wskazać na różne wartości. Aby otrzymać listę wszystkich parów ID i wartości dla konkretnej wersji, zrób to:

Spoiler:  
Pokaż


# Włączenie "versiondb.h"

Dump booleński SpecificVersion ()
{
Wersję DB;

//Spróbuj załadować bazę danych wersji 1.5.62.0 bez względu na wykonanie wykonalnej wersji.
Jeśli (! db.Load(1,5,62,0))
{
_FATALERROR ("Nie udało się ładowania bazy danych dla 1.5.62.0!");
Zwrócić fałszy;
}

//Napisz plik o nazwie offsets-1.5.62.0.txt, gdzie każda linia jest ID i offset.
db.Dump ("offsets-1.5.62.0.txt");
_MESSAGE ("zostawione kompensaty za 1.5.62.0");
Wrócić true;
}



Zamiast 1, 5, 62, 0 położyć wersję, która odwróciłeś i znajdziesz. Najpierw musisz mieć odpowiednią pliku bazy danych w katalogu /Data/SKSE/ plugins.

Po tym, jak to nazywasz, powinniście mieć nowy plik w głównym katalogu Skyrim nazywany "offsets-1.5.62.0.txt" lub cokolwiek umieściłeś jako nazwę pliku. Będzie to w formacie, w którym każda linia jest:
ID dziesiętkowegoOffset hex

Na przykład jeśli masz adres 142F4Def8 (statyczny wskaznik znaku gracza) w 1.5.62.0, który chcesz zrobić niezależną wersji, zrobiłbyś to:
1. Szukaj 2F4Def8 w pliku kompensatora. Bo to jest zmian bez bazy 140000000
2. Zobacz, że ID jest 517014 (dziesiątkowa!)
3. Jeśli chcesz tego adres w swoim DLL w czasie wykonania, zrób to:


void* adresso142f4def8 = db.FindAddressById(517014);


I masz to.

Strukt wersjonDB ma następujące funkcje:
Spoiler:  
Pokaż


bool Dump (const std:: string & path); //Złożyć obecnie załadowaną bazę danych do
bool Load (int major, int minor, int revision, int build); //Zładź konkretną wersją, jeśli db-major-minor-revision-build.bin istnieje w katalogu data/SKSE/ plugins
bool Load (); //Zładź wersja dla bieżącego programu
void Clear (); //Oczyścić obecnie załadowaną bazę danych
void GetLoadedVersion (int & major, int & minor, int & revision, int & build) const; //Zdobyć wersji pliku bazy danych, który należy teraz załadować
bool GetExecutableVersion (int & major, int & minor, int & revision, int & build) const; //Zdobyć wersja obecnie wykonującej aplikacji
const std:: string & GetModuleName () const; //Zdobyć nazwisko modułu bazy danych, powinno pokazać "SkyrimSE.exe"
const std:: string & GetLoadedVersionString () const; //Zabierz obecnie załadowaną wersją jako strzyning, np. "1.5.62.0"
const std:: Mapa& GetOffsetMap () const; //Zdobyć mapę ID do kompensowania jeśli potrzebujesz ją ręcznie iteracji
void* FindAddressById (niezpisane długi ID) const; //Znaleźć adres po identyfikacji, to już będzie włączony bazę i być prawdziwy adres. Wróci NULL, jeśli nie znaleziono!
bool FindOffsetById (niezpodpisany długi ID, niezpodpisany długi & rezultatem) const; //Znaleźć zmieniony przez ID, zmieniony to bez włączenia bazy.
bool FindIdByAddress (void * ptr, niezpisane długi & rezultat) const; //Znaleźć ID po adresie, próbuje to odwrotnego poszukiwania do konvertowania adres do ID
bool FindIdByOffset (niezpisane długe długe offset, niezpisane długe długe & rezultat) const; //Znaleźć ID przez zmianę, próbuje to odwrotnego poszukiwania do przekonania zmianowienia



Powinnaś wiedzieć i pamiętać:

1. Możesz włączyć każdy (lub wszystkie) pliki bazy danych z włączeniem, ale może znacznie zwiększyć rozmiar pliku (o około 2,5 MB). Do tej pory było powszechne oznaczenie ten mod jako zależność.

2. Zawsze powinniście należy należy należać tylko raz podczas rozpoczęcia, inicjatyzować/zakechać potrzebne adresy i Wyładanie oznacza tylko, że strukturę wersjonDB zostaje usunęta lub stracona (jeśli przydzieliście na stoku). To zapewni, że nie używasz niepotrzebnej ilości pamięci podczas czasu wykonania gry. Nie ma potrzeby utrzymać bazy danych podczas gry. To jest problem, jeśli używasz Commonlib, ponieważ ładuje go tylko raz zamiast każdego DLL.

3. Baza danych zawiera adresy funkcji, globalnych zmiennych, RTTI, vtables oraz wszystkich innych, które mogą mieć do niego odniesienia. Nie zawiera adresów, które są w środku funkcji lub w środku globalów. Jeśli potrzebujesz adres w środku funkcji, powinniście poszukać adres bazy funkcji i dodać dodatkowe zmianowanie. Nie zawiera również bezużytecznych rzeczy, takich jak wyrównoważenie wokół funkcji (które są odniesione w rdata), odrzucona sekcja PDATA i niektóre informacje SEH z rdata jest odrzucona.

4. Zawsze powinniście sprawdzić wynik, aby się upewnić, że bazy danych z powodu powodowania (Bool load odwróciła true) oraz że wypytane adresy faktycznie zwróciły wynik (nie NULL). Jeśli nie udało się załadać, oznacza, że pliku brakuje najprawdopodobniejszy lub złą wersja (np. próba użycia zagłówka SE w AE). Jeśli zapytanie nie zostanie odnaleziony adres w tej wersji. Może to oznaczać, że kod gry zmienił się wystarczająco, że adres nie jest już ważny dla tej wersji, albo sam bazy danych nie wykrył odpowiedniego adresu. Jeśli się stało, powinniście zawiązać inicjatywę włączenia, by powiedzieć, że nie naladłeś prawdziwe. Albo ręcznie pokazać wiadomość o błędzie.

5. Najlepiej byłoby również, gdybyś sprawdził, aby upewnić się, że adres istnieje we wszystkich wersjach gry przed opublikowaniem twojego włączenia DLL. Aby to zrobić, naladź każdą wersję pliku bazy danych i zpytać ten sam ID adresu w każdym z nich, aby upewnić się, że istnieje:
Spoiler:  
Pokaż


bool LoadAll (std:: vector& Wszystko)
{
Statyczne wersje int [] = {3, 16, 23, 39, 50, 53, 62, 73, 80, 97, -1};
Dla (int i = 0; wersja [i] > = 0; i ++)
{
Wersję db*db = nowa wersję db ();
if (! db-> Load(1,5, wersji [i], 0))
{
Usunąć db;
Zwrócić fałszy;
}
all.push_back (db);
}
Wrócić true;
}

Bool existinall (std:: vector& Wszystko, niezpodpisane długi ID)
{
Niezpisane długi długi rezultaty = 0;

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

}
Wrócić true;
}

void FreeAll (std:: vector& Wszystko)
{
for (auto db: wszystko)
Usunąć db;
all.clear ();
}

Boolean IsOk ()
{
std:: vectorWszystkie;
Jeśli (! LoadAll (wszystko))
{
_FATALERROR ("Nie udało się załadowania jednej lub więcej bazy danych wersji dla aktualnego wykonania!");
Freeway (wszystko);
Zwrócić fałszy;
}

Jeśli (! ExistinAll (wszystko, 517014))
{
_FATALERROR ("517014 nie istnieje w wszystkich wersjach bazy danych!");


}

Freeway (wszystko);
//Ok!
Wrócić true;
}



W ten sposób możesz być pewny, że twój mod DLL będzie działać w wszystkich wersji, albo jeśli nie działa w niektórych wersji możesz to napisać na stronie Mod.

6. Czasami będziesz musiał zrobić coś innego w oparciu o wykonaniu wersji gry. Możesz to zrobić z tym fragmentem kodu:
Spoiler:  
Pokaż


int major = 0, minor = 0, revizja = 0, build = 0;
if (! db.GetExecutableVersion (major, minor, revision, build))
{
_FATALERROR ("Coś poszło nie tak!");
Zwrócić fałszy;
}

//Biegna gry jest 1.5.x i przynajmniej wersja 1.5.39.0
if (major = = 1 & minor = 5 & & revizja > = 39)
{
//Rzeczy...?
}



7. Pamiętaj: jeśli skompilujesz swój SKSE DLL w modu debug, czas ładowania bazy danych może być około 14 sekund! W modu wypuściu to około 0,2 sekundy. Wywada to z powodu bardzo wolnego kontenerów bibliotek w tym modelu (mapa STD).


Zezwolenia

Rób co chcesz.

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.
2025-12-16 11:53:50
Mod konieczny
Organizator Mod 2
ModOrganizerTeam2024-08-04 16:31:44
Mod Organizator (MO) – narzędzie zarządzania zbierkami Mod o arbitrariowym rozmiarze. Szczególnie zaprojektowany dla ludzi, którzy lubią eksperymentować z modami i zatem potrzebują łatwego i wiarygodnego sposobu do ich instalacji i
SkyUI
schlangster2017-10-04 05:03:26
Elegancki, przyjazny dla komputerów PC mod z wieloma zaawansowanymi funkcjami.
Nieoficjalna łatka do edycji specjalnej Skyrim – USSEP
Arthmoor2025-09-01 07:56:09
Kompleksowy mod naprawiający błędy w The Elder Scrolls V: Skyrim - Special Edition. Celem nieoficjalnej łatki do Skyrim Special Edition (znanej również jako USSEP) jest ostateczne naprawienie wszystkich błędów w Skyrim Special Edition, które nie zostały oficjalnie rozwiązane przez twórców.
Modyfikacja ulepszająca siatkę statyczną – SMIM
Brumbek2018-07-05 02:28:26
Ogromny projekt mający na celu znaczną poprawę wyglądu niezliczonych statycznych modeli 3D w Skyrimie. Zasadniczo jest to moja próba uczynienia architektury, bałaganu, mebli i krajobrazu Skyrima o wiele ładniejszymi.
Biblioteka adresów dla wtyczek SKSE
meh3212024-02-14 09:19:54
Zawiera plik nagłówkowy i bazę danych, dzięki czemu wtyczki DLL SKSE mogą być łatwo niezależne od wersji.
Menu wyścigu
expired69782024-01-27 03:38:17
Całkowicie przeprojektowano menu tworzenia postaci, w tym nowe funkcje personalizacji, takie jak wiele farb wojennych RGBA, farb do ciała, farb do rąk i stóp. (Wymagane SKSE)
Nowy wypadki w Skyrim SE-FNIS SE
NexusModsCaretaker2020-02-19 01:47:03
Nie można dostosować animację dla Skyrim? Mylne. Behavioryjność FNIS pozwala dodać różne rodzaje animacji do gry: pozycje, sekwencje, mebli, parowane, killmoves, kreatury i inne.

Odblokuj pełny potencjał The Elder Scrolls V: Skyrim Special Edition z XMODhub — 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
Wsparcie:
support@xmodhub.com
Xmod_Lily
Biznes:
dc@xmodhub.com or cathy@business.xmodhub.com
catherine_79237

Larvas Limited

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