Vitya_Saveliev
Компетентный
Привет, обитатели форума, вообщем, я хочу оптимизировать команды, тоесть сделать все команды, которые начинаются на /set, /give, /get и т.д в одну,
Делаю так:
В каждой команде разные варианты реализации, но ни один из них не работает.
Если бы у всех команд были одинаковые параметры, я бы сделал так:
Но т.к у всех команд разные параметры, я не знаю как можно, делал через диалог, но это не очень удобно...
Делаю так:
PHP:
CMD:set(playerid, params[])
{
if(sscanf(params, "s[15]", params[0])) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /set [действие]");
if(strfind(params[0], "hp", true) != -1)
{
if(PlayerInfo[playerid][pAdmin] < 5 || AdminLogged{playerid} == false) return 1;
new player, hppp;
if(sscanf(params, "ui", player,hppp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /set hp [id игрока] [кол-во жизней]");
if(!IsPlayerConnected(player)) return SendClientMessage(playerid, COLOR_GREY, PlayerIsNotOnline);
if(!PlayerLogged{player}) return SendClientMessage(playerid, COLOR_GREY, PlayerIsNotLogged);
if(hppp > 100 || hppp < 0) return SendClientMessage(playerid, COLOR_GREY, "Кол-во жизней от 0 до 100!");
PlayerInfo[player][pHeal] = hppp;
SetHealth(player, hppp);
format(_string, sizeof(_string),"Вы установили жизней игроку: %s", PlayerInfo[player][pSendername]);
SendClientMessage(playerid,COLOR_ORANGE,_string);
return 1;
}
else if(strfind(params[0], "am", true) != -1)
{
if(PlayerInfo[playerid][pAdmin] < 5 || AdminLogged{playerid} == false) return 1;
if(sscanf(params, "ui", params[1],params[2])) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /set am [id игрока] [кол-во брони]");
if(!IsPlayerConnected(params[1])) return SendClientMessage(playerid, COLOR_GREY, PlayerIsNotOnline);
if(!PlayerLogged{params[1]}) return SendClientMessage(playerid, COLOR_GREY, PlayerIsNotLogged);
if(params[2] > 100 || params[2] < 0) return SendClientMessage(playerid, COLOR_GREY, "Кол-во брони от 0 до 100!");
SetArmour(params[1], params[2]);
format(_string, sizeof(_string),"Вы установили брони игроку: %s", PlayerInfo[params[1]][pSendername]);
SendClientMessage(playerid,COLOR_ORANGE,_string);
return 1;
}
else if(strfind(params[0], "int", true) != -1)
{
if(PlayerInfo[playerid][pAdmin] < 3 || AdminLogged{playerid} == false) return 1;
if(sscanf(params, "ui", params[0], params[1])) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /set int [id игрока] [id интерьера]");
if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, COLOR_GREY, ""PlayerIsNotOnline"");
if(!PlayerLogged{params[0]}) return SendClientMessage(playerid, COLOR_GREY, ""PlayerIsNotLogged"");
format(_string, sizeof(_string),"Вы установиили интерьер: %s", PlayerInfo[params[0]][pSendername]);
SendClientMessage(playerid,COLOR_ORANGE,_string);
SetPlayerInterior(params[0], params[1]);
return 1;
}
}
Если бы у всех команд были одинаковые параметры, я бы сделал так:
PHP:
if(sscanf(params, "s[15]ii", params[0],params[1],params[2])) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /set [значение] [id игрока] [кол-во]");
if(strcmp(params[0],"hp",true))
Последнее редактирование:
