[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Форум » Уроки SourceMod (SourcePawn) Скриптинга » Конец раунда (Принудительно, изменить причину, заблокировать Взято с world)
Конец раунда
rootДата: Воскресенье, 03.02.2013, 01:52 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 561
Статус: Offline
Можно завершить раунд в любой момент, когда вам это нужно.

CS_TerminateRound(Float:delay, CSRoundEndReason:reason, bool:blockhook = false);

Цитата
delay - через сколько секунд начнется новый раунд
reason - причина окончания раунда
blockhook - если true, то событие (хук) CS_OnTerminateRound вызвано не будет


Причины конца раунда (reason):

Код
0 - бомба взорвана   
1 - VIP спасен    
2 - VIP убит    
3 - террористы ускользнули    
4 - CT не дали уйти большинству Террористов    
5 - все террористы были нейтрализованы    
6 - бомба обезврежена    
7 - Counter-Terrorists Win!    
8 - Terrorists Win!    
9 - ничья    
10 - все заложники спасены    
11 - цель сохранена    
12 - заложников не спасли    
13 - Террористы не спаслись    
14 - VIP не убежал    
15 - новая игра


Код для теста:

Код
#pragma semicolon 1   

#include <sourcemod>   
#include <cstrike>   

public OnPluginStart()   
{   
       HookEvent("player_say", Say);   
}   

public Say(Handle:event, const String:name[], bool:dontBroadcast)   
{   
       new i = GetClientOfUserId(GetEventInt(event, "userid"));   
       decl String:text[5];   
       GetEventString(event, "text", text, sizeof(text));   
       if (StrEqual(text, "1"))   
       {   
           CS_TerminateRound(5.0, CSRoundEndReason:2);   
       }   
}


Введите в чат 1 чтобы завершить раунд. Новый начнется через 5 секунд.

Есть хук-функция CS_OnTerminateRound, которая вызывается перед окончанием раунда. 
delay и reason те же самые. 


Код
return Plugin_Continue; - нормальное (обычное) завершение раунда  
return Plugin_Changed; - некоторые параметры были изменены  
return Plugin_Handled; - раунд не будет завершен (даже если все умрут, бомба взорвалась и тд)


Причина конца раунда всегда будет 'бомба взорвана' или 'цель уничтожена': 

Код
#pragma semicolon 1     

#include <sourcemod>     
#include <cstrike>  

public Action:CS_OnTerminateRound(&Float:delay, &CSRoundEndReason:reason)  
{  
      reason = CSRoundEndReason:0;  
      return Plugin_Changed;  
}


Если вы блокируете конец раунда (Plugin_Handled), то желательно чтобы серверная переменная mp_ignore_round_win_conditions была равна 1. Просто впишите в вашserver.cfg или в самом скрипте измените. Если не сделаете это, то можете столкнуться с багом: Постоянно растет счет команд, добавляет +300 или больше побед в секунду.
 
Форум » Форум » Уроки SourceMod (SourcePawn) Скриптинга » Конец раунда (Принудительно, изменить причину, заблокировать Взято с world)
  • Страница 1 из 1
  • 1
Поиск: