Анонс модификаций

Информация по разработке, отладке режима и др.
Ответить
Аватара пользователя
Eakwarp
Команда проекта
Сообщения: 7864
Зарегистрирован: 29 июл 2010, 22:46
Репутация: 1998
Ник в игре: Richard_Castle
Контактная информация:

Re: Анонс модификаций

Сообщение Eakwarp »

Первый пост обновлен.
test  Персонажи
Ричард Касл - богатый, престарелый холостяк, как следствие ведет довольно развязный образ жизни. Полиции известен как президент галактики крутотень.
Кейв Джонсон - политик, демократ, глава правительства штата Сан Андреас. Прислан в штат Вашингтоном. Из биографии известна его деятельность в Вирджинии и Юте. Несколько раз помогал Сан Андреас в критических политических ситуациях. В юности проживал в Техасе.
test  Важно к прочтению
Заявки на регистрацию проверяю сугубо в порядке общей очереди и по мере наличия на них свободного времени, убедительная просьба, не просить меня проверить вашу заявку.

Игровой уровень - ООС единица, какие к черту "лет в штате"? Одумайтесь.

Давайте, все уже окончательно уяснят, что Лос Сантос - это Лос Сантос, не Лос Анджелес, не Нью-Йорк (как думают "особо одаренные"), а Лос Сантос, выдуманный город. Туризмо - это туризмо, не феррари, не ваз 2106 и не та "ваша любимая машина", мод которой вы поставили взамен туризмо. У нас самобытный игровой мир, который зачастую бывает как крайне близок к реальности, так и в равной степени и крайне от нее далек.

Научитесь играть РП исходя из ООС ограничений, а не пытайтесь обойти ООС ограничения, аргументируя это своим РП. Направляя свой отыгрыш на пересечение этих рамок, вы будете лишь вызывать конфликты как с другими игроками, так и с администрацией.

Q: Никто не играет со мной больших РП, бытовуху играть не умею/ни хочу/не буду, ЧТО ДЕЛАТЬ?!?
A: Поставьте IC цель своему персонажу и ищите IC пути для ее достижения.
Вопреки распространенному мнению, я ненавижу банить людей.

С вами очень сложно.

Конвертирую плюсики в модификации.
Аватара пользователя
Hirano
Форумчанин
Сообщения: 306
Зарегистрирован: 19 апр 2012, 02:15
Репутация: -1
Ник в игре: Konstantin_Krestov
Откуда: г.Мечты
Контактная информация:

Re: Анонс модификаций

Сообщение Hirano »

По поводу домов , абсолютно все дома будут замененны?и будут 2-х этажные пустые иньерьеры?
test  
Чем ниже интеллект, тем громче оскорбления.
Сто друзей - свидетельство добродушия...
Сто врагов - свидетельство успеха...
[/i]
Изображение
2 cолдата из строй бата заменяют экскаватор , а солдат из ПВО заменяет хоть кого

Регистрация: 10.09.2009
Здесь была ini.
Аватара пользователя
Eakwarp
Команда проекта
Сообщения: 7864
Зарегистрирован: 29 июл 2010, 22:46
Репутация: 1998
Ник в игре: Richard_Castle
Контактная информация:

Re: Анонс модификаций

Сообщение Eakwarp »

Hirano писал(а):По поводу домов , абсолютно все дома будут замененны?и будут 2-х этажные пустые иньерьеры?
Да. Всю обстановку в доме теперь будет делать сам игрок. Если получится, сделаем по максимуму домов по принципу новых и 66го.
test  Персонажи
Ричард Касл - богатый, престарелый холостяк, как следствие ведет довольно развязный образ жизни. Полиции известен как президент галактики крутотень.
Кейв Джонсон - политик, демократ, глава правительства штата Сан Андреас. Прислан в штат Вашингтоном. Из биографии известна его деятельность в Вирджинии и Юте. Несколько раз помогал Сан Андреас в критических политических ситуациях. В юности проживал в Техасе.
test  Важно к прочтению
Заявки на регистрацию проверяю сугубо в порядке общей очереди и по мере наличия на них свободного времени, убедительная просьба, не просить меня проверить вашу заявку.

Игровой уровень - ООС единица, какие к черту "лет в штате"? Одумайтесь.

Давайте, все уже окончательно уяснят, что Лос Сантос - это Лос Сантос, не Лос Анджелес, не Нью-Йорк (как думают "особо одаренные"), а Лос Сантос, выдуманный город. Туризмо - это туризмо, не феррари, не ваз 2106 и не та "ваша любимая машина", мод которой вы поставили взамен туризмо. У нас самобытный игровой мир, который зачастую бывает как крайне близок к реальности, так и в равной степени и крайне от нее далек.

Научитесь играть РП исходя из ООС ограничений, а не пытайтесь обойти ООС ограничения, аргументируя это своим РП. Направляя свой отыгрыш на пересечение этих рамок, вы будете лишь вызывать конфликты как с другими игроками, так и с администрацией.

Q: Никто не играет со мной больших РП, бытовуху играть не умею/ни хочу/не буду, ЧТО ДЕЛАТЬ?!?
A: Поставьте IC цель своему персонажу и ищите IC пути для ее достижения.
Вопреки распространенному мнению, я ненавижу банить людей.

С вами очень сложно.

Конвертирую плюсики в модификации.
РэK0zyavkka
Форумчанин
Сообщения: 420
Зарегистрирован: 18 апр 2012, 17:08
Репутация: -1
Ник в игре: Cody Cullen

Re: Анонс модификаций

Сообщение РэK0zyavkka »

Eakwarp писал(а):
Hirano писал(а):По поводу домов , абсолютно все дома будут замененны?и будут 2-х этажные пустые иньерьеры?
Да. Всю обстановку в доме теперь будет делать сам игрок. Если получится, сделаем по максимуму домов по принципу новых и 66го.
По принципу 66 делать долго,но реально ;)
Изображение
Кому нужен,звоните :D
test  Cody Cullen
Справка о состоянии здоровья

Фамилия, Имя пациента: Коди Каллен
Возраст: 30
Пол: Мужской
Состояние здоровья: Отличное
Противопоказания: Не имеется

Лист показаний

Психолог: Здоров
Хирург: Здоров
Заключение врача: Здоров

Врач: Никита Феррум.
Подпись: Ferrum0k
test  Jasper Kyd
PavelMas писал(а):
Справка о состоянии здоровья

Фамилия, Имя пациента: Jasper Kyd
Возраст: 32 года
Пол: Мужской
Состояние здоровья: Полностью здоров
Противопоказания: Не имеются

Лист показаний

Психолог: Здоров
Хирург: Здоров
Заключение врача: Полностью здоров

Врач: Pavel Maslennikov
Подпись: Maslennikov
Аватара пользователя
Hirano
Форумчанин
Сообщения: 306
Зарегистрирован: 19 апр 2012, 02:15
Репутация: -1
Ник в игре: Konstantin_Krestov
Откуда: г.Мечты
Контактная информация:

Re: Анонс модификаций

Сообщение Hirano »

Колчин ну что ты там справлся со своим заданием?
test  
Чем ниже интеллект, тем громче оскорбления.
Сто друзей - свидетельство добродушия...
Сто врагов - свидетельство успеха...
[/i]
Изображение
2 cолдата из строй бата заменяют экскаватор , а солдат из ПВО заменяет хоть кого

Регистрация: 10.09.2009
Здесь была ini.
РэK0zyavkka
Форумчанин
Сообщения: 420
Зарегистрирован: 18 апр 2012, 17:08
Репутация: -1
Ник в игре: Cody Cullen

Re: Анонс модификаций

Сообщение РэK0zyavkka »

Hirano писал(а):Колчин ну что ты там справлся со своим заданием?
Пока что нет,смотрю.код,я уделяю ему 30 минут) много я там все равно не понимаю.
Изображение
Кому нужен,звоните :D
test  Cody Cullen
Справка о состоянии здоровья

Фамилия, Имя пациента: Коди Каллен
Возраст: 30
Пол: Мужской
Состояние здоровья: Отличное
Противопоказания: Не имеется

Лист показаний

Психолог: Здоров
Хирург: Здоров
Заключение врача: Здоров

Врач: Никита Феррум.
Подпись: Ferrum0k
test  Jasper Kyd
PavelMas писал(а):
Справка о состоянии здоровья

Фамилия, Имя пациента: Jasper Kyd
Возраст: 32 года
Пол: Мужской
Состояние здоровья: Полностью здоров
Противопоказания: Не имеются

Лист показаний

Психолог: Здоров
Хирург: Здоров
Заключение врача: Полностью здоров

Врач: Pavel Maslennikov
Подпись: Maslennikov
Аватара пользователя
SASHQAAA
Местный
Сообщения: 260
Зарегистрирован: 17 май 2012, 00:12
Репутация: 0
Ник в игре: -

Re: Анонс модификаций

Сообщение SASHQAAA »

:D колчин вообще ни че не понимает
Изображение
Аватара пользователя
Hirano
Форумчанин
Сообщения: 306
Зарегистрирован: 19 апр 2012, 02:15
Репутация: -1
Ник в игре: Konstantin_Krestov
Откуда: г.Мечты
Контактная информация:

Re: Анонс модификаций

Сообщение Hirano »

РэK0zyavkka писал(а):
Hirano писал(а):Колчин ну что ты там справлся со своим заданием?
Пока что нет,смотрю.код,я уделяю ему 30 минут) много я там все равно не понимаю.
Ай так если не понимаешь , то толку нет продолжать :)
test  
Чем ниже интеллект, тем громче оскорбления.
Сто друзей - свидетельство добродушия...
Сто врагов - свидетельство успеха...
[/i]
Изображение
2 cолдата из строй бата заменяют экскаватор , а солдат из ПВО заменяет хоть кого

Регистрация: 10.09.2009
Здесь была ini.
MaesTro
Форумчанин
Сообщения: 460
Зарегистрирован: 18 апр 2012, 20:21
Репутация: 1
Ник в игре: Alexey_Kolchin

Re: Анонс модификаций

Сообщение MaesTro »

Edward писал(а)::D колчин вообще ни че не понимает
Сам попробуй что нибудь сделать. Обсуждать все мастера.
РэK0zyavkka
Форумчанин
Сообщения: 420
Зарегистрирован: 18 апр 2012, 17:08
Репутация: -1
Ник в игре: Cody Cullen

Re: Анонс модификаций

Сообщение РэK0zyavkka »

Hirano писал(а):
РэK0zyavkka писал(а):
Hirano писал(а):Колчин ну что ты там справлся со своим заданием?
Пока что нет,смотрю.код,я уделяю ему 30 минут) много я там все равно не понимаю.
Ай так если не понимаешь , то толку нет продолжать :)
Я понимаю. Но я продолжаю ради своего собственного интереса. Я знаю что моих знаний pawno все равно не хватит для валакаса.
Edward писал(а)::D колчин вообще ни че не понимает
Такой вопрос к тебе. Ты что нибудь понимаешь,хотя бы в МТА?
Изображение
Кому нужен,звоните :D
test  Cody Cullen
Справка о состоянии здоровья

Фамилия, Имя пациента: Коди Каллен
Возраст: 30
Пол: Мужской
Состояние здоровья: Отличное
Противопоказания: Не имеется

Лист показаний

Психолог: Здоров
Хирург: Здоров
Заключение врача: Здоров

Врач: Никита Феррум.
Подпись: Ferrum0k
test  Jasper Kyd
PavelMas писал(а):
Справка о состоянии здоровья

Фамилия, Имя пациента: Jasper Kyd
Возраст: 32 года
Пол: Мужской
Состояние здоровья: Полностью здоров
Противопоказания: Не имеются

Лист показаний

Психолог: Здоров
Хирург: Здоров
Заключение врача: Полностью здоров

Врач: Pavel Maslennikov
Подпись: Maslennikov
Amirko

Re: Анонс модификаций

Сообщение Amirko »

Eakwarp писал(а):
test  Ахтунг, 600 строк кода

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

enum squestinfo
{
	sqValid,
	sqStartUserID,
	sqQuestID,
	sqNpcID,
	sqNpcName[MAX_PLAYER_NAME],
	sqNpcSkinID,
	Float:sqNpcX,
	Float:sqNpcY,
	Float:sqNpcZ,
	Float:sqNpcRot,
	sqPrice,
	sqStartItem,// 0/1
	sqStartItemID,
	sqSteeps,
	sqName[64],
	sqText[2048],
	sqAnimUse,
	sqAnimLib[32],
	sqAnimName[32],
	sqRewardItem,
	sqRewardItemID,
	sqUseCheckpoints
}
new StartQuestInfo[8][squestinfo];
new Text3D:StartQuestLabel[sizeof(StartQuestInfo)];

enum metaquestinfo
{
	mqValid,
	mqQuestID,
	mqSteepID,//0-7
	mqNpcID,
	mqNpcName[MAX_PLAYER_NAME],
	mqNpcSkinID,
	Float:mqNpcX,
	Float:mqNpcY,
	Float:mqNpcZ,
	Float:mqNpcRot,
    mqTakeItem,// 0/1
    mqTakeItemID,
   	mqGiveItem,// 0/1
	mqGiveItemID,
	mqEndQuest,// 0/1
	mqText[2048],
	mqAnimUse,
	mqAnimLib[32],
	mqAnimName[32]
}
new MetaQuestInfo[sizeof(StartQuestInfo)][8][metaquestinfo];

new Text3D:MetaQuestLabel[sizeof(StartQuestInfo)][8];

new Quest[MAX_PLAYERS]=-1;//0-9
new Steep[MAX_PLAYERS]=-1;//0-7
stock QuestNPCConnect(p)
{
    new playername[32];
	GetPlayerName(p,playername,32);
    for(new n = 0; n < sizeof(StartQuestInfo); n++)
	{
	    if(StartQuestInfo[n][sqValid])
	    {
			if(!strcmp(StartQuestInfo[n][sqNpcName],playername,true))
			{
				StartQuestInfo[n][sqNpcID]=p;
				return 1;
			}
			for(new i = 0; i < StartQuestInfo[n][sqSteeps]; i++)
			{
			    if(MetaQuestInfo[n][i][mqValid])
			    {
				    if(!strcmp(MetaQuestInfo[n][i][mqNpcName],playername,true))
				    {
						MetaQuestInfo[n][i][mqNpcID]=p;
						return 1;
					}
				}
			}
		}
	}
	return 1;
}

stock QuestNPCSetSpawn(p)
{
    for(new n = 0; n < sizeof(StartQuestInfo); n++)
	{
	    if(StartQuestInfo[n][sqValid])
	    {
	        if(p==StartQuestInfo[n][sqNpcID])
	        {
	        	SetSpawnInfo(StartQuestInfo[n][sqNpcID], 0, StartQuestInfo[n][sqNpcSkinID],StartQuestInfo[n][sqNpcX], StartQuestInfo[n][sqNpcY], StartQuestInfo[n][sqNpcZ], StartQuestInfo[n][sqNpcRot], 0, 0, 0, 0, 0, 0 );
				return 1;
			}
			for(new i = 0; i < StartQuestInfo[n][sqSteeps]; i++)
			{
			    if(MetaQuestInfo[n][i][mqValid])
			    {
			        if(p==MetaQuestInfo[n][i][mqNpcID])
		        	{
                        SetSpawnInfo(MetaQuestInfo[n][i][mqNpcID], 0,  MetaQuestInfo[n][i][mqNpcSkinID], MetaQuestInfo[n][i][mqNpcX], MetaQuestInfo[n][i][mqNpcY], MetaQuestInfo[n][i][mqNpcZ], MetaQuestInfo[n][i][mqNpcRot], 0, 0, 0, 0, 0, 0 );
						return 1;
		        	}
			    }
			}
		}
	}
	return 1;
}
stock LoadRandomQuests()
{
	new str[255];
    samp_mysql_query("SELECT id FROM quest");
	samp_mysql_store_result();
	new quests=samp_mysql_num_rows();
	if(quests==0)
	{
        print("Error, not quest");
		return 1;
	}
	else if(quests<=sizeof(StartQuestInfo))
	{
	    for(new i = 0; i < quests; i++)
		{
		    if(!LoadQuest(i,i))continue;
		    //загрузка данных из бд по указанному иду.
		    StartQuestInfo[i][sqNpcID]=FindValidID();//свободный ид с конца
		    #if defined CBOTS
		    CreateNPC(StartQuestInfo[i][sqNpcID],StartQuestInfo[i][sqNpcName]);
		    SetSpawnInfo(StartQuestInfo[i][sqNpcID], 0, StartQuestInfo[i][sqNpcSkinID],StartQuestInfo[i][sqNpcX], StartQuestInfo[i][sqNpcY], StartQuestInfo[i][sqNpcZ], StartQuestInfo[i][sqNpcRot], 0, 0, 0, 0, 0, 0 );
		    SpawnNPC(StartQuestInfo[i][sqNpcID]);
		    SetNPCFacingAngle(StartQuestInfo[i][sqNpcID], StartQuestInfo[i][sqNpcRot]);
		    SetNPCImpregnable(StartQuestInfo[i][sqNpcID],1);
		    #else
		    ConnectNPC(StartQuestInfo[i][sqNpcName],"stand");
			#endif
		    format(str,sizeof(str),"%s[/say для разговора]",StartQuestInfo[i][sqNpcName]);
			StartQuestLabel[i] = CreateDynamic3DTextLabel(str,COLOR_WHITE,StartQuestInfo[i][sqNpcX], StartQuestInfo[i][sqNpcY], StartQuestInfo[i][sqNpcZ]+1.0,15.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1);
			if(StartQuestInfo[i][sqAnimUse])
		    {
                ApplyAnimation(StartQuestInfo[i][sqNpcID],StartQuestInfo[i][sqAnimLib],StartQuestInfo[i][sqAnimName],4.1,0,0,0,1,0);
		    }
            for(new b = 0; b < StartQuestInfo[i][sqSteeps]; b++)
            {
                if(!LoadSteep(StartQuestInfo[i][sqQuestID],b)) continue;
                MetaQuestInfo[i][b][mqNpcID]=FindValidID();
                #if defined CBOTS
                CreateNPC(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqNpcName]);
                SetSpawnInfo(MetaQuestInfo[i][b][mqNpcID], 0,  MetaQuestInfo[i][b][mqNpcSkinID], MetaQuestInfo[i][b][mqNpcX], MetaQuestInfo[i][b][mqNpcY], MetaQuestInfo[i][b][mqNpcZ], MetaQuestInfo[i][b][mqNpcRot], 0, 0, 0, 0, 0, 0 );
				SpawnNPC(MetaQuestInfo[i][b][mqNpcID]);
				SetNPCImpregnable(MetaQuestInfo[i][b][mqNpcID],1);
				SetNPCFacingAngle(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqNpcRot]);
				#else
		    	ConnectNPC(MetaQuestInfo[i][b][mqNpcName],"stand");
				#endif
                format(str,sizeof(str),"%s[/say для разговора]",MetaQuestInfo[i][b][mqNpcName]);
				MetaQuestLabel[i][b] = CreateDynamic3DTextLabel(str,COLOR_WHITE,MetaQuestInfo[i][b][mqNpcX], MetaQuestInfo[i][b][mqNpcY], MetaQuestInfo[i][b][mqNpcZ]+1.0,15.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1);
				if(MetaQuestInfo[i][b][mqAnimUse])
			    {
	                ApplyAnimation(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqAnimLib],MetaQuestInfo[i][b][mqAnimName],4.1,0,0,0,1,0);
			    }
            }
		}
	}
	else
	{
		for(new i = 0; i < sizeof(StartQuestInfo); i++)
		{
		    new bit1,bit2;
		    new rand;
		    while (bit1==1)
			{
	            bit2=0;
			    rand=random(quests);
	            for(new n = 0; n < i; n++)
				{
				    if(StartQuestInfo[n][sqQuestID]==rand)bit2=1;
				}
				if(bit2==0)bit1=1;
			}
		    if(!LoadQuest(rand,i))continue;
		    //загрузка данных из бд по указанному иду.
		    StartQuestInfo[i][sqNpcID]=FindValidID();//свободный ид с конца
		    #if defined CBOTS
		    CreateNPC(StartQuestInfo[i][sqNpcID],StartQuestInfo[i][sqNpcName]);
		    SetSpawnInfo(StartQuestInfo[i][sqNpcID], 0, StartQuestInfo[i][sqNpcSkinID],StartQuestInfo[i][sqNpcX], StartQuestInfo[i][sqNpcY], StartQuestInfo[i][sqNpcZ], StartQuestInfo[i][sqNpcRot], 0, 0, 0, 0, 0, 0 );
		    SpawnNPC(StartQuestInfo[i][sqNpcID]);
		    SetNPCFacingAngle(StartQuestInfo[i][sqNpcID], StartQuestInfo[i][sqNpcRot]);
		    SetNPCImpregnable(StartQuestInfo[i][sqNpcID],1);
		    #else
		    ConnectNPC(StartQuestInfo[i][sqNpcName],"stand");
		    #endif
		    format(str,sizeof(str),"%s[/say для разговора]",StartQuestInfo[i][sqNpcName]);
			StartQuestLabel[i] = CreateDynamic3DTextLabel(str,COLOR_WHITE,StartQuestInfo[i][sqNpcX], StartQuestInfo[i][sqNpcY], StartQuestInfo[i][sqNpcZ]+1.0,15.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1);
			if(StartQuestInfo[i][sqAnimUse])
		    {
                ApplyAnimation(StartQuestInfo[i][sqNpcID],StartQuestInfo[i][sqAnimLib],StartQuestInfo[i][sqAnimName],4.1,0,0,0,1,0);
		    }
			for(new b = 0; b < StartQuestInfo[i][sqSteeps]; b++)
            {
                if(!LoadSteep(StartQuestInfo[i][sqQuestID],b)) continue;
                MetaQuestInfo[i][b][mqNpcID]=FindValidID();
                #if defined CBOTS
                CreateNPC(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqNpcName]);
                SetSpawnInfo(MetaQuestInfo[i][b][mqNpcID], 0,  MetaQuestInfo[i][b][mqNpcSkinID], MetaQuestInfo[i][b][mqNpcX], MetaQuestInfo[i][b][mqNpcY], MetaQuestInfo[i][b][mqNpcZ], MetaQuestInfo[i][b][mqNpcRot], 0, 0, 0, 0, 0, 0 );
				SpawnNPC(MetaQuestInfo[i][b][mqNpcID]);
				SetNPCFacingAngle(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqNpcRot]);
				SetNPCImpregnable(MetaQuestInfo[i][b][mqNpcID],1);
				#else
		    	ConnectNPC(MetaQuestInfo[i][b][mqNpcName],"stand");
				#endif
                format(str,sizeof(str),"%s[/say для разговора]",MetaQuestInfo[i][b][mqNpcName]);
				MetaQuestLabel[i][b] = CreateDynamic3DTextLabel(str,COLOR_WHITE,MetaQuestInfo[i][b][mqNpcX], MetaQuestInfo[i][b][mqNpcY], MetaQuestInfo[i][b][mqNpcZ]+1.0,15.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1);
				if(MetaQuestInfo[i][b][mqAnimUse])
			    {
	                ApplyAnimation(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqAnimLib],MetaQuestInfo[i][b][mqAnimName],4.1,0,0,0,1,0);
			    }
            }
		}
	}
	return 1;
}

stock LoadQuest(qid,idto)
{
	new query[255],Field[2048];
    format(query, sizeof(query), "SELECT * FROM quest WHERE id = %d LIMIT 1", qid);
	samp_mysql_query(query);
	samp_mysql_store_result();
	if(samp_mysql_num_rows() != 0)
	{
		samp_mysql_fetch_result();
	//	samp_mysql_fetch_next(Field);
		new rcnt=0;
		StartQuestInfo[idto][sqValid]=1;
		StartQuestInfo[idto][sqQuestID]=qid;
		while (samp_mysql_fetch_next(Field)==1)
		{
		    switch(rcnt)
		    {
		        case 1: strmid(StartQuestInfo[idto][sqNpcName], Field, 0, strlen(Field), 255);
		        case 2: StartQuestInfo[idto][sqNpcSkinID] = strval(Field);
				case 3: StartQuestInfo[idto][sqNpcX] = floatstr(Field);
				case 4: StartQuestInfo[idto][sqNpcY] = floatstr(Field);
				case 5: StartQuestInfo[idto][sqNpcZ] = floatstr(Field);
				case 6: StartQuestInfo[idto][sqNpcRot] = floatstr(Field);
				case 7: strmid(StartQuestInfo[idto][sqName], Field, 0, strlen(Field), 255);
				case 8: strmid(StartQuestInfo[idto][sqText], Field, 0, strlen(Field), 2048);
				case 9: StartQuestInfo[idto][sqPrice] = strval(Field);
				case 10: StartQuestInfo[idto][sqStartItem] = strval(Field);
				case 11: StartQuestInfo[idto][sqStartItemID] = strval(Field);
				case 12: StartQuestInfo[idto][sqSteeps] = strval(Field);
				case 13: StartQuestInfo[idto][sqAnimUse] = strval(Field);
				case 14: strmid(StartQuestInfo[idto][sqAnimLib], Field, 0, strlen(Field), 255);
				case 15: strmid(StartQuestInfo[idto][sqAnimName], Field, 0, strlen(Field), 255);
				case 16: StartQuestInfo[idto][sqRewardItem] = strval(Field);
				case 17: StartQuestInfo[idto][sqRewardItemID] = strval(Field);
				case 18: StartQuestInfo[idto][sqUseCheckpoints] = strval(Field);
			}
			rcnt++;
		}
		return 1;
	}
	printf("Error, quest %d - not loaded",qid);
	return 0;
}

stock LoadSteep(questid,steep)
{
	new query[255],Field[2048];
    format(query, sizeof(query), "SELECT * FROM questmeta WHERE QuestID=%d AND SteepID=%d LIMIT 1", questid,steep);
	samp_mysql_query(query);
	samp_mysql_store_result();
	if(samp_mysql_num_rows() != 0)
	{
		samp_mysql_fetch_result();
	//	samp_mysql_fetch_next(Field);
		new rcnt=0;
        MetaQuestInfo[questid][steep][mqValid]=1;
		while (samp_mysql_fetch_next(Field)==1)
		{
		    switch(rcnt)
		    {
		        case 1: MetaQuestInfo[questid][steep][mqQuestID]= strval(Field);
		        case 2: MetaQuestInfo[questid][steep][mqSteepID]= strval(Field);
		        case 3: strmid(MetaQuestInfo[questid][steep][mqNpcName], Field, 0, strlen(Field), 255);
		        case 4: MetaQuestInfo[questid][steep][mqNpcSkinID] = strval(Field);
		        case 5: MetaQuestInfo[questid][steep][mqNpcX] = floatstr(Field);
				case 6: MetaQuestInfo[questid][steep][mqNpcY] = floatstr(Field);
				case 7: MetaQuestInfo[questid][steep][mqNpcZ] = floatstr(Field);
				case 8: MetaQuestInfo[questid][steep][mqNpcRot] = floatstr(Field);
				case 9: MetaQuestInfo[questid][steep][mqTakeItem]= strval(Field);
				case 10: MetaQuestInfo[questid][steep][mqTakeItemID]= strval(Field);
				case 11:MetaQuestInfo[questid][steep][mqGiveItem]= strval(Field);
				case 12:MetaQuestInfo[questid][steep][mqGiveItemID]= strval(Field);
				case 13:MetaQuestInfo[questid][steep][mqEndQuest]= strval(Field);
				case 14:strmid(MetaQuestInfo[questid][steep][mqText], Field, 0, strlen(Field), 2048);
				case 15: MetaQuestInfo[questid][steep][mqAnimUse] = strval(Field);
				case 16: strmid(MetaQuestInfo[questid][steep][mqAnimLib], Field, 0, strlen(Field), 255);
				case 17: strmid(MetaQuestInfo[questid][steep][mqAnimName], Field, 0, strlen(Field), 255);
				
			}
			rcnt++;
		}
		return 1;
	}
	printf("Error, steep %d for quest %d - not loaded",steep,questid);
	return 0;
}

stock SayToQuestPlayer(playerid)
{
    for(new i = 0; i < sizeof(StartQuestInfo); i++)
	{
		if(IsPlayerInRangeOfPoint(playerid,3.0,StartQuestInfo[i][sqNpcX], StartQuestInfo[i][sqNpcY], StartQuestInfo[i][sqNpcZ]))
		{
		    if(Quest[playerid]==-1)//начать квест
			{
			    new query[255];
			    format(query,sizeof(query),"SELECT id FROM questcomplete WHERE Name='%s' AND QuestID=%d",oGetPlayerName(playerid),StartQuestInfo[i][sqQuestID]);
				samp_mysql_query(query);
				samp_mysql_store_result();
				new str[255];
				format(str,sizeof(str),"Квест: %s",StartQuestInfo[i][sqName]);
				if(samp_mysql_num_rows() != 0)
				{
				    return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Прости, у меня для тебя ничего нет","Ок","Ок");
				}
				if(IsACop(playerid))return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Прости, у меня для тебя ничего нет","Ок","Ок");
				Quest[playerid]=i;
			    ShowPlayerDialog(playerid,199,DIALOG_STYLE_MSGBOX,str,StartQuestInfo[i][sqText],"Взять","Не взять");
			    return 1;
		    }
		    else
		    {
		        new str[255];
				format(str,sizeof(str),"Квест: %s",StartQuestInfo[i][sqName]);
		        return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Прости, у меня для тебя ничего нет","Ок","Ок");
		    }
		}
		for(new b = 0; b < StartQuestInfo[i][sqSteeps]; b++)
		{
		    if(IsPlayerInRangeOfPoint(playerid,3.0,MetaQuestInfo[i][b][mqNpcX], MetaQuestInfo[i][b][mqNpcY], MetaQuestInfo[i][b][mqNpcZ]))
			{
			    if(Quest[playerid]!=i)
			    {
    				new str[255];
					format(str,sizeof(str),"Квест: %s",StartQuestInfo[i][sqName]);
			        return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Прости, у меня для тебя ничего нет","Ок","Ок");
			    }
			    if(Steep[playerid]==b)
			    {
					if(MetaQuestInfo[i][b][mqTakeItem])
					{
						if(FindItem(playerid,MetaQuestInfo[i][b][mqTakeItemID])) DeleteOneItem(playerid,MetaQuestInfo[i][b][mqTakeItemID]);
						else EndQuest(playerid,0);
					}
					new str[255];
					format(str,sizeof(str),"Квест: %s",StartQuestInfo[i][sqName]);
				    ShowPlayerDialog(playerid,200,DIALOG_STYLE_MSGBOX,str,MetaQuestInfo[i][b][mqText],"Ок","Ок");
				    return 1;
			    }
			    else
			    {
			        new str[255];
					format(str,sizeof(str),"Квест: %s",StartQuestInfo[i][sqName]);
					return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Прости, у меня для тебя ничего нет","Ок","Ок");
			    }
		    }
		}
	}
	return 1;
}
stock QuestDialogResponse(playerid, dialogid, response)
{
	switch(dialogid)
	{
	    case 199:
	    {
			if(response)
			{
			    if(StartQuestInfo[Quest[playerid]][sqStartItem])
				{
				    if(!SetItem(playerid,StartQuestInfo[Quest[playerid]][sqStartItemID],1))
					{
					    new str[255];
						format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
						Quest[playerid]=-1;
						Steep[playerid]=-1;
					    return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Вы не сможете унести это, уберите что нибуть из своих вещей и подойдите ко мне снова.","OK","OK");
					}
			    }
			    Steep[playerid]=0;
			    new str[255];
				format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
				if(StartQuestInfo[Quest[playerid]][sqUseCheckpoints])
				{
					SetPlayerCheckpoint(playerid,MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcX], MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcY], MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcZ],4.0);
				    return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"На вашем радаре отображен чекпоинт с указанным NPC.","OK","OK");
			    }
			    return 1;
			}
			else
			{
			    Quest[playerid]=-1;
			}
	    }
		case 200:
		{
		    if(MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqGiveItem])
			{
			    if(!SetItem(playerid,MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqGiveItemID],1))
				{
				    new str[255];
					format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
				    return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Вы не сможете унести это, уберите что нибуть из своих вещей и подойдите ко мне снова.","OK","OK");
				}
		    }
			if(MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqEndQuest]) return EndQuest(playerid, 1);
			new str[255];
			format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
			Steep[playerid]++;
			if(StartQuestInfo[Quest[playerid]][sqUseCheckpoints])
			{
				SetPlayerCheckpoint(playerid,MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcX], MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcY], MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcZ],4.0);
			    return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"На вашем радаре отображен чекпоинт с указанным NPC.","OK","OK");
		    }
		    return 1;
		}
	}
	return 1;
}
stock EndQuest(playerid, type)
{
	switch(type)
	{
		case 0://провал
		{
		    new str[255];
		    DisablePlayerCheckpoint(playerid);
		    ClearQuestItems(playerid);
			format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
			Quest[playerid]=-1;//0-9
			Steep[playerid]=-1;//0-7
			return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Вы провалили квест","Ок","Ок");
		}
		case 1://выигрыш
		{
		    new str[255];
			format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
		    if(StartQuestInfo[Quest[playerid]][sqRewardItem])
		    {
		        if(!SetItem(playerid,StartQuestInfo[Quest[playerid]][sqRewardItemID],1))
		        {
		            return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Вы не сможете унести это, уберите что нибуть из своих вещей и подойдите ко мне снова.","OK","OK");
				}
		    }
			new str1[255];
			format(str1,sizeof(str1),"Вы прошли квест, награда %d",StartQuestInfo[Quest[playerid]][sqPrice]);
			new reason[255];
			format(reason,sizeof(reason),"Прошел квест %s",StartQuestInfo[Quest[playerid]][sqName]);
			DisablePlayerCheckpoint(playerid);
            TransferMoney(0,0,playerid,1,StartQuestInfo[Quest[playerid]][sqPrice],reason);
            new query[255];
            format(query,sizeof(query),"INSERT INTO questcomplete SET Name='%s', QuestID=%d",oGetPlayerName(playerid),StartQuestInfo[Quest[playerid]][sqQuestID]);
			samp_mysql_query(query);
            Quest[playerid]=-1;//0-9
			Steep[playerid]=-1;//0-7
			ClearQuestItems(playerid);
			return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,str1,"Ок","Ок");
		}
	}
	return 1;
}
stock QuestPlayerConnect(playerid)
{
    Quest[playerid]=-1;//0-9
	Steep[playerid]=-1;//0-7
	return 1;
}
stock QuestPlayerDisconnect(playerid)
{
    Quest[playerid]=-1;//0-9
	Steep[playerid]=-1;//0-7
	return 1;
}
enum equestinfo
{
	eqType,
	eqStage,
	eqQuest,
    eqText[2048]
};
new EditQuestInfo[MAX_PLAYERS][equestinfo];
stock StartEditTextForQuest(playerid)
{
    for(new n = 0; n < sizeof(StartQuestInfo); n++)
	{
		if(IsPlayerInRangeOfPoint(playerid,3.0,StartQuestInfo[n][sqNpcX], StartQuestInfo[n][sqNpcY], StartQuestInfo[n][sqNpcZ]))
		{
			new str[255];
			format(str,sizeof(str),"Изменение квеста %d, вы сейчас на старте, введите название:",n);
			format(EditQuestInfo[playerid][eqText],2048," ");
			EditQuestInfo[playerid][eqType]=-1;
			EditQuestInfo[playerid][eqQuest]=n;
			ShowPlayerDialog(playerid,221,DIALOG_STYLE_INPUT,str,EditQuestInfo[playerid][eqText],"Добавить строку","Конец");
			return 1;
		}
		for(new i = 0; i < StartQuestInfo[n][sqSteeps]; i++)
		{
		    if(IsPlayerInRangeOfPoint(playerid,3.0,MetaQuestInfo[n][i][mqNpcX], MetaQuestInfo[n][i][mqNpcY], MetaQuestInfo[n][i][mqNpcZ]))
			{
                EditQuestInfo[playerid][eqType]=1;
                EditQuestInfo[playerid][eqQuest]=n;
                EditQuestInfo[playerid][eqStage]=i;
                new str[255];
				format(str,sizeof(str),"Изменение квеста %d, этап %d",n,i);
				format(EditQuestInfo[playerid][eqText],2048," ");
				ShowPlayerDialog(playerid,221,DIALOG_STYLE_INPUT,str,EditQuestInfo[playerid][eqText],"Добавить строку","Конец");
				return 1;
			}
		}
	}
	return 0;
}
stock EditQuestDialogResponse(playerid, dialogid, response, inputtext[])
{
	switch(dialogid)
	{
	    case 221:
	    {
	        if(response)
	        {
	            new str[255];
	            switch(EditQuestInfo[playerid][eqType])
	            {
					case -1:
					{
						new query[255];
					    format(query,sizeof(query),"UPDATE quest SET Name=' %s' WHERE id=%d",inputtext,StartQuestInfo[EditQuestInfo[playerid][eqQuest]][sqQuestID]);
					    samp_mysql_query(query);
					    format(StartQuestInfo[EditQuestInfo[playerid][eqQuest]][sqName],64,"%s",inputtext);
						format(str,sizeof(str),"Изменение квеста %d, текст квеста:",EditQuestInfo[playerid][eqQuest]);
						format(EditQuestInfo[playerid][eqText],2048," ");
						EditQuestInfo[playerid][eqType]=0;
						ShowPlayerDialog(playerid,221,DIALOG_STYLE_INPUT,str,EditQuestInfo[playerid][eqText],"Добавить строку","Конец");
						return 1;
					}
	                case 0:format(str,sizeof(str),"Изменение квеста %d",EditQuestInfo[playerid][eqQuest]);
					case 1:format(str,sizeof(str),"Изменение квеста %d, этап %d",EditQuestInfo[playerid][eqQuest],EditQuestInfo[playerid][eqStage]);
	            }
				format(EditQuestInfo[playerid][eqText],2048," %s\n%s",EditQuestInfo[playerid][eqText],inputtext);
				ShowPlayerDialog(playerid,221,DIALOG_STYLE_INPUT,str,EditQuestInfo[playerid][eqText],"Добавить строку","Конец");
	        }
	        else
	        {
	            new str[255];
	            new query[2048];
	            switch(EditQuestInfo[playerid][eqType])
	            {
	                case 0:
					{
					    format(query,sizeof(query),"UPDATE quest SET QuestText='%s' WHERE id=%d",EditQuestInfo[playerid][eqText],StartQuestInfo[EditQuestInfo[playerid][eqQuest]][sqQuestID]);
					    samp_mysql_query(query);
					    format(StartQuestInfo[EditQuestInfo[playerid][eqQuest]][sqText],2048,"%s",EditQuestInfo[playerid][eqText]);
					   	format(str,sizeof(str),"Изменение квеста %d",EditQuestInfo[playerid][eqQuest]);
					}
					case 1:
					{
					    format(query,sizeof(query),"UPDATE questmeta SET QuestText='%s' WHERE QuestID=%d AND SteepID=%d",EditQuestInfo[playerid][eqText],MetaQuestInfo[EditQuestInfo[playerid][eqQuest]][EditQuestInfo[playerid][eqStage]][mqQuestID],MetaQuestInfo[EditQuestInfo[playerid][eqQuest]][EditQuestInfo[playerid][eqStage]][mqSteepID]);
					    samp_mysql_query(query);
					    format(MetaQuestInfo[EditQuestInfo[playerid][eqQuest]][EditQuestInfo[playerid][eqStage]][mqText],2048,"%s",EditQuestInfo[playerid][eqText]);
					    format(str,sizeof(str),"Изменение квеста %d, этап %d",EditQuestInfo[playerid][eqQuest],EditQuestInfo[playerid][eqStage]);
					}
	            }
	            ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Сохранено","Ок","Ок");
				return 1;
	        }
	    }
	}
	return 1;
}
stock UnloadQuests()
{
	foreach(Player,i)
	{
	    if(Quest[i]>=0)
		{
	    	new str[255];
		    DisablePlayerCheckpoint(i);
		    ClearQuestItems(i);
			format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[i]][sqName]);
			Quest[i]=-1;//0-9
			Steep[i]=-1;//0-7
			return ShowPlayerDialog(i,0,DIALOG_STYLE_MSGBOX,str,"Квесты были выгружены, и ваше участие отменено","Ок","Ок");
	    }
	}
    for(new i = 0; i < sizeof(StartQuestInfo); i++)
	{
	    if(StartQuestInfo[i][sqValid])
	    {
	        #if defined CBOTS
	    	DestroyNPC(StartQuestInfo[i][sqNpcID]);
	    	#else
			Kick(StartQuestInfo[i][sqNpcID]);
			#endif
            DestroyDynamic3DTextLabel(StartQuestLabel[i]);
            StartQuestInfo[i][sqValid]=0;
	    	for(new b = 0; b < StartQuestInfo[i][sqSteeps]; b++)
	        {
	            if(MetaQuestInfo[i][b][mqValid])
	            {
	                #if defined CBOTS
	            	DestroyNPC(MetaQuestInfo[i][b][mqNpcID]);
	            	#else
					Kick(MetaQuestInfo[i][b][mqNpcID]);
	            	#endif
	            	DestroyDynamic3DTextLabel(MetaQuestLabel[i][b]);
	            	MetaQuestInfo[i][b][mqValid]=0;
	            }
        	}
        }
    }
	return 1;
}
Это си, или делфи?
Аватара пользователя
Eakwarp
Команда проекта
Сообщения: 7864
Зарегистрирован: 29 июл 2010, 22:46
Репутация: 1998
Ник в игре: Richard_Castle
Контактная информация:

Re: Анонс модификаций

Сообщение Eakwarp »

Amirko писал(а):
Eakwarp писал(а):
test  Ахтунг, 600 строк кода

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

enum squestinfo
{
	sqValid,
	sqStartUserID,
	sqQuestID,
	sqNpcID,
	sqNpcName[MAX_PLAYER_NAME],
	sqNpcSkinID,
	Float:sqNpcX,
	Float:sqNpcY,
	Float:sqNpcZ,
	Float:sqNpcRot,
	sqPrice,
	sqStartItem,// 0/1
	sqStartItemID,
	sqSteeps,
	sqName[64],
	sqText[2048],
	sqAnimUse,
	sqAnimLib[32],
	sqAnimName[32],
	sqRewardItem,
	sqRewardItemID,
	sqUseCheckpoints
}
new StartQuestInfo[8][squestinfo];
new Text3D:StartQuestLabel[sizeof(StartQuestInfo)];

enum metaquestinfo
{
	mqValid,
	mqQuestID,
	mqSteepID,//0-7
	mqNpcID,
	mqNpcName[MAX_PLAYER_NAME],
	mqNpcSkinID,
	Float:mqNpcX,
	Float:mqNpcY,
	Float:mqNpcZ,
	Float:mqNpcRot,
    mqTakeItem,// 0/1
    mqTakeItemID,
   	mqGiveItem,// 0/1
	mqGiveItemID,
	mqEndQuest,// 0/1
	mqText[2048],
	mqAnimUse,
	mqAnimLib[32],
	mqAnimName[32]
}
new MetaQuestInfo[sizeof(StartQuestInfo)][8][metaquestinfo];

new Text3D:MetaQuestLabel[sizeof(StartQuestInfo)][8];

new Quest[MAX_PLAYERS]=-1;//0-9
new Steep[MAX_PLAYERS]=-1;//0-7
stock QuestNPCConnect(p)
{
    new playername[32];
	GetPlayerName(p,playername,32);
    for(new n = 0; n < sizeof(StartQuestInfo); n++)
	{
	    if(StartQuestInfo[n][sqValid])
	    {
			if(!strcmp(StartQuestInfo[n][sqNpcName],playername,true))
			{
				StartQuestInfo[n][sqNpcID]=p;
				return 1;
			}
			for(new i = 0; i < StartQuestInfo[n][sqSteeps]; i++)
			{
			    if(MetaQuestInfo[n][i][mqValid])
			    {
				    if(!strcmp(MetaQuestInfo[n][i][mqNpcName],playername,true))
				    {
						MetaQuestInfo[n][i][mqNpcID]=p;
						return 1;
					}
				}
			}
		}
	}
	return 1;
}

stock QuestNPCSetSpawn(p)
{
    for(new n = 0; n < sizeof(StartQuestInfo); n++)
	{
	    if(StartQuestInfo[n][sqValid])
	    {
	        if(p==StartQuestInfo[n][sqNpcID])
	        {
	        	SetSpawnInfo(StartQuestInfo[n][sqNpcID], 0, StartQuestInfo[n][sqNpcSkinID],StartQuestInfo[n][sqNpcX], StartQuestInfo[n][sqNpcY], StartQuestInfo[n][sqNpcZ], StartQuestInfo[n][sqNpcRot], 0, 0, 0, 0, 0, 0 );
				return 1;
			}
			for(new i = 0; i < StartQuestInfo[n][sqSteeps]; i++)
			{
			    if(MetaQuestInfo[n][i][mqValid])
			    {
			        if(p==MetaQuestInfo[n][i][mqNpcID])
		        	{
                        SetSpawnInfo(MetaQuestInfo[n][i][mqNpcID], 0,  MetaQuestInfo[n][i][mqNpcSkinID], MetaQuestInfo[n][i][mqNpcX], MetaQuestInfo[n][i][mqNpcY], MetaQuestInfo[n][i][mqNpcZ], MetaQuestInfo[n][i][mqNpcRot], 0, 0, 0, 0, 0, 0 );
						return 1;
		        	}
			    }
			}
		}
	}
	return 1;
}
stock LoadRandomQuests()
{
	new str[255];
    samp_mysql_query("SELECT id FROM quest");
	samp_mysql_store_result();
	new quests=samp_mysql_num_rows();
	if(quests==0)
	{
        print("Error, not quest");
		return 1;
	}
	else if(quests<=sizeof(StartQuestInfo))
	{
	    for(new i = 0; i < quests; i++)
		{
		    if(!LoadQuest(i,i))continue;
		    //загрузка данных из бд по указанному иду.
		    StartQuestInfo[i][sqNpcID]=FindValidID();//свободный ид с конца
		    #if defined CBOTS
		    CreateNPC(StartQuestInfo[i][sqNpcID],StartQuestInfo[i][sqNpcName]);
		    SetSpawnInfo(StartQuestInfo[i][sqNpcID], 0, StartQuestInfo[i][sqNpcSkinID],StartQuestInfo[i][sqNpcX], StartQuestInfo[i][sqNpcY], StartQuestInfo[i][sqNpcZ], StartQuestInfo[i][sqNpcRot], 0, 0, 0, 0, 0, 0 );
		    SpawnNPC(StartQuestInfo[i][sqNpcID]);
		    SetNPCFacingAngle(StartQuestInfo[i][sqNpcID], StartQuestInfo[i][sqNpcRot]);
		    SetNPCImpregnable(StartQuestInfo[i][sqNpcID],1);
		    #else
		    ConnectNPC(StartQuestInfo[i][sqNpcName],"stand");
			#endif
		    format(str,sizeof(str),"%s[/say для разговора]",StartQuestInfo[i][sqNpcName]);
			StartQuestLabel[i] = CreateDynamic3DTextLabel(str,COLOR_WHITE,StartQuestInfo[i][sqNpcX], StartQuestInfo[i][sqNpcY], StartQuestInfo[i][sqNpcZ]+1.0,15.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1);
			if(StartQuestInfo[i][sqAnimUse])
		    {
                ApplyAnimation(StartQuestInfo[i][sqNpcID],StartQuestInfo[i][sqAnimLib],StartQuestInfo[i][sqAnimName],4.1,0,0,0,1,0);
		    }
            for(new b = 0; b < StartQuestInfo[i][sqSteeps]; b++)
            {
                if(!LoadSteep(StartQuestInfo[i][sqQuestID],b)) continue;
                MetaQuestInfo[i][b][mqNpcID]=FindValidID();
                #if defined CBOTS
                CreateNPC(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqNpcName]);
                SetSpawnInfo(MetaQuestInfo[i][b][mqNpcID], 0,  MetaQuestInfo[i][b][mqNpcSkinID], MetaQuestInfo[i][b][mqNpcX], MetaQuestInfo[i][b][mqNpcY], MetaQuestInfo[i][b][mqNpcZ], MetaQuestInfo[i][b][mqNpcRot], 0, 0, 0, 0, 0, 0 );
				SpawnNPC(MetaQuestInfo[i][b][mqNpcID]);
				SetNPCImpregnable(MetaQuestInfo[i][b][mqNpcID],1);
				SetNPCFacingAngle(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqNpcRot]);
				#else
		    	ConnectNPC(MetaQuestInfo[i][b][mqNpcName],"stand");
				#endif
                format(str,sizeof(str),"%s[/say для разговора]",MetaQuestInfo[i][b][mqNpcName]);
				MetaQuestLabel[i][b] = CreateDynamic3DTextLabel(str,COLOR_WHITE,MetaQuestInfo[i][b][mqNpcX], MetaQuestInfo[i][b][mqNpcY], MetaQuestInfo[i][b][mqNpcZ]+1.0,15.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1);
				if(MetaQuestInfo[i][b][mqAnimUse])
			    {
	                ApplyAnimation(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqAnimLib],MetaQuestInfo[i][b][mqAnimName],4.1,0,0,0,1,0);
			    }
            }
		}
	}
	else
	{
		for(new i = 0; i < sizeof(StartQuestInfo); i++)
		{
		    new bit1,bit2;
		    new rand;
		    while (bit1==1)
			{
	            bit2=0;
			    rand=random(quests);
	            for(new n = 0; n < i; n++)
				{
				    if(StartQuestInfo[n][sqQuestID]==rand)bit2=1;
				}
				if(bit2==0)bit1=1;
			}
		    if(!LoadQuest(rand,i))continue;
		    //загрузка данных из бд по указанному иду.
		    StartQuestInfo[i][sqNpcID]=FindValidID();//свободный ид с конца
		    #if defined CBOTS
		    CreateNPC(StartQuestInfo[i][sqNpcID],StartQuestInfo[i][sqNpcName]);
		    SetSpawnInfo(StartQuestInfo[i][sqNpcID], 0, StartQuestInfo[i][sqNpcSkinID],StartQuestInfo[i][sqNpcX], StartQuestInfo[i][sqNpcY], StartQuestInfo[i][sqNpcZ], StartQuestInfo[i][sqNpcRot], 0, 0, 0, 0, 0, 0 );
		    SpawnNPC(StartQuestInfo[i][sqNpcID]);
		    SetNPCFacingAngle(StartQuestInfo[i][sqNpcID], StartQuestInfo[i][sqNpcRot]);
		    SetNPCImpregnable(StartQuestInfo[i][sqNpcID],1);
		    #else
		    ConnectNPC(StartQuestInfo[i][sqNpcName],"stand");
		    #endif
		    format(str,sizeof(str),"%s[/say для разговора]",StartQuestInfo[i][sqNpcName]);
			StartQuestLabel[i] = CreateDynamic3DTextLabel(str,COLOR_WHITE,StartQuestInfo[i][sqNpcX], StartQuestInfo[i][sqNpcY], StartQuestInfo[i][sqNpcZ]+1.0,15.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1);
			if(StartQuestInfo[i][sqAnimUse])
		    {
                ApplyAnimation(StartQuestInfo[i][sqNpcID],StartQuestInfo[i][sqAnimLib],StartQuestInfo[i][sqAnimName],4.1,0,0,0,1,0);
		    }
			for(new b = 0; b < StartQuestInfo[i][sqSteeps]; b++)
            {
                if(!LoadSteep(StartQuestInfo[i][sqQuestID],b)) continue;
                MetaQuestInfo[i][b][mqNpcID]=FindValidID();
                #if defined CBOTS
                CreateNPC(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqNpcName]);
                SetSpawnInfo(MetaQuestInfo[i][b][mqNpcID], 0,  MetaQuestInfo[i][b][mqNpcSkinID], MetaQuestInfo[i][b][mqNpcX], MetaQuestInfo[i][b][mqNpcY], MetaQuestInfo[i][b][mqNpcZ], MetaQuestInfo[i][b][mqNpcRot], 0, 0, 0, 0, 0, 0 );
				SpawnNPC(MetaQuestInfo[i][b][mqNpcID]);
				SetNPCFacingAngle(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqNpcRot]);
				SetNPCImpregnable(MetaQuestInfo[i][b][mqNpcID],1);
				#else
		    	ConnectNPC(MetaQuestInfo[i][b][mqNpcName],"stand");
				#endif
                format(str,sizeof(str),"%s[/say для разговора]",MetaQuestInfo[i][b][mqNpcName]);
				MetaQuestLabel[i][b] = CreateDynamic3DTextLabel(str,COLOR_WHITE,MetaQuestInfo[i][b][mqNpcX], MetaQuestInfo[i][b][mqNpcY], MetaQuestInfo[i][b][mqNpcZ]+1.0,15.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1);
				if(MetaQuestInfo[i][b][mqAnimUse])
			    {
	                ApplyAnimation(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqAnimLib],MetaQuestInfo[i][b][mqAnimName],4.1,0,0,0,1,0);
			    }
            }
		}
	}
	return 1;
}

stock LoadQuest(qid,idto)
{
	new query[255],Field[2048];
    format(query, sizeof(query), "SELECT * FROM quest WHERE id = %d LIMIT 1", qid);
	samp_mysql_query(query);
	samp_mysql_store_result();
	if(samp_mysql_num_rows() != 0)
	{
		samp_mysql_fetch_result();
	//	samp_mysql_fetch_next(Field);
		new rcnt=0;
		StartQuestInfo[idto][sqValid]=1;
		StartQuestInfo[idto][sqQuestID]=qid;
		while (samp_mysql_fetch_next(Field)==1)
		{
		    switch(rcnt)
		    {
		        case 1: strmid(StartQuestInfo[idto][sqNpcName], Field, 0, strlen(Field), 255);
		        case 2: StartQuestInfo[idto][sqNpcSkinID] = strval(Field);
				case 3: StartQuestInfo[idto][sqNpcX] = floatstr(Field);
				case 4: StartQuestInfo[idto][sqNpcY] = floatstr(Field);
				case 5: StartQuestInfo[idto][sqNpcZ] = floatstr(Field);
				case 6: StartQuestInfo[idto][sqNpcRot] = floatstr(Field);
				case 7: strmid(StartQuestInfo[idto][sqName], Field, 0, strlen(Field), 255);
				case 8: strmid(StartQuestInfo[idto][sqText], Field, 0, strlen(Field), 2048);
				case 9: StartQuestInfo[idto][sqPrice] = strval(Field);
				case 10: StartQuestInfo[idto][sqStartItem] = strval(Field);
				case 11: StartQuestInfo[idto][sqStartItemID] = strval(Field);
				case 12: StartQuestInfo[idto][sqSteeps] = strval(Field);
				case 13: StartQuestInfo[idto][sqAnimUse] = strval(Field);
				case 14: strmid(StartQuestInfo[idto][sqAnimLib], Field, 0, strlen(Field), 255);
				case 15: strmid(StartQuestInfo[idto][sqAnimName], Field, 0, strlen(Field), 255);
				case 16: StartQuestInfo[idto][sqRewardItem] = strval(Field);
				case 17: StartQuestInfo[idto][sqRewardItemID] = strval(Field);
				case 18: StartQuestInfo[idto][sqUseCheckpoints] = strval(Field);
			}
			rcnt++;
		}
		return 1;
	}
	printf("Error, quest %d - not loaded",qid);
	return 0;
}

stock LoadSteep(questid,steep)
{
	new query[255],Field[2048];
    format(query, sizeof(query), "SELECT * FROM questmeta WHERE QuestID=%d AND SteepID=%d LIMIT 1", questid,steep);
	samp_mysql_query(query);
	samp_mysql_store_result();
	if(samp_mysql_num_rows() != 0)
	{
		samp_mysql_fetch_result();
	//	samp_mysql_fetch_next(Field);
		new rcnt=0;
        MetaQuestInfo[questid][steep][mqValid]=1;
		while (samp_mysql_fetch_next(Field)==1)
		{
		    switch(rcnt)
		    {
		        case 1: MetaQuestInfo[questid][steep][mqQuestID]= strval(Field);
		        case 2: MetaQuestInfo[questid][steep][mqSteepID]= strval(Field);
		        case 3: strmid(MetaQuestInfo[questid][steep][mqNpcName], Field, 0, strlen(Field), 255);
		        case 4: MetaQuestInfo[questid][steep][mqNpcSkinID] = strval(Field);
		        case 5: MetaQuestInfo[questid][steep][mqNpcX] = floatstr(Field);
				case 6: MetaQuestInfo[questid][steep][mqNpcY] = floatstr(Field);
				case 7: MetaQuestInfo[questid][steep][mqNpcZ] = floatstr(Field);
				case 8: MetaQuestInfo[questid][steep][mqNpcRot] = floatstr(Field);
				case 9: MetaQuestInfo[questid][steep][mqTakeItem]= strval(Field);
				case 10: MetaQuestInfo[questid][steep][mqTakeItemID]= strval(Field);
				case 11:MetaQuestInfo[questid][steep][mqGiveItem]= strval(Field);
				case 12:MetaQuestInfo[questid][steep][mqGiveItemID]= strval(Field);
				case 13:MetaQuestInfo[questid][steep][mqEndQuest]= strval(Field);
				case 14:strmid(MetaQuestInfo[questid][steep][mqText], Field, 0, strlen(Field), 2048);
				case 15: MetaQuestInfo[questid][steep][mqAnimUse] = strval(Field);
				case 16: strmid(MetaQuestInfo[questid][steep][mqAnimLib], Field, 0, strlen(Field), 255);
				case 17: strmid(MetaQuestInfo[questid][steep][mqAnimName], Field, 0, strlen(Field), 255);
				
			}
			rcnt++;
		}
		return 1;
	}
	printf("Error, steep %d for quest %d - not loaded",steep,questid);
	return 0;
}

stock SayToQuestPlayer(playerid)
{
    for(new i = 0; i < sizeof(StartQuestInfo); i++)
	{
		if(IsPlayerInRangeOfPoint(playerid,3.0,StartQuestInfo[i][sqNpcX], StartQuestInfo[i][sqNpcY], StartQuestInfo[i][sqNpcZ]))
		{
		    if(Quest[playerid]==-1)//начать квест
			{
			    new query[255];
			    format(query,sizeof(query),"SELECT id FROM questcomplete WHERE Name='%s' AND QuestID=%d",oGetPlayerName(playerid),StartQuestInfo[i][sqQuestID]);
				samp_mysql_query(query);
				samp_mysql_store_result();
				new str[255];
				format(str,sizeof(str),"Квест: %s",StartQuestInfo[i][sqName]);
				if(samp_mysql_num_rows() != 0)
				{
				    return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Прости, у меня для тебя ничего нет","Ок","Ок");
				}
				if(IsACop(playerid))return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Прости, у меня для тебя ничего нет","Ок","Ок");
				Quest[playerid]=i;
			    ShowPlayerDialog(playerid,199,DIALOG_STYLE_MSGBOX,str,StartQuestInfo[i][sqText],"Взять","Не взять");
			    return 1;
		    }
		    else
		    {
		        new str[255];
				format(str,sizeof(str),"Квест: %s",StartQuestInfo[i][sqName]);
		        return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Прости, у меня для тебя ничего нет","Ок","Ок");
		    }
		}
		for(new b = 0; b < StartQuestInfo[i][sqSteeps]; b++)
		{
		    if(IsPlayerInRangeOfPoint(playerid,3.0,MetaQuestInfo[i][b][mqNpcX], MetaQuestInfo[i][b][mqNpcY], MetaQuestInfo[i][b][mqNpcZ]))
			{
			    if(Quest[playerid]!=i)
			    {
    				new str[255];
					format(str,sizeof(str),"Квест: %s",StartQuestInfo[i][sqName]);
			        return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Прости, у меня для тебя ничего нет","Ок","Ок");
			    }
			    if(Steep[playerid]==b)
			    {
					if(MetaQuestInfo[i][b][mqTakeItem])
					{
						if(FindItem(playerid,MetaQuestInfo[i][b][mqTakeItemID])) DeleteOneItem(playerid,MetaQuestInfo[i][b][mqTakeItemID]);
						else EndQuest(playerid,0);
					}
					new str[255];
					format(str,sizeof(str),"Квест: %s",StartQuestInfo[i][sqName]);
				    ShowPlayerDialog(playerid,200,DIALOG_STYLE_MSGBOX,str,MetaQuestInfo[i][b][mqText],"Ок","Ок");
				    return 1;
			    }
			    else
			    {
			        new str[255];
					format(str,sizeof(str),"Квест: %s",StartQuestInfo[i][sqName]);
					return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Прости, у меня для тебя ничего нет","Ок","Ок");
			    }
		    }
		}
	}
	return 1;
}
stock QuestDialogResponse(playerid, dialogid, response)
{
	switch(dialogid)
	{
	    case 199:
	    {
			if(response)
			{
			    if(StartQuestInfo[Quest[playerid]][sqStartItem])
				{
				    if(!SetItem(playerid,StartQuestInfo[Quest[playerid]][sqStartItemID],1))
					{
					    new str[255];
						format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
						Quest[playerid]=-1;
						Steep[playerid]=-1;
					    return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Вы не сможете унести это, уберите что нибуть из своих вещей и подойдите ко мне снова.","OK","OK");
					}
			    }
			    Steep[playerid]=0;
			    new str[255];
				format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
				if(StartQuestInfo[Quest[playerid]][sqUseCheckpoints])
				{
					SetPlayerCheckpoint(playerid,MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcX], MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcY], MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcZ],4.0);
				    return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"На вашем радаре отображен чекпоинт с указанным NPC.","OK","OK");
			    }
			    return 1;
			}
			else
			{
			    Quest[playerid]=-1;
			}
	    }
		case 200:
		{
		    if(MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqGiveItem])
			{
			    if(!SetItem(playerid,MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqGiveItemID],1))
				{
				    new str[255];
					format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
				    return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Вы не сможете унести это, уберите что нибуть из своих вещей и подойдите ко мне снова.","OK","OK");
				}
		    }
			if(MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqEndQuest]) return EndQuest(playerid, 1);
			new str[255];
			format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
			Steep[playerid]++;
			if(StartQuestInfo[Quest[playerid]][sqUseCheckpoints])
			{
				SetPlayerCheckpoint(playerid,MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcX], MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcY], MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcZ],4.0);
			    return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"На вашем радаре отображен чекпоинт с указанным NPC.","OK","OK");
		    }
		    return 1;
		}
	}
	return 1;
}
stock EndQuest(playerid, type)
{
	switch(type)
	{
		case 0://провал
		{
		    new str[255];
		    DisablePlayerCheckpoint(playerid);
		    ClearQuestItems(playerid);
			format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
			Quest[playerid]=-1;//0-9
			Steep[playerid]=-1;//0-7
			return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Вы провалили квест","Ок","Ок");
		}
		case 1://выигрыш
		{
		    new str[255];
			format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
		    if(StartQuestInfo[Quest[playerid]][sqRewardItem])
		    {
		        if(!SetItem(playerid,StartQuestInfo[Quest[playerid]][sqRewardItemID],1))
		        {
		            return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Вы не сможете унести это, уберите что нибуть из своих вещей и подойдите ко мне снова.","OK","OK");
				}
		    }
			new str1[255];
			format(str1,sizeof(str1),"Вы прошли квест, награда %d",StartQuestInfo[Quest[playerid]][sqPrice]);
			new reason[255];
			format(reason,sizeof(reason),"Прошел квест %s",StartQuestInfo[Quest[playerid]][sqName]);
			DisablePlayerCheckpoint(playerid);
            TransferMoney(0,0,playerid,1,StartQuestInfo[Quest[playerid]][sqPrice],reason);
            new query[255];
            format(query,sizeof(query),"INSERT INTO questcomplete SET Name='%s', QuestID=%d",oGetPlayerName(playerid),StartQuestInfo[Quest[playerid]][sqQuestID]);
			samp_mysql_query(query);
            Quest[playerid]=-1;//0-9
			Steep[playerid]=-1;//0-7
			ClearQuestItems(playerid);
			return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,str1,"Ок","Ок");
		}
	}
	return 1;
}
stock QuestPlayerConnect(playerid)
{
    Quest[playerid]=-1;//0-9
	Steep[playerid]=-1;//0-7
	return 1;
}
stock QuestPlayerDisconnect(playerid)
{
    Quest[playerid]=-1;//0-9
	Steep[playerid]=-1;//0-7
	return 1;
}
enum equestinfo
{
	eqType,
	eqStage,
	eqQuest,
    eqText[2048]
};
new EditQuestInfo[MAX_PLAYERS][equestinfo];
stock StartEditTextForQuest(playerid)
{
    for(new n = 0; n < sizeof(StartQuestInfo); n++)
	{
		if(IsPlayerInRangeOfPoint(playerid,3.0,StartQuestInfo[n][sqNpcX], StartQuestInfo[n][sqNpcY], StartQuestInfo[n][sqNpcZ]))
		{
			new str[255];
			format(str,sizeof(str),"Изменение квеста %d, вы сейчас на старте, введите название:",n);
			format(EditQuestInfo[playerid][eqText],2048," ");
			EditQuestInfo[playerid][eqType]=-1;
			EditQuestInfo[playerid][eqQuest]=n;
			ShowPlayerDialog(playerid,221,DIALOG_STYLE_INPUT,str,EditQuestInfo[playerid][eqText],"Добавить строку","Конец");
			return 1;
		}
		for(new i = 0; i < StartQuestInfo[n][sqSteeps]; i++)
		{
		    if(IsPlayerInRangeOfPoint(playerid,3.0,MetaQuestInfo[n][i][mqNpcX], MetaQuestInfo[n][i][mqNpcY], MetaQuestInfo[n][i][mqNpcZ]))
			{
                EditQuestInfo[playerid][eqType]=1;
                EditQuestInfo[playerid][eqQuest]=n;
                EditQuestInfo[playerid][eqStage]=i;
                new str[255];
				format(str,sizeof(str),"Изменение квеста %d, этап %d",n,i);
				format(EditQuestInfo[playerid][eqText],2048," ");
				ShowPlayerDialog(playerid,221,DIALOG_STYLE_INPUT,str,EditQuestInfo[playerid][eqText],"Добавить строку","Конец");
				return 1;
			}
		}
	}
	return 0;
}
stock EditQuestDialogResponse(playerid, dialogid, response, inputtext[])
{
	switch(dialogid)
	{
	    case 221:
	    {
	        if(response)
	        {
	            new str[255];
	            switch(EditQuestInfo[playerid][eqType])
	            {
					case -1:
					{
						new query[255];
					    format(query,sizeof(query),"UPDATE quest SET Name=' %s' WHERE id=%d",inputtext,StartQuestInfo[EditQuestInfo[playerid][eqQuest]][sqQuestID]);
					    samp_mysql_query(query);
					    format(StartQuestInfo[EditQuestInfo[playerid][eqQuest]][sqName],64,"%s",inputtext);
						format(str,sizeof(str),"Изменение квеста %d, текст квеста:",EditQuestInfo[playerid][eqQuest]);
						format(EditQuestInfo[playerid][eqText],2048," ");
						EditQuestInfo[playerid][eqType]=0;
						ShowPlayerDialog(playerid,221,DIALOG_STYLE_INPUT,str,EditQuestInfo[playerid][eqText],"Добавить строку","Конец");
						return 1;
					}
	                case 0:format(str,sizeof(str),"Изменение квеста %d",EditQuestInfo[playerid][eqQuest]);
					case 1:format(str,sizeof(str),"Изменение квеста %d, этап %d",EditQuestInfo[playerid][eqQuest],EditQuestInfo[playerid][eqStage]);
	            }
				format(EditQuestInfo[playerid][eqText],2048," %s\n%s",EditQuestInfo[playerid][eqText],inputtext);
				ShowPlayerDialog(playerid,221,DIALOG_STYLE_INPUT,str,EditQuestInfo[playerid][eqText],"Добавить строку","Конец");
	        }
	        else
	        {
	            new str[255];
	            new query[2048];
	            switch(EditQuestInfo[playerid][eqType])
	            {
	                case 0:
					{
					    format(query,sizeof(query),"UPDATE quest SET QuestText='%s' WHERE id=%d",EditQuestInfo[playerid][eqText],StartQuestInfo[EditQuestInfo[playerid][eqQuest]][sqQuestID]);
					    samp_mysql_query(query);
					    format(StartQuestInfo[EditQuestInfo[playerid][eqQuest]][sqText],2048,"%s",EditQuestInfo[playerid][eqText]);
					   	format(str,sizeof(str),"Изменение квеста %d",EditQuestInfo[playerid][eqQuest]);
					}
					case 1:
					{
					    format(query,sizeof(query),"UPDATE questmeta SET QuestText='%s' WHERE QuestID=%d AND SteepID=%d",EditQuestInfo[playerid][eqText],MetaQuestInfo[EditQuestInfo[playerid][eqQuest]][EditQuestInfo[playerid][eqStage]][mqQuestID],MetaQuestInfo[EditQuestInfo[playerid][eqQuest]][EditQuestInfo[playerid][eqStage]][mqSteepID]);
					    samp_mysql_query(query);
					    format(MetaQuestInfo[EditQuestInfo[playerid][eqQuest]][EditQuestInfo[playerid][eqStage]][mqText],2048,"%s",EditQuestInfo[playerid][eqText]);
					    format(str,sizeof(str),"Изменение квеста %d, этап %d",EditQuestInfo[playerid][eqQuest],EditQuestInfo[playerid][eqStage]);
					}
	            }
	            ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Сохранено","Ок","Ок");
				return 1;
	        }
	    }
	}
	return 1;
}
stock UnloadQuests()
{
	foreach(Player,i)
	{
	    if(Quest[i]>=0)
		{
	    	new str[255];
		    DisablePlayerCheckpoint(i);
		    ClearQuestItems(i);
			format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[i]][sqName]);
			Quest[i]=-1;//0-9
			Steep[i]=-1;//0-7
			return ShowPlayerDialog(i,0,DIALOG_STYLE_MSGBOX,str,"Квесты были выгружены, и ваше участие отменено","Ок","Ок");
	    }
	}
    for(new i = 0; i < sizeof(StartQuestInfo); i++)
	{
	    if(StartQuestInfo[i][sqValid])
	    {
	        #if defined CBOTS
	    	DestroyNPC(StartQuestInfo[i][sqNpcID]);
	    	#else
			Kick(StartQuestInfo[i][sqNpcID]);
			#endif
            DestroyDynamic3DTextLabel(StartQuestLabel[i]);
            StartQuestInfo[i][sqValid]=0;
	    	for(new b = 0; b < StartQuestInfo[i][sqSteeps]; b++)
	        {
	            if(MetaQuestInfo[i][b][mqValid])
	            {
	                #if defined CBOTS
	            	DestroyNPC(MetaQuestInfo[i][b][mqNpcID]);
	            	#else
					Kick(MetaQuestInfo[i][b][mqNpcID]);
	            	#endif
	            	DestroyDynamic3DTextLabel(MetaQuestLabel[i][b]);
	            	MetaQuestInfo[i][b][mqValid]=0;
	            }
        	}
        }
    }
	return 1;
}
Это си, или делфи?
http://ru.wikipedia.org/wiki/Pawn
test  Персонажи
Ричард Касл - богатый, престарелый холостяк, как следствие ведет довольно развязный образ жизни. Полиции известен как президент галактики крутотень.
Кейв Джонсон - политик, демократ, глава правительства штата Сан Андреас. Прислан в штат Вашингтоном. Из биографии известна его деятельность в Вирджинии и Юте. Несколько раз помогал Сан Андреас в критических политических ситуациях. В юности проживал в Техасе.
test  Важно к прочтению
Заявки на регистрацию проверяю сугубо в порядке общей очереди и по мере наличия на них свободного времени, убедительная просьба, не просить меня проверить вашу заявку.

Игровой уровень - ООС единица, какие к черту "лет в штате"? Одумайтесь.

Давайте, все уже окончательно уяснят, что Лос Сантос - это Лос Сантос, не Лос Анджелес, не Нью-Йорк (как думают "особо одаренные"), а Лос Сантос, выдуманный город. Туризмо - это туризмо, не феррари, не ваз 2106 и не та "ваша любимая машина", мод которой вы поставили взамен туризмо. У нас самобытный игровой мир, который зачастую бывает как крайне близок к реальности, так и в равной степени и крайне от нее далек.

Научитесь играть РП исходя из ООС ограничений, а не пытайтесь обойти ООС ограничения, аргументируя это своим РП. Направляя свой отыгрыш на пересечение этих рамок, вы будете лишь вызывать конфликты как с другими игроками, так и с администрацией.

Q: Никто не играет со мной больших РП, бытовуху играть не умею/ни хочу/не буду, ЧТО ДЕЛАТЬ?!?
A: Поставьте IC цель своему персонажу и ищите IC пути для ее достижения.
Вопреки распространенному мнению, я ненавижу банить людей.

С вами очень сложно.

Конвертирую плюсики в модификации.
Amirko

Re: Анонс модификаций

Сообщение Amirko »

Eakwarp писал(а): http://ru.wikipedia.org/wiki/Pawn
Жаль, ибо здесь не имею абсолютно никакого опыта..
Могу попробовать, конечно же, но едва ли мне хватит месяца, чтобы овладеть достаточными навыками.
Аватара пользователя
Хлебушек
Гуру
Сообщения: 1067
Зарегистрирован: 02 июл 2012, 20:32
Репутация: 30
Ник в игре: 0

Re: Анонс модификаций

Сообщение Хлебушек »

Amirko писал(а):
Eakwarp писал(а): http://ru.wikipedia.org/wiki/Pawn
Жаль, ибо здесь не имею абсолютно никакого опыта..
Могу попробовать, конечно же, но едва ли мне хватит месяца, чтобы овладеть достаточными навыками.
Эх, почему же самп не на lua. Хотя чтоб на нем нормально писать, нужно знать c++.
Изображение
Сри под себя, но рп доигрывай (с) FLCL
Аватара пользователя
Deform
Участник
Сообщения: 18
Зарегистрирован: 30 июл 2010, 12:00
Репутация: 0

Re: Анонс модификаций

Сообщение Deform »

Банданы, очки, часы и прочие безделушки будут?
Аватара пользователя
Eakwarp
Команда проекта
Сообщения: 7864
Зарегистрирован: 29 июл 2010, 22:46
Репутация: 1998
Ник в игре: Richard_Castle
Контактная информация:

Re: Анонс модификаций

Сообщение Eakwarp »

Deform писал(а):Банданы, очки, часы и прочие безделушки будут?
С новым инвентарем, будет гораздо больше.
test  Персонажи
Ричард Касл - богатый, престарелый холостяк, как следствие ведет довольно развязный образ жизни. Полиции известен как президент галактики крутотень.
Кейв Джонсон - политик, демократ, глава правительства штата Сан Андреас. Прислан в штат Вашингтоном. Из биографии известна его деятельность в Вирджинии и Юте. Несколько раз помогал Сан Андреас в критических политических ситуациях. В юности проживал в Техасе.
test  Важно к прочтению
Заявки на регистрацию проверяю сугубо в порядке общей очереди и по мере наличия на них свободного времени, убедительная просьба, не просить меня проверить вашу заявку.

Игровой уровень - ООС единица, какие к черту "лет в штате"? Одумайтесь.

Давайте, все уже окончательно уяснят, что Лос Сантос - это Лос Сантос, не Лос Анджелес, не Нью-Йорк (как думают "особо одаренные"), а Лос Сантос, выдуманный город. Туризмо - это туризмо, не феррари, не ваз 2106 и не та "ваша любимая машина", мод которой вы поставили взамен туризмо. У нас самобытный игровой мир, который зачастую бывает как крайне близок к реальности, так и в равной степени и крайне от нее далек.

Научитесь играть РП исходя из ООС ограничений, а не пытайтесь обойти ООС ограничения, аргументируя это своим РП. Направляя свой отыгрыш на пересечение этих рамок, вы будете лишь вызывать конфликты как с другими игроками, так и с администрацией.

Q: Никто не играет со мной больших РП, бытовуху играть не умею/ни хочу/не буду, ЧТО ДЕЛАТЬ?!?
A: Поставьте IC цель своему персонажу и ищите IC пути для ее достижения.
Вопреки распространенному мнению, я ненавижу банить людей.

С вами очень сложно.

Конвертирую плюсики в модификации.
Аватара пользователя
Oliver
Команда проекта
Сообщения: 3843
Зарегистрирован: 25 мар 2012, 16:33
Репутация: 464
Ник в игре: Frank Lawson

Re: Анонс модификаций

Сообщение Oliver »

Думаю, это планируется, но хотелось бы с новым инвентарем возможность выбросить предмет, и разместить его аналогичным образом, как сейчас админская установка объектов работает, и конусы. Помимо мебели можно было бы неплохо украсить дом. Дробовик на стену повесить, например, хотелось бы)
Аватара пользователя
Deform
Участник
Сообщения: 18
Зарегистрирован: 30 июл 2010, 12:00
Репутация: 0

Re: Анонс модификаций

Сообщение Deform »

Oliver писал(а):Думаю, это планируется, но хотелось бы с новым инвентарем возможность выбросить предмет, и разместить его аналогичным образом, как сейчас админская установка объектов работает, и конусы. Помимо мебели можно было бы неплохо украсить дом. Дробовик на стену повесить, например, хотелось бы)
Полностью соглашусь. Сам хотел предложить это, но ты опередил. Было очень реалистично, если бы была такая возможность. Ну или хотя бы просто выкидывать предмет, и он лежал на земле.
Аватара пользователя
Oliver
Команда проекта
Сообщения: 3843
Зарегистрирован: 25 мар 2012, 16:33
Репутация: 464
Ник в игре: Frank Lawson

Re: Анонс модификаций

Сообщение Oliver »

Причем без всяких надписей над ним и автоподбора. Можно было бы отыгрывать РП с тайниками и т.д.
И да. Я также думаю, что планируется. Переносные инвентари, ящики, коробки. Которые тоже можно размещать. Закопать где нибудь ящик с оружием, в лесу)
Аватара пользователя
Ribelanto
Писатель
Сообщения: 957
Зарегистрирован: 09 авг 2010, 13:01
Репутация: -9
Ник в игре: Enzo
Откуда: Оттуда.

Re: Анонс модификаций

Сообщение Ribelanto »

Варп, а когда, примерно, можно будет "коробки" мебелью и прочей ерундой обставлять? Приблизительно.
А то купил дом, купил туда диван и дверь, поставил и не вижу их, и двигать не могу. /edithouseitem не реагирует вообще.
И вот если я всё это купил и поставил, то останутся ли они когда будет возможность передвигать и видеть?
Ответить

Вернуться в «Разработка»