كان من الأفضل تشرح في البداية موضوع الفلتر لوحده والكلينت ليس لوحده
بالنسبة للأوتو إيفنت الكلينت ليس
فكرته زي البوت كدا mbot , etc مجرد انه بيتحكم في كراكتر واحدة بس تكون مفتوحة من خلال الكلينت ليس كوننيكت ،، فا بالتالي أياً كان اللي عاوز تعمله بالكراكتر تقدر تعمله ،، كمثال لحاجتين مهمين ،،
أول حاجة لو عاوز تتحرك في الجيم كمثال لازم عشان تتحرك تديلوا أمر انه يتحرك والأمر دا بيحتاج منك بيانات عشان يشتغل كمثال ال x y z region world id من غير متعرف البيانات دي متقدرش تشغل الأمر ،، والأمر دا ليه رقم محدد في الجيم ودي بنسميها C -> S يعني بتحصل لما الكراكتر تعمل حاجة وبتتبعت من الكلينت للسيرفر
تاني حاجة لو عاوز تعرف ان الكراكتر اتحركت مثلاً عندك في سورس الكلينت ليس ملف اسمه Agent.cs ودا مسئول مسئولية كاملة عن موضوع الأوامر اللي اتنفذت خلاص بمعني عشان تتحرك قولنا لازم تقول للسيرفر انا عاوز اتحرك للمكان الفلاني السيرفر لو مردش عليك يبقا مش هتتحرك لو رد عليك هيرد في ال Agent.cs هيقولك انك اتحركت خلاص ،، فبالتالي تقدر تعرف انه اتحرك للمكان المطلوب وتقدر تخش ع الأمر اللي بعده ودا بنسميه S -> C الرد من السيرفر للكلينت ان كان بسماح الأمر المطلوب أو برفضه وبتيجي برضه رقم الأمر وبيانات بتدل علي الموافقة أو الرفض
كمثال ال Script بتاعت البوت ما هي إلا أمرين الأول انه يبعت حركة جديدة والتاني يتأكد ان الحركة اللي بعتها اتحركها بالفعل ولا لأ عشان يبدأ في الحركة اللي بعدها
في كلتا الحالتين الرقم دا بيسمي Opcode والبيانات اللي هتستخدمها أو اللي بتيجي مع ال Opcode من السيرفر بتسمي Parameters وهي دي مكونات الباكيت الأساسية
بالنسبة للفلتر دا موضوع بعيد تمام البعد عن الكلينت ليس ،،
لأن الفلتر مش بيتحكم في كراكتر واحدة بس انت تحددها لأ ،، الفلتر بيتحكم في اي كراكتر تعمل كوننيكت بالبورت اللي انت محدده وهو ال fake port من أول اللوجين لحد اي باكيت تتبعت من اي كراكتر جوا الجيم ،،
فا جت من هنا مسمي الفلتر ،، لأنك تقدر تفلتر اي باكيت جاية من الكلينت للسيرفر بس هنا هنقول من الكلينت للفلتر ،، لأن الفلتر مش بيبعت الباكيت للسيرفر إلا لما يجتاز الشروط اللي انت محددها ،، ولو مش محدد شرط للباكينت هتتبعت من الفلتر للسيرفر من غير ميتعمل فلتر ،، طبعاً مش كل الباكيتات هتعملها فلتر ،، انت هتعمل فلتر للباكيتات اللي محتاج انك تتحكم فيها ،، بحيث انك تقدر تتحكم في كل كراكتر في الجيم حتي لو الكراكتر بعتت الباكيت اكتر من مرة ورا بعض مش هيوافق عليها إلا لما يتحقق الشرط السماح ،،
مثال 1 :
دلوقتي احنا عاوزين نعمل بلوك للباكيت بتاعت create academy عشان نحط اختيار في الكونفيج ON OFF عشان اليوسر اللي مستخدم الفلتر بحدد ان كان عاوز يسيب الأكاديمي مفتوحة أو مقفولة هندخل زي ما الراجل الطيب صاحب الموضوع شارح كدا هتجيب باكيت اللي هتظهر من C -> S لما تروح تكريت أكاديمي
ومن خلال الباكيت دي تقدر تضيف شرط ليها في الفلتر ،، والشرط هو
لو رقم الباكيت Opcode ساوى (0x(number أو زي ماهو مشروح في الموضوع تحوله ل decimal
تخش ع اللي بعده طبعاً لو الباكيت دي بتيجي لكذا حاجة في الجيم زي GM Command Opcode 7010 لازم تقدر تفرق بينها وبين غيرها بال bytes أو ال Parameters اللي جاية مع ال Opcode
وأكيد هتلاقي الفرق
ساعتها تعمل break أو continue بحيث انك تخلص اللوب علي كدا وميبعتهاش لو كان الكونفيج ON لو OFF متعملش حاجة
مثال 2 :
طيب بالنسبة لموضوع ال Delay time زي Exchange delay , stall delay , restart delay
الحاجات دي طبعاً انت بتعرف في البرنامج DateTime مجهول بحيث انك تقدر تعرف أخر مرة الكراكتر عملت فيها Exchange أو أياً كان إمتا وتحسب الوقت من الكونفيج اللي اليوسر محدده لو كان اكبر من الوقت يبقا يقدر يستخدمها عادي وتحط الوقت بالوقت الحالي بوقت السيرفر بحيث انه يجدد الوقت بأخر إستخدام ولو الوقت كان اقل لسه ال Delay مخلصتش وقتها تبعتله Notice أو Private ان فاضله كذا ثانية عشان يقدر يعمل المطلوب ان كان Exechange , zerk , stall , etc وبعدها تعمل break or continue عشان ميكملش ويبعت الباكيت للسيرفر أكنك بتعملها بلوك او بتتجاهلها
طبعاً الموضوع كبير ومهما الواحد شرح لازم تتعلم بنفسك وبالتجربة تدرب نفسك عملي حتي لو علي اي برنامج تيست مسيرك هتوصل كله بالإرادة