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 |
|
|
|
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 а это кривость поставил чуть мод не убил стандартного гф
|______Мои работы______| Хотдоги на диалогах |______________________| Modern State[RP] IP Addres 88.198.67.14:7557 Cайт http:\\rp-ms.ru
Сообщение отредактировал KillForFun - Суббота, 03.03.2012, 12:43 |
|
|
|