В последнее время участились вопросы новичков которые правым боком связаны с таймерами. А именно что для воплощения ихних идей как раз таки и требуеться *таймеры* )) Создадим таймер требующий выполнения какого либо действия через определенное время для указаного игрока.
В нашем случае будем использовать public SetPlayerUnJaill
Т.к в OnGameModeInit >> SetTimer (xxx) он настроен под выполнение ежесекундно. (1000)
И так, идем в SetPlayerUnJaill
Там мы видим что то вроде этого:
Code
// Взято из Cream Life
for(new i = 0; i < MAX_PLAYERS; i++) // Цикл или условие, хз <img rel="usm" src="http://www.samp-rus.com/Smiles_for_forum/lol.gif" border="0" align="absmiddle" alt=":D"> я там полнейший нуб )
{
if(IsPlayerConnected(i)) // Проверка на игрока онлайн.
{
if(!IsPlayerNPC(i)) // Проверочка на бота.
{
TextDrawDestroy(PlayerZoneName[i]); // Функция удаления тексдрава.
new zone[MAX_ZONE_NAME]; // Переменная...
GetPlayer2DZone(i, zone, MAX_ZONE_NAME); // не стандартная функция.
PlayerZoneName[i] = TextDrawCreate(470.0,420.0,zone); // Установка тексдрава.
TextDrawShowForPlayer(i,PlayerZoneName[i]); // Показываем тексдрав определенному игроку.
if(PlayerInfo[i][pJobTime] > 0) // Проверка на значение в pJobTume . Тоесть в аккаунте игрока.
{
PlayerInfo[i][pJobTime] --; // Если проверка вышла положительно то выполняем ету чушь.
} // Скобка :D
Насмотрелись ? Спускаемся в самый низ паблика и вставляем вот этот код..
if(Noobtime[i] => 1) // Проверяем значение в Noobtime. Если оно 1 или больше то выполянем следующие.
{
Noobtime[i] += 1; // Таким образом мы как бы вставляем батарейку. Даем дальнейшие колеса нашему таймеру. Тоесть добавляем к уже ранее установленому значению в Noobtime ище 1. И того у нас выйдет за одну секунду - 2.
Я уже упоминал что паблик выполняеться каждую секунду ? Так вот после 5-и секунд , как думаете какое в Noobtime будет значение ?! 6 =_= Не 5 потому что мы уже ранее установили значение в 1. Что бы начать наш таймер.
Далее. Продолжаем наш код.
if(Noobtime[i] => 1)
{
Noobtime[i] += 1;
if(Noobtime[i] == 500) // Догадались ? Прально. При достижении значения 500(секунд) мы выполняем действие которое я опишу ниже.
{
Noobtime[i] = 0; // Теперь остановим наш таймер задав ему значение 0.
Kick(i); // Кикаем игрока.
SendClientMessage(i,COLOR_WHITE,"Вы были кикнуты сервером.");
}
После написания этого кода мы должны проделать следующие процедуры.
Дать вашему коду новые знания так сказать.
Всё просто.
Ко всем new Добавьте new Noobtime[MAX_PLAYERS];
Так же если вы не хотите что бы у вас были рандомные случаи запуска таймера у игроков то суньте в OnPlayerConnect этот кодик.
Noobtime[i] = 0;
Если же вы хотите что бы значения таймера вписывались в аккаунт то вместе с Noobtime используйте PlayerInfo[i(или playerid)][pтут название вашего таймера] = 1; // Но я думаю вы понимаете что для этого кода ребуються необходимые процедуры для того что бы работала запись в аккаунт игрока. enum pinfo в помощь.
Если же вы хотите что бы таймер срабатывал по вашей команде то вот вам простой кодик.
if(strcmp(cmd, "/kickmy", true) == 0 || strcmp(cmd, "/km", true) == 0)
{
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "%s будет кикнут через 500 секунд по ПСЖ. ", sendername);
SendClientMessageToAll(playerid,COLOR_WHITE,string);
Noobtime[playerid] = 1;
return 1;
}
Если вы думаете что в таймерах нет не какой пользы то вы ошибаетесь. Знающие скриптеры так не думают )
Именно на них построены главные основы хороших модов/скриптов. Это теже самые спидометры, античиты, гонки ,и так далее.
Удачи.