logo
ar
اللغة العربية

مكتبة العناوين لمكونات SKSE الإضافية

المنشئ: meh321
تم التحديث:14/02/2024 09:19:54
2.3MB
mcafee
المصادقة
موثوق من قبل 200,000,000+ مستخدمًا

التعديلات المطلوبة مسبقًا

سيتم تثبيته تلقائيًا عند استخدام مكتبة العناوين لمكونات SKSE الإضافية

حول هذا التعديل

يحتوي على ملف رأس وقاعدة بيانات لجعل إصدارات مكونات DLL الخاصة بـ SKSE مستقلة بسهولة.
مهمة! تم تقسيم هذا الآن إلى نسختين: الطبعة الخاصة (1.5.x) وطبعة الذكرى السنوية (1.6.x). لن تتطابق المعرفات التي تشير إلى العناوين بين هذين الإصدارين (اللعبة المنفذة مختلفة جدًا بحيث لا يمكن تطابقها، وحتى لو طابقت الرمز داخل تلك الوظائف فهي مختلفة على أي حال).

وصف

لمستخدمي التعديل العاديين: تنزيل وتثبيت حزمة "الكل في واحد" من قسم الملفات. يمكنك استخدام مدير التعديل أو القيام بذلك يدويًا. يجب أن تذهب ملفات. bin إلى هنا:
البيانات/SKSE/المكونات الإضافية/
ليست هناك حاجة لك لقراءة بقية أي من هذا.

لمؤلفي المكون الإضافي skse dll:
هذا مورد تعديل (ملف رأس). يمكنك تحميل قاعدة بيانات تخزن التعويضات بحيث يمكن أن يكون المكون الإضافي لـ dll الخاص بك مستقلاً عن الإصدار دون الحاجة إلى إعادة ترجمة. يمكن تنزيل ملف الرأس من القسم الاختياري من الملفات. بالنسبة لإصدار الذكرى السنوية يسمى ملف الرأس versionlibdb.h بدلاً من versiondb.h! إذا كنت تستخدم commonlib فكل هذا مدمج بالفعل ولا تحتاج إلى أي شيء من هنا.


كيفية الاستخدام

أسرع طريقة:
المفسد:  
عرض


# تشمل "versionb.h"

باطل * MyAddress = فارغ;
غير موقعة طويلة طويلة myoffset = 0؛

bool InitializeOffsets ()
{
//تخصيص على المكدس بحيث سيتم تفريغه عند خروج هذه الوظيفة.
//لا حاجة لتحميل قاعدة البيانات بأكملها واستخدام الذاكرة دون سبب.
الإصدار db db؛

//قم بتحميل قاعدة البيانات بالإصدار القابل للتنفيذ الحالي.
إذا (! db.Load ())
{
_FATALERROR ("فشل في تحميل قاعدة بيانات الإصدار للملف التنفيذي الحالي!");

}
غير ذلك
{
//"SkyrimSE.exe", "1.5.97.0"
_MESSAGE("قاعدة بيانات محملة ل %s الإصدار %s. ", db.GetModuleName (). c_str (), db.GetLoadedVersionString (). c_str ());
}

//يتضمن هذا العنوان بالفعل العنوان الأساسي للوحدة حتى نتمكن من استخدام العنوان مباشرة.
MyAddress=db.FindAddressById(123);
إذا (MyAddress== فارغ)
{
_FATALERROR ("فشل في العثور على العنوان!");
إرجاع كاذب؛
}

//هذا الإزاحة لا يتضمن العنوان الأساسي. سيكون العنوان الفعلي هو modulebase MyOffset.
إذا (! db.FindOffsetById(123، MyOffset))
{
_FATALERROR ("فشل في العثور على تعويض لشيئي!");

}

//كل شيء كان ناجحا.
العودة صحيحة؛
}



الآن أنت تتساءل ما هي قيمة "123" هناك. هذا هو معرف العنوان. ستحتوي قواعد بيانات الإصدارات المختلفة على نفس المعرف للعنوان ولكنها قد تشير إلى قيم مختلفة. للحصول على قائمة بجميع أزواج المعرف والقيمة لإصدار معين، قم بذلك:

مفسد:  
عرض


# تشمل "versionb.h"

تفريغ المنطقي SpecificVersion ()
{
الإصدار db db؛

//حاول تحميل قاعدة بيانات الإصدار 1.5.62.0 بغض النظر عن تشغيل الإصدار القابل للتنفيذ.
if (! db.Load(1,5,62,0))
{
_FATALERROR ("فشل في تحميل قاعدة البيانات لـ 1.5.62.0!");
إرجاع كاذب؛
}

//اكتب ملفًا يسمى offsets-1.5.62.0.txt حيث يكون كل سطر هو المعرف والإزاحة.
db.Dump("offsets-1.5.62.0.txt")؛
_MESSAGE("تعويضات التخلص من 1.5.62.0")؛
العودة صحيحة؛
}



بدلاً من 1,5,62,0 ضع الإصدار الذي تعكسه ومألوفًا به. يجب أن يكون لديك ملف قاعدة البيانات المقابل في دليل /Data/SKSE/plugins أولاً.

بعد الاتصال بهذا يجب أن يكون لديك ملف جديد في دليل skyrim الرئيسي يسمى "offsets-1.5.62.0.txt" أو أي شيء تضعه كاسم الملف. سيكون في الشكل حيث كل سطر هو:
المعرف العشريالإزاحة السداسية

على سبيل المثال إذا كان لديك عنوان 142f4def8 (مؤشر ثابت لحرف اللاعب) في 1.5.62.0 تريد جعل الإصدار مستقلاً فستفعل ذلك:
1. ابحث عن 2f4def8 في ملف الإزاحة. لأن هذا هو الإزاحة دون القاعدة 140000000
2. انظر أن المعرف هو 517014 (العشرية!)
3. إذا كنت تريد هذا العنوان في dll الخاص بك في وقت التشغيل القيام بذلك:


عنوان void*of 142 f 4 def 8 = db.FindAddressById(517014);


وها هو لديك.

يحتوي بنية versiondb على الوظائف التالية:
المفسد:  
عرض


تفريغ bool (const std::string //تفريغ قاعدة البيانات المحملة حاليًا إلى الملف
تحميل bool (int major، int minor، int revision، int build)؛ //قم بتحميل إصدار محدد إذا كان db-major-minor-revition-build.bin موجودًا في دليل data/SKSE/plugins
تحميل بول (); //قم بتحميل الإصدار للتطبيق الحالي
باطل واضح (); //مسح قاعدة البيانات المحملة حاليًا
void GetLoadedVersion (int & major, int & minor, int & revision, int & build) const; //احصل على إصدار ملف قاعدة البيانات الذي قمنا بتحميله الآن
bool GetExecutableVersion (int //احصل على إصدار التطبيق المنفذة حاليًا
const std::string & GetModuleName () const; //احصل على اسم وحدة قاعدة البيانات المحملة حاليًا، ويجب أن يظهر هذا "SkyrimSE.exe"
const std::string //احصل على الإصدار المحمل حاليًا كسلسلة، على سبيل المثال. "1.5.62.0"
const std:: خريطة& GetOffsetMap () const; //احصل على خريطة المعرف لتعويضها إذا كنت بحاجة إلى تكرارها يدويًا
void * FindAddressById (معرف طويل غير موقع) const؛ //ابحث عن العنوان حسب المعرف، وسيتضمن هذا بالفعل العنوان الأساسي والصحيح. سوف تعود لاغية إذا لم يتم العثور عليها!
bool FindOffsetById (معرف طويل غير موقع، طويل غير موقع //ابحث عن الإزاحة حسب المعرف، سيتم إزاحة هذا فقط دون تضمين القاعدة.
تم العثور على bool byaddress(voil*ptr، غير موقعة طويلة طويلة //ابحث عن معرف حسب العنوان، سيحاول هذا البحث العكسي لتحويل العنوان إلى معرف
Bool findbyoffset (إزاحة طويلة غير موقعة، إزاحة طويلة غير موقعة //ابحث عن معرف حسب الإزاحة، سيحاول هذا البحث العكسي لتحويل الإزاحة إلى معرف



الأشياء التي يجب أن تعرفها وتضع في اعتبارها:

1. يمكنك تضمين أي (أو كل) من ملفات قاعدة البيانات مع المكون الإضافي الخاص بك ولكن قد يزيد حجم الملف بشكل كبير (بحوالي 2.5 ميغابايت). حتى الآن ، كان من الشائع وضع علامة على هذا التعديل باعتباره تبعية بدلاً من ذلك.

2. يجب عليك دائمًا تحميل قاعدة البيانات مرة واحدة فقط عند بدء التشغيل ، وتهيئة/تخزين العناوين المؤقتة التي تحتاجها والسماح لها بتفريغها. يعني التفريغ فقط أن بنية الإصدار يتم حذفها أو فقدانها (إذا تم تخصيصها على المكدس). سيتأكد هذا من عدم استخدام كمية غير ضرورية من الذاكرة أثناء وقت تشغيل اللعبة. ليست هناك حاجة للحفاظ على قاعدة البيانات محملة أثناء اللعب. هذه نقطة مثيرة للجدل إذا كنت تستخدم commonlib لأنه يقوم بتحميله مرة واحدة فقط بدلاً من كل dll.

3. تحتوي قاعدة البيانات على عناوين الوظائف والمتغيرات العالمية وRTTI وvtables وأي شيء آخر قد يكون له إشارة إليها. لا يحتوي على عناوين تقع في منتصف الوظائف أو منتصف العموميات. إذا كنت بحاجة إلى عنوان في منتصف الوظيفة، فيجب عليك البحث عن العنوان الأساسي للوظيفة وإضافة الإزاحة الإضافية بنفسك. كما أنه لا يحتوي على أشياء عديمة الفائدة مثل المحاذاة حول الوظائف (التي يتم الإشارة إليها في rdata)، ويتم تجاهل قسم pdata ويتم تجاهل بعض معلومات seh التي تم إنشاؤها من قبل المترجم من rdata.

4. يجب عليك دائمًا التحقق من النتيجة للتأكد من أن قاعدة البيانات التي تم تحميلها بنجاح (تم إرجاع تحميل bool صحيحًا) وأن العناوين التي تم استعلامها قد أعادت بالفعل نتيجة صالحة (وليس فارغة). إذا فشل في التحميل، فهذا يعني أن الملف كان مفقودًا على الأرجح أو الإصدار الخطأ (على سبيل المثال محاولة استخدام رأس se في ae). إذا فشل الاستعلام، فهذا يعني أنه لا يمكن العثور على العنوان في هذا الإصدار. قد يعني هذا إما أن رمز اللعبة قد تغير بما يكفي بحيث لم يعد العنوان صالحًا على الإطلاق لهذا الإصدار أو أن قاعدة البيانات نفسها فشلت في اكتشاف العنوان الصحيح. إذا حدث أي من هذه الأشياء، فيجب أن تفشل في تهيئة المكون الإضافي لإعلام skse أنك لم تحمل بشكل صحيح. أو إظهار رسالة خطأ يدويًا.

5. سيكون من الأفضل أيضًا إذا قمت بالتحقق من وجود العنوان في جميع إصدارات اللعبة قبل نشر المكون الإضافي dll الخاص بك. للقيام بذلك تحميل كل إصدار من ملف قاعدة البيانات والاستعلام عن نفس معرف العنوان في كل منها للتأكد من وجوده:
مفسد:  
عرض


bool LoadAll (std:: متجه& كلّ)
{
إصدارات int ثابتة [] = {3، 16، 23، 39، 50، 53، 62، 73، 80، 97، -1}؛
لـ (int i = 0 ؛ الإصدار [i] > = 0 ؛ i ++)
{
الإصدار * db = الإصدار الجديد ();
if (! db-> Load(1، 5، الإصدارات[i]، 0))
{
حذف ديسيبل ؛
إرجاع كاذب؛
}
all.push_back (ديسيبل);
}
العودة صحيحة؛
}

Bool existensinall (std:: vector& الكل ، معرف طويل غير موقع)
{
نتيجة طويلة غير موقعة = 0؛

{
if (! db-> FindOffsetById(id، نتيجة))

}
العودة صحيحة؛
}

void FreeAll(std::vector& كلّ)
{
لـ (ديسيبل التلقائي: الكل)
حذف ديسيبل ؛
all.clear ();
}

BooleIsOk ()
{
std::vectorجميع؛
إذا (! LoadAll(all))
{
_FATALERROR ("فشل في تحميل قواعد بيانات واحدة أو أكثر من الإصدارات للملف التنفيذي الحالي!");
حرية الكل (كل)؛
إرجاع كاذب؛
}

إذا (! Existenall(all، 517014))
{
_FATALERROR ("517014 غير موجود في جميع إصدارات قاعدة البيانات!");


}

حرية الكل (الكل);
//حسنا!
العودة صحيحة؛
}



بهذه الطريقة يمكنك التأكد من أن تعديل dll الخاص بك سيعمل في جميع الإصدارات، أو إذا لم يعمل في بعض الإصدارات، فيمكنك كتابة ذلك على صفحة التعديل الخاصة بك.

6. في بعض الأحيان ستحتاج إلى القيام بشيء مختلف بناءً على تشغيل إصدار اللعبة. يمكنك القيام بذلك باستخدام مقتطف التعليمات البرمجية هذا:
مفسد:  
عرض


int major = 0، minor = 0، revision = 0، build = 0؛
if (! db.GetExecutableVersion(رئيسي، ثانوي، مراجعة، بناء))
{
_FATALERROR ("حدث شيء خاطئ!");
إرجاع كاذب؛
}

//لعبة تشغيل هي 1.5.x والإصدار 1.5.39.0 على الأقل
إذا (رئيسي == 1 & & ثانوي == 5 & & مراجعة > = 39)
{
//أشياء... ؟
}



7. يرجى أن نضع في اعتبارك: إذا قمت بتجميع dll skse الخاص بك في وضع تصحيح الأخطاء يمكن أن يكون وقت تحميل قاعدة البيانات حوالي 14 ثانية! في وضع الإصدار، يبلغ هذا حوالي 0.2 ثانية. ويرجع ذلك إلى أن حاويات المكتبة القياسية بطيئة جدًا في هذا الوضع (خريطة std).


الأذونات

افعل ما تريد.

أفضل التعديلات لـ The Elder Scrolls V: Skyrim Special Edition

استكشف أفضل التعديلات لـ The Elder Scrolls V: Skyrim Special Edition التي تقدم ميزات جديدة، رسومات محسّنة، وطرق مثيرة لتحويل تجربة لعبك.
16/12/2025 11:53:50
قبل م
منظم التعديل 2
ModOrganizerTeam04/08/2024 16:31:44
منظم التعديل (MO) هو أداة لإدارة مجموعات التعديل ذات الحجم التعسفي. تم تصميمه خصيصًا للأشخاص الذين يحبون تجربة التعديلات وبالتالي يحتاجون إلى طريقة سهلة وموثوقة لتثبيتها وإلغاء تثبيتها.
SkyUI
schlangster04/10/2017 05:03:26
تعديل واجهة أنيق وصديق للكمبيوتر الشخصي مع العديد من الميزات المتقدمة.
تصحيح غير رسمي لإصدار Skyrim الخاص - USSEP
Arthmoor01/09/2025 07:56:09
تعديل شامل لإصلاح الأخطاء في لعبة The Elder Scrolls V: Skyrim - الإصدار الخاص. يهدف هذا التصحيح غير الرسمي للإصدار الخاص من Skyrim (المعروف أيضًا باسم USSEP) إلى إصلاح جميع الأخطاء في الإصدار الخاص من Skyrim التي لم يتم حلها رسميًا من قِبل المطورين.
تعديل تحسين الشبكة الثابتة - SMIM
Brumbek05/07/2018 02:28:26
مشروع ضخم لتحسين مظهر عدد لا يُحصى من النماذج ثلاثية الأبعاد الثابتة في سكايرم بشكل كبير. باختصار، هذه محاولتي لجعل هندسة سكايرم المعمارية، وفوضاها، وأثاثها، ومناظرها الطبيعية أجمل بكثير.
مكتبة العناوين لمكونات SKSE الإضافية
meh32114/02/2024 09:19:54
يحتوي على ملف رأس وقاعدة بيانات لجعل إصدارات مكونات DLL الخاصة بـ SKSE مستقلة بسهولة.
قائمة السباق
expired697827/01/2024 03:38:17
تم تحديث قائمة إنشاء الشخصيات بالكامل، بما في ذلك ميزات تخصيص جديدة، مثل ألوان RGBA متعددة، وألوان الجسم، واليدين، والقدمين. (يتطلب SKSE)
فورس الخمول الجديد في skyrim se-fnis se
NexusModsCaretaker19/02/2020 01:47:03
لا يوجد رسوم متحركة مخصصة ممكنة لـ skyrim؟ خطأ. تسمح سلوكيات fnis بإضافة أنواع مختلفة من الرسوم المتحركة إلى اللعبة: الخمول/الأوضاع ، التسلسل ، الأثاث ، الاقتران ، الحركات المسلحة ، المخلوقات ، وغيرها.

افتح الإمكانات الكاملة لـ The Elder Scrolls V: Skyrim Special Edition مع XMODhub — استكشف أفضل هذه التعديلات اليوم!

mcafee
المصادقة
موثوق من قبل 200,000,000+ مستخدمًا

هل تحتاج مساعدة في التحميل أو التثبيت؟ انضم إلى مجتمع ديسكورد للحصول على الدعم.

logo
اللغة

حلول الألعاب

الموارد

الشركاء

تابعنا على

discordfacebooktwitteryoutube
الدعم:
support@xmodhub.com
Xmod_Lily
الأعمال:
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