خوادم ألعاب بالساعة. ادفع فقط عندما تلعب.

سيرفر CS2 ينهار عند تغيير الخريطة (مع تفعيل GOTV): الحل في سطر واحد

سيرفر CS2 يعمل بشكل جيد، ثم تتغير الخريطة فيُطرد الجميع: السيرفر انهار. إذا كان GOTV مفعّلًا وكان هناك لاعبون متصلون، فهذه هي المشكلة. إليك الحل أولًا، ثم السبب.

الحل: سطر واحد

أضف هذا إلى game/csgo/cfg/server.cfg:

bot_join_delay 15
  • الآن تنتظر البوتات 15 ثانية بعد كل تغيير للخريطة قبل أن تنضم.
  • يحدث الانهيار عندما تنضم البوتات بينما لا يزال لاعب يحمّل الخريطة الجديدة. مع التأخير، يكمل اللاعبون التحميل أولًا.
  • يبقى GOTV مفعّلًا. تسجيل الديمو مستمر، والمشاهدون يواصلون المتابعة.
  • لتطبيقه دون إعادة تشغيل، أرسله عبر RCON: rcon bot_join_delay 15

في مختبرنا: بدونه، انهار السيرفر في 3 من 6 تغييرات للخريطة. ومعه، 0 من 18، بما في ذلك التغيير في منتصف المباراة وفي نهايتها والتبديل المباشر بين الأوضاع. كل سيرفر CS2 على 2hours.gg يأتي مع هذا الإعداد.

متى يحدث

عندما تجتمع كل هذه الشروط:

  • SourceTV (GOTV) مفعّل: tv_enable 1
  • لاعب حقيقي واحد على الأقل متصل. السيرفر الذي فيه بوتات فقط لم ينهر أبدًا.
  • المستوى يتغير: خريطة مختارة من الكونسول، أو changelevel أو map، أو نهاية مباراة، أو تصويت نهاية المباراة.

يحدث عشوائيًا. في اختباراتنا انهار السيرفر في نحو نصف تغييرات الخريطة، وعلى السيرفرات الحية تكرر أكثر مع 3 لاعبين متصلين أو أكثر. السيرفر الذي نجا من تغيير واحد قد ينهار في التالي.

كيف يبدو: يسقط كل اللاعبين دفعة واحدة أثناء تحميل الخريطة، وينتهي سجل السيرفر بخطأ تجزئة (SIGSEGV) بدلًا من بدء الخريطة الجديدة.

الفروق بين الأوضاع

إعدادات Valve لكل وضع تحدد عدد البوتات التي تنضم عند كل تحميل للخريطة. كلما زاد عدد البوتات المنضمة زادت فرص الانهيار:

  • Deathmatch وTeam Deathmatch وCasual: ينضم حتى 10 بوتات عند كل تحميل. هذه الأوضاع الأكثر عرضة، وفيها رأينا أغلب الانهيارات.
  • Competitive: بوت واحد. في مختبرنا لم ينهر بدون الحل، لكن السيرفرات الحية التي فيها لاعبون أكثر انهارت.
  • الحل واحد في كل الأوضاع: bot_join_delay إعداد واحد ينطبق على كل تغيير للخريطة، أيًا كان سببه.

المشكلة الحقيقية (للفضوليين)

إنها مشكلة في محرك Valve، وليست في إضافة. انهار السيرفر حتى بعد إزالة Metamod وCounterStrikeSharp. وهي مُبلّغ عنها منذ 2024 باسم ValveSoftware/csgo-osx-linux#3831. تابعها هناك: نأمل أن تصلحها Valve قريبًا فلا نعود بحاجة إلى هذا الحل المؤقت.

ما وجدناه باستخدام مصحح الأخطاء:

  • عند تغيير الخريطة، يتوقف SourceTV ويفصل اللاعب المتصل بالسبب "SourceTV stopped" (HLTVSTOP)، مع أنه لاعب عادي وليس مشاهد GOTV.
  • يبقى لذلك اللاعب المفصول جزئيًا كائن داخلي فارغ. على سيرفر عادي ينهار المحرك عنده فورًا (libengine2.so).
  • إذا نجت هذه الخطوة، ينهار كود اللعبة بعد ثانية، عندما تنضم البوتات إلى الخريطة الجديدة (libserver.so). هذا هو الانهيار الذي يمنعه bot_join_delay، وكان هو كل انهيار رأيناه على سيرفرات CounterStrikeSharp.
  • على سيرفر عادي بدون Metamod رأينا أيضًا الانهيار الأول في جهة المحرك. لم نختبر bot_join_delay معه بعد.

ما لا ينفع

  • tv_enable 0 أثناء اللعب: يسقط كل اللاعبين دفعة واحدة.
  • إيقاف GOTV منذ الإقلاع: لا انهيار، لكن لا ديمو ولا مشاهدة.
  • tv_delay, tv_delaymapchange, tv_autorecord 0, tv_stoprecord: ما زال ينهار. إيقاف الديمو لا يكفي: انهار حتى بدون أي تسجيل للديمو.
  • bot_quota 0 في ملف _server.cfg الخاص بالوضع: يُنفَّذ أيضًا عند كل إعادة للمباراة وقد يطرد SourceTV نفسه، فيتوقف تسجيل GOTV في منتصف الخريطة.
  • map بدلًا من changelevel: الانهيار نفسه.

إعداد كامل لسيرفرك الخاص

ما نستخدمه على كل سيرفر، في server.cfg:

tv_enable 1
tv_autorecord 1
bot_join_delay 15
  • احتفظ به في server.cfg، لا في أمر RCON لمرة واحدة فقط، حتى يعود بعد إعادة التشغيل.
  • 15 ثانية هي القيمة التي اختبرناها. اللاعبون ذوو الاتصال البطيء أو خرائط Workshop الكبيرة يحتاجون وقتًا أطول للتحميل، لذا القيمة الأعلى أكثر أمانًا ولا تعني سوى وصول البوتات متأخرة قليلًا.
  • للتأكد من أنه مفعّل، اكتب في كونسول السيرفر أو عبر RCON: bot_join_delay
  • تلعب بدون بوتات؟ أبقه على أي حال: أوضاع مثل Deathmatch وCasual تضيف بوتات عند كل تحميل للخريطة افتراضيًا.

أو تخطَّ الإعداد: كل سيرفر CS2 على 2hours.gg فيه الحل مسبقًا، مع تفعيل GOTV والديمو.

انشر سيرفر CS2 بالساعة

اقرأ أيضًا

← العودة إلى جميع الأدلة