Перейти к содержанию
Авторизация  
Vladimir_Kulkov

Простенькая система квестов

Рекомендуемые сообщения

Vladimir_Kulkov

Всем привет.

Выкладываю свою разработку квестов

//В массив игрока

pQuest,
pProgress

//В команды

CMD:quest(playerid)
{
new str[100], status[30], status1[30];
if(PlayerInfo[playerid][pQuest] <= 0) status = "Не выполнено";
else if(PlayerInfo[playerid][pProgress] == 1 && PlayerInfo[playerid][pQuest] <= 0) status = "Получить награду";
else if(PlayerInfo[playerid][pQuest] == 1) status = "Выполнено"
if(PlayerInfo[playerid][pQuest] <= 1) status1 = "Не выполнено";
else if(PlayerInfo[playerid][pProgress] == 2 && PlayerInfo[playerid][pQuest] <= 1) status1 = "Получить награду";
else if(PlayerInfo[playerid][pQuest] == 2) status1 = "Выполнено"
format(str, sizeof(str), "[1] Достигнуть 2 уровня [%s]\n[2] Достигнуть 5 уровня и накопить 20.000$[%s]", status, status1);
ShowPlayerDialog(playerid, 1, DSL, "Квесты", str, "Выбрать", "Закрыть");
return 1;
}

//В паблик с диалогами

case 1:
{
if(response)
{
switch(listitem)
{

{
if(PlayerInfo[playerid][pQuest] <= 0)
{
SendClientMessage(playerid, -1, "Вы успешно взяли задание, вернитесь когда завершите задание");
SetPVarInt(playerid, "Quest", 1);
}
else if(PlayerInfo[playerid][pProgress] == 1 && PlayerInfo[playerid][pQuest] <= 0)
{
DeletePVar(playerid, "Quest");
SendClientMessage(playerid, -1, "Вы сдали задание, заберите награду");
GivePlayerMoney(playerid, 5000);//Дадите награду, любую, деньги, уровень, и т.д. Я сделаю деньги
PlayerInfo[playerid][pQuest] = 1;
}
else if(PlayerInfo[playerid][pQuest] == 1) return SendClientMessage(playerid, -1, "Вы уже выполнили это задание. Возьмите другое!");
}

{
if(PlayerInfo[playerid][pQuest] == 1)
{
SendClientMessage(playerid, -1, "Вы успешно взяли задание, вернитесь когда завершите задание");
SetPVarInt(playerid, "Quest", 1);
}
else if(PlayerInfo[playerid][pProgress] == 2 && PlayerInfo[playerid][pQuest] == 1)
{
DeletePVar(playerid, "Quest");
SendClientMessage(playerid, -1, "Вы сдали задание, заберите награду");
GivePlayerMoney(playerid, 7000);//Дадите награду, любую, деньги, уровень, и т.д. Я сделаю деньги
PlayerInfo[playerid][pQuest] = 2;
PlayerInfo[playerid][pProgress] = 0;
}
else if(PlayerInfo[playerid][pQuest] == 2) return SendClientMessage(playerid, -1, "Вы уже выполнили это задание. Возьмите другое!");
{

}
}
}
}
}

//Таймер

forward UpdateTimer();
public UpdateTimer();// В OnGameModeInit добавить UpdateTimer();
{
if(PlayerInfo[playerid][pProgress] == 0 && GetPVarInt(playerid, "Quest") == 1)
{
if(PlayerInfo[playerid][pLevel] >= 2) SendClientMessage(playerid, -1, "Вы выполнили задание. Заберите награду");
PlayerInfo[playerid][pProgress] = 1;
}
if(PlayerInfo[playerid][pProgress] == 0 && GetPVarInt(playerid, "Quest") == 2)
{
if(PlayerInfo[playerid][pLevel] >= 5 && PlayerInfo[playerid][pMoney] >= 20000) SendClientMessage(playerid, -1, "Вы выполнили задание. Заберите награду");
PlayerInfo[playerid][pProgress] = 2;
}
return 1;
}
Изменено пользователем EgasVegas
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
noname_idk

 

 


forward UpdateTimer(); public UpdateTimer();

Откуда, собственно, внутри этой функции взялся параметр playerid и зачем таймер объявлять в OnGameModeInit?

 

И вот, код диалога в табулированном виде, не замечаете ничего?

case 1:
{
	if(response)
	{
		switch(listitem)
		{

			{
				if(PlayerInfo[playerid][pQuest] <= 0)
				{
					SendClientMessage(playerid, -1, "Вы успешно взяли задание, вернитесь когда завершите задание");
					SetPVarInt(playerid, "Quest", 1);
				}
				else if(PlayerInfo[playerid][pProgress] == 1 && PlayerInfo[playerid][pQuest] <= 0)
				{
					DeletePVar(playerid, "Quest");
					SendClientMessage(playerid, -1, "Вы сдали задание, заберите награду");
					GivePlayerMoney(playerid, 5000);//Дадите награду, любую, деньги, уровень, и т.д. Я сделаю деньги
					PlayerInfo[playerid][pQuest] = 1;
				}
				else if(PlayerInfo[playerid][pQuest] == 1) return SendClientMessage(playerid, -1, "Вы уже выполнили это задание. Возьмите другое!");
			}

			{
				if(PlayerInfo[playerid][pQuest] == 1)
				{
					SendClientMessage(playerid, -1, "Вы успешно взяли задание, вернитесь когда завершите задание");
					SetPVarInt(playerid, "Quest", 1);
				}
				else if(PlayerInfo[playerid][pProgress] == 2 && PlayerInfo[playerid][pQuest] == 1)
				{
					DeletePVar(playerid, "Quest");
					SendClientMessage(playerid, -1, "Вы сдали задание, заберите награду");
					GivePlayerMoney(playerid, 7000);//Дадите награду, любую, деньги, уровень, и т.д. Я сделаю деньги
					PlayerInfo[playerid][pQuest] = 2;
					PlayerInfo[playerid][pProgress] = 0;
				}
				else if(PlayerInfo[playerid][pQuest] == 2) return SendClientMessage(playerid, -1, "Вы уже выполнили это задание. Возьмите другое!");
				{

				}
			}
		}
	}
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Vladimir_Kulkov

,Таймер в других модах свой, я привёл пример. playerid , берётся из массива в модах.

 

На счёт скобок, EgasVegas не весь код сделал.

Попрошу исправить

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
MYSTERYMAN

Чересчур простая, проще было бы не выкладывать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Rikka

@Vladimir_Kulkov, в каком месте это мануал? Выглядит как готовое решение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Web

Это вам не шпак кидать. Код можно было пояснить, просто вырезка. Был бы толк если бы был разбор кода и можно было, опираясь на него написать систему. Но новичок зайдет и ничего не поймет, даже не факт, что скомпилирует подстроив под свой игровой режим.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
фучжинейк

 

 


if(PlayerInfo[playerid][pProgress] == 0 && GetPVarInt(playerid, "Quest") == 1)

undefined symbol "playerid" и так будет на весь паблик. 

 

 


// В OnGameModeInit добавить UpdateTimer();

Это вызовет "таймер" один раз (при старте мода), функция не рекурсивна, таймер не задан. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.