В каком случае? Я просто не понимаю на самом деле. :(Это событие может возвращать нулевой индекс.
В случае обрыва интернет-соединения. Действует далеко не на всех серверах, как ни странно. Возможно, зависит от ОС/настроек сервера.В каком случае?
Действительно не на всех, проверял на это, когда мне о ошибке написали... :(Действует далеко не на всех серверах, как ни странно.
У вас не dev8, в dev8 этого события нет в deathrun.sp.
Я имел ввиду коммит последний, не версию. Исправил как только вы написали о ошибке: https://github.com/selax/deathrun/commit/5553d9f39a4781485d8877c1bda4fb012238be64selax, я качал последнюю версию, это ошибки с dev8
Игрок
Да id извлечь в принципе не проблема, просто... В будущем мне в любом случае придётся делать что-то такое, для корректности банов. Не могу понять почему он теряется...В связи с этим, разработал пару трюков, чтобы всё же получать индекс игрока, когда он "жизненно" необходим плагину. Например, когда требуется перенастроить глобальный массив с индексом игрока при "событийном" выходе.
Скиньте поправленную версию. :)Да я что-то поправил и всё уже ок.
Событие вызывается очень поздно, как раз, когда игрок (полностью) окончательно исчезает ("выходит") с сервера. А, как известно, GetClientOfUserId(userid) возвращает 0, если игрок вне игры. Что мы и наблюдаем. ОффтопНе могу понять почему он теряется
Надеюсь, не дублированием в OnClientDisconnect(client)/OnClientDisconnect_Post(client). :-Did извлечь в принципе не проблема
Событие вызывается очень поздно, как раз, когда игрок (полностью) окончательно исчезает ("выходит") с сервера. А, как известно, GetClientOfUserId(userid) возвращает 0, если игрок вне игры. Что мы и наблюдаем.
Особо не думал, но хотел сделать массив c id, никами, steamid, ip. И каждый раз при событии проверять кто пропал.ОффтопНадеюсь, не дублированием в OnClientDisconnect(client)/OnClientDisconnect_Post(client). :-D
Исправлена ошибка, возникающая при попытке уничтожить несуществующий таймер
public Action respawn_SpawnTimer ( Handle timer, int client )
{
CS_RespawnPlayer ( client );
}
А в большей части и не нужно. Там и индекс, считай, что не требуется:Особо не думал
void PlayerDisconnect_Random ( Event ev )
{
if ( config_RandomPlayers.IntValue > 1 )
{
int client = GetClientOfUserId ( ev.GetInt ( "userid" ) );
if ( !IsClientInGame( client ) || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
if (!client || !IsClientInGame( client ) || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
Действительно, спасибо. Добавлю проверку.Рано или поздно появится ошибка: "client not in game".PHP:public Action respawn_SpawnTimer ( Handle timer, int client ) { CS_RespawnPlayer ( client ); }
if ( !IsClientInGame( client ) || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
Тогда, скорее мой, т.к.:Мой вариант, а тем более ваш приведут к косяку
Это событие возвращать не может, т.е. добавление Т здесь отпадает. Всё зависит от того, что автор сам написал в дальнейшем. Ведь можно и проверить количество Т/КТ для данного случая:!IsClientInGame( client )
if ( GetTeamClientCount ( config_RandomPlayers.IntValue ) <= 1 )
Что оно возвращать не может? Вы хотя бы фразы дописывайте, я вас понять не могу... Функция IsClientInGame там по причине того, что GetClientTeam иногда возвращает "client not in game".Это событие возвращать не может, т.е. добавление Т здесь отпадает.
Тут проверка на "1 или меньше избранных в команде". То есть 2 террориста вполне могут быть, а вот 3 уже нет.Ведь можно и проверить количество Т/КТ для данного случая:Я так понимаю, эта функция этим и занимается, а значит, кроме, возможно лишней сверки количества игроков в команде, ничего не будет.PHP:if ( GetTeamClientCount ( config_RandomPlayers.IntValue ) <= 1 )
L 01/23/2016 - 13:23:29: SourceMod error session started
L 01/23/2016 - 13:23:29: Info (map "deathrun_snowstone") (file "errors_20160123.log")
L 01/23/2016 - 13:23:29: [SM] Native "IsClientInGame" reported: Client index 0 is invalid
L 01/23/2016 - 13:23:29: [SM] Displaying call stack trace for plugin "deathrun.smx":
L 01/23/2016 - 13:23:29: [SM] [0] Line 217, deathrun/random.sp::PlayerDisconnect_Random()
L 01/23/2016 - 13:23:29: [SM] [1] Line 52, deathrun/events.sp::event_PlayerDisconnect()
L 01/23/2016 - 13:29:07: Error log file session closed.
L 01/23/2016 - 13:37:14: SourceMod error session started
L 01/23/2016 - 13:37:14: Info (map "deathrun_helix") (file "errors_20160123.log")
L 01/23/2016 - 13:37:14: [SM] Native "IsClientInGame" reported: Client index 0 is invalid
L 01/23/2016 - 13:37:14: [SM] Displaying call stack trace for plugin "deathrun.smx":
L 01/23/2016 - 13:37:14: [SM] [0] Line 217, deathrun/random.sp::PlayerDisconnect_Random()
L 01/23/2016 - 13:37:14: [SM] [1] Line 52, deathrun/events.sp::event_PlayerDisconnect()
L 01/23/2016 - 13:37:14: [SM] Native "IsClientInGame" reported: Client index 0 is invalid
L 01/23/2016 - 13:37:14: [SM] Displaying call stack trace for plugin "deathrun.smx":
L 01/23/2016 - 13:37:14: [SM] [0] Line 217, deathrun/random.sp::PlayerDisconnect_Random()
L 01/23/2016 - 13:37:14: [SM] [1] Line 52, deathrun/events.sp::event_PlayerDisconnect()
L 01/23/2016 - 13:37:14: [SM] Native "IsClientInGame" reported: Client index 0 is invalid
L 01/23/2016 - 13:37:14: [SM] Displaying call stack trace for plugin "deathrun.smx":
L 01/23/2016 - 13:37:14: [SM] [0] Line 217, deathrun/random.sp::PlayerDisconnect_Random()
L 01/23/2016 - 13:37:14: [SM] [1] Line 52, deathrun/events.sp::event_PlayerDisconnect()
L 01/23/2016 - 13:37:14: [SM] Native "IsClientInGame" reported: Client index 0 is invalid
L 01/23/2016 - 13:37:14: [SM] Displaying call stack trace for plugin "deathrun.smx":
L 01/23/2016 - 13:37:14: [SM] [0] Line 217, deathrun/random.sp::PlayerDisconnect_Random()
L 01/23/2016 - 13:37:14: [SM] [1] Line 52, deathrun/events.sp::event_PlayerDisconnect()
L 01/23/2016 - 13:37:15: [SM] Native "IsClientInGame" reported: Client index 0 is invalid
L 01/23/2016 - 13:37:15: [SM] Displaying call stack trace for plugin "deathrun.smx":
L 01/23/2016 - 13:37:15: [SM] [0] Line 217, deathrun/random.sp::PlayerDisconnect_Random()
L 01/23/2016 - 13:37:15: [SM] [1] Line 52, deathrun/events.sp::event_PlayerDisconnect()
L 01/23/2016 - 13:37:20: [SM] Native "IsClientInGame" reported: Client index 0 is invalid
L 01/23/2016 - 13:37:20: [SM] Displaying call stack trace for plugin "deathrun.smx":
L 01/23/2016 - 13:37:20: [SM] [0] Line 217, deathrun/random.sp::PlayerDisconnect_Random()
L 01/23/2016 - 13:37:20: [SM] [1] Line 52, deathrun/events.sp::event_PlayerDisconnect()
L 01/23/2016 - 13:37:33: [SM] Native "IsClientInGame" reported: Client index 0 is invalid
L 01/23/2016 - 13:37:33: [SM] Displaying call stack trace for plugin "deathrun.smx":
L 01/23/2016 - 13:37:33: [SM] [0] Line 217, deathrun/random.sp::PlayerDisconnect_Random()
L 01/23/2016 - 13:37:33: [SM] [1] Line 52, deathrun/events.sp::event_PlayerDisconnect()
L 01/23/2016 - 13:59:32: Error log file session closed.
L 01/23/2016 - 13:59:34: SourceMod error session started
L 01/23/2016 - 13:59:34: Info (map "deathrun_cheap_mix") (file "errors_20160123.log")
L 01/23/2016 - 13:59:34: [SM] Native "IsClientInGame" reported: Client index 0 is invalid
L 01/23/2016 - 13:59:34: [SM] Displaying call stack trace for plugin "deathrun.smx":
L 01/23/2016 - 13:59:34: [SM] [0] Line 217, deathrun/random.sp::PlayerDisconnect_Random()
L 01/23/2016 - 13:59:34: [SM] [1] Line 52, deathrun/events.sp::event_PlayerDisconnect()
L 01/23/2016 - 14:16:12: Error log file session closed.
L 01/23/2016 - 14:49:57: SourceMod error session started
L 01/23/2016 - 14:49:57: Info (map "deathrun_classic") (file "errors_20160123.log")
L 01/23/2016 - 14:49:57: [SM] Native "CS_RespawnPlayer" reported: Client index 1 is not valid
L 01/23/2016 - 14:49:57: [SM] Displaying call stack trace for plugin "deathrun.smx":
L 01/23/2016 - 14:49:57: [SM] [0] Line 83, deathrun/autorespawn.sp::respawn_SpawnTimer()
L 01/23/2016 - 14:49:57: [SM] Native "CS_RespawnPlayer" reported: Client index 9 is not valid
L 01/23/2016 - 14:49:57: [SM] Displaying call stack trace for plugin "deathrun.smx":
L 01/23/2016 - 14:49:57: [SM] [0] Line 83, deathrun/autorespawn.sp::respawn_SpawnTimer()
L 01/23/2016 - 15:07:52: Error log file session closed.
лог ошибок
Замени в нём 217 строку:deathrun/random.sp
if ( !IsClientInGame( client ) || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
if ( !client || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
Здесь 83 строку:deathrun/autorespawn.sp
CS_RespawnPlayer ( client );
if (IsClientInGame(client)) CS_RespawnPlayer ( client );
Что то вы как то повторяетесь...Замени в нём 217 строку:На:PHP:if ( !IsClientInGame( client ) || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
Здесь 83 строку:PHP:if ( !client || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
На:PHP:CS_RespawnPlayer ( client );
Но лучше автору сделать через userid.PHP:if (IsClientInGame(client)) CS_RespawnPlayer ( client );
if ( !client || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
if ( !client || !IsClientInGame( client ) || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
перестало давать фраги терам.
Добавлена переменная для отключения добавления убийств избранным за самоубийство игрока.
dr_killforsuicide 1
Подтверждаю, тоже сегодня заметил такое.словил сегодня 2 террориста с таким вариантом
упс, не заметилdr_killforsuicide 1
Действительно. Поставлю.В event.sp поставь на round_end/round_start EventHookMode_PostNoCopy
На самом деле новый синтаксис и стал тем толчком, который помог преодолеть мою лень и начать разработку. :)P.S. Понравилось, что используешь #pragma newdecls required