Четверг, 17.07.2025, 08:02
Приветствую Вас Гость | RSS
[•X•X•X•X•X•X•X•X•X• SRK •X•X•X•X•X•X•X•X•X•] - 193.107.179.214:7777
Главная | Simple_AFK - Форум | Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: DimanCC, Awesome, [Tuner_Life]Nikotin  
Simple_AFK
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
Прикольный скрипт biggrin
 
  • Страница 1 из 1
  • 1
Поиск:

Поддержка пишите на наш форум:Walter & alisa