PDA

Просмотр полной версии : [CMD] /mute & /unmute в одной кмд (dc_cmd / zcmd) + sscanf



L0ndl3m
12.12.2013, 19:43
Команда действует по принципу: Если игрок заткнут, то его разоткнёт, и наоборот.

Ко всем new:


new
p_muted[MAX_PLAYERS char]
;


Теперь проверку - заткнут ли игрок:
В public OnPlayerText:


if(p_muted{playerid})
{
SendClientMessage(playerid, -1, "Вы заткнуты.");
return 0;
}


Ко всем командам:


CMD:mute(playerid, params[])
{
extract params -> new player: targetid; else
return SendClientMessage(playerid, -1, "Используйте: /mute [ID игрока / часть ника]");
if(IsPlayerConnected(targetid) == 0)
return SendClientMessage(playerid, -1, "Такого игрока нет на сервере.");

p_muted{targetid} = !p_muted{targetid};

static const
fmt_str[] = "%s (%d) %sткнул %s (%d)."
;

new
str[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME - 2 + 3 - 2 + 4 - 2 + MAX_PLAYER_NAME - 2 + 3],
targetname[MAX_PLAYER_NAME + 1]
;

GetPlayerName(playerid, str, sizeof(str));
GetPlayerName(targetid, targetname, sizeof(targetname));
format(str, sizeof(str), fmt_str, str, playerid, p_muted{targetid} ? ("за") : ("разо"), targetname, targetid);
return SendClientMessageToAll(-1, str);
}



Автор: Londlem (http://pro-pawn.ru/member.php?2057-Londlem)

Специально для: Pro-Pawn.Ru (http://pro-pawn.ru)

Копирование данной статьи без разрешения автора запрещено!

Osiris
11.01.2014, 19:37
Как сделать чтобы можно было затыкать на минуты? (ZCMD)

L0ndl3m
11.01.2014, 19:56
Как сделать чтобы можно было затыкать на минуты? (ZCMD)


Команда:



CMD:mute(playerid, params[])
{
if(sscanf(params, "ud", params[0], params[1]))
SendClientMessage(playerid, -1, "Используйте: /mute [playerid] [minutes]");
if(IsPlayerConnected(params[0]) == 0)
return SendClientMessage(playerid, -1, "Такого игрока нет на сервере.");

new
server_tick = GetTickCount()
;

if(GetPVarInt(params[0], "MuteTime") > server_tick)
return SendClientMessage(playerid, -1, "Игрок уже заткнут.");

SetPVarInt(params[0], "MuteTime", server_tick + params[1] * 60000);

static const
fmt_str[] = "%s (%d) заткнул %s (%d) на кол-во минут: %d."
;

new
str[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME - 2 + 3 - 2 + MAX_PLAYER_NAME - 2 + 3 - 2 + 11],
targetname[MAX_PLAYER_NAME + 1]
;

GetPlayerName(playerid, str, sizeof(str));
GetPlayerName(params[0], targetname, sizeof(targetname));
format(str, sizeof(str), fmt_str, str, playerid, targetname, params[0], params[1]);
return SendClientMessageToAll(-1, str);
}


В public OnPlayerText:



if(GetPVarInt(playerid, "MuteTime") > GetTickCount())
{
SendClientMessage(playerid, -1, "Вы заткнуты.");
return 0;
}

Osiris
11.01.2014, 20:12
Огромное спасибо ^_^
Завтра спасибо дам, т.к лимит)

Andrei_Smile
11.01.2014, 20:49
не доработано,при реконекте мут спадет а в целом не плохо.

L0ndl3m
11.01.2014, 20:51
не доработано,при реконекте мут спадет а в целом не плохо.

Сохранение аккаунтов не у всех одинаковое.

Merlin
18.01.2014, 15:40
Хорошо + сделай её в обычном процеси по 1 мин

L0ndl3m
18.01.2014, 16:44
Хорошо + сделай её в обычном процеси по 1 мин



if(strcmp(tmp, "/mute", true, 5) == 0)
{
tmp = strtok(cmdtext, idx);

if(strlen(tmp) == 0)
return SendClientMessage(playerid, -1, "Используйте: /mute [playerid] [minutes]");

new
targetid = strval(tmp)
;

if(IsPlayerConnected(targetid) == 0)
return SendClientMessage(playerid, -1, "Такого игрока нет на сервере.");

tmp = strtok(cmdtext, idx);

new
time = strval(tmp)
;

if(strlen(tmp) == 0)
return SendClientMessage(playerid, -1, "Используйте: /mute [playerid] [minutes]");

new
server_tick = GetTickCount()
;

if(GetPVarInt(targetid, "MuteTime") > server_tick)
return SendClientMessage(playerid, -1, "Игрок уже заткнут.");

SetPVarInt(targetid, "MuteTime", server_tick + time * 60000);

static const
fmt_str[] = "%s (%d) заткнул %s (%d) на кол-во минут: %d."
;

new
str[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME - 2 + 3 - 2 + MAX_PLAYER_NAME - 2 + 3 - 2 + 11],
targetname[MAX_PLAYER_NAME + 1]
;

GetPlayerName(playerid, str, sizeof(str));
GetPlayerName(targetid, targetname, sizeof(targetname));
format(str, sizeof(str), fmt_str, str, playerid, targetname, targetid, time);
return SendClientMessageToAll(-1, str);
}