logo
id
Bahasa Indonesia

Perpustakaan Alamat untuk Plugin SKSE

Pembuat: meh321
Diperbarui:2024-02-14 09:19:54
2.3MB
mcafee
Otentikasi
Dipercaya oleh 200,000,000+ Pengguna

Tentang Mod ini

Berisi file header dan database untuk membuat plugin SKSE DLL versi independen dengan mudah.
Penting! Ini sekarang dibagi menjadi 2 versi: edisi khusus (1.5.x) dan edisi ulang tahun (1.6.x). Id yang menunjuk ke alamat tidak akan cocok antara 2 versi tersebut (permainan yang dapat dieksekusi terlalu berbeda untuk dicocokkan, dan bahkan jika kode tersebut cocok dengan kode dalam fungsi tersebut tetap berbeda).

Deskripsi.

Untuk pengguna mod biasa: Unduh dan instal paket "all-in-one" dari bagian file. Anda dapat menggunakan manajer mod atau melakukannya secara manual. File. bin harus pergi ke sini:
Data/SKSE/Plugin/
Anda tidak perlu membaca sisanya dari ini.

Untuk penulis plugin skse dll:
Ini adalah sumber daya modder (file header). Anda dapat memuat database yang menyimpan offset sehingga plugin dll Anda dapat independen dari versi tanpa perlu dikompilasi ulang. File header dapat diunduh dari bagian opsional file. Untuk edisi ulang tahun file header disebut versionlibdb.h alih-alih versiondb.h! Jika Anda menggunakan commonlib maka semua ini sudah terpasang dan Anda tidak memerlukan apa pun dari sini.


Cara menggunakannya

Cara tercepat:
Spoiler:  
Menampilkan.


# sertakan "versi b.h"

Batas* alamat saya = kosong;
Myoffset panjang yang tidak ditandatangani = 0;

bool InitializeOffsets ()
{
//alokasikan pada tumpukan sehingga akan dibongkar saat kita keluar dari fungsi ini.
//tidak perlu memuat seluruh database dan menggunakan memori tanpa alasan.
Versi db;

//memuat database dengan versi yang dapat dieksekusi saat ini.
if (! db.Load ())
{
_FATALERROR ("gagal memuat database versi untuk dapat dieksekusi saat ini!");

}
Yang lain
{
//"SkyrimSE.exe", "1.5.97.0"
_MESSAGE("database dimuat untuk %s versi %s. ", db.GetModuleName (). c_str (), db.GetLoadedVersionString (). c_str ());
}

//alamat ini sudah mencakup alamat dasar modul sehingga kita dapat menggunakan alamat tersebut secara langsung.
Alamat saya = db.FindAddressById(123);
Jika (alamat saya == kosong)
{
_FATALERROR ("gagal menemukan alamat!");
Mengembalikan palsu;
}

//offset ini tidak termasuk alamat dasar. Alamat sebenarnya adalah modulebase MyOffset.
if (! db.FindOffsetById(123, MyOffset))
{
_FATALERROR ("gagal menemukan offset untuk barang saya!");

}

//semuanya berhasil.
Kembali benar;
}



Sekarang Anda bertanya-tanya berapa nilai "123" di sana. Ini adalah ID alamat. Database versi yang berbeda akan memiliki id yang sama untuk alamat tetapi mungkin menunjuk ke nilai yang berbeda. Untuk mendapatkan daftar semua pasangan id dan nilai untuk versi tertentu, lakukan ini:

Spoiler:  
Menampilkan.


# sertakan "versi b.h"

Boolean dump SpecificVersion ()
{
Versi db;

//coba memuat database versi 1.5.62.0 terlepas dari menjalankan versi yang dapat dieksekusi.
if (! db.Load(1,5,62,0))
{
_FATALERROR ("gagal memuat database untuk 1.5.62.0!");
Mengembalikan palsu;
}

//tulis file yang disebut offsets-1.5.62.0.txt di mana setiap baris adalah id dan offset.
db.Dump("offset-1.5.62.0.txt ");
_MESSAGE("offset yang dibuang untuk 1.5.62.0 ");
Kembali benar;
}



Alih-alih 1,5,62,0 letakkan versi yang Anda balikkan dan kenal. Anda harus memiliki file database yang sesuai di direktori /Data/SKSE/plugins terlebih dahulu.

Setelah Anda memanggil ini, Anda harus memiliki file baru di direktori skyrim utama yang disebut "offsets-1.5.62.0.txt" atau apa pun yang Anda masukkan sebagai nama file. Itu akan berada dalam format di mana setiap baris adalah:
ID desimalOffset hex

Misalnya jika Anda memiliki alamat 142f4def8 (penunjuk statis karakter pemain) di 1.5.62.0 yang ingin Anda buat independen versi, Anda akan melakukan ini:
1. cari 2f4def8 di file offset. Karena ini adalah offset tanpa basis 140000000
2. lihat bahwa idnya adalah 517014 (desimal!)
3. jika Anda ingin alamat ini di dll Anda saat runtime, lakukan ini:


Batas*alamat142f4def8 = db.FindAddressById(517014);


Dan itu kamu punya.

Struktur versiondb memiliki fungsi berikut:
Spoiler:  
Menampilkan.


bool Dump (konst std::string //membuang database yang saat ini dimuat ke file
Beban bool (int major, int minor, int revisi, int build); //memuat versi tertentu jika db-major-minor-revision-build.bin ada di direktori data/SKSE/plugins
Beban bool (); //memuat versi untuk aplikasi saat ini
Kekosongan jelas (); //hapus database yang sedang dimuat
void GetLoadedVersion (int //dapatkan versi file database yang telah kami muat sekarang
bool GetExecutableVersion (int //dapatkan versi aplikasi yang sedang dijalankan
const std:: string //dapatkan nama modul database yang saat ini dimuat, ini harus menunjukkan "SkyrimSE.exe"
Konst std:: string //dapatkan versi yang saat ini dimuat sebagai string, mis. "1.5.62.0"
Konst std:: peta& GetOffsetMap () konstan; //dapatkan peta id untuk dioffset jika Anda perlu mengulanginya secara manual
void*FindAddressById (id panjang panjang tanpa tanda tangan) konst; //temukan alamat berdasarkan id, ini sudah menyertakan alamat dasar dan alamat yang benar. Itu akan kembali nol jika tidak ditemukan!
bool FindOffsetById (id panjang panjang tanpa tanda tangan, panjang panjang tanpa tanda tangan //temukan offset berdasarkan id, ini hanya akan dioffset tanpa dasar disertakan.
Bool ditemukan oleh alamat (batas*ptr, panjang panjang tidak ditandatangani //temukan id demi alamat, ini akan mencoba pencarian terbalik untuk mengubah alamat menjadi id
Bool findbyoffset (offset panjang yang tidak ditandatangani, offset panjang yang tidak ditandatangani //temukan id demi offset, ini akan mencoba pencarian terbalik untuk mengubah offset menjadi id



Hal-hal yang harus Anda ketahui dan ingat:

1. Anda dapat menyertakan file database apa pun (atau semua) dengan plugin Anda tetapi ini dapat meningkatkan ukuran file secara signifikan (sekitar 2,5 mb). Sejauh ini sudah biasa menandai mod ini sebagai ketergantungan.

2. Anda harus selalu hanya memuat database sekali saat startup, menginisialkan/cache alamat yang Anda butuhkan dan membiarkannya membongkar. Membongkar hanya berarti struktur versi dihapus atau hilang (jika Anda dialokasikan pada tumpukan). Ini akan memastikan Anda tidak menggunakan jumlah memori yang tidak perlu selama runtime game. Tidak perlu menjaga database tetap dimuat selama gameplay. Ini adalah poin yang diperdebatkan jika Anda menggunakan commonlib karena hanya memuatnya sekali, bukan untuk setiap dll.

3.database berisi alamat fungsi, variabel global, RTTI, vtables, dan alamat lainnya yang mungkin memiliki referensi ke dalamnya. Tidak berisi alamat yang berada di tengah fungsi atau di tengah global. Jika Anda memerlukan alamat di tengah fungsi, Anda harus mencari alamat dasar fungsi dan menambahkan offset tambahan sendiri. Itu juga tidak berisi hal-hal yang tidak berguna seperti penyelarasan di sekitar fungsi (yang dirujuk di rdata), bagian pdata dibuang dan beberapa informasi seh yang dihasilkan oleh kompiler dari rdata dibuang.

4. Anda harus selalu memeriksa hasilnya untuk memastikan database yang dimuat berhasil (beban bool dikembalikan benar) dan alamat yang ditanyakan benar-benar mengembalikan hasil yang valid (bukan nol). Jika gagal memuat berarti file tersebut kemungkinan besar hilang atau versi yang salah (misalnya mencoba menggunakan header se di ae). Jika kueri gagal berarti alamat tidak dapat ditemukan di versi tersebut. Ini bisa berarti kode permainan cukup berubah sehingga alamat tidak lagi valid untuk versi tersebut atau database itu sendiri gagal mendeteksi alamat yang benar. Jika salah satu hal tersebut terjadi, Anda harus gagal inisialisasi plugin untuk memberi tahu skse bahwa Anda tidak memuat dengan benar. Atau menampilkan pesan kesalahan secara manual.

5. juga akan lebih baik jika Anda memeriksa untuk memastikan alamat ada di semua versi game sebelum menerbitkan plugin dll Anda. Untuk melakukan hal itu memuat setiap versi file database dan menanyakan id alamat yang sama di masing-masing versi file database untuk memastikan adanya:
Spoiler:  
Menampilkan.


bool LoadAll (std::vektor& Semua)
{
Versi int statis [] = {3, 16, 23, 39, 50, 53, 62, 73, 80, 97, -1};
Untuk (int i=0; version[i] > = 0; i ++)
{
Versi * db = versi baru ();
if (! db-> beban(1,5, versi[i],0))
{
Menghapus db;
Mengembalikan palsu;
}
all.push_back (db);
}
Kembali benar;
}

Bool existensinall (std::vektor& semua, id panjang yang tidak ditandatangani)
{
Hasil panjang panjang yang tidak ditandatangani = 0;

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

}
Kembali benar;
}

void FreeAll(std::vektor& Semua)
{
Untuk(db otomatis: semua)
Menghapus db;
all.clear ();
}

Boolean IsOk ()
{
std::vektorSemua;
Jika (! Memuat semua (semua))
{
_FATALERROR ("gagal memuat satu atau lebih database versi untuk dapat dieksekusi saat ini!");
Gratis semua (semua);
Mengembalikan palsu;
}

Jika (! Eksissinall(semua, 517014))
{
_FATALERROR ("517014 tidak ada di semua versi database!");


}

Gratis semua (semua);
//Oke!
Kembali benar;
}



Dengan cara ini Anda dapat yakin mod dll Anda akan berfungsi di semua versi, atau jika tidak berfungsi di beberapa versi, Anda dapat menulisnya di halaman mod Anda.

6.terkadang Anda perlu melakukan sesuatu yang berbeda berdasarkan versi game yang sedang berjalan. Anda dapat melakukannya dengan cuplikan kode ini:
Spoiler:  
Menampilkan.


int major = 0, minor = 0, revisi = 0, build = 0;
if (! db.GetExecutableVersion(utama, minor, revisi, build))
{
_FATALERROR ("ada yang salah!");
Mengembalikan palsu;
}

//menjalankan game adalah 1.5.x dan setidaknya versi 1.5.39.0
Jika (major == 1 & & minor == 5 & & revisi > = 39)
{
//barang-barang...?
}



7. harap diingat: jika Anda mengkompilasi dll skse Anda dalam mode debug waktu pemuatan database bisa sekitar 14 detik! Dalam mode rilis ini sekitar 0,2 detik. Ini karena wadah perpustakaan standar sangat lambat dalam mode tersebut (peta std).


Izin

Lakukan apa pun yang kamu inginkan.

Mod hàng đầu cho The Elder Scrolls V: Skyrim Special Edition

Jelajahi mod terbaik untuk The Elder Scrolls V: Skyrim Special Edition yang menghadirkan fitur baru, visual yang ditingkatkan, dan cara menarik untuk mengubah pengalaman bermain Anda.
SkyUI
schlangster2017-10-04 05:03:26
Mod antarmuka yang elegan dan ramah PC dengan banyak fitur canggih.
Patch Edisi Khusus Skyrim Tidak Resmi - USSEP
Arthmoor2025-09-01 07:56:09
Mod perbaikan bug komprehensif untuk The Elder Scrolls V: Skyrim - Edisi Khusus. Tujuan dari Patch Edisi Khusus Skyrim Tidak Resmi (alias USSEP) adalah untuk memperbaiki setiap bug di Edisi Khusus Skyrim yang belum diselesaikan secara resmi oleh pengembang.
Penyelenggara mod 2
ModOrganizerTeam2024-08-04 16:31:44
Mod Organizer (MO) adalah alat untuk mengelola koleksi mod dengan ukuran apa pun. Ini dirancang khusus untuk orang yang suka bereksperimen dengan mod dan dengan demikian memerlukan cara yang mudah dan andal untuk menginstal dan menghapus instalasinya.
Mod Peningkatan Mesh Statis - SMIM
Brumbek2018-07-05 02:28:26
Sebuah proyek besar untuk meningkatkan tampilan berbagai model 3D statis di Skyrim secara signifikan. Intinya, ini adalah upaya saya untuk membuat arsitektur, kekacauan, furnitur, dan lanskap Skyrim jauh lebih indah.
Perpustakaan Alamat untuk Plugin SKSE
meh3212024-02-14 09:19:54
Berisi file header dan database untuk membuat plugin SKSE DLL versi independen dengan mudah.
Menu Balapan
expired69782024-01-27 03:38:17
Perombakan total menu pembuatan karakter, termasuk fitur kustomisasi baru seperti beberapa warpaint RGBA, cat tubuh, cat tangan, dan cat kaki. (Memerlukan SKSE)
Fores menganggur baru di skyrim se-fnis se
NexusModsCaretaker2020-02-19 01:47:03
Tidak ada animasi khusus yang mungkin untuk skyrim? Salah. Perilaku fnis memungkinkan untuk menambahkan berbagai jenis animasi ke game: idles/pose, diurutkan, furnitur, berpasangan, killmove, makhluk, dan lainnya.
Peta Dunia Berkualitas
Chesko2016-12-11 16:48:33
Menyediakan serangkaian tekstur peta dunia 3D atau kertas yang sangat detail, lengkap dengan jalan! Juga menambahkan peta Solsteim yang detail.

Buka potensi penuh The Elder Scrolls V: Skyrim Special Edition dengan Xmod — jelajahi mod teratas ini hari ini!

mcafee
Otentikasi
Dipercaya oleh 200,000,000+ Pengguna

Butuh bantuan dengan unduhan atau instalasi? Bergabunglah dengan komunitas Discord kami untuk dukungan!

logo
Bahasa

Solusi Gaming

Sumber Daya

Mitra

Ikuti kami di

discordfacebooktwitteryoutube
dc@xmodhub.com or cathy@business.xmodhub.com
Discord: catherine_79237
Syarat dan Ketentuan
Kebijakan Privasi
Dukungan

Larvas Limited

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