PDA

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



Albert
05.01.2015, 16:50
Подскажите пожалуйста как должна быть написана команда для выдачи лидерки. У меня 4 фракции


if (strcmp("/makeleader", cmdtext, true, 11) == 0)
{

if (cmdtext[12] == '\0')
return SendClientMessage(playerid, -1, "Используйте: /makeleader [playerid] [Leaderid]]");
if (pInfo[playerid][pAdm]!=0)
{
// что сдесь должно находиться?
}

return 1;
}

L0ndl3m
05.01.2015, 16:56
В таких случаях придётся использовать strtok либо sscanf. Ищите в интернете пример использования и пробуете делать команду.

Albert
05.01.2015, 17:26
Установил
#include <sscanf>
#include <zcmd>
Мануалов нигде не найти. Везде такие громоздкие команды, что я даже под себя подредактировать не могу

L0ndl3m
05.01.2015, 17:27
Переменную, отвечающую за лидерку у игрока - сюда.

Albert
05.01.2015, 17:37
Коечто нашёл. Сделал так:


if (strcmp("/makeleader", cmdtext, true, 10) == 0)

{

new playa;
new member;
playa = ReturnUser(tmp);
tmp = strtok(cmdtext, idx);
member = strval(tmp);
if (pInfo[playerid][pAdm] >= 5)
{
if(IsPlayerConnected(playa))
{
if(playa != INVALID_PLAYER_ID)
{
pInfo[playa][pLeader] = member;
format(string,sizeof(string),"(( Вы присвоили ему значение %d ))",member);
SendClientMessage(playerid, 0xAA3333AA, string);
}
}
}
else
{
SendClientMessage(playerid, 0xAA3333AA, "(( Вам не доступна эта функция ))");
}
return 1;
}

Ошибки:


\S.T.A.L.K.E.R..pwn(396) : error 017: undefined symbol "ReturnUser"
\S.T.A.L.K.E.R..pwn(397) : error 017: undefined symbol "tmp"
\S.T.A.L.K.E.R..pwn(397) : error 017: undefined symbol "strtok"
\S.T.A.L.K.E.R..pwn(398) : error 017: undefined symbol "tmp"
\S.T.A.L.K.E.R..pwn(406) : error 017: undefined symbol "string"
\S.T.A.L.K.E.R..pwn(406) : error 017: undefined symbol "string"
\S.T.A.L.K.E.R..pwn(406) : error 029: invalid expression, assumed zero
\S.T.A.L.K.E.R..pwn(406) : fatal error 107: too many error messages on one line


Переменная за админку pAdm

L0ndl3m
05.01.2015, 17:51
CMD:makeleader(playerid, params[])
{
if(pInfo[playerid][pAdm] < 5)
return 1;

new
targetid,
member;

if(sscanf(params, "ii", targetid, member))
return SendClientMessage(playerid, -1, "Используйте: /makeleader [targetid] [member]");
if(!IsPlayerConnected(targetid))
return SendClientMessage(playerid, -1, "Указанного игрока нет на сервере.");

pInfo[targetid][pLeader] = member;

// здесь ваш форматируемый текст!

return 1;
}


Кстати, можете смело переходить с zcmd на dc_cmd, если вы только начинаете разбираться в командных процессорах.

Albert
05.01.2015, 17:57
S.T.A.L.K.E.R..pwn(390) : error 029: invalid expression, assumed zero
S.T.A.L.K.E.R..pwn(390) : error 017: undefined symbol "cmd_makeleader"
\S.T.A.L.K.E.R..pwn(390) : error 029: invalid expression, assumed zero
\S.T.A.L.K.E.R..pwn(390) : fatal error 107: too many error messages on one line


После установки плагинов
#include <sscanf>
#include <zcmd>
Нужно дефайны создавать?

И ещё после установки этих плагинов у меня не работает команда открытия инвентаря:



if (strcmp("/items", cmdtext, true, 10) == 0)
{

ShowPlayerDialog(playerid, 10, DIALOG_STYLE_LIST, "Инвентарь", "Водка\nКонсервы\nПрепорат `Антирад`\nАрмейский паёк\nИПП\nАрмейская аптечка", "Использовать", "Отмена");

return 1;
}

Как её переделать?

L0ndl3m
05.01.2015, 18:14
После установки нового командного процессора необходимо подгонять каждую команду под новый вид.
Каждую команду Вы должны создавать не в паблике, а в любом свободном месте мода, например в конце.

Albert
05.01.2015, 18:40
Пишу в конце


CMD:makeleader(playerid, params[])
{
if(pInfo[playerid][pAdm] < 5)
return 1;

new
targetid,
member;

if(sscanf(params, "ii", targetid, member))
return SendClientMessage(playerid, -1, "Используйте: /makeleader [targetid] [member]");
if(!IsPlayerConnected(targetid))
return SendClientMessage(playerid, -1, "Указанного игрока нет на сервере.");

pInfo[targetid][pLeader] = member;

// здесь ваш форматируемый текст!


}
[code]
Ошибка:
[code]
: warning 209: function "cmd_makeleader" should return a value

Перед последней скобкой пишу returne и с точкой запятой и без - без разницы

Проблемма решена. Нужно было return 0;

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

Как теперь переделать команду


if (strcmp("/items", cmdtext, true, 10) == 0)
{

ShowPlayerDialog(playerid, 10, DIALOG_STYLE_LIST, "Инвентарь", "Водка\nКонсервы\nПрепорат `Антирад`\nАрмейский паёк\nИПП\nАрмейская аптечка", "Использовать", "Отмена");

return 1;
}


Пробую на:


CMD:items
{

ShowPlayerDialog(playerid, 10, DIALOG_STYLE_LIST, "Èíâåíòàðü", "Âîäêà\nÊîíñåðâû\nÏðåïîðàò `Àíòèðàä`\nÀðìåéñêèé ïà¸ê\nÈÏÏ\nÀðìåéñêàÿ àïòå÷êà", "Èñïîëüçîâàòü", "Îòìåíà");

return;
}

Ошибки:



S.T.A.L.K.E.R..pwn(2194) : error 010: invalid function or declaration
S.T.A.L.K.E.R..pwn(2196) : error 021: symbol already defined: "ShowPlayerDialog"
S.T.A.L.K.E.R..pwn(2198) : error 010: invalid function or declaration


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



CMD:items()
{

ShowPlayerDialog(playerid, 10, DIALOG_STYLE_LIST, "Инвентарь", "Водка\nКонсервы\nПрепорат `Антирад`\nАрмейский паёк\nИПП\nАрмейская аптечка", "Использовать", "Отмена");

return;
}
теперь
error 017: undefined symbol "playerid"

L0ndl3m
05.01.2015, 19:01
CMD:items(playerid, params[])