شرح أنواع القيم في Cheat Engine: البايت، الفاصلة العائمة، النصوص وAOB
Byte و2/4/8 Bytes و Float و Double و String و Array of byte: ما الذي يخزنه كل نوع، الفرق بين الموقّع وغير الموقّع، ترتيب البايتات little-endian، وكيف تختار النوع عندما لا تعرفه.
كل فحص في Cheat Engine يطرح سؤالين: ما القيمة التي تبحث عنها، وكيف تُخزَّن؟ السؤال الثاني هو القائمة المنسدلة Value Type، واختيار النوع الخاطئ هو السبب الأكثر شيوعًا لعدم عثور الفحص على أي نتيجة. يشرح هذا الدليل كل نوع، وكيف تُرتَّب الأرقام في الذاكرة، وكيف تختار النوع عندما لا تعرف ما تستخدمه اللعبة.
تفترض الأمثلة أنك تعرف مسبقًا كيف تجري First Scan وNext Scan. إن لم تكن تعرف، فابدأ بـشرح Cheat Engine للمبتدئين. وكما هو الحال دائمًا، استخدم هذه الأساليب في الألعاب الفردية وبدون اتصال فقط، وانسخ ملفات الحفظ احتياطيًا قبل تغيير أي شيء.
لماذا يهم النوع
الذاكرة ليست سوى صف طويل من البايتات. الرقم 1000 لا يُخزَّن على شكل الأحرف "1" و"0" و"0" و"0"، بل يُخزَّن كنمط ثنائي، ويعني النمط نفسه شيئًا مختلفًا بحسب طريقة قراءته. أربعة بايتات تمثل 1000 كعدد صحيح تمثل رقمًا صغيرًا جدًا لا يُقرأ كعدد عائم. عندما تحدد النوع في Cheat Engine فأنت تخبره بعدد البايتات التي يقرؤها عند كل عنوان وكيف يفسرها. وإذا كان النوع خاطئًا فلن تتطابق القيمة التي كتبتها أبدًا.
نظرة سريعة على الأنواع
| النوع | الحجم | المدى | الاستخدام المعتاد في الألعاب |
|---|---|---|---|
| Byte | 1 byte | من 0 إلى 255 (موقّع: من -128 إلى 127) | الأعلام، العدادات الصغيرة، المستويات، كميات العناصر المحدودة بـ 99 |
| 2 Bytes | 2 bytes | من 0 إلى 65,535 (موقّع: من -32,768 إلى 32,767) | الألعاب القديمة، نقاط الإحصائيات، أكوام المخزون |
| 4 Bytes | 4 bytes | من 0 إلى 4,294,967,295 (موقّع: حوالي ±2.1 مليار) | المال، الذخيرة، الخبرة، معظم الأعداد الصحيحة |
| 8 Bytes | 8 bytes | من 0 إلى حوالي 1.8 x 10^19 (موقّع: حوالي ±9.2 x 10^18) | العملات الضخمة جدًا، الطوابع الزمنية، المؤشرات في ألعاب 64 بت |
| Float | 4 bytes | حوالي 7 أرقام معنوية | الصحة، التحمل، المواضع، السرعة، المؤقتات |
| Double | 8 bytes | حوالي 15 إلى 16 رقمًا معنويًا | المحركات وبيئات السكربت التي تستخدم الدقة المضاعفة |
| String | متغير | نص، ASCII أو UTF-16 | أسماء الشخصيات، أسماء العناصر، الحوارات |
| Array of byte | متغير | أي تسلسل من البايتات، مع السماح بالرموز البديلة | توقيعات الشيفرة، البنى الخام |
أنواع الأعداد الصحيحة: Byte و2 Bytes و4 Bytes و8 Bytes
هذه أعداد صحيحة: بلا فاصلة عشرية، مجرد عدّ. الاسم يخبرك بعدد البايتات التي يستخدمها كل نوع. 4 Bytes هو الافتراضي في Cheat Engine لأنه الأكثر شيوعًا بفارق كبير للعدّ في الألعاب الحديثة. أما الرقم الذي قد يتجاوز 4.29 مليار تقريبًا، مثل عملة المراحل المتأخرة في لعبة تزايدية، فيحتاج إلى 8 Bytes. والقيم التي لا تتجاوز 255 تُحزَم أحيانًا في Byte واحد لتوفير المساحة، خاصة في الألعاب القديمة ولأعلام التشغيل/الإيقاف.
موقّع وغير موقّع
يمكن قراءة البتات نفسها كقيمة موقّعة (تسمح بالأرقام السالبة) أو غير موقّعة (من الصفر فما فوق). في 4 Bytes يكون النمط FF FF FF FF هو -1 عند كونه موقّعًا و4,294,967,295 عند كونه غير موقّع. الفحص نفسه يقارن نمط البتات، لذا يهم ذلك غالبًا في طريقة عرض القيم فقط. يمكنك تبديل عرض إدخال بين موقّع وغير موقّع من قائمة النقر بالزر الأيمن في قائمة العناوين. إذا ظهرت قيمة فجأة كرقم ضخم بعد خفضها إلى ما دون الصفر، فأنت تنظر إلى قيمة موقّعة معروضة كغير موقّعة، أو أن اللعبة تجاوزت الحد الأدنى.
ترتيب البايتات: little-endian مع مثال عملي
تستخدم أجهزة ويندوز ترتيب little-endian: يُخزَّن البايت الأقل أهمية أولًا. يهم هذا بمجرد أن تنظر إلى الذاكرة في عرض hex في Memory Viewer، أو تكتب نمط Array of byte يدويًا.
لنأخذ الرقم 1000 مخزّنًا كـ 4 Bytes:
- الرقم 1000 بالنظام السداسي عشري هو
3E8. - بعد إكماله إلى أربعة بايتات يصبح
00 00 03 E8، مكتوبًا بالبايت الأكثر أهمية أولًا، كما يكتب الناس الأرقام عادة. - يعكس little-endian ترتيب البايتات، فترى في الذاكرة
E8 03 00 00.
الرقم نفسه كـ 2 Bytes هو E8 03، وكـ 8 Bytes هو E8 03 00 00 00 00 00 00. تنعكس البايتات فقط، وليست الأرقام السداسية عشرية داخل البايت: يبقى E8 كما هو E8.
تتبع الأعداد العائمة القاعدة نفسها. العدد العائم 100.0 له نمط البتات 42C80000، ويوجد في الذاكرة كـ 00 00 C8 42. والعدد 1.0 هو 3F800000، ويُخزَّن كـ 00 00 80 3F. حساب هذه القيم يدويًا مرهق؛ يعرض محوّل القيم أي رقم بالنظام العشري وhex وبايتات little-endian لكل نوع جنبًا إلى جنب.
الفاصلة العائمة: Float وDouble
يخزّن Float الأرقام ذات الجزء الكسري. تستخدمه الألعاب لكل ما يتغير بسلاسة أو يحتاج إلى كسور عشرية: صحة تتجدد بمعدل 0.3 في كل نبضة، وموضع الشخصية X وY وZ، وسرعة الحركة، ووقت التبريد بالثواني. شريط الصحة الذي لا يحمل رقمًا هو في الغالب Float، إما يحمل الصحة الفعلية (مثل 87.5) أو كسرًا من 0.0 إلى 1.0.
Double هو الفكرة نفسها بـ 8 بايتات ودقة أعلى بكثير. ألعاب أقل تستخدمه لقيم اللعب، لكن بعض المحركات وبيئات السكربت تخزّن كل الأرقام كـ double. إذا فشل فحص Float لقيمة ذات كسور، فجرّب Double بعده.
ولأن الأعداد العائمة نادرًا ما تكون دقيقة، لا يشترط Cheat Engine تطابقًا تامًا. عند اختيار Float أو Double تعرض لوحة الفحص خيارات التقريب؛ والوضع الافتراضي المقرّب يسمح للبحث عن 87 بمطابقة 87.4 وقيم مشابهة. وعندما لا يكفي ذلك، استخدم نوع الفحص Value between مع نطاق صغير، أو انتقل إلى Unknown initial value واستخدم فحصَي Increased وDecreased.
النص: String بصيغة ASCII وUTF-16
يبحث فحص String عن نص. تخزّن الألعاب النصوص بترميزات مختلفة، ويتيح لك Cheat Engine الاختيار:
- ASCII أو نص بايت واحد: بايت واحد لكل حرف. "Hi" هي
48 69. - UTF-16: بايتان لكل حرف، شائع في برامج ويندوز والمحركات. "Hi" هي
48 00 69 00. فعّل خيار UTF-16 عند الفحص.
هناك أيضًا خيار حساسية حالة الأحرف. البحث عن اسم شخصية طريقة سريعة للعثور على بنية البيانات الخاصة بها، لأن الإحصائيات غالبًا ما تُخزَّن بالقرب منها. احذر عند تغيير النصوص: كتابة نص أطول من الأصلي تكتب فوق ما يليه في الذاكرة.
Array of byte (AOB)
يبحث Array of byte عن تسلسل دقيق من البايتات، مكتوب بنظام hex ومفصول بمسافات، مثل E8 03 00 00. يمكنك استخدام ?? كرمز بديل لأي بايت، فيطابق 89 83 ?? ?? 00 00 عدة صيغ. نادرًا ما تُستخدم AOB للعثور على قيم اللعب مباشرة. مهمتها الرئيسية هي إيجاد جزء محدد من شيفرة اللعبة مرة أخرى بعد إعادة التشغيل، وبهذا تحدد سكربتات Auto Assembler الشيفرة التي تعدّلها.
النوع "All"
عند اختيار All يفحص Cheat Engine قيمتك عبر عدة أنواع رقمية في وقت واحد، وتوضح النتائج النوع الذي وُجد به كل تطابق. يمكن تعديل الأنواع المشمولة من إعدادات Cheat Engine. All مفيد عندما تتعثر، لكنه ينتج نتائج أكثر بكثير ويعمل بشكل أبطأ، لذا اعتبره حلًا احتياطيًا لا عادة.
كيف تختار النوع عندما لا تعرفه
جرّب هذه الخطوات بالترتيب، وابدأ New Scan جديدًا كلما فشل نوع:
- عدد صحيح معروض على الشاشة (ذهب، ذخيرة، نتيجة): ابدأ بـ 4 Bytes وExact Value.
- أي شيء فيه كسور أو شريط أو موضع: جرّب Float. استخدم Unknown initial value إذا لم يكن هناك رقم ظاهر.
- لم يجد Float شيئًا: جرّب Double.
- رقم صغير لا يتجاوز 255 أو 65,535: جرّب Byte أو 2 Bytes.
- رقم ضخم جدًا: جرّب 8 Bytes.
- ما زال لا شيء: جرّب All، ثم أعد التفكير في ما إذا كان الرقم المعروض هو المخزَّن. تخزّن الألعاب أحيانًا قيمة مضروبة في 10 أو 100، أو تخزّن الحد الأقصى والكمية المستخدمة بدل الكمية المتبقية، أو تبقيها مشفّرة. في هذه الحالات يكون Unknown initial value مع فحصَي Increased وDecreased هو الطريق الموثوق.
عندما تجد مرشحًا، تأكد منه بتغييره في قائمة العناوين ومراقبة اللعبة، ثم دوّن النوع في وصف الإدخال كي تتذكره لاحقًا.
الأنواع المخصصة والأقل شيوعًا
يحتوي Cheat Engine أيضًا على نوع Binary للبتات الفردية، ويدعم أنواعًا مخصصة تُعرَّف بسكربت صغير. تتضمن الإصدارات الحديثة بعض الأنواع المخصصة جاهزة، مثل صيغ big-endian للحالات النادرة التي تخزّن فيها اللعبة الأرقام بترتيب البايتات المعاكس. لن تحتاج إليها كثيرًا، لكن من المفيد معرفة وجودها عندما تفشل الأنواع القياسية في لعبة غير اعتيادية.
الخلاصة
- 4 Bytes للأعداد الصحيحة، وFloat للكسور والأشرطة، وDouble كالتخمين التالي، وByte و2 Bytes للقيم الصغيرة، و8 Bytes للقيم الضخمة جدًا.
- الموقّع وغير الموقّع قراءتان للبتات نفسها.
- الذاكرة little-endian: الرقم 1000 كـ 4 Bytes هو
E8 03 00 00. - تأتي النصوص بصيغتي ASCII وUTF-16؛ وأنماط AOB تبحث عن بايتات خام مع رموز
??البديلة. - استخدم محوّل القيم للتحقق من تخطيط البايتات بدل حسابها يدويًا.
التعليقات
لا توجد تعليقات بعد
كن أول من يشارك رأيه.