- ВойтиАвторизация через uNet
- РегистрацияРегистрация на сайте через uNet
Текущая версия SA-MP: 0.3.7
IP: 77.220.180.96:7777
Новые сообщения · Поиск |
|
|
Модератор форума: KaTacTpOqpa |
Форум Помощь по скриптингу SA-MP Вопросы по скриптингу Как определить, на паузе игрок или нет? |
Как определить, на паузе игрок или нет? | ||||
|
[Sn1peR] | Сообщение # 2 | 16:26:43 07 Фев 2012 |
Пользователи
Сообщений: 32
Репутация: 47
|
В инете посмотри систему АФК
_|___|___|___|___|___|___|___|___| ___|___|___|___|___|___|___|___|_ _|___|___|___|___|___|___|___|___| |
VERGIL | Сообщение # 3 | 09:32:51 10 Фев 2012 |
Пользователи
Сообщений: 82
Репутация: 28
|
Вот система для афк: Это все в начало Code #include <a_samp> Code // --------------- Время в секундах --------------------------------- #define MAX_AFK_TIME 60 // максимально время AFK до кика #define FIRST_CHECK 40 // первое предупреждение #define SECOND_CHECK 55 // второе предупреждение #define AFK_TEXT_SET 20 // время до появления надписи AFK над головой // --------------- Цвета -------------------------------------------- #define T_COLOR 0xFF000080 // цвет 3Д текста #define M1_COLOR 0xFFFFFFFF // цвет текста первого предупреждения #define M2_COLOR 0xFFFFFFFF // цвет текста второго предупреждения #define MK_COLOR 0xFFFFFFFF // цвет текста оповещения о кике // --------------- Прочее ------------------------------------------- #define T_DIST 20.0 // расстояние с которого видно 3Д текст // --------------- Структура данных --------------------------------- enum afk_info { AFK_Time, // время AFK Float:AFK_Coord, // последняя координата AFK_Stat // статус 3Д текста } // --------------- Объявление переменных ---------------------------- new PlayerAFK[MAX_PLAYERS][afk_info]; // данные AFK игроков new AFK_Timer; // таймер фильтрскрипта для работы функции new Text3D:AFK_3DT[MAX_PLAYERS]; // 3Д тексты над головами игроков // --------------- Объявление функции проверки ---------------------- forward AFKCheck(); Потом дальше: создаем public AFKCheck Code 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, 1.3); PlayerAFK[i][AFK_Stat] = 1; } // строка ниже исключает возможность кика админа за AFK if(IsPlayerAdmin(i)){continue;} // кикаем игрока if(PlayerAFK[i][AFK_Time] > MAX_AFK_TIME) { SendClientMessage(i, MK_COLOR," Вы были кикнуты за состояние 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; Потом в OnGameModeInit Code public OnFilterScriptInit()// Поменяй на "OnGameModeInit" и "print" убери { print("FS Simple AFK 1.0 by VERGIL > 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; } Дальше в OnPlayerConnect Code public OnPlayerConnect(playerid) { PlayerAFK[playerid][AFK_Time] = 0; PlayerAFK[playerid][AFK_Stat] = 0; return 1; } И последнее... Code 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; } Все. Если я тебе помог ставь "+" У меня в моде такая система стоит, если тызахочешь что либо удалить тебе все там подписал что нужно. THIS IS POLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! I your friend ;D Редактировано VERGIL - Пятница, 10 Фев 2012, 09:36:29 |
[Sn1peR] | Сообщение # 4 | 19:17:16 10 Фев 2012 |
Пользователи
Сообщений: 32
Репутация: 47
|
VERGIL, а у тебя там написано АФК когда игрок просто тупо стоит на одном месте?
_|___|___|___|___|___|___|___|___| ___|___|___|___|___|___|___|___|_ _|___|___|___|___|___|___|___|___| |
| |||
| |||