LaD
Новичок
Здравствуйте!
Предоставляю вашему вниманию систему затычки, в ее общей проблемой!
Ко всем new:
В паблик OnPlayerCommandText:
В паблик OnPlayerText:
Делаем таймер в паблик OnGameModeInit():
Паблик таймера, цикл завершения:
Помогите исправить проблему, после ввода админа команды ставим игроку затычку. Блокируем игроку ввод сообщений в общий чат с предупреждением "У вас затычка..."
Пока что получается так: делаем затычку, срабатывает таймер, после ввода сообщения в чат игроку даем предупреждение, НО все равно осуществляется ввод сообщений, т.к. есть в паблике с текстом:
Предоставляю вашему вниманию систему затычки, в ее общей проблемой!
Ко всем new:
PHP:
new Mute[MAX_PLAYERS];
PHP:
if(strcmp(cmd, "/mute", true) == 0)
{
if(PlayerInfo[playerid][ADM] > 2)
{
tmp = strtok(cmdtext, idx);
//new id = strval(tmp);
if(IsPlayerConnected(strval(tmp)) && !IsPlayerNPC(strval(tmp)))
{
tmp = strtok(cmdtext, idx);
new time = strval(tmp);
if(GetPVarInt (playerid, "Mute" ) > gettime()) {
format(string,sizeof(string),"Внимание! {ffffff}Чтобы снова использовать {00ff00}/mute {ffffff}подождите {ff9d00}%d секунд",GetPVarInt(playerid,"Mute")-gettime(),(GetPVarInt(playerid,"Mute")-gettime())/7);
return SendClientMessage(playerid,0xFF0000FF,string); }
SetPVarInt( playerid, "Mute", gettime() + 7*1 ) ;
if(PlayerInfo[playerid][ADM] < PlayerInfo[strval(tmp)][ADM] || (PlayerInfo[strval(tmp)][ADM] == 4 && strval(tmp) != playerid)) return SendClientMessage(playerid,0xFF6347FF,"Неразрешено делать затычку: Модераторам 4 лвл, Администраторам 5 лвл!");
//if(!strlen(cmdtext[idx])) return SendClientMessage(playerid, LIGHT_RED, "/Mute [id][время] [причина]");
//if(!strlen(tmp) || !IsPlayerConnected(id)) return SendClientMessage(playerid, LIGHT_RED, "/Mute [id][время] [причина]");
if(!strlen(tmp)) return SendClientMessage(playerid, LIGHT_RED, "/Mute [id] [время] [причина]");
format(string, sizeof(string), "%s использовал MUTE", PlayerInfo[playerid][PrName]);
format(str10, sizeof(str10), "\"Админ\" {ffffff}%s {0077ff}сделал затычку {c0c0c0}%s {0077ff}на {ffffff}%d(минут). Причина: %s", PlayerInfo[playerid][PrName], PlayerInfo[strval(tmp)][PrName], time, cmdtext[idx]);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) { continue; }
if(PlayerInfo[i][ADM] > 0)
{
SendClientMessage(i, 0x0077FFAA, string);
SendClientMessage(i, 0x0077FFAA, str10);
}
}
format(string, sizeof(string), "Вы сделали затычку %s на %d(минут)! Причина: %s", PlayerInfo[playerid][PrName], time, cmdtext[idx]); //собщение нам
SendClientMessage(playerid, RED, string);
format(string, sizeof(string), "%s! Вам сделал ЗАТЫЧКУ \"Админ\" %s на %d(минут)! {00ff00}Причина: %s", PlayerInfo[strval(tmp)][PrName], PlayerInfo[playerid][PrName], time, cmdtext[idx]); //собщение заткнутому
SendClientMessage(strval(tmp), RED, string);
Mute[strval(tmp)] = time*60;
}
else SendClientMessage(playerid,0xFF6347FF,"Игрока нет в сети!");
}
else SendClientMessage(playerid,0xFF6347FF,"Недостаточный LVL \"админки\", необходим 3 уровень!");
return 1;
}
PHP:
if(Mute[playerid] != 0)
{
format(string, sizeof(string), "У вас затычка, прежде чем написать, подождите %d(сек)",Mute[playerid]);
SendClientMessage(playerid, 0xFF6347AA, string);
return 0;
}
PHP:
SetTimer("MuteTimer", 1000, 1);
PHP:
forward MuteTimer();
public MuteTimer()
{
for(new i = 0; i < MAX_PLAYERS; i++)//цикл
{
if(Mute[i] > 0)//если мут больше нуля секунд
{
Mute[i] --;//отнимаем мут на 1
if(Mute[i] == 0)//если мут равно одному
SendClientMessage(i,RED,"Внимание! Затычка снята! Теперь вы можете писать в чат");//выдаем сообщение
//SendClientMessage(i,LIGHT_RED,"Во избежания затычки от \"Админов\", не нарушайте {00ff00}/Правила");//выдаем сообщение
}
}
return 1;
}
Пока что получается так: делаем затычку, срабатывает таймер, после ввода сообщения в чат игроку даем предупреждение, НО все равно осуществляется ввод сообщений, т.к. есть в паблике с текстом:
PHP:
format(string, sizeof(string), "%s", text);
SendPlayerMessageToAll(playerid, string);
Последнее редактирование:
