PDA

Просмотр полной версии : [Вопрос] Таймер



Rick
18.01.2015, 00:20
Хочу создать команду /mute, что для этого требуется? - понимаю что требуется сама команда - и таймер - с проверками - допустим если выдали бан чат то ты в чате нечего писать не можешь - на счет команды - команда точно работающая, а вот на счет таймера сильно не уверен - конкретно не на счет таймера - а на счет проверки - проверьте пожалуйста -и скажите что в ней не так?


if(PlayerInfo[playerid][pMute] > 0)
{
PlayerInfo[playerid][pMute]--;
if(PlayerInfo[playerid][pMute] <= 0)
{
PlayerInfo[playerid][pMute] = 0;
new string[256];
new sendername[MAX_PLAYER_NAME];
GetPlayerName(i, sendername, sizeof(sendername));
format(string, sizeof(string), "{00FF00}Èãðîê %s [%d] ðàçîòêíóò.", sendername, i);
print(string);
SendClientMessageToAll(COLOR_YELLOW, string);
}
}

L0ndl3m
18.01.2015, 00:41
if(PlayerInfo[playerid][pMute] != 0 && --PlayerInfo[playerid][pMute] == 0)
{
// остальной код, обнулять переменную не нужно
}

BaBuIIIkaDrifteR
18.01.2015, 10:18
Вот сама команда /mute
Только измени на свои переменные и названия.


else if(strcmp(cmd, "/mute", true) == 0)
{
if (PINFO[playerid][pAdminLVL] < 1) return SendMe(playerid, CWHITE, YouCanNot);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendMe(playerid, 0x00D900C8, "- Подсказка:{FFFFFF} /mute [ID] [минуты]");
new mtime;
giveplayerid = ReturnUser(tmp);
if (!IsPlayerConnected(giveplayerid)) return SendMe(playerid, CWHITE, NotFoundID);
if(gPlayerLogged[giveplayerid] == false) return SendMe(playerid, CWHITE, NoLogin);
if(PINFO[giveplayerid][pMuted] == false)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendMe(playerid, 0x00D900C8, "- Подсказка:{FFFFFF} /mute [ID] [минуты]");
mtime = strval(tmp);
if(GetPlayerState(giveplayerid) != 1 && GetPlayerState(giveplayerid) != 2 && GetPlayerState(giveplayerid) != 3) return SendMe(playerid, CWHITE, NoLogin);
PINFO[giveplayerid][pMuted] = true;
PINFO[giveplayerid][pMuteTime] = mtime*60;
format(string, sizeof(string), "%s получил(a) бан чата от администратора %s на %i мин.",GN(giveplayerid) ,GN(playerid),mtime);
SendAll(CLIGHTRED, string);
SendMes(giveplayerid, -1, "Вы получили бан чата на %i мин. Бан чата снимется автоматически по истечению времени.",mtime);
}
else
{
format(string, sizeof(string), "Администратор %s снял бан чата у %s. ",GN(playerid),GN(giveplayerid));
SendAll(CLIGHTRED, string);
PINFO[giveplayerid][pMuted] = false;
PINFO[giveplayerid][pMuteTime] = 0;
}
return true;
}
OnPlayertext

if(PINFO[playerid][pMuted] == true) { SendMes(playerid, TEAM_CYAN_COLOR, "У вас отключен чат"); return false; }
UpdatePlayer

if(PINFO[i][pMuted] == true)
{
PINFO[i][pMuteTime] -=1;
if(PINFO[i][pMuteTime] <= 0)
{
PINFO[i][pMuted] = false;
PINFO[i][pMuteTime] = 0;
SendMe(i,-1,"Вам включили чат. Пожалуйста больше не нарушайте правила");
}
}

Rick
18.01.2015, 12:27
Вот сама команда /mute
Только измени на свои переменные и названия.


else if(strcmp(cmd, "/mute", true) == 0)
{
if (PINFO[playerid][pAdminLVL] < 1) return SendMe(playerid, CWHITE, YouCanNot);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendMe(playerid, 0x00D900C8, "- Подсказка:{FFFFFF} /mute [ID] [минуты]");
new mtime;
giveplayerid = ReturnUser(tmp);
if (!IsPlayerConnected(giveplayerid)) return SendMe(playerid, CWHITE, NotFoundID);
if(gPlayerLogged[giveplayerid] == false) return SendMe(playerid, CWHITE, NoLogin);
if(PINFO[giveplayerid][pMuted] == false)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendMe(playerid, 0x00D900C8, "- Подсказка:{FFFFFF} /mute [ID] [минуты]");
mtime = strval(tmp);
if(GetPlayerState(giveplayerid) != 1 && GetPlayerState(giveplayerid) != 2 && GetPlayerState(giveplayerid) != 3) return SendMe(playerid, CWHITE, NoLogin);
PINFO[giveplayerid][pMuted] = true;
PINFO[giveplayerid][pMuteTime] = mtime*60;
format(string, sizeof(string), "%s получил(a) бан чата от администратора %s на %i мин.",GN(giveplayerid) ,GN(playerid),mtime);
SendAll(CLIGHTRED, string);
SendMes(giveplayerid, -1, "Вы получили бан чата на %i мин. Бан чата снимется автоматически по истечению времени.",mtime);
}
else
{
format(string, sizeof(string), "Администратор %s снял бан чата у %s. ",GN(playerid),GN(giveplayerid));
SendAll(CLIGHTRED, string);
PINFO[giveplayerid][pMuted] = false;
PINFO[giveplayerid][pMuteTime] = 0;
}
return true;
}
OnPlayertext

if(PINFO[playerid][pMuted] == true) { SendMes(playerid, TEAM_CYAN_COLOR, "У вас отключен чат"); return false; }
UpdatePlayer

if(PINFO[i][pMuted] == true)
{
PINFO[i][pMuteTime] -=1;
if(PINFO[i][pMuteTime] <= 0)
{
PINFO[i][pMuted] = false;
PINFO[i][pMuteTime] = 0;
SendMe(i,-1,"Вам включили чат. Пожалуйста больше не нарушайте правила");
}
}

C:\Users\Àäìèí\Desktop\Îñíîâà\gamemodes\Osnova.pwn(309) : error 017: undefined symbol "i"

L0ndl3m
18.01.2015, 13:23
Rick, что на счёт моего варианта-то? Готовый код вам дали, это не значит, что он будет корректно работать. Далее с предложенным выше кодом пойдут вопросы мол: Лагает сервер при вводе /tmute и так далее.

Rick
18.01.2015, 13:33
if(PlayerInfo[playerid][pMute] != 0 && --PlayerInfo[playerid][pMute] == 0)
{
if(PlayerInfo[playerid][pMute] > 0)
{
PlayerInfo[playerid][pMute]--;
if(PlayerInfo[playerid][pMute] <= 0)
{
new string[256];
new sendername[MAX_PLAYER_NAME];
GetPlayerName(i, sendername, sizeof(sendername));
format(string, sizeof(string), "{00FF00}Èãðîê %s [%d] ðàçîòêíóò.", sendername, i);
print(string);
SendClientMessageToAll(COLOR_YELLOW, string);
}
}
}

Т.е вот так вот?

L0ndl3m
18.01.2015, 13:42
if(PlayerInfo[playerid][pMute] > 0)
{
PlayerInfo[playerid][pMute]--;
if(PlayerInfo[playerid][pMute] <= 0)

Это не нужно.

Mr.DeViLsS
19.01.2015, 03:44
if(PlayerInfo[playerid][pMute] > 0)
{
PlayerInfo[playerid][pMute]--;
if(PlayerInfo[playerid][pMute] <= 0)

Это не нужно.


if(PlayerInfo[playerid][pMute] != 0 && --PlayerInfo[playerid][pMute] == 0)
Если я правильно понял, то это: Если у игрока переменная не равна 0, то мы вычитаем значение? А если переменная равна 0, то снимаем мут?

L0ndl3m
19.01.2015, 17:57
Эта проверка будет выполняться в тех, случаях если переменная будет > 0.

BaBuIIIkaDrifteR
21.01.2015, 17:31
C:\Users\Àäìèí\Desktop\Îñíîâà\gamemodes\Osnova.pwn(309) : error 017: undefined symbol "i"

i Замени на playerid