/setleader на PlayerDialog

Уроки по созданию сервера и готовые решения
Ответить
Аватара пользователя
danilasar
Сообщения: 202
Зарегистрирован: 17 июл 2018, 09:55
Откуда: Саратов, Россия
Контактная информация:

/setleader на PlayerDialog

Сообщение danilasar » 26 окт 2018, 18:18

Доброго времени суток. На самом деле, сделать команду /setleader (сделать игрока лидером какой-либо фракции) на диалоговых окнах не так уж и сложно, однако многие или ленятся, или пока ещё не разбираются в Pawn и идут на форумы или фриланс-биржи (сервисы платных услуг по типу "Kwork") с просьбой сделать что-нибудь подобное.
Естественно, для начала Вам нужна система фракций. Если её нет, то и эта команда не нужна. Кстати, планирую залить готовую или написать урок по созданию своей.
Ну да ладно, хватит разглагольствовать, давайте приступим!
В public OnPlayerCommandText мы запишем, что делать моду если игрок введёт команду /setleader. Никто не запрещает не использовать указанный ниже код, но в этом случае мы не сможем показать PlayerDialog нашему администратору.

Код: Выделить всё

if(strcmp(cmd, "/setleader", true) == 0) {
	if(pInfo[playerid][pAdmin] >= 7) { // pInfo[playerid][pAdmin] - проверка на администратора 7 ранга или больше. Заменяйте на свою.
		ShowPlayerDialog(playerid,9000,2,"Выдача лидерок","ППС\nФСБ\nАрмия","Выбрать","Закрыть");
	} else {
	    SendClientMessage(playerid,COLOR_RED, "Ты не админ, чудик! ");
  	}
	return true;
}
А теперь чапаем в public OnPlayerDialogResponse дабы запрограммировать действие при выполнении диалога. Конечно, можно обойтись и без этого, однако при выборе пункта меню или нажатии кнопки "Отмена" в окошке "Выдача лидерок" вообще ничего не произойдёт.

Код: Выделить всё

if(dialogid == 9000)
	{
		if(response)
		{
			switch(listitem)
			{
				case 0:
				{
				    ShowPlayerDialog(playerid, 930, 1,"ППС","Введите ID игрока которому хотите выдать лидерку","Ок","Отмена");
				}
				case 1:
				{
					ShowPlayerDialog(playerid, 931, 1,"ФСБ","Введите ID игрока которому хотите выдать лидерку","Ок","Отмена");
				}
				case 2:
				{
					ShowPlayerDialog(playerid, 932, 1,"Армия","Введите ID игрока которому хотите выдать лидерку","Ок","Отмена");
				}
			}
		}
		else
		{
			SCM(playerid,-1,"Вы отменили выдачу лидерки");
		}
		return 1;
	}
	if(dialogid == 930)
	{
		if(response)
		{
			if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 930, 1,"ППС","Введите ID игрока которому хотите выдать лидерку","Ок","");
			idtr[playerid] = strval(inputtext);
			format(strings4,sizeof(strings4),"/setleader %d 1",idtr[playerid]);
			OnPlayerCommandText(playerid,strings4);
		}
	}
	if(dialogid == 931)
	{
		if(response)
		{
			if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 931, 1,"ФСБ","Введите ID игрока которому хотите выдать лидерку","Ок","");
			idtr[playerid] = strval(inputtext);
			format(strings4,sizeof(strings4),"/setleader %d 2",idtr[playerid]);
			OnPlayerCommandText(playerid,strings4);
		}
	}
	if(dialogid == 932)
	{
		if(response)
		{
			if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 932, 1,"Армия","Введите ID игрока которому хотите выдать лидерку","Ок","");
			idtr[playerid] = strval(inputtext);
			format(strings4,sizeof(strings4),"/setleader %d 3",idtr[playerid]);
			OnPlayerCommandText(playerid,strings4);
		}
	}
Автор: vasya2015
Немного переделал: danilasar (я)

Ответить