Awesome | Дата: Четверг, 29.03.2012, 21:17 | Сообщение # 1 |
 Генерал-майор
Группа: Проверенные
Сообщений: 70
Награды: 14
Репутация: 25
Статус: Offline
| //------------------------------------------------------------------- // Simple AFK // -----------------------------------------------------------------
#include <a_samp>
// --------------- Время в секундах --------------------------------- #define MAX_AFK_TIME 300 //Максимально время AFK до кика #define FIRST_CHECK 180 // Первое предупреждение #define SECOND_CHECK 280 // второе предупреждение #define AFK_TEXT_SET 10 // Время до появление надписи над головой
// --------------- Цвета -------------------------------------------- #define T_COLOR 0xFF000080 // Цвет 3D Текста #define M1_COLOR 0xFFFFFFFF // Цвет текста первого предупреждение #define M2_COLOR 0xFFFFFFFF // Цвет текста второго предупреждение #define MK_COLOR 0xFFFFFFFF // Цвет текста оповешение о кике
// --------------- прочее------------------------------------------- #define T_DIST 20.0 // ростояние с каторого видно 3D текст
// --------------- Структура данных --------------------------------- enum afk_info { AFK_Time, // время AFK Float:AFK_Coord, // последняя координата AFK_Stat // статус 3D текста }
// --------------- Объявление переменных---------------------------- new PlayerAFK[MAX_PLAYERS][afk_info]; // Данный AFK игроков new AFK_Timer; // таймеры фильтроскрипта для работы функции new Text3D:AFK_3DT[MAX_PLAYERS]; // 3D Текст над головами игроков
// --------------- Объявление функции проверки ---------------------- forward AFKCheck();
public AFKCheck() { new Float:AFKCoords[3]; for(new i = 0;i<MAX_PLAYERS;i++) { if(!IsPlayerConnected(i)){continue;} if(IsPlayerNPC(i)){continue;}
// получаем координаты игроков GetPlayerPos(i,AFKCoords[0],AFKCoords[1],AFKCoords[2]);
// если координата не изменилась if(AFKCoords[0] == PlayerAFK[i][AFK_Coord]) { PlayerAFK[i][AFK_Time]++; } else { PlayerAFK[i][AFK_Time] = 0; if(PlayerAFK[i][AFK_Stat] != 0) { Delete3DTextLabel(AFK_3DT[i]); PlayerAFK[i][AFK_Stat] = 0; } }
// сохраняем текущую координату до следующей проверки PlayerAFK[i][AFK_Coord] = AFKCoords[0];
// ïпоказываем 3Д текст if(PlayerAFK[i][AFK_Time] == AFK_TEXT_SET && PlayerAFK[i][AFK_Stat] == 0) { AFK_3DT[i] = Create3DTextLabel("AFK", T_COLOR, 0.00, 0.00, 10000.0, T_DIST, 0); Attach3DTextLabelToPlayer(AFK_3DT[i], i, 0.0, 0.0, 0.5); PlayerAFK[i][AFK_Stat] = 1; } // показываем сколько секунд AFK if(PlayerAFK[i][AFK_Stat] == 1) { new str[16]; format(str,16,"AFK %d sec",PlayerAFK[i][AFK_Time]); Update3DTextLabelText(AFK_3DT[i], T_COLOR, str); } // строка ниже исключает возможность кика RCON-Aдмина за AFK if(IsPlayerAdmin(i)){continue;}
// кикаем игрока if(PlayerAFK[i][AFK_Time] > MAX_AFK_TIME) { SendClientMessage(i, MK_COLOR," AFK: вы были кикнуты за состояние AFK более " #MAX_AFK_TIME " секунд"); Kick(i); continue; }
// первое предупреждение if(PlayerAFK[i][AFK_Time] == FIRST_CHECK) { SendClientMessage(i, M1_COLOR, " AFK: Вы будете кикнуты через " #MAX_AFK_TIME - #FIRST_CHECK " секунд если не начнёте двигатся!"); continue; }
// второе предупреждение if(PlayerAFK[i][AFK_Time] == SECOND_CHECK) { SendClientMessage(i, M2_COLOR, " AFK: Вы будете кикнуты через " #MAX_AFK_TIME - #SECOND_CHECK " секунд если не начнёте двигатся !"); continue; } } return 1; }
public OnFilterScriptInit() { print("Simple AFK > Started");
// запуск таймера для функции проверки AFK_Timer = SetTimer("AFKCheck",1000,1); return 1; }
public OnFilterScriptExit() { for(new i=0;i<MAX_PLAYERS;i++) { Delete3DTextLabel(AFK_3DT[i]); }
KillTimer(AFK_Timer);
return 1; }
public OnPlayerConnect(playerid) { PlayerAFK[playerid][AFK_Time] = 0; PlayerAFK[playerid][AFK_Stat] = 0; return 1; }
public OnPlayerDisconnect(playerid, reason) { PlayerAFK[playerid][AFK_Time] = 0; if(PlayerAFK[playerid][AFK_Stat] != 0) { Delete3DTextLabel(AFK_3DT[playerid]); PlayerAFK[playerid][AFK_Stat] = 0; } return 1; }
я вернулся
|
|
| |
[Tuner_Life]Nikotin | Дата: Вторник, 19.06.2012, 12:26 | Сообщение # 2 |
Рядовой
Группа: Пользователи
Сообщений: 1
Награды: 4
Репутация: 3
Статус: Offline
| Прикольный скрипт
|
|
| |