[CS:S/CS:GO] Бег на выживание

Статус
В этой теме нельзя размещать новые ответы.

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
Re: [CS:S/CS:GO] Бег на выживание

Хм, ну у меня было Всё норм, но были ошибки которые забивали канал чата.
 

kleuser

Участник
Сообщения
1,838
Реакции
732
Re: [CS:S/CS:GO] Бег на выживание

Саша Шеин, скинь ошибки, автор исправит.
У меня никаких проблем нет с чатом.
 

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
Re: [CS:S/CS:GO] Бег на выживание

Да я что-то поправил и всё уже ок.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Re: [CS:S/CS:GO] Бег на выживание

В случае обрыва интернет-соединения. Действует далеко не на всех серверах, как ни странно. Возможно, зависит от ОС/настроек сервера.
В связи с этим, разработал пару трюков, чтобы всё же получать индекс игрока, когда он "жизненно" необходим плагину. Например, когда требуется перенастроить глобальный массив с индексом игрока при "событийном" выходе.
 

selax

Добрая душа
Сообщения
1,172
Реакции
521
Re: [CS:S/CS:GO] Бег на выживание

Действует далеко не на всех серверах, как ни странно.
Действительно не на всех, проверял на это, когда мне о ошибке написали... :(

Добавлено через 1 минуту
У вас не dev8, в dev8 этого события нет в deathrun.sp.

Добавлено через 2 минуты
selax, я качал последнюю версию, это ошибки с dev8
Игрок
Я имел ввиду коммит последний, не версию. Исправил как только вы написали о ошибке: https://github.com/selax/deathrun/commit/5553d9f39a4781485d8877c1bda4fb012238be64

Добавлено через 5 минут
В связи с этим, разработал пару трюков, чтобы всё же получать индекс игрока, когда он "жизненно" необходим плагину. Например, когда требуется перенастроить глобальный массив с индексом игрока при "событийном" выходе.
Да id извлечь в принципе не проблема, просто... В будущем мне в любом случае придётся делать что-то такое, для корректности банов. Не могу понять почему он теряется...
Кстати походу дела я об этом раньше знал, в 1.7.1 стоит проверка. :-D

Добавлено через 7 минут
Да я что-то поправил и всё уже ок.
Скиньте поправленную версию. :)
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Re: [CS:S/CS:GO] Бег на выживание

Не могу понять почему он теряется
Событие вызывается очень поздно, как раз, когда игрок (полностью) окончательно исчезает ("выходит") с сервера. А, как известно, GetClientOfUserId(userid) возвращает 0, если игрок вне игры. Что мы и наблюдаем. Оффтоп
 

selax

Добрая душа
Сообщения
1,172
Реакции
521
Re: [CS:S/CS:GO] Бег на выживание

Событие вызывается очень поздно, как раз, когда игрок (полностью) окончательно исчезает ("выходит") с сервера. А, как известно, GetClientOfUserId(userid) возвращает 0, если игрок вне игры. Что мы и наблюдаем.

Оффтоп
Особо не думал, но хотел сделать массив c id, никами, steamid, ip. И каждый раз при событии проверять кто пропал.

Добавлено через 2 минуты
Исправил не работающие очки за победу. Не смеяться.
https://github.com/selax/deathrun/commit/6354c680bfde2f090393fd681b8da3a363ed3ead

Добавлено через 20 минут
Блин, а действительно... Как говорил великий Страуструп в своей книжке: Тестирование - самый важный и долгий этап разработки...

Добавлено через 23 минуты
Сейчас займусь багами по поводу первого раунда:
- Террорист бессмертный.
- В случае с ботами - они остаются на базе Т и он их убивает.

Добавлено через 1 час 36 минут
2.0.dev9
- Исправлена ошибка, возникающая при попытке уничтожить несуществующий таймер.
- Исправлена ошибка, возникающая в player_disconnect, при обрыве соединения у игрока.
- Исправлены неработающие очки/убийства за победу.
- Исправлено бессмертие у избранного в первом раунде.
- Исправлено появление спецназа на базе избранного, и наоборот. Проявлялось с ботами.
- Исправлен неработающий (работал же...) показ избранного, как убийцы самоубийц.
- Добавлена переменная для отключения добавления убийств избранным за самоубийство игрока.
 
Последнее редактирование:

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
Re: [CS:S/CS:GO] Бег на выживание

Скачал последний апдейт, всё норм. :victory:
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Re: [CS:S/CS:GO] Бег на выживание

Исправлена ошибка, возникающая при попытке уничтожить несуществующий таймер
PHP:
public Action respawn_SpawnTimer ( Handle timer, int client )
{
	CS_RespawnPlayer ( client );
}
Рано или поздно появится ошибка: "client not in game".
А в большей части и не нужно. Там и индекс, считай, что не требуется:
PHP:
void PlayerDisconnect_Random ( Event ev )
{
	if ( config_RandomPlayers.IntValue > 1 )
	{
		int client = GetClientOfUserId ( ev.GetInt ( "userid" ) );
		
		if ( !IsClientInGame( client ) || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
Раз всё равно разрешается проверка !IsClientInGame( client ), то можно просто так же добавить:
C-подобный:
if (!client || !IsClientInGame( client ) || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
В void PlayerDisconnect_Bans ( Event ev ) для 0 индекса просто применять BanIdentity.
 

selax

Добрая душа
Сообщения
1,172
Реакции
521
Re: [CS:S/CS:GO] Бег на выживание

PHP:
public Action respawn_SpawnTimer ( Handle timer, int client )
{
	CS_RespawnPlayer ( client );
}
Рано или поздно появится ошибка: "client not in game".
Действительно, спасибо. Добавлю проверку.


PHP:
if ( !IsClientInGame( client ) || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
Вот смотрю на этот код и не понимаю... Мой вариант, а тем более ваш приведут к косяку, что если кто то вылетит с серва - добавится лишний террорист. Или путаю я что-то? Днём голова совсем не варит. :(
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Re: [CS:S/CS:GO] Бег на выживание

Мой вариант, а тем более ваш приведут к косяку
Тогда, скорее мой, т.к.:
Это событие возвращать не может, т.е. добавление Т здесь отпадает. Всё зависит от того, что автор сам написал в дальнейшем. Ведь можно и проверить количество Т/КТ для данного случая:
PHP:
if ( GetTeamClientCount ( config_RandomPlayers.IntValue ) <= 1 )
Эта функция этим и занимается, а значит, кроме, возможно лишней сверки количества игроков в команде, ничего не будет.
 

selax

Добрая душа
Сообщения
1,172
Реакции
521
Re: [CS:S/CS:GO] Бег на выживание

Это событие возвращать не может, т.е. добавление Т здесь отпадает.
Что оно возвращать не может? Вы хотя бы фразы дописывайте, я вас понять не могу... Функция IsClientInGame там по причине того, что GetClientTeam иногда возвращает "client not in game".

Ведь можно и проверить количество Т/КТ для данного случая:
PHP:
if ( GetTeamClientCount ( config_RandomPlayers.IntValue ) <= 1 )
Я так понимаю, эта функция этим и занимается, а значит, кроме, возможно лишней сверки количества игроков в команде, ничего не будет.
Тут проверка на "1 или меньше избранных в команде". То есть 2 террориста вполне могут быть, а вот 3 уже нет.

Хотя другое дело - проблема эта относительно редко будет появляться..
 

kleuser

Участник
Сообщения
1,838
Реакции
732
Re: [CS:S/CS:GO] Бег на выживание

хм, обновился до dev9, перестало давать фраги терам.
и лог ошибок за сегодняшнее число с версией dev9
PHP:
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.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Re: [CS:S/CS:GO] Бег на выживание

Замени в нём 217 строку:
PHP:
if ( !IsClientInGame( client ) || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
На:
PHP:
if ( !client || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
Здесь 83 строку:
PHP:
CS_RespawnPlayer ( client );
На:
PHP:
if (IsClientInGame(client)) CS_RespawnPlayer ( client );
Но лучше автору сделать через userid.
 

selax

Добрая душа
Сообщения
1,172
Реакции
521
Re: [CS:S/CS:GO] Бег на выживание

Замени в нём 217 строку:
PHP:
if ( !IsClientInGame( client ) || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
На:
PHP:
if ( !client || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
Здесь 83 строку:
PHP:
CS_RespawnPlayer ( client );
На:
PHP:
if (IsClientInGame(client)) CS_RespawnPlayer ( client );
Но лучше автору сделать через userid.
Что то вы как то повторяетесь...
PHP:
if ( !client || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
Как минимум будет так:
PHP:
if ( !client || !IsClientInGame( client ) || GetClientTeam ( client ) == config_RandomPlayers.IntValue )
Иначе начнёт вылазить другая ошибка - "client not in game".
Как максимум - вообще переделать, словил сегодня 2 террориста с таким вариантом.

Добавлено через 55 минут
перестало давать фраги терам.
Добавлена переменная для отключения добавления убийств избранным за самоубийство игрока.
PHP:
dr_killforsuicide 1
 
Последнее редактирование:

selax

Добрая душа
Сообщения
1,172
Реакции
521
Re: [CS:S/CS:GO] Бег на выживание

Хм... А проблема то повторяется... Придётся и правда перепиливать этот кусок кода.
 

Вложения

  • 0tJgl7O.jpg
    0tJgl7O.jpg
    83.3 КБ · Просмотры: 22

kleuser

Участник
Сообщения
1,838
Реакции
732

Vit_ amin

Добрая душа
Сообщения
1,504
Реакции
660
Re: [CS:S/CS:GO] Бег на выживание

В event.sp поставь на round_end/round_start EventHookMode_PostNoCopy
P.S. Понравилось, что используешь #pragma newdecls required
 

selax

Добрая душа
Сообщения
1,172
Реакции
521
Re: [CS:S/CS:GO] Бег на выживание

В event.sp поставь на round_end/round_start EventHookMode_PostNoCopy
Действительно. Поставлю.

P.S. Понравилось, что используешь #pragma newdecls required
На самом деле новый синтаксис и стал тем толчком, который помог преодолеть мою лень и начать разработку. :)


P.S. Новый "релиз" ближе к концу недели, экзамены у меня. :(
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу