روند بهبود و شکست صف در بازی Dota 2

مقدمه

با درود خدمت دوستان. یکی از مباحثی که خیلی در برنامه نویسی مورد توجه هست صف ها هستند که دوستان در همین انجمن خیلی در موردش صحبت کردن ولی همیشه جالبه که شرکت های بزرگ با ملیون ها بازدید کننده رو دنبال کنیم تا از روند کاریشون و شکست هاشون اطلاع پیدا کرده و در پروژه های کوچیک یا بزرگ خودمون استفاده کنیم به همین منظور من قراره بعد از هر به روز رسانی این بازی در صورت امکان این پست رو به روز کنم.


در یک مطلب دیگر من در مورد استفاده هوش مصنوعی و پیروزی های اون صحبت کردم که واقعا ترسناک بود تیم های با ملیون ها دلار جایزه به راحتی شکست داده شدو تمام کار هایی که فکر می کردند بد یا نباید در بازی استفاده شود نیز استفاده و نتیجه خوبی رو به بار داشت

تاریخچه

همیشه بازی هایی که در خودشون یک رنکینگ ایجاد کردند و همینطور مولتی پلیر هستند این مشکل رو دارند که نمی توانند پلیر های خودشان را تضمین یک تیم بالانس و هم سطح رو بدند. به همین منظور یک سری از افراد وارد بازی هایی می شند که مشخص هست از اولین ثانیه اون شکست به بار دارد و یک سری نیز بر اساس شانس در بازه ای نا مشخص پشت هم در حال پیروزی هستند به همین منظور بازی مثل Dota2 در چندین آبدیت گذشته تصمیم بر بالانس کردن و همینطور حل مشکل بعدی که خیلی بزرگتر از اون بوده داشته است. این مشکل منتظر گزاشتن کاربر می باشد.

یعنی چی ؟ یعنی اینکه کاربر مجبور می شود زمان زیادی را منتظر باشد مثلا 40 دقیقه تا وارد یک گیم شود!!! آیا شما بودید این کار را می کردید ؟ مطمنئنن خیلی از ما انقدر برامون مهم نیست پس بازی رو می بندیم و جایگزین می کنیمش با بازی دیگر.


تغییرات اعمال شده

  • مرحله اول:

قبل از پیاده سازی صف ها این بازی به ایجاد یک بخشی تحط عنوان ریپورت یا گزارش کاربران روی آورد و چیزی رو درست کردن به نام رفتار که از یک تا 10 نمره ای برای خودش داشت اگر 10 هزار بود یعنی شما در بهترین شرایط و هرچی کمتر در بدترین شرایط .

در اولین حرکت کار خوبی بود ولی دست کاربران رو باز هم به صورت محدود باز کردن تا گزارش هایی غیر واقعی ارائه کنند و باعث مشکل در آینده صف بشند که صحبت می کنیم


  • مرحله دوم:

این مشکل با تغییر این وضعیت به ریپورت های محدود تر و همینطور بررسی سیستمی بهبود داده شد که خودش باعث شد خیلی در روند بالانس تیم ها تغییر ایجاد بشه


  • مرحله سوم:

ایجاد یک محیط برای پیدا کردن یک تیم 5 نفره در یک سطح از رفتار بد یا خوب بود که با شکست عجیبی پیش رفت. یعنی در تیم شما ممکن بود همه مثل شما و در تیم مخالف پشت هم در چندین بازی در بهترین جنبه رفتاری

یعنی برای اینکه این queue خوب شکل بگیره و 10 بازیگن در دو تیم5 نفره وارد یک بازی بشند نیاز شد چند وابستگی به آن اضافه شود از جمله رفتار کاربران در بازی های قبلی- موقعیت مکانی و …


  • مرحله چهارم:

مشکل ایجاد شده باعث شد روند جستجو و پیدا کردن هم تیمی ها به بیشتر از 10 الی 25 دقیقه طول بینجامد حتی برای رفتار های خوب و موقعیت های مکانی مناسب و پینگ تایم نرمال


  • مرحله پنجم:

سازندگان این بازی شروع کردن به ایجاد یک بخش به نام rank roll که هرکسی می توانست پوزیشن یا کاری که می خواد بکنه رو انتخاب کنه . اینجوری دیگه وسط بازی درگیری پیش نمی اومد که چه کسی پشتیبانه و چه کسی نیز تمام کنند هرکسی در وظیفه خودشون باید کار می کردند ولی مشکل این کار این بود که این فقط برای افرادی که dota plus محصول ماهانه این شرکت رو داشتن امکان پذیر بود پس فقط کاربران محدودی نسبت به کاربران کل سیستم دسترسی داشتند پس عملا در پوزیشن های پرطرفدار شما باید بیشتر از 30 دقیقه صبر می کردید و همین موضوع باعث می شد بی خیال بشید با اینکه حتی این محصول ماهانه یا اشتراک این بازی رو داشتید صبر نمی کردید.


  • مرحله ششم:

همین بخش بالا به صورت رایگان ارائه شد و دیگر نیازی به اشتراک نبود . خوب جلوی خیلی از درگیری ها و ریپورت های بازی کنان نسبت به همین رو گرفت چون هرکسی بخشی رو انتخاب می کرد و وظیفه اون همونی بود که انتخاب کرده و دیگر درگیری اینکه چه کسی فورس شود در بازی وجود نداشت. ولی تایم پیدا کردن بازی کنان خیلی طول کشید


  • مرحله هفتم:

ایجاد جایزه در بازی برای پوزیشن هایی که طرفدار کم دارند و بالا رفتن باخت در همین پوزیشن ها باز هم از نظر من جالب نبود خودش باعث می شد برای اینکه شما سریع تر برید تو گیم بخواهید یک پوزیشنی رو بازی کنید که در توانایی شما نیست و همین موضوع باز هم باعث شکست شد و جالب تر از اون باعث یک مشکل جدیدی پیش بیاید


  • مرحله هشتم:

اینجا دوتا 2 در حال ریزش بازی کنان شده است. حتی مسابقاتی که با بیشترین جایزه در دنیا در همین رشته برگذار شد نیز نتوانست کار خاصی بکند و دوتا 2 چیزی را به نام صف سریع/ و صف کند منتشر کرد. به این روال بود شما اگر در دو پوزیشنی که طرفدار کم دارد بازی کنید هم سریع در چند دقیقه وارد می شوید هم به شما در هر ورود یک امتیاز می دهد و بعدا که می خواهید در پوزیشن مخصوص به خودتون بازی کنید می توانید از اون امتیاز استفاده کرده و این روند طولانی به صورت نرمال را روند سریع کنید

به عنوان مثال 10 بازی فست رفتید در پوزیشن غیر پر طرفدار حال می توانید 10 گیم در پوزیشن پرطرفدار برید با سرعت خیلی بهتر ولی باز هم شکست خورد



چرا ؟

به عنوان مثال افرادی فقط در یک پوزیشن خاص گیم می رند و حدودا بین 7 الی 25 دقیقه منتظر می مونند الگوریتم دوتا شروع به پیدا کردن بازی کننان در شرایط زیر می کنند

  1. پینگ تایم شما
  2. موقیعت مکانی شما
  3. نمره رفتار شما
  4. رنک شما
  5. پوزیشن شما نسبت به یاران شما

و 10 ها وابستگی دیگر وقتی که انجام نمی شود و شما زیاد در صف مانده اید تا یک بازی بین 25 تا 50 دقیقه انجام بدهید ( البته این زمان معمول هست پایین تر و بالاتر دارد). این گیم شما را مجبور به شناور کردن در یک تیم غیر بالانس می کند و حتی در مواقعی رنک های تیم حریف نیز از شما بالاتر هست و شما بعد از 25 دقیقه انتظار در صف وارد یک بازی 25 دقیقه خیلی بد می شوید که تیم حریف چندین برابر شما بالانس تر و به سادگی باخت و در بازی کل 25 دقیقه شما در حال درگیری با یاران خودتان و همینطور ریپورت همدیگر و پایین اومدن نمره ادب یا رفتار شما و همین موضوع به صورت پلکانی باعث می شود شما با هم نمره های ادب بد خودتان وارد بازی شوید در گیم های بعدی و همینطور پشت به پشت شکست و ریزش عجیب و جایگزین کردن بازی با بازی دیگر

تازه مواردی که من توضیح دادم خیلی کمتر از موارد معمول می باشد

و مرحله اخر که امروز رو نمایی شد که باید منتظر باشیم ببنیم به چه صورتی شکل خواهد گرفت.

این بازی تصمیم گرفت دیگر صف سریع و کند خودش را حذف کند و بجای اون:

یک قسمت درست کند بدون انتخاب پوزیشن به صورت گذشته وارد شوید و داخل بازی دیگه با هم تیمی خودتون درست کنید حالا می خوایند درگیر شید یا نه.

یا اینکه در همه پوزیشن ها بازی کنید و امتیاز بخرید برای بازی هایی که می خواهید در یک پوزیشن خاص بازی کنید. وگرنه امکان ندارد در رنک رول بازی کنید

یعنی بجای صف سریع اومده است گفته شما مجبور هستید در همه پوزیشن ها بازی کنید.

حال باید دید این روند درست کردن صف و ساختار برنامه نویسی چقدر می تواند در روز های آینده فعال و بهبود پیدا کند که به نظر شخصی من جواب گو نیست.


خیلی سعی کردم زیاد از بازی نگم و سعی کنم موارد تجربی در ساختار صف و وابستگی بیام کنم تا جالب تر باشه برای عزیزانی که این گیم رو انجام نمی دند

شما فکر می کنید مشکل این گیم کجاست که نمی تواند صف خوب و بازیکنان را سریع دور هم جمع کنید و انتظار را نیز کم کرده و بهبود در بالانس بودن سطح بازیکنان را پیاده سازی کند ؟


پیوست

  • منظور از صف انتظار 10 بازیکن برای تقصیم در دو تیم 5 تایی یا queue می باشد. که بر اساس وابستگی هایی که در مطلب مطرح شد وارد یک گیم می شوند.
5 Likes

بعد از یک سال از نوشتن این پست مدیریت صف در این بازی به زیر دو دقیقه و همینطور بر اساس موقعیت مکانی نوع اینترنت از نظر سرعت و ثبات و همینطور بر اساس رفتار و تعداد ریپورت های کاربر در بازی های قبلی بهبود پیدا کرده و همینطور زیر دو دقیقه در بیشتر مواقع سرور استارت می خوره و ۱۰ نفر وارد بازی می شوند.
جالب اینجاست که مدیریت این صف در زمانی که چندین کاربر در موقع استارت کنسل کنند نیز بهبود پیدا کرده و زیر چند ثانیه دوباره شما رو وارد بازی می کند.

این حجم بزرگی از صف با چه ابزار و فناوری داره مدیریت می شه رو نتونستم در گوگل پیدا کنم در زمینه برنامه نویسی و ساختاری که پیاده سازی شده

2 Likes