PDA

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



_MegaMix_
20.08.2017, 21:10
Здравствуйте, делаю команду /cmd текст - и затруднила проверка на ввод существующей команды:


COMMAND:cmd(playerid,params[])
{
extract params -> new string: cmd_[32]; else
{
return SendClientMessage(playerid, COLOR_WHITE,
!"Введите /cmd [команда]");
}

for(new i; cmd_[i] != 0x0; i++)
{
switch(cmd_[i])
{
case "ban": return true;
}
}

return true;
}

Чтобы не делать 100 проверок через strcmp может есть альтернативы как можно реализовать данную систему, так скажем через switch и т.п?

ziggi
21.08.2017, 00:32
Что команда должна делать то?

Geebrox
21.08.2017, 01:32
Для твоего случае во многих командных процессорах существует обработчик команд.


OnPlayerCommandPerformed(playerid, cmdtext[], success); //DC_CMD
OnPlayerCommandPerformed(playerid, cmd[], params[], result, flags) //Pawn.CMD

Примерно так можно реализовать:


CMD:cmd(playerid, params[])
{
if(isnull(params))
{
return SendClientMessage(playerid, -1, !"Введите /cmd [команда]");
}

SetPVarInt(playerid, !"check_for_command", 1);

DC_CMD(playerid, params); //для DC_CMD
return 1;
}


public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
if(GetPVarInt(playerid, !"check_for_command"))
{
SendClientMessage(playerid, -1,
(success) ? (!"Команда существует!") : ("Команда не существует!"));

DeletePVar(playerid, !"check_for_command");
return 0;
}

return 1;
}

_MegaMix_
21.08.2017, 20:11
Для твоего случае во многих командных процессорах существует обработчик команд.


OnPlayerCommandPerformed(playerid, cmdtext[], success); //DC_CMD
OnPlayerCommandPerformed(playerid, cmd[], params[], result, flags) //Pawn.CMD

Примерно так можно реализовать:


CMD:cmd(playerid, params[])
{
if(isnull(params))
{
return SendClientMessage(playerid, -1, !"Введите /cmd [команда]");
}

SetPVarInt(playerid, !"check_for_command", 1);

DC_CMD(playerid, params); //для DC_CMD
return 1;
}


public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
if(GetPVarInt(playerid, !"check_for_command"))
{
SendClientMessage(playerid, -1,
(success) ? (!"Команда существует!") : ("Команда не существует!"));

DeletePVar(playerid, !"check_for_command");
return 0;
}

return 1;
}

Оо интересненько, спасибо)