Последний раунд карты(Вопрос)

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #1
Как отловить конец последнего раунда карты ?
Смотрел RoundEndSounds и MapChooser, нашел этот код, но он больно уж сложный для восприятия и не могу в нем разобраться.
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
Отлавливаешь раунд, получаешь время до конца карты, если конец карты - твой код
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
фишка в том, что допустим осталась 1 минута и раунд может либо кончиться быстро те менее 1 минуты и будет еще 1 раунд или раунд будет длится больше 1 минуты и наступит конец карты
Я думаю сервер вряд ли может знать будущее,хотя возможно тебе это не понадобиться если тебе нужен конец последнего раунда, а не его начало
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #4
The End Is Near..., Дело в том, что я пробывал, вот код:

PHP:
#pragma semicolon 1
#include <sourcemod>

new g_TotalRounds;
new Handle:g_Cvar_WinLimit;
new Handle:g_Cvar_MaxRounds;

public OnPluginStart()
{
	HookEvent("round_end", OnRoundEnd);
	g_Cvar_WinLimit = FindConVar("mp_winlimit");
	g_Cvar_MaxRounds = FindConVar("mp_maxrounds");
}

public OnMapStart()
	g_TotalRounds = 0;

public Action:OnRoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
{
	g_TotalRounds++;
	
	if (CheckMapEnd()) PrintToChatAll("\x03Конец рануда. \x04Последний");
	else PrintToChatAll("\x03Конец рануда. \x04Не последний");
}

bool:CheckMapEnd()
{
	new bool:lastround = false;
	new bool:notimelimit = false;
	new timeleft;
	
	if (GetMapTimeLeft(timeleft))
	{
		new timelimit;
		
		if (timeleft > 0)
			return false;
		
		else if (GetMapTimeLimit(timelimit) && !timelimit)
			notimelimit = true;
		
		else
			lastround = true;
	}
	
	if (!lastround)
	{
		if (g_Cvar_WinLimit != INVALID_HANDLE)
		{
			new winlimit = GetConVarInt(g_Cvar_WinLimit);
			
			if (winlimit > 0)
			{
				if (GetTeamScore(2) >= winlimit || GetTeamScore(3) >= winlimit)
					lastround = true;
			}
		}
		
		if (g_Cvar_MaxRounds != INVALID_HANDLE)
		{
			new maxrounds = GetConVarInt(g_Cvar_MaxRounds);
			
			if (maxrounds > 0)
			{
				//new remaining = maxrounds - (g_TotalRounds+1);
				new remaining = maxrounds - g_TotalRounds;
				
				if (!remaining)
					lastround = true;
			}		
		}
	}
	
	if (lastround)
		return true;
		
	else if (notimelimit)
		return false;
	
	return true;
}

И проблема в том, что выводит о конце последнего раунда, в последнем и предпоследнем раунде. И к тому же код, больно уж сложный, как по мне.
 
Сверху Снизу