[CM]Logotipo |
Дата: Воскресенье, 20.04.2014, 21:56 | Сообщение # 1
|
Авторитет
Сообщений: 1083
Статус: Offline
|
Напишем систему банов на время. PlayerInfo[playerid][ALevel] - лвл админки В самое начало добавим. -для работы разбана. Далее сама команда бана. Код CMD:ban(playerid, params[]) { new str[100]; if(PlayerInfo[playerid][ALevel] < 2) return false; if(sscanf(params,"uds[210]",params[0],params[1],params[2])) return SCM(playerid,COLOR_WHITE,"/ban [id][дни] [причина]"); if(params[1] <1 || params[1] >30)return SCM(playerid,COLOR_GREY,"Количество дней должно быть от 1 до 30"); if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, COLOR_GREY, "[Ошибка]Игрок не в сети"); new unbandate; unbandate = gettime() + params[1]*86400; BanPlayer(Name(params[0]),params[2],Name(playerid),unbandate);//Для тех, кто будет говорить, что это не рационально - сделано, что бы 100 раз не прописывать код, ибо банит у меня не только в этой команде format(str, sizeof(str),"Администратор %s забанил игрока %s на %d дней. Причина: %s", Name(playerid), Name(params[0]),params[1],params[2]); SendClientMessageToAll(COLOR_RED, str); new ip[16]; GetPlayerIp(params[0], ip, 16); format(str,sizeof(str),"Nick:[%s]|R-IP:[%s]|IP:[%s]",Name(params[0]),PlayerInfo[params[0]][RegIp],ip); SendAdminMessage(COLOR_YELLOW,str); Kick(params[0]); return true; } Добавим функцию Код stock BanPlayer(playername[],reason[],Aname[],unbandate) { new data[16],query[200]; new year,month,day; getdate(year,month,day); format(data,sizeof(data),"%d.%d.%d",day,month,year); format(query, sizeof(query), "INSERT INTO `bans` (`name`, `AName`, `bandate`, `reason`,`unbandate`) VALUES ('%s', '%s', '%s','%s','%d')",playername,Aname,data,reason,unbandate); mysql_function_query(connectionHandle, query, false, "","d"); } Теперь чек на бан. Там, где у нас загрузка аккаунта добавим: Код new str[70]; format(str, sizeof(str),"SELECT * FROM `bans` WHERE `name` = '%s'", Name(playerid)); mysql_function_query(connectionHandle, str, true, "OnPlayerBanCheck","d", playerid); Добавим callback Код forward OnPlayerBanCheck(playerid); public OnPlayerBanCheck(playerid) { if(IsPlayerConnected(playerid)) { new rows, fields; cache_get_data(rows, fields); if(rows) { new maximum[100], AName[32],data[16],string[226],reason[30]; new day,month,year,unbandate; cache_get_field_content(0, "AName", maximum, connectionHandle, sizeof(maximum)), sscanf(maximum,"s[32]",AName); cache_get_field_content(0, "bandate", maximum, connectionHandle, sizeof(maximum)), sscanf(maximum,"s[32]",data); cache_get_field_content(0, "reason", maximum, connectionHandle, sizeof(maximum)), sscanf(maximum,"s[32]",reason); cache_get_field_content(0, "unbandate", maximum), unbandate = strval(maximum); timestamp(unbandate,year,month,day); if(unbandate<=gettime()){ new string1[70]; SpawnPlayer(playerid); mysql_format(1, string1, "DELETE FROM `bans` WHERE `name` = '%s'",Name(playerid)); mysql_function_query(1, string1, false, "","");} else{ SendClientMessage(playerid,COLOR_LIGHTRED,"Этот аккаунт заблокирован \n Забанил: %s \n Причина бана: %s \n Дата бана: %s \n Дата разбана: %d.%d.%d",AName,reason,data,day,month,year); Kick(playerid);} } else { SpawnPlayer(playerid); } } return true; } Отлично, теперь мы не впустим на сервер игрока, если он заблокирован и разбаним его, если время время блокировки вышло. Но что если администратор передумает? Добавим команду. Код CMD:unban(playerid, params[]) { if(PlayerInfo[playerid][ALevel] <= 2) return false; new days[100]; new query[200]; if(sscanf(params,"s[100]",days))return SendClientMessage(playerid, COLOR_WHITE, "Используйте: /unban [ник игрока] "); mysql_format(1,query,"SELECT * FROM bans WHERE name = '%s'", params[0]); mysql_function_query(1, query, true, "Unban", "ds",playerid,params[0]); return 1; } Теперь callback Код forward Unban(i,nick[]); public Unban(i,nick[]) { new rows,fields; new string1[70]; cache_get_data(rows, fields); if(!rows) { SendClientMessage(i,COLOR_LIGHTRED,"Игрока с таким ником нет в списке заблокированых!"); } else { mysql_format(1, string1, "DELETE FROM `bans` WHERE `name` = '%s'",nick); mysql_function_query(1, string1, false, "",""); SendMes(i,COLOR_LIGHTRED,"Вы успешно разбанили игрока %s!",nick); } return 1; } Осталось создать таблицу, сделайте это как показано на скриншоте.
Скуп ВК RakDroid - прокачка аккаунтов с телефона VKMusic - вк музыка без браузера Делаю сайты/софт/стимботов на заказ
Сообщение отредактировал [CM]Logotipo - Воскресенье, 20.04.2014, 21:57 |
|
|
|