Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Оптимизация команд (strfind)

Статус
В этой теме нельзя размещать новые ответы.

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))
Но т.к у всех команд разные параметры, я не знаю как можно, делал через диалог, но это не очень удобно...
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу