Всем привет. Пишу себе плагин для подсчета времени подключения к серверу. Он работает. Но, есть проблема. Я в коде вставил очистку переменных везде, где только можно, но это не помогает. К примеру, я захожу в первый раз на сервер и он пишет, что время подключения составляет 8,5 сек. Все в порядке. Но, если я выйду с сервера и снова зайду, то переменная, судя по всему, все-равно не очищается (не смотря на многочисленные очистки) и в итоге к моему старому значению плюсуется новое. И при втором заходе пишет, что время подключения, к примеру 16 сек. и т.д. Если есть профессионалы, подскажите, что я упустил? Код прилагаю:
Скрытый текст
#pragma semicolon 1 #pragma tabsize 0
#include #include
#undef REQUIRE_PLUGIN
#define PLUGIN_VERSION "0.4.1"
new Float: connTime[MAXPLAYERS+1]; // Сюда для каждого клиента пишем время подключения new playerCted[MAXPLAYERS+1]; // Определяем его состояние, если подключился true, если еще нет или вообще нет, то false
public Plugin:myinfo = { name = "[L4D2] Connection Timer", author = "B[R]UTUS", description = "Counting the time from connect to load into server.", version = PLUGIN_VERSION, url = "" }
public OnPluginStart() { LoadTranslations("l4d2_plyr_join_contime.phrases");
for (new i = 1; i <= MAXPLAYERS; i++) // Очищаем переменные { connTime[i] = 0.0; playerCted[i] = false; } }
public ResetStats() // Очистка переменных { for (new i = 1; i <= MaxClients; i++) { connTime[i] = 0.0; playerCted[i] = false; } }
public OnMapStart() { ResetStats(); }
public OnMapEnd() { ResetStats(); }
public OnClientConnected(client) // Когда заходит в игру { connTime[client] = 0.0; // Очищаем все еще раз на всякий случай playerCted[client] = false;
if (IsValidPlayer(client) && !IsFakeClient(client)) { CreateTimer(0.1, ConnectionTime, client, TIMER_REPEAT); // Запускаем таймер с частотой обновления 1/10 секунды } }
public OnClientDisconnect(client) // Тестовые варианты (возможно будет удалено) { if (IsValidPlayer(client) && !IsFakeClient(client)) { connTime[client] = 0.0; playerCted[client] = false; CPrintToChatAll("Игрок {olive}%N {default}отключился от сервера.", client); } }
public OnClientDisconnect_Post(client) // Тестовые варианты (возможно будет удалено) { if (IsValidPlayer(client) && !IsFakeClient(client)) { connTime[client] = 0.0; playerCted[client] = false; CPrintToChatAll("Игрок {olive}%N {default}отключился от сервера.", client); } }
public Action:ConnectionTime(Handle:timer, any:client) // Сам таймер { if (IsClientConnected(client) && !IsClientInGame(client) && !IsFakeClient(client) && !playerCted[client]) // Если игрок подключился, но не загрузился connTime[client] = connTime[client] + 0.1; // Прибавляем 1/10 секунды
if (IsClientInGame(client) && !IsFakeClient(client) && !playerCted[client]) // Если игрок подключился { CPrintToChatAll("Игрок {olive}%N {default}подключился к серверу за {olive}%.1f {default}сек.", client, connTime[client]); connTime[client] = 0.0; // После подключения очищаем время на всякий случай playerCted[client] = true; // Даем обозначение, что данный клиент подключен, чтобы верхнее условие не работало постоянно, потому что оно сидит на таймере }
for (new i = 1; i <= MAXPLAYERS; i++) // Еще разок очищаем { if (!IsClientConnected(client) && !IsClientInGame(i)) { connTime[i] = 0.0; playerCted[i] = false; } } }
Скомпилировал на последней версии сорсмода, все работает. Спасибо. Единственное, там только сообщение 4 раза повторяется. Сначала пишет нормальное время, а потом 3 раза 0 секунд. Но над этим я сам подумаю. За основной алгоритм спасибо. Кратко и ясно.
Доброй ночи ребят помогите найти плагины 3. 1 названия сервера в правом верхнем углу. 2 счетчик убийств скрин вотон обведено желтым и 3. каторый на верху на подключение игрока там пишиться часы а не длительность подключения.Помогите плиз давно ищу .За ранее спасибо