counter-strike-source

آموزش سرور آماده match

نویسنده: تیم برنو

آموزش سرور آماده match
راهنمای پلاگین Match برای Counter-Strike: Source
راهنمای پلاگین‌ها · بخش Match Counter-Strike: Source

راهنمای کامل پلاگین Match

SOURCEMOD · MATCH NEW STYLE · v1.0.3

مدیریت مسابقه، Knife Round و دو نیمه‌ی بازی

این سند بر اساس کد منبع match.sp نوشته شده است. پلاگین یک سیستم مسابقه برای سرور Counter-Strike: Source فراهم می‌کند: ادمین می‌تواند Match معمولی یا سفارشی شروع کند، بازیکنان Leader انتخاب کنند، تیم‌ها Ready شوند، امتیازها نمایش داده شوند و در پایان نتیجه‌ی Match اعلام شود.

نسخه 1.0.3
نویسنده PeSaRak
تعداد راند پیش‌فرض هر نیمه 15
Warmup پیش‌فرض 300 ثانیه

فهرست مطالب

01

نصب و پیش‌نیازها

match.sp

این فایل یک SourceMod Plugin با پسوند .sp است و برای اجرا باید کامپایل شود.

موردتوضیح
match.smxخروجی کامپایل‌شده را داخل addons/sourcemod/plugins/ قرار دهید.
Includeهاکامپایلر باید به sourcemod، cstrike، sdktools، sdkhooks، clientmod و clientmod/multicolors دسترسی داشته باشد.
فایل شروع/پایاندو فایل cfg/Match/run.cfg و cfg/Match/end.cfg بسازید؛ مسیر پیش‌فرض آن‌ها در پلاگین همین است.
فایل صداسه فایل صوتی داخل sound/Match/ قرار می‌گیرند و با دانلود اجباری برای بازیکنان ارسال می‌شوند.
spcomp match.sp
copy match.smx addons/sourcemod/plugins/match.smx
پلاگین از AutoExecConfig استفاده نمی‌کند؛ بنابراین تنظیمات mm_* را باید دستی در یک cfg سرور یا کنسول تعریف کنید.
02

دستورهای بازیکنان

RegConsoleCmd
دستورکاربردمحدودیت
!score
!scores
نمایش امتیاز Terrorists و Counter-Terrorists برای بازیکن.در کد محدودیت زمانی ندارد.
!leadانتخاب بازیکن به‌عنوان Leader تیم خودش.فقط هنگام Match؛ هر تیم فقط یک Leader دارد.
!unleadلغو Leader بودن.فقط خود Leader می‌تواند این کار را انجام دهد.
!leadersنمایش Leader فعلی هر دو تیم.فقط هنگام Match.
!ready
!go
اعلام Ready بودن تیم برای شروع بازی.فقط Leader تیم و فقط در Warmup یا فاصله‌ی شروع نیمه‌ی دوم.
!unreadyلغو Ready تیم.فقط Leader تیم و فقط در همان دو وضعیت.
برای شروع Match با Warmup، هر دو تیم باید ابتدا Leader داشته باشند و هر دو Leader دستور !ready را اجرا کنند. در غیر این صورت Warmup تا پایان زمان تنظیم‌شده ادامه پیدا می‌کند.
03

دستورهای ادمین

ADMFLAG_CHANGEMAP · ROOT
دستوردسترسیکاربرد
sm_startmatch
sm_m1
ADMFLAG_CHANGEMAPشروع Match معمولی با تنظیمات فعلی.
sm_m0
sm_matchstop
ADMFLAG_CHANGEMAPتوقف Match در حال اجرا و اجرای فایل پایان.
sm_panelADMFLAG_CHANGEMAPباز کردن پنل اصلی مدیریت Match.
sm_infoADMFLAG_ROOTنمایش نام، نویسنده و نسخه‌ی پلاگین در HUD و Panel.
در زمان Match، تغییر Map با دستورهای changelevel، map و sm_map شنود می‌شود؛ کد قبل از تغییر، Match را پایان‌یافته اعلام و end.cfg را اجرا می‌کند.
04

تنظیمات و ConVarها

CreateConVar
ConVarپیش‌فرضکاربرد
mm_password""پسورد Match؛ Hook پلاگین مقدار آن را روی sv_password اعمال می‌کند.
mm_hostname""نام سرور هنگام Match؛ تغییرات آن روی hostname اعمال می‌شود.
mm_start_cfgMatch/run.cfgفایلی که هنگام شروع Match با exec اجرا می‌شود.
mm_end_cfgMatch/end.cfgفایلی که هنگام پایان Match با exec اجرا می‌شود.
mm_rounds15تعداد راند هر نیمه؛ حداقل 1 و حداکثر 15.
mm_kniferound1فعال یا غیرفعال کردن Knife Round؛ مقدار 1 فعال و 0 غیرفعال است.
mm_halves_delay15مدت شمارش معکوس شروع نیمه‌ی بعدی و شمارش پایان Match، برحسب ثانیه.
mm_warmup1فعال یا غیرفعال کردن Warmup.
mm_warmup_time300مدت Warmup برحسب ثانیه؛ مقدار بین 0 تا 300.
mm_wamrup_god1God Mode در Warmup. نام ConVar در کد عمداً/اشتباه به‌صورت wamrup نوشته شده، نه warmup.
mm_rounds 15
mm_kniferound 1
mm_warmup 1
mm_warmup_time 300
mm_wamrup_god 1
mm_halves_delay 15
mm_start_cfg "Match/run.cfg"
mm_end_cfg "Match/end.cfg"
05

روند اجرای Match

MatchState
مرحلهرفتار پلاگین
شروعتنظیمات داخلی Reset می‌شوند، run.cfg اجرا می‌شود و بازی با mp_restartgame 3 آماده می‌شود.
Knife Roundدر صورت فعال بودن، بازیکنان پولشان را از دست می‌دهند و همه‌ی سلاح‌ها به‌جز Knife حذف می‌شود. پس از چند Restart، Knife Round شروع می‌شود.
انتخاب Leaderبرای محاسبه‌ی نتیجه‌ی Knife Round، هر دو تیم باید Leader داشته باشند. تیم برنده، از طریق Panel، انتخاب می‌کند در سمت خود بماند یا Sideها عوض شوند.
Warmupدر صورت فعال بودن، تایمر Warmup شروع می‌شود. اگر هر دو Leader Ready شوند، Match زودتر Live می‌شود.
نیمه‌ی اولراندها شمرده و امتیاز تیم برنده ثبت می‌شود. وضعیت و Score در HUD و Panel نمایش داده می‌شود.
تعویض نیمهپس از پایان نیمه‌ی اول، نتیجه اعلام می‌شود و بازیکنان Terrorist/Counter-Terrorist جابه‌جا می‌شوند.
نیمه‌ی دومامتیازها ادامه پیدا می‌کنند تا شرط برد یا مساوی بررسی شود.
پایاننتیجه نمایش داده می‌شود، شمارش معکوس پایان اجرا می‌شود، end.cfg اجرا و بازی Restart می‌شود.
در Enum کد وضعیت‌های OverTime تعریف شده‌اند، اما در مسیر قابل مشاهده‌ی منبع، منطق مستقلی برای انتقال به OverTime دیده نمی‌شود؛ بنابراین نباید بدون تست سرور روی آن‌ها حساب کرد.
06

پنل مدیریت و تنظیمات داخل بازی

sm_panel

با اجرای sm_panel پنل اصلی باز می‌شود و این بخش‌ها را دارد:

بخشامکانات
Start matchشروع Match معمولی یا ورود به Custom Match.
Custom Matchانتخاب 15، 5، 8، 10 یا 12 راند برای هر نیمه و فعال/غیرفعال کردن Knife Round و Warmup.
Stop matchتوقف عادی Match. گزینه‌ی Team foul در منبع با پیام «Under maintenance» مشخص شده و فعلاً پیاده‌سازی نشده است.
Configurationsتنظیم Password، Restart Round، Alltalk، Deadtalk، Deadchat، Roundtime، Freezetime، Autobalance، Friendlyfire، Forcecamera و Limitteams.
Custom Match پس از Start، مقدار انتخاب‌شده‌ی mm_rounds را با یک تأخیر 2 ثانیه‌ای اعمال می‌کند تا فایل run.cfg ابتدا اجرا شود.
07

فایل‌های جانبی و صداها

OnMapStart
مسیرکاربرد
cfg/Match/run.cfgتنظیمات اختصاصی زمان شروع Match.
cfg/Match/end.cfgبرگرداندن تنظیمات عادی سرور بعد از پایان Match.
sound/Match/tbeep1.mp3صدای شمارش معکوس معمولی.
sound/Match/tbeep2.mp3صدای شمارش معکوس نزدیک به پایان.
sound/Match/tlbeep1.mp3صدای بلند/نهایی پایان شمارش.
game/
├─ cfg/
│  └─ Match/
│     ├─ run.cfg
│     └─ end.cfg
├─ sound/
│  └─ Match/
│     ├─ tbeep1.mp3
│     ├─ tbeep2.mp3
│     └─ tlbeep1.mp3
└─ addons/sourcemod/plugins/
   └─ match.smx
08

نکات و ایرادهای موجود در کد

Source review
موردنتیجهپیشنهاد
Config menuدر Handle_MatchConfigMainMenu چند شرط پشت‌سرهم با button == 9 تکرار شده است؛ به همین دلیل Friendlyfire، Forcecamera و Limitteams از منوی اصلی قابل انتخاب واقعی نیستند.شرط‌ها را به 10، 11 و 12 اصلاح کنید.
Save/Presetگزینه‌های Save config و Preset configs فقط منو را دوباره باز می‌کنند و ذخیره/لود واقعی انجام نمی‌دهند.برای آن‌ها فایل cfg یا منطق ذخیره‌سازی اضافه شود.
External commandsمنو دستورهای sm_rpw، sm_pw و sm_rr را صدا می‌زند، اما این دستورها در همین فایل ثبت نشده‌اند.پلاگین‌های مربوطه نصب باشند یا این بخش با منطق داخلی جایگزین شود.
Warmup God Modeدر Spawn مقدار m_takedamage صفر می‌شود؛ در همین فایل مسیر واضحی برای برگرداندن آن پس از Warmup وجود ندارد.در شروع Live مقدار آسیب‌پذیری بازیکنان را صریحاً Restore کنید.
Knife Roundاگر یکی از تیم‌ها Leader نداشته باشد، نتیجه‌ی Knife Round محاسبه نمی‌شود و ممکن است جریان Match متوقف شود.برای نبود Leader، fallback یا انتقال خودکار به Warmup اضافه شود.
مسیر cfgmm_start_cfg و mm_end_cfg فقط در شروع پلاگین داخل متغیر خوانده می‌شوند.بعد از تغییر این دو ConVar، پلاگین/Map را Reload کنید یا Hook تغییر مقدار اضافه کنید.
این بخش‌ها از رفتار واقعی کد استخراج شده‌اند و «دستور اجرایی» محسوب نمی‌شوند؛ قبل از استفاده در سرور اصلی، روی سرور تست بررسی کنید.

منبع بررسی‌شده: match.sp · سبک صفحه بر اساس راهنمای ارائه‌شده‌ی CSS/Plugins تنظیم شده است.

مقالات مرتبط

آموزش سرور آماده match | برنو