Конец раунда
|
|
_wS_
|
Дата: Суббота, 11.02.2012, 14:28:46 | Сообщение # 1 |
|
Можно завершить раунд в любой момент, когда вам это нужно.
CS_TerminateRound(Float:delay, CSRoundEndReason:reason, bool:blockhook = false);
Цитата delay - через сколько секунд начнется новый раунд reason - причина окончания раунда blockhook - если true, то событие (хук) CS_OnTerminateRound вызвано не будет
Причины конца раунда (reason):
Код 0 - бомба взорвана (CSRoundEnd_TargetBombed) 1 - VIP спасен (CSRoundEnd_VIPEscaped) 2 - VIP убит (CSRoundEnd_VIPKilled) 3 - террористы ускользнули (CSRoundEnd_TerroristsEscaped) 4 - CT не дали уйти большинству Террористов (CSRoundEnd_CTStoppedEscape) 5 - все террористы были нейтрализованы (CSRoundEnd_TerroristsStopped) 6 - бомба обезврежена (CSRoundEnd_BombDefused) 7 - Counter-Terrorists Win! (CSRoundEnd_CTWin) 8 - Terrorists Win! (CSRoundEnd_TerroristWin) 9 - ничья (CSRoundEnd_Draw) 10 - все заложники спасены (CSRoundEnd_HostagesRescued) 11 - цель сохранена (CSRoundEnd_TargetSaved) 12 - заложников не спасли (CSRoundEnd_HostagesNotRescued) 13 - Террористы не спаслись (CSRoundEnd_TerroristsNotEscaped) 14 - VIP не убежал (CSRoundEnd_VIPNotEscaped) 15 - новая игра (CSRoundEnd_GameStart)
Тест:
Код #pragma semicolon 1
#include <sourcemod> #include <cstrike>
public OnPluginStart() { HookEvent("player_say", Say); }
public Say(Handle:event, const String:name[], bool:silent) { decl String:text[5]; GetEventString(event, "text", text, 5); if (strcmp(text, "1") == 0) CS_TerminateRound(5.0, CSRoundEndReason:2, false); }
Введите в чат 1 чтобы завершить раунд. Новый начнется через 5 секунд.
|
|
| |
_wS_
|
Дата: Суббота, 11.02.2012, 14:48:20 | Сообщение # 2 |
|
Есть хук-функция 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 или больше побед в секунду.
|
|
| |
Kudemus
|
Дата: Четверг, 02.05.2013, 10:44:38 | Сообщение # 3 |
|
Сообщений: 4
Репутация: 0 [ +/- ]
|
|
Как сделать конец раунда по истечению mp_timelimit?
|
|
| |
Darkeneez
|
Дата: Четверг, 02.05.2013, 14:04:47 | Сообщение # 4 |
|
Сообщений: 221
Репутация: 18 [ +/- ]
|
|
запустить таймер равный mp_timelimit, после того как пройдет время завершить раунд.
|
|
| |
Denis004
|
Дата: Четверг, 02.05.2013, 14:58:57 | Сообщение # 5 |
|
Сообщений: 15
Репутация: 0 [ +/- ]
|
|
Darkeneez, зачем так усложнять?! Kudemus, пробуй
Код #include <cstrike>
public OnPluginStart() { HookEvent("player_death", Death); }
public Death(Handle:event, const String:name[], bool:dontBroadcast) { new timeleft; if (GetMapTimeLeft(timeleft)) { if (timeleft < 1) { CS_TerminateRound(2.0, CSRoundEndReason:0) } } }
|
|
| |
Darkeneez
|
Дата: Четверг, 02.05.2013, 15:19:12 | Сообщение # 6 |
|
Сообщений: 221
Репутация: 18 [ +/- ]
|
|
Если стоят 2 афк мы так и не сможем завершить раунд если истек mp_timelimit.
|
|
| |
Kudemus
|
Дата: Четверг, 02.05.2013, 16:25:15 | Сообщение # 7 |
|
Сообщений: 4
Репутация: 0 [ +/- ]
|
|
Цитата (Denis004) Kudemus, пробуй Не работает
|
|
| |
Denis004
|
Дата: Четверг, 02.05.2013, 16:33:43 | Сообщение # 8 |
|
Сообщений: 15
Репутация: 0 [ +/- ]
|
|
Kudemus Я проверил прежде выкладывать. У меня работал
|
|
| |
TEIN
|
Дата: Четверг, 02.05.2013, 16:55:21 | Сообщение # 9 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
При старте карты (OnMapStart) запустите повторяющийся таймер (CreateTimer), при каждом выполнении таймера получайте время до конца карты (GetmapTimeLeft), сравниваем время и завершаем раунд (CS_TerminateRound)
|
|
| |
Darkeneez
|
Дата: Четверг, 02.05.2013, 17:13:27 | Сообщение # 10 |
|
Сообщений: 221
Репутация: 18 [ +/- ]
|
|
#include <sourcemod> #include <cstrike>
new timeleft;
public OnMapStart() { CreateTimer(0.1, stopround, _, TIMER_REPEAT); }
public Action:stopround(Handle:timer) { if (GetMapTimeLeft(timeleft)) { if (timeleft < 1) { CS_TerminateRound(2.0, CSRoundEndReason:3); KillTimer(timer); } } }
|
|
| |
TEIN
|
Дата: Четверг, 02.05.2013, 17:15:12 | Сообщение # 11 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
Исправил
Гости не могут скачивать файлы
|
Сообщение отредактировал DoK_1997 - Пятница, 03.05.2013, 10:55:38 |
|
| |
Darkeneez
|
Дата: Четверг, 27.06.2013, 16:31:01 | Сообщение # 12 |
|
Сообщений: 221
Репутация: 18 [ +/- ]
|
|
public Action:CS_OnTerminateRound(&Float:delay, &CSRoundEndReason:reason) { if (reason == 7) { return Plugin_Handled; } return Plugin_Continue; }
Ошибка 213 ( несоответсвие тегов). Но что за переменная тогда reason если не цифра?
|
|
| |
TEIN
|
Дата: Четверг, 27.06.2013, 17:16:38 | Сообщение # 13 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
test
Гости не могут скачивать файлы
|
|
|
| |
_wS_
|
Дата: Четверг, 27.06.2013, 17:56:27 | Сообщение # 14 |
|
Darkeneez:
Код if (reason == CSRoundEndReason:7) или if (reason == CSRoundEnd_CTWin)
|
|
| |
WOW_NAMES
|
Дата: Пятница, 30.01.2015, 12:58:37 | Сообщение # 15 |
|
Сообщений: 170
Репутация: -1 [ +/- ]
|
|
Подскажите почему завершая раунд предложенным кодом в любом варианте, он завершается но счет остается по нолям? В CSGO пытаюсь сделать.
|
|
| |