07:42
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 1
  • 1
Модератор форума: Alcoholik  
AFK system.
Michael_StarДата: Среда, 29.02.2012, 22:28 | Сообщение # 1
Освоившийся
Группа: I'm V.I.P.
Сообщений: 116
Награды: 1
Город: Киев
Репутация: -22
Замечания: 0%
Статус:
Добрый день/вечер. Вот нашел систему АФК, но она была в скрипте и новичкам было бы сложно ее от туда вырезать.

Описание
- Скрипт предназначенный для обнаружения кто из игроков в афк.
- Во время афк твой ник переименовывается в AFK_NickName.
- Так же после 250 секунд в афк тебя кикает с сервера.
- Над ником появляется надпись с временем афк.

Вот что у меня получилось.
В самое начало мода:
Code
#define AFKSeconds 500
#define COLOR_YELLOW 0xFFFF00AA

enum afker
{
pNameEx[MAX_PLAYER_NAME],
TickEx,
ChekEx,
VarEx,
bool:pSpawnEx,
bool:AFKEx,
}

new PlayerEx[MAX_PLAYERS][afker];
new GG,TT;


В public OnGameModeInit():
Code
GG = SetTimer("AFKProcessor", 1000,1);
TT = SetTimer("CountEx", 5000,1);


В public OnGameModeExit():
Code
{
KillTimer(GG);
KillTimer(TT);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && PlayerEx[i][AFKEx] == true)
{
new str[MAX_PLAYER_NAME];
format(str, sizeof (str), "%s", PlayerEx[i][pNameEx]);
SetPlayerName(i,str);
}
}
return 1;
}


В public OnPlayerConnect(playerid):
Code
{
          new str[MAX_PLAYER_NAME];
          format(str, sizeof (str), "%s", GetPlayerNameEx(playerid));
          new str2[30];
          format(str2, sizeof (str2), "AFK_%s", GetPlayerNameEx(playerid));
          new str3[5];
          format(str3, sizeof (str3), "%s", GetPlayerNameEx(playerid));
          PlayerEx[playerid][pNameEx] = str;
          PlayerEx[playerid][pSpawnEx] = false;
          PlayerEx[playerid][AFKEx] = false;
          if(strfind(str3, "AFK_", true) != -1)
          {
          Kick(playerid);
          }
          for(new i = 0; i < MAX_PLAYERS; i++)
          {
          if(IsPlayerConnected(i) && i != playerid)
          {
          new find[30];
          format(find, sizeof (find), "AFK_%s", GetPlayerNameEx(i));
          if(strfind(find, str2, true) != -1)
          {
          Kick(playerid);
          }
          }
          }
          return 1;
}


В public OnPlayerDeath(playerid,killerid, reason): (Если нет такого паблика - то создаем)
Code
{
          PlayerEx[playerid][pSpawnEx] = false;
       return 1;
}


Создаем еще 2 паблика:
Code
forward CountEx();
public CountEx()
{
for(new x = 0; x < MAX_PLAYERS; x++)
{
       if(IsPlayerConnected(x))
        {
        if(PlayerEx[x][ChekEx] == PlayerEx[x][TickEx])
        {
        if(PlayerEx[x][pSpawnEx] == true)
        {
        PlayerEx[x][AFKEx] = true;
        }
        }
        PlayerEx[x][ChekEx] = PlayerEx[x][TickEx];
        }
}
return 1;
}

forward AFKProcessor();
public AFKProcessor()
{
for(new x = 0; x < MAX_PLAYERS; x++)
{
       if(IsPlayerConnected(x))
        {
          if(PlayerEx[x][ChekEx] < PlayerEx[x][TickEx])
          {
          if(PlayerEx[x][AFKEx] == true)
          {
          new str[MAX_PLAYER_NAME];
          format(str, sizeof (str), "%s", PlayerEx[x][pNameEx]);
          SetPlayerName(x,str);
          PlayerEx[x][VarEx] = 0;
          PlayerEx[x][AFKEx] = false;
          }
          }
          if(PlayerEx[x][AFKEx] == true)
          {
       PlayerEx[x][VarEx]++;
          new str[MAX_PLAYER_NAME];
          format(str, sizeof (str), "AFK_%s", PlayerEx[x][pNameEx]);
          SetPlayerName(x,str);
          }
          if(PlayerEx[x][VarEx] > AFKSeconds)
          {
          new string[255];
          format(string,sizeof(string),"[AFK]: Èãðîê %s êèêíóò ñ ñåðâåðà çà äîëãîå ïðåáûâàíèå â AFK.", GetPlayerNameEx(x));
          SendClientMessageToAll(COLOR_YELLOW,string);
          Kick(x);
          PlayerEx[x][VarEx] = 0;
          }
          if(PlayerEx[x][VarEx] > 10)
          {
          new stringF[20];
          format(stringF,sizeof(stringF),"ESC [%s]",Convert(PlayerEx[x][VarEx]));
          SetPlayerChatBubble(x, stringF, 0xFFFFFF00, 70.0, 1200);
          }
        }
}
return 1;
}


В public OnPlayerSpawn(playerid):
Code
{
          PlayerEx[playerid][pSpawnEx] = true;
          return 1;
}


В public OnPlayerUpdate(playerid):
Code
{
       if(IsPlayerConnected(playerid))PlayerEx[playerid][TickEx]++;
       return 1;
}


В public OnPlayerDisconnect(playerid, reason):
Code
{
if(PlayerEx[playerid][AFKEx] == true)
{
new str[MAX_PLAYER_NAME];
format(str, sizeof (str), "%s", PlayerEx[playerid][pNameEx]);
SetPlayerName(playerid,str);
}
return 1;
}


И в самый конец мода:
Code
GetPlayerNameEx(playerid)
{
       new pname[MAX_PLAYER_NAME];
       GetPlayerName(playerid,pname,MAX_PLAYER_NAME);
       return pname;
}

Convert(number)
{
       new hours = 0, mins = 0, secs = 0, string[100];
       hours = floatround(number / 3600);
       mins = floatround((number / 60) - (hours * 60));
       secs = floatround(number - ((hours * 3600) + (mins * 60)));
       if(hours > 0)
       {
       format(string, 100, "%d:%02dm:%02ds", hours, mins, secs);
       }
       else
       {
       format(string, 100, "%d:%02d", mins, secs);
       }
       return string;
}


Автора не знаю.
Если будут вопросы - обращайтесь.



RoACh: Удалено, в след. раз будет бан, уважай других участников

Сообщение отредактировал Michael_Star - Среда, 29.02.2012, 22:36
LatronДата: Среда, 29.02.2012, 23:34 | Сообщение # 2
Группа: I'm V.I.P.
Сообщений: 2115
Награды: 22
Город: Орел
Репутация: 1604
Замечания: 0%
Статус:
Очередное кривокодное,унылое дерьмо sick .


Моё портфолио

Мои работы:
[ Lesson ] Операторы в PAWN.
[ Lesson ] Переменная.
[ GM ] RegSys. ( Last update: 21.04.2012 )


DrevenДата: Четверг, 01.03.2012, 01:25 | Сообщение # 3
Гуру
Группа: Продвинутые
Сообщений: 1096
Награды: 205
Город: od.ua
Репутация: 1099
Замечания: 0%
Статус:
Это даже может работать 0_0, два таймера зачем?


www.samp-rpg.com
MarkeloFFДата: Четверг, 01.03.2012, 13:48 | Сообщение # 4
Советчик
Группа: I'm V.I.P.
Сообщений: 1033
Награды: 14
Город: Калининград
Репутация: 191
Замечания: 80%
Статус:
Quote (Dreven)
Это даже может работать 0_0, два таймера зачем?

Michael_StarДата: Четверг, 01.03.2012, 20:07 | Сообщение # 5
Освоившийся
Группа: I'm V.I.P.
Сообщений: 116
Награды: 1
Город: Киев
Репутация: -22
Замечания: 0%
Статус:
Не я делал!!!
Просто замечал что были вопросы "как его вырезать" вот и все..



RoACh: Удалено, в след. раз будет бан, уважай других участников
LatronДата: Четверг, 01.03.2012, 21:25 | Сообщение # 6
Группа: I'm V.I.P.
Сообщений: 2115
Награды: 22
Город: Орел
Репутация: 1604
Замечания: 0%
Статус:
Quote (Michael_Star)
Не я делал!!!

Это Вас не оправдывает,зачем вообще выкладывать,ничего сам не понимая и не зная...



Моё портфолио

Мои работы:
[ Lesson ] Операторы в PAWN.
[ Lesson ] Переменная.
[ GM ] RegSys. ( Last update: 21.04.2012 )


KillForFunДата: Суббота, 03.03.2012, 12:43 | Сообщение # 7
Освоившийся
Группа: Продвинутые
Сообщений: 143
Награды: 3
Город: Cызрань
Репутация: 26
Замечания: 0%
Статус:
Latron, поддержу каждый может вырезать то что ему нужно а для этого есть тебя модерницазии gf а это кривость поставил чуть мод не убил стандартного гф wall


|______Мои работы______|
Хотдоги на диалогах
|______________________|
Modern State[RP] IP Addres 88.198.67.14:7557
Cайт http:\\rp-ms.ru


Сообщение отредактировал KillForFun - Суббота, 03.03.2012, 12:43
  • Страница 1 из 1
  • 1
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua