منتدي اكواد

منتدي اكواد (https://code.vpscairo.com/index.php)
-   تطوير سيرفرات كونكر (https://code.vpscairo.com/forumdisplay.php?f=11)
-   -   ازاي احلل بكيتات (https://code.vpscairo.com/showthread.php?t=2306)

Rider 2019-09-19 03:54 AM

ازاي احلل بكيتات
 
منقول من Mahmoud Zahran


لينك الموضوع الاصلي
عفواً لايمكن عرض الروابط إلا بعد الرد على الموضوع
موضوع اخر عليك ان تراه
عفواً لايمكن عرض الروابط إلا بعد الرد على الموضوع
موضوع اخر
عفواً لايمكن عرض الروابط إلا بعد الرد على الموضوع

المقدمة
مرحبا ، هذه هي المره الثالثة لي في كتابة هذا. أفترض أنك تشاهد هذا الموضوع التعليمي لأن لديك اهتمام بالبرمجة مع Packets. قبل أن نبدأ ، يجب أن تعرف قليلاً عن أساسيات البرمجة في C #. إذا كنت جديدًا نسبيًا ، فلا بأس بذلك. سأقضي الكثير من وقتي في هذا البرنامج التعليمي لمراجعة المفاهيم. بشكل عام ، يعد هذا مكانًا جيدًا للبدء إذا كنت ترغب في المراجعة في وقتك الخاص: دليل البرمجة C #
كود:

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/
. إذا كان لديك سؤال بالنسبة لي في أي وقت ، فلا تتردد في الرد أدناه وسأبذل قصارى جهدي للإجابة أو إعادة توجيهك إلى مقال جيد.



Sockets
قبل أن نتحدث عن packets ، دعنا نتحدث عن sockets. Sockets هي وسيلة لتطبيقين للتحدث إلى بعضهم البعض عبر شبكة. يمكنك التفكير في هذا كخط هاتف ، حيث يكون كل طرف هو هاتف (أو مقبس). عندما يكون اكونت Conquer جاهزًا للتحدث إلى خادم اللعبة ، يقوم بطلبه. يستمع خادم اللعبة لهذه المكالمة من العميل ، وسيقبل المكالمة بمجرد وصولها. كيف يتحدثون أين يأتي packets و protocols. تساعدنا Protocols في تحديد كيفية التحدث عبر شبكة ، بينما تحتوي packets على رسالتنا الفعلية . يستغرق دقيقة واحدة لمراجعة الفيديو أدناه حول الإنترنت والحزم والبروتوكولات.





في Conquer Online ، نستخدم TCP / IP لتحديد كيفية تبادل الرسائل بين العميل والخادم. يعرّف IP كيفية توجيه الحزمة إلى الخادم ، بينما يعرّف TCP كيفية تقسيم الحزم وإعادة تجميعها بالترتيب الصحيح (كلاهما مبين في الفيديو أعلاه). ومع ذلك ، فإننا نرى الحزم كاملة (بالنسبة للجزء الأكبر). لا داعي للقلق بشأن كيفية وصوله إلى الخادم ؛ نحن بحاجة فقط إلى التركيز على ما يقولون.


ترتيب البايت
لفهم كيف يتحدث Conquer Online ، علينا أن نفهم كيف يطلب الكلمات (بالمعنى المجازي والحرفي). أفضل تمثيل للرسائل هو صفيف وحدات البايت (وحدات البايت هي أصغر وحدة يمكن معالجتها في البرمجة). على سبيل المثال ، في السلسلة "Hello World" (بافتراض ترميز ASCII) ، يكون كل حرف بايت واحد. لذلك ، ستظهر رسالة "Hello World" على أنها الحزمة التالية:
كود بلغة HTML:

H  e  l  l  o    W  o  r  l  d
[48 65 6C 6C 6F 20 57 6F 72 6C 64]

إذا كنت مرتبكًا ، فسيظهر ما ورد أعلاه بالسداسي عشري. راجع جدول عفواً لايمكن عرض الروابط إلا بعد الرد على الموضوع لتحويل الأحرف إلى بايت. لقد استخدمت ست عشرية لأن نطاق البايت بالعدد العشري هو من 0 إلى 255. 255 هو رقم قبيح للعمل معه. في الست عشري ، يكون النطاق من 0 إلى FF. FF هو رقم أسهل للعمل به كسقف نظرًا لأنه أعلى رقم يمكن أن يكون لرقمين. وهذا يعني أن أي عدد أكبر من FF أو رقمين يمكن أن يتدفق بشكل جيد إلى البايت التالي من رسالتنا.

بالنسبة للأرقام التي يزيد حجمها عن 255 ، مثل كلمة (ushort) ، أو كلمة مزدوجة (uint) ، أو كلمة رباعية (ulong) ، فإن قيمة هذا الرقم تفيض إلى البايتات التالية. على سبيل المثال ، الكلمة 1024 في الست عشري هي 400. سيتم تقسيم هذا عبر وحدتي بايت كـ 4 و 00. المشكلة هي ، في أي ترتيب؟ يمكن أن تكون إما مكتوبة كـ [04 00] أو [00 04]. وهذا ما يسمى ترتيب البايت ، ويشبه إلى حد كبير لهجة للتحدث.

هناك نوعان من أوامر البايت: Little Endian و Big Endian. الهدف من Big Endian هو تخزين البايت الأكثر أهمية في أصغر عنوان. هذا يعني أن الرقم السداسي العشري لدينا وهو 400 سيظهر كـ [04 00]. هذا سهل القراءة ، لأنه يقرأ من اليسار إلى اليمين. هدف Little Endian هو تخزين البايت الأقل أهمية في أصغر عنوان. هذا يعني أن الرقم السداسي عشر لدينا هو 400 سيظهر كـ [00 04]. هذا يقرأ إلى الوراء ، ولكن القيمة في القيام بذلك هي أن رقمًا مثل 5 يتم تحويله من كلمة إلى بايت لا يتطلب تغيير العنوان. قد يتحول ببساطة من [05 00] إلى [05] فقط. لم نغير نقطة الانطلاق في المجموعة الخاصة بنا للقيام بذلك ، لقد نجحت للتو. يستخدم Conquer Online Little Endian ، وهذا جيد لأن C # يستخدم Little Endian أيضًا لتحويلات وتدفقات البت. للمساعدة في التحويل بين العشرية والسداسية عشرية ، فكر في استخدام "حاسبة Windows" في وضع "المبرمج".

الهياكل
والآن بعد أن فهمنا كيف يقوم Conquer Online بترتيب الكلمات في الرسائل ، دعنا ننتقل إلى ما يتحدث عنه Conquer Online. مع كل حزمة يتم إرسالها ، يبدأ العميل والخادم برأس كلمتين. يحتوي هذا الرأس على طول الحزمة ونوع الحزمة التي يتم إرسالها. هنا مثال: [18 00 15 27]. الكلمة الأولى هي الطول: 0018 (أو 24 بالتدوين العشري). الكلمة الثانية هي النوع: 2715 (10005 بالأرقام العشرية). هذه هي الحزمة MsgWalk. يستغرق دقيقة واحدة لإلقاء نظرة على الهيكل على الويكي. يحتوي كل نوع حزمة على رسالة مختلفة يرسلها. على سبيل المثال ، تصف الحزمة MsgWalk خطوة في العالم ، يتم تنفيذها بواسطة لاعب أو وحش. دعنا نقرأ تفريغ الحزمة التالي لـ MsgWalk للتصحيح 5517. سيساعد أيضًا مخطط الاتجاه أدناه.
عفواً لايمكن عرض الروابط إلا بعد الرد على الموضوع

كود بلغة HTML:

18 00 15 27 72 00 00 00 29 20 1A 00 00 00 00 00
82 2D 3F 05 00 00 00 00 54 51 53 65 72 76 65 72

كود PHP:

[Offset 0472 00 00 00 114The direction of the player mod possible angles (8). 114 mod 8 direction 2.
[Offset 0829 20 1A 00 1712169The unique character ID making the step.
[
Offset 1200 00 00 00 0The type of movement being sent (walking).
[
Offset 1682 2D 3F 05 88026498Timestamp (current system tick).
[
Offset 2000 00 00 00 0Map ID (not always supplied).
[
Offset 2454 51 53 65 72 76 65 72 TQServerThe footer of the packet

بالنسبة إلى باتشات Conquer Online التي تزيد عن 5017 ، تنتهي كل حزمة من خادم اللعبة إما بـ "TQServer" أو "TQClient" ، اعتمادًا على موقعها. يشير "TQServer" إلى أن الحزمة من الخادم ، بينما تشير "TQClient" إلى أن الحزمة من العميل. لا يتم تضمين طول تذييل الصفحة في إزاحة 0 من الرأس (وهو طول الحزمة).

----------------------------
في التمرين
* أعلم أن هناك الكثير لتستقبله ، لكن الآن دعنا نبرمج هذا الهيكل في C # (أسهل كثيرًا). في هذا البرنامج التعليمي ، سأستخدم BitConverter لقراءة البنية في C #. في المثال أدناه ، لا أتعامل مع تذييل الحزمة. بدلاً من ذلك ، أهملها (حيث أنني لست بحاجة إلى ذلك - إنها حقًا جيدة فقط لتصحيح أخطاء مصدر الحزمة عبر الشبكة كملف رزم).
كود بلغة HTML:

var length = BitConverter.ToUInt16(Packet, 0);
var typeid = BitConverter.ToUInt16(Packet, 2);
var direction = BitConverter.ToUInt32(Packet, 4) % 8;
var character = BitConverter.ToUInt32(Packet, 8);
var typemove = BitConverter.ToUInt32(Packet, 12);
var timestamp = BitConverter.ToUInt32(Packet, 16);
var mapid = BitConverter.ToUInt32(Packet, 20);

إذا كنت تستخدم سورس من الانترنت ، والذي أوصيك بالإشارة إليه على أي حال للحصول على تعليق البرمجة لـ Conquer Online ، فراجع الطريقة التي يتعامل بها خادمك مع قراءة الحزمة وكتابتها. للحصول على أمثلة أفضل لنظام المقبس ومعالجة الرزم ، راجع مصدري: عفواً لايمكن عرض الروابط إلا بعد الرد على الموضوعله مشاكله ، لكنه موثق بالكامل وسهل التعلم منه. آمل أن يكون هذا الدليل قد ساعدك في فهم المزيد حول كيفية عمل الشبكات والحزم مع Conquer Online. إذا كان لديك أي أسئلة أو طلبات للحصول على تفسيرات أفضل ، فيرجى إخبارنا بذلك.

Links
عفواً لايمكن عرض الروابط إلا بعد الرد على الموضوع
عفواً لايمكن عرض الروابط إلا بعد الرد على الموضوع

nova 2019-09-19 04:09 AM

رد: ازاي احلل بكيتات
 
عاااااااش

ابو حمزه9 2019-09-19 04:31 AM

رد: ازاي احلل بكيتات
 


بالبنط العريض



عاش



محمد ياسر 2019-09-19 04:44 AM

رد: ازاي احلل بكيتات
 
عاش

Rider 2019-09-19 08:09 AM

رد: ازاي احلل بكيتات
 
اقتباس:

المشاركة الأصلية كتبت بواسطة nova (المشاركة 17158)
عاااااااش

حبييي
اقتباس:

المشاركة الأصلية كتبت بواسطة virus7x (المشاركة 17160)


بالبنط العريض



عاش



حبيب قلبي <3
اقتباس:

المشاركة الأصلية كتبت بواسطة hazem (المشاركة 17162)
عا

هههههههههه ناقص حرف ش

ALz3em 2019-09-19 12:40 PM

رد: ازاي احلل بكيتات
 
عاش ياوحش

DrShimanex 2019-09-19 02:38 PM

رد: ازاي احلل بكيتات
 
موضوع مميز تسلم ايدك

mido0o 2019-10-30 07:56 AM

رد: ازاي احلل بكيتات
 
ممتاو

Elviray12 2019-11-03 09:23 PM

رد: ازاي احلل بكيتات
 
Very Good

AliNasser 2020-02-14 01:11 AM

رد: ازاي احلل بكيتات
 
تسلم


الساعة الآن 09:06 PM

مرحبا بكم في منتدي اكواد لتطوير الالعاب