Доступ к готовым решениям

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

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

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

Мануал Квест Рождество.

haman sampa

Начинающий
Пользователь
Регистрация
12 Янв 2019
Сообщения
66
Лучшие ответы
0
Репутация
4
Приветствую всех в этом мануале
Отдаю Вам мой код, который я(haman sampa) делал ещё год назад.
Описание: Квестовый персонаж находиться возле Мэрии. Вы берете у неё задание и отправляетесь на чекпоинт, который находится в SF. Там вы устраиваетесь на работу и отправляетесь к Ангару, по методу SAMP RP вы носите коробки. Как принесли 15 коробок, появится новый чекпоинт 'Китайский рынок', там будет стоять только один продавец (по желанию, можете добавить несколько игроков.). Получаете от него подарок и отправляетесь обратно в ЛС.
Если у кого-то есть желание, изменить код и сделать его под себя, то я дою добро. Ну и критики бы я тоже хотел послушать

Добавляем к глобальным переменным.
PHP:
new C_Quest, C_QuestJ, C_QuestA[2], C_QuestR;
new cPick[2];

#define QUEST 		(0)
#define QUESTJOB 	(1)
#define QUESTRIN 	(2)
Находим CTRL+F (OnGameModeInit()) и добавляем всё что ниже.
PHP:
public OnGameModeInit()
{
	C_Quest = CreateActor(91,1480.6846,-1672.6960,14.0469,179.8011);
	Create3DTextLabel
	(
	"Квестовый персонаж\nВзаимодействие 'Y'", -1,
 	1480.6846,-1672.6960,14.0469+0.5,6.0, 0, 0);
	C_QuestJ = CreateActor(27,-2073.8516,268.5394,35.3792,180.1031);
	Create3DTextLabel
	(
	"Квестовый персонаж\nВзаимодействие 'Y'", -1,
 	-2073.8516,268.5394,35.3792+0.5,6.0, 0, 0);
 	
	Create3DTextLabel
	(
	"Сколько ещё работать?!", -1,
 	-2126.0867,275.4578,35.4907+1.1,2.5, 0, 0);
	C_QuestA[0] = CreateActor(27,-2126.0867,275.4578,35.4907,81.9883);
	ApplyActorAnimation(C_QuestA[0], "PED","IDLE_TIRED",4.1,1,1,1,1,0);
	
	Create3DTextLabel
	(
	"Скоро обед?", -1,
 	-2129.5149,266.7528,35.7113+1.1,2.5, 0, 0);
	C_QuestA[1] = CreateActor(27,-2129.5149,266.7528,35.7113,173.9629);
	ApplyActorAnimation(C_QuestA[1], "PED","FIGHTA_M",4.1,1,1,1,1,0);
	
	C_QuestR = CreateActor(49, -2198.4031,636.2990,49.4429,12.3906);
	Create3DTextLabel
	(
	"Квестовый персонаж\nВзаимодействие 'Y'", -1,
 	-2198.4031,636.2990,49.4429+0.5,6.0, 0, 0);
	//=== Маппинг
	new tmpobjid;
	tmpobjid = CreateObject(3939, -2106.667480, 277.492645, 35.863990, 0.000000, 0.000000, 270.000000, 300.00);
	SetObjectMaterial(tmpobjid, 0, 2567, "ab", "chipboard_256", 0x00000000);
	SetObjectMaterial(tmpobjid, 1, 2567, "ab", "chipboard_256", 0x00000000);
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	tmpobjid = CreateObject(2991, -2106.789062, 279.109191, 34.827877, 0.000000, 0.000000, 0.000000, 300.00);
	tmpobjid = CreateObject(2991, -2106.792236, 279.125061, 36.068748, 0.000000, 0.000000, 0.000000, 300.00);
	tmpobjid = CreateObject(2991, -2108.210693, 276.095947, 34.742610, 0.000000, 0.000000, 270.000000, 300.00);
	tmpobjid = CreateObject(2991, -2105.528564, 275.744293, 34.723583, 0.000000, 0.000000, 76.700012, 300.00);
	tmpobjid = CreateObject(2912, -2104.267822, 274.389739, 34.245677, 0.000000, 0.000000, 13.499999, 300.00);
	tmpobjid = CreateObject(2912, -2106.727783, 277.546508, 34.197055, 0.000000, 0.000000, 8.199998, 300.00);
	
	// = Пикап
	cPick[0] = CreatePickup(1271, 23, -2107.12, 273.25, 35.28);
	cPick[1] = CreatePickup(1580, 23, -2123.30, 248.86, 35.48);
	return 1;
}
Находим ещё один паблик OnPlayerPickUpPickup и добавляем в него всё что ниже указано
PHP:
public OnPlayerPickUpPickup(playerid, pickupid)
{
	if(pickupid == cPick[0])// Квест - Помочь сделать церковь
	{
	    if(GetPVarInt(playerid, "qQuest") != 1 && GetPVarInt(playerid, "QuestJ") != 1)
			return SendClientMessage(playerid,0xFFDAB9B9, "Вам нельзя.");
 		if(GetPVarInt(playerid, "Gruz") == 15)
		{
			SendClientMessage(playerid, 0xFFDAb9b9,
		 		"[Квест] Отправляйтесь на рынок");
			DeletePVar(playerid, "qGruz");
			DeletePVar(playerid, "Gruz");
			DeletePVar(playerid, "QuestJ");
			SetPlayerRaceCheckpoint(playerid, 2, -2198.4031,636.2990,49.4429,
				0.0,0.0,0.0,10.0);
			return SetPVarInt(playerid, "qQuest", 2);
		}
		if(GetPVarInt(playerid, "qGruz") == 1) return 1;
		else
		{
		    SetPVarInt(playerid, "qGruz", 1);
		    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_CARRY);
		    SetPlayerAttachedObject(playerid, 1, 2912, 1, 0.257999, 0.528000,
      		-0.340000);
		}
	}
	if(pickupid == cPick[1])
	{
 		if(GetPVarInt(playerid, "qQuest") != 1 && GetPVarInt(playerid, "QuestJ") != 1)
			return SendClientMessage(playerid,0xFFDAB9B9, "Вам нельзя.");
		if(GetPVarInt(playerid, "qGruz") == 0) return 1;
		else
		{
			SetPlayerSpecialAction(playerid,SPECIAL_ACTION_NONE);
			SetPVarInt(playerid, "Gruz", GetPVarInt(playerid, "Gruz")+1);
			static const fmt[] = "%d/15 ЇeҐkoў";
			new str[sizeof(fmt)+4];
			format(str,sizeof(str), fmt, GetPVarInt(playerid, "Gruz"));
			GameTextForPlayer(playerid, str, 1000, 1);
			SetPVarInt(playerid, "qGruz", 0);
            RemovePlayerAttachedObject(playerid, 1);
		}
	}
	return 1;
}
Это для каждого актёра (квест)
PHP:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
	if(newkeys == KEY_YES)
	{
	    if(IsPlayerInRangeOfActor(playerid, C_Quest))// Команда! Ниже.
	    {
	        if(GetPVarInt(playerid, "qQuest") == 3)
			{
			    SetPVarInt(playerid, "qQuest", 4);
			    RemovePlayerAttachedObject(playerid, 1);
	            return SendClientMessage(playerid, 0xffdab9b9, "Спасибо за помощь!");
			}
	        if(GetPVarInt(playerid, "qQuest") != 1)
	        {
	            ShowPlayerDialog
				(
				playerid, QUEST, DIALOG_STYLE_MSGBOX, "{66CDAA}Квест",
				"{FFFFFF}Приветствую, я 'Алиса', квестовый персонаж на данном сервере\n\
				Мне нужна чья то помощь, для помощи детям в Рождество\n\n\
				Если согласен - нажми 'Да', если не желаешь - нажми 'Нет'", "Да","Нет"
				);
	        }
			else SendClientMessage(playerid, 0xFFDAB9B9, "Вы уже начали квест!");
	    }
	    else if(IsPlayerInRangeOfActor(playerid, C_QuestJ))// Команда! Ниже.
	    {
	        if(GetPVarInt(playerid, "qQuest") != 1) return
		 		SendClientMessage(playerid, 0xFFDAB9B9, "Вы кто?");
			else
			{
   				if(GetPVarInt(playerid, "QuestJ") == 1) return
			        SendClientMessage(playerid, 0xFFDAB9B9, "Закончите работу.");
				ShowPlayerDialog
				(
				playerid, QUESTJOB, DIALOG_STYLE_MSGBOX, "{66CDAA}Квест",
				"{FFFFFF}Здравствуйте, я 'Гена', квестовый персонаж на сервереn\n\
				Мне звонила 'Алиса', она рассказала про Вас\n\
				Отправляйтесь помогать моим рабочим, они уже второй день работают",
				"Хорошо",""
				);
			}
	    }
	    else if(IsPlayerInRangeOfActor(playerid, C_QuestR)) // Команда! Ниже.
	    {
	        if(GetPVarInt(playerid, "qQuest") != 2) return
	            SendClientMessage(playerid, 0xFFDAB9B9, "Вы кто?");
			else
			{
			    ShowPlayerDialog(playerid, QUESTRIN, DIALOG_STYLE_MSGBOX,
				"{66cdaa}Кеест","{FFFFFF}Здравствуйте, я 'Артём', квестовый\
			 	персонаж на сервере\nМне звонил 'Гена', и рассказал про Вас\
			  	и вашу просьбу\nЯ передам Вам подарок для детей. Спасибо Вам\
			   	за помощь!", "Хорошо", "");
			}
	    }
	}
	return 1;
}
Это диалоги между актёрами.
PHP:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	if(dialogid == QUEST)
	{
	    if(response)
	    {
			SetPVarInt(playerid, "qQuest", 1);
			SendClientMessage
			(
			playerid, 0xFFE4B5B5, "[Квест] {FFFFFF}Отправляйтесь на стройку"
			);
			return SetPlayerRaceCheckpoint(playerid, 2, -2073.8516,268.5394,35.3792,
			0.0,0.0,0.0,10.0); // Гоночный чекпоинт
	    }
	}
	if(dialogid == QUESTJOB)
	{
	    if(response)
		{
		    DisablePlayerRaceCheckpoint(playerid);
		    SendClientMessage(playerid, 0xffe4b5b5,
	 			"[Квест] {FFFFFF}Отправляйтесь к Ангару с коробками");
		    return SetPVarInt(playerid, "QuestJ", 1);
		}
	}
	if(dialogid == QUESTRIN)
	{
	    if(response)
	    {
	        DisablePlayerRaceCheckpoint(playerid);
	        SetPlayerRaceCheckpoint(playerid, 2, 1480.6846,-1672.6960,14.0469,
	        0.0,0.0,0.0,10.0);
   		    SetPlayerAttachedObject(playerid, 1, 19056, 1, 0.173000, -0.272999,
      		0.0,-0.3,89.799934,0.0,0.421000,0.313999,0.479999); // объект на игрока
      		SendClientMessage(playerid, 0xFFDAB9B9, "[Квест] {FFFFFF}Отправляйтесь\
			  к Алисе");
		return SetPVarInt(playerid, "qQuest", 3);
	    }
	}
	return 1;
}
Самый сок для новичков. Автор (не помню).
PHP:
stock IsPlayerInRangeOfActor(playerid, actorid, Float:radius = 3.0)
{
	new Float:x,
	    Float:y,
	    Float:z;

	if (GetActorPos(actorid, x, y, z)) // Узнаётся координаты актёра
	{
		ApplyActorAnimation(actorid, "PED","IDLE_chat",4.1,0,1,1,1,1); // анимация разговора
	    return IsPlayerInRangeOfPoint(playerid, radius, x, y, z); // проверка местонахождение игрока.
	}
	return 0;
}
Фотографии:
Спасибо всем кто просмотрел данную тему.
 
Последнее редактирование:
Сверху Снизу