PDA

Просмотр полной версии : [Вопрос] Команда /ban



Albert
05.01.2015, 00:33
При логине сервер проверяет переменную игрока pInfo[pBan]. Если она ровняется 1, то его кикает.


if (pInfo[playerid][pBan] == 1)
{
SendClientMessage(playerid,0xAA3333AA, "Âû çàáàíåíû íà ñåðâåðå");
Kick(playerid);

}


Подскажите как мне сделать команду /ban? Я пытаюсь сделать так:



if (strcmp("/ban", cmdtext, true, 10) == 0)
{
if(pInfo[playerid][pAdm] != 0)

{

// что сюда написать чтобы указанному игроку изменяло его переменную pInfo [pBan] на 1?

}


return 1;
}

BaBuIIIkaDrifteR
05.01.2015, 00:39
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' ')) idx++;
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result)) return SCM(playerid, COLOR_RED, "{00FF66}Energy Drift™: {ffffff}/ban [id/Playerid] [Причина]");
new baniso[526];
new year, month,day;
getdate(year, month, day);
format(baniso, sizeof(baniso), "{00FF66}Energy Drift: {ffffff}Администратор {FF9900}'%s[%d]' забанил '%s[%d]'. {ffffff}Причина: %s.", sendername, playerid, giveplayer, giveplayerid, (result));
if(Player[giveplayerid][Bann] == 1) format(baniso, sizeof(baniso), "{00FF66}Energy Drift: {ffffff}Администратор {FF9900}'%s[%d]' забанил '%s[%d]'. {ffffff}Причина: %s.", sendername, playerid, giveplayer, giveplayerid, (result));
else if(Player[giveplayerid][Bann] == 2) format(baniso, sizeof(baniso), "{00FF66}Energy Drift: {ffffff}Администратор {FF9900}'%s[%d]' забанил '%s[%d]'. {ffffff}Причина: %s.", sendername, playerid, giveplayer, giveplayerid, (result));

- - - Добавлено - - -

Свои переменные только подставь

Albert
05.01.2015, 00:48
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' ')) idx++;
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result)) return SCM(playerid, COLOR_RED, "{00FF66}Energy Drift™: {ffffff}/ban [id/Playerid] [Причина]");
new baniso[526];
new year, month,day;
getdate(year, month, day);
format(baniso, sizeof(baniso), "{00FF66}Energy Drift: {ffffff}Администратор {FF9900}'%s[%d]' забанил '%s[%d]'. {ffffff}Причина: %s.", sendername, playerid, giveplayer, giveplayerid, (result));
if(Player[giveplayerid][Bann] == 1) format(baniso, sizeof(baniso), "{00FF66}Energy Drift: {ffffff}Администратор {FF9900}'%s[%d]' забанил '%s[%d]'. {ffffff}Причина: %s.", sendername, playerid, giveplayer, giveplayerid, (result));
else if(Player[giveplayerid][Bann] == 2) format(baniso, sizeof(baniso), "{00FF66}Energy Drift: {ffffff}Администратор {FF9900}'%s[%d]' забанил '%s[%d]'. {ffffff}Причина: %s.", sendername, playerid, giveplayer, giveplayerid, (result));

- - - Добавлено - - -

Свои переменные только подставь

Вы меня простите. Но я не нашёл где тут изменяет значение переменной игрока pBan на 1. Я такой большой и сложный код боюсь копировать. Мне не нужно лишнего. Покажите пожалуйста что нужно скопировать чтобы просто присвоилось значение этой переменной указанному игроку если уровень pAdm не равен нулю. Мне даже не нужно чтобы в чат что-то писало. Максимально просто пожалуйста опишите. Чтобы я разобрался и сам научился делать команды подобные и усложнять их. Темболее у меня система проверки игрока на бан без првоерки на то на какое время он забанен. Просто забанен или нет.

L0ndl3m
05.01.2015, 00:50
И что вы ему скинули? Ошибок куча будет даже из-за неизвестных переменных.

Albert, вот здесь (http://pro-pawn.ru/showthread.php?5527) можно посмотреть как верно сделана команда. Если конечно вы используете плагин sscanf.

Если не используете, вот от меня набросок команды небольшой:


if (strcmp(cmdtext, "/ban", true, 4) == 0) {
if (cmdtext[4] == '\0')
return SendClientMessage(playerid, -1, "Используйте: /ban [targetid]");

new
targetid = strval(cmdtext[5]);

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

pInfo[targetid][pBan] = 1; // вот здесь!

return Ban(targetid);
}

$continue$
05.01.2015, 02:09
И что вы ему скинули? Ошибок куча будет даже из-за неизвестных переменных.

Albert, вот здесь (http://pro-pawn.ru/showthread.php?5527) можно посмотреть как верно сделана команда. Если конечно вы используете плагин sscanf.

Если не используете, вот от меня набросок команды небольшой:


if (strcmp(cmdtext, "/ban", true, 4) == 0) {
if (cmdtext[4] == '\0')
return SendClientMessage(playerid, -1, "Используйте: /ban [targetid]");

new
targetid = strval(cmdtext[5]);

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

pInfo[targetid][pBan] = 1; // вот здесь!

return Ban(targetid);
}


И словить не доход msg до игрока :D

Albert
05.01.2015, 09:38
Огромное спасибо. Проблема решена. Ваш ник будет в титрах сервера за бескорыстную помощь :bye: