Вернуться   Форум команды Magic Team > Создание модов > Модостроение к Gothic

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

Модостроение к Gothic Как делаются моды к Готике...

Ответ
 
Опции темы Опции просмотра
Старый 05.09.2008, 15:22   #151
Администратор
Мастер
 
Аватар для redleha
 
Регистрация: 28.02.2008
Адрес: г.Новокуйбышевск Самарская обл.
Сообщений: 1,458
Сказал(а) спасибо: 544
Поблагодарили 419 раз(а) в 183 сообщениях
По умолчанию Скриптинг

Marvin, спасибо.
ОБращение-просьба к скриптологам:
Не могли бы вы сделать тутор на примере подробного разбора нескольких скриптов неписей: например Лареса!, Ватраса, Хагена, Пирокара.
Если нет, то не надо. Просто просьба.
----------------------------------------------------
P.S. Я разобрался самостоятельно со скриптом Константино. Просто данные неписи наиболее объемные.
__________________
redleha вне форума   Ответить с цитированием
Старый 05.09.2008, 15:40   #152
Готоман
Пользователь
 
Аватар для Marvin
 
Регистрация: 13.02.2008
Адрес: Ukraine
Сообщений: 96
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
По умолчанию Скриптинг

redleha
Немного не понятно, именно скрипта НПС, или всех скриптов (диалогов, если торговец), которые относятся к даному НПС.
__________________
Никогда не делай сегодня то, что можно сделать завтра. А то завтра будет нечего делать. © ???
Marvin вне форума   Ответить с цитированием
Старый 05.09.2008, 16:09   #153
Администратор
Мастер
 
Аватар для redleha
 
Регистрация: 28.02.2008
Адрес: г.Новокуйбышевск Самарская обл.
Сообщений: 1,458
Сказал(а) спасибо: 544
Поблагодарили 419 раз(а) в 183 сообщениях
По умолчанию Скриптинг

Именно файлы dia_vlk_439_vatras.d , dia_kdf_500_pyrokar.d и т.д. Скрипты, описывающие НПС не надо, они понятны.
__________________
redleha вне форума   Ответить с цитированием
Старый 05.09.2008, 16:20   #154
Готоман
Пользователь
 
Аватар для Marvin
 
Регистрация: 13.02.2008
Адрес: Ukraine
Сообщений: 96
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
По умолчанию Скриптинг

То есть я так понимаю ты хочешь чтобы в этих скриптах откомментировать каждую функцию, что она означает и что к чему?
__________________
Никогда не делай сегодня то, что можно сделать завтра. А то завтра будет нечего делать. © ???
Marvin вне форума   Ответить с цитированием
Старый 05.09.2008, 19:11   #155
Администратор
Мастер
 
Аватар для redleha
 
Регистрация: 28.02.2008
Адрес: г.Новокуйбышевск Самарская обл.
Сообщений: 1,458
Сказал(а) спасибо: 544
Поблагодарили 419 раз(а) в 183 сообщениях
По умолчанию Скриптинг

Ну да, так в целом именно эти неписи самые объёмные и наиболее содержательные. Просто прокомментировать в скриптах почти все строки квестов. И функции...Если есть варианты других неписей, то я просто за!
__________________
redleha вне форума   Ответить с цитированием
Старый 08.09.2008, 15:47   #156
Готоман
Ученик
 
Аватар для Beckham
 
Регистрация: 09.11.2006
Адрес: Днепропетровск
Сообщений: 189
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию Скриптинг

redleha

Ну не знаю, вспоминая про объемы приведенных тобой файлов, нет в твоей просьбе смысла. Тебе что конкретно не ясно?
Сама структура диалога или тебе нужно разъяснить элементарные основы любого языка программирования (условные операторы, логические выр-я и т.п.) ? Правильно тебе писали, читай тутор ВАМ-а, там есть ответы на многое (хотя я лично когда разбирался в скриптах, его и не открывал, там ведь в скриптах ниче этакого нет, элементарный язык).
Кстати, писать комент на каждую строку кода тебе тоже не поможет, там в тех квестах куча глобальных переменных, хранящихся в др. файлах, не подробно же все это расписывать.
Лучше всего открой файл диалога поменьше какого-нить немногословного НПС с маленьким побочным квестом, почитай, повникай, это лучше всего будет, если надо разобраться с основами написания квестов.
Beckham вне форума   Ответить с цитированием
Старый 10.09.2008, 03:44   #157
Готоман
Пользователь
 
Аватар для Marvin
 
Регистрация: 13.02.2008
Адрес: Ukraine
Сообщений: 96
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
По умолчанию Скриптинг

redleha
Вот собственно по поводу скриптинга и описания. Вот скрипт я его одному человеку на WOG'e приводил в роли примера, полностью откомментирован, можешь посмотреть может что-то полезное для себя возьмешь.

Код:
/* Условие выхода с диалога*/
instance DIA_MyPers_Fox_EXIT(C_Info)
{
	npc = NONE_66613_Fox;
	nr = 999;
	condition = DIA_MyPers_Fox_EXIT_Condition;
	information = DIA_MyPers_Fox_EXIT_Info;
	permanent = FALSE;
	description = Dialog_Ende;
};


func int DIA_MyPers_Fox_EXIT_Condition()
{	
	return TRUE;	
};

func void DIA_MyPers_Fox_EXIT_Info()
{
	AI_StopProcessInfos(self);
};


/* Теперь диалог ну и квест заодно*/
instance DIA_MyPers_Fox(C_Info)
{
	npc = NONE_66613_Fox;
	nr = 1;
	condition = DIA_MyPers_Fox_Condition;
	information = DIA_MyPers_Fox_Info;
	permanent = FALSE;
	important = TRUE; * /* НПС сам обратится к ГГ*/
};


/* Ниже идет функция условия, то есть в каком случае произойдет диалог.
 * Диалог произойдет только в том случае если глава еще не третяя, и ГГ в 
 * гильдии Наёмников или без гильдии*/
func int DIA_MyPers_Fox_Condition()
{
	if(((hero.guild == GIL_NONE) || (hero.guild == GIL_SLD)) &amp;&amp; (Kapitel < 3)) 
	{
 *return TRUE;
	};
};

/* Теперь, собственно, начинается сам диалог!*/
func void DIA_MyPers_Fox_Info()
{
	/* Так теперь проверяем в какой гильдии наш ГГ.*/
	/* Если ГГ без гильдии*/
	if (hero.guild == GIL_NONE)
	{
 *AI_Output(self,other,"DIA_MyPers_Fox_pers_00");	//Стой!!! Ага дворняга...Слушай у меня есть для тебя предложение!.
 *AI_Output(other,self,"DIA_MyPers_Fox_gg_01"); * //(громко) ...я не дворняга!
 *AI_Output(self,other,"DIA_MyPers_Fox_pers_02"); *//Заткнись и слушай, судя по твоей одежке, тебе не помешают лишние копейки!
 *AI_Output(self,other,"DIA_MyPers_Fox_pers_03");	//Так вот, у меня сейчас нет времени, сходи и принеси мне пива, кусок хлеба и окорок.
 *AI_Output(self,other,"DIA_MyPers_Fox_pers_04");	//Я тебе за это заплачу, только побыстрее, а то я умираю с голода!
	}
	
	/* Если ГГ Наёмник, то произойдет вот этот диалог!*/
	else if (hero.guild == GIL_SLD)
	{
 *AI_Output(self,other,"DIA_MyPers_Fox_pers_05");	//О...стой, ты Наёмник, да? Послушай хочешь заработать, а? У меня есть для тебя работенка по плечу.
 *AI_Output(other,self,"DIA_MyPers_Fox_gg_02");	//Я слушаю!
 *AI_Output(self,other,"DIA_MyPers_Fox_pers_06");	//Есть один человек, который мне мешает, разберись с ним и я тебе хорошо заплачу!
	};
	
	/* Теперь я думаю будет уместно дать право ГГ выбирать, что собственно сейчас и сделаю*/
	Info_ClearChoices(DIA_MyPers_Fox);
	Info_AddChoice(DIA_MyPers_Fox,"Хорошо я сделаю это с удовольствием!",DIA_MyPers_Fox_OK);
	Info_AddChoice(DIA_MyPers_Fox,"Ты вообще кто такой проваливай, нечего мне делать больше...",DIA_MyPers_Fox_FUCKOFF);
	Info_AddChoice(DIA_MyPers_Fox,"Нет, я спешу!",DIA_MyPers_Fox_NO);
};

/* Теперь пишем что собственно произойдет когда ГГ выберет один из вариантов ответа*/
/* Если ГГ согласился, то есть первый вариант*/
func void DIA_MyPers_Fox_OK()
{
	/* Снова делаем проверку на принадлежность к гильдии*/
	if (hero.guild == GIL_NONE)
	{
 *AI_Output(other,self,"DIA_MyPers_Fox_OK_gg_00");	//Хорошо,я принесу тебе все что ты хочешь.
 *AI_Output(self,other,"DIA_MyPers_Fox_OK_pers_01"); //Давай - давай, только побыстрей!
 *
 */* Теперь открываем новую миссию и записываем все в дневник!*/
 *Find_Food = LOG_Running; * * * * * * * * * * * * * /*Find_Food надо будет прописать в файл Story_Globals.d в таком виде - var int Find_Food; **/
 *Log_CreateTopic(TOPIC_Food,LOG_MISSION); *
 *Log_SetTopicStatus(TOPIC_Food,LOG_Running);
 *B_LogEntry(TOPIC_Food,"Я должен принести Фоксу один кусок хлеба, один кусок окорока и пляшку пива!");/* То что будет написано в дневнике.*/
 */*Выходим с диалога*/
 *AI_StopProcessInfos(self);
	}
	/* Если ГГ Наёмник тогда этот диалог*/
	else if (hero.guild == GIL_SLD)
	{
 *AI_Output(other,self,"DIA_MyPers_Fox_OK_gg_01");	//Хорошо, с кем мне нужно "поговорить"?
 *AI_Output(self,other,"DIA_MyPers_Fox_OK_pers_02");	//Его зовут Пабло, он в городе, патрулирует окресности.
 *
 */* Теперь для интереса проверим, знает ли ГГ кто такой Пабло.*/
 */* сделать это очень просто, мы проверим общался ли ГГ с ним.*/
 */* Если ГГ знает Пабло, то этот диалог*/
 *if(Npc_KnowsInfo(other,DIA_Pablo_WANTED))
 *{
 *	AI_Output(other,self,"DIA_MyPers_Fox_OK_gg_02"); //Аааа...это тот мент, да уж он меня тоже хотел поймать...Ладно я разберусь с ним!
 *}
 */* Если нет то отобразится вот этот диалог*/
 *else
 *{
 *	AI_Output(other,self,"DIA_MyPers_Fox_OK_gg_03"); //Пабло!?... Кто это...хм...первый раз о нем слышу.Посмотрим что я смогу сделать!
 *};
 *
 */* Как обычно пишем все в дневник и запускаем миссию */
 *Kill_Pablo = LOG_Running;/*Kill_Pablo надо будет прописать в файл Story_Globals.d в таком виде - var int Kill_Pablo; **/ * * * *
 *Log_CreateTopic(TOPIC_KillPablo,LOG_MISSION); *
 *Log_SetTopicStatus(TOPIC_KillPablo,LOG_Running);
 *B_LogEntry(TOPIC_KillPablo,"Я должен разобраться с типом по имени Пабло!");/* То что будет написано в дневнике.*/
 */*Выходим с диалога*/
 *AI_StopProcessInfos(self);
	};	
};

/* Если ГГ выбрал второй вариант ответа, то есть послал куда подальше этого Фокса=)*/
func void DIA_MyPers_Fox_FUCKOFF()
{
	AI_Output(other,self,"DIA_MyPers_Fox_FUCKOFF_gg_00"); //Ты вообще кто такой, проваливай, пока еще не поздно!
	/* Снова делаем проверку на принадлежность ГГ к гильдии
 ** я это делаю ради того, что-бы проверить стоит ли Фоксу проучить ГГ
 ** за свой длинный язык!*/
	/** Так вот если ГГ не в гильдии, тогда...*/
	if (hero.guild == GIL_NONE)
	{
 *AI_Output(self,other,"DIA_MyPers_Fox_FUCKOFF_pers_01"); //Ах ты щенок, а иди сюда сейчас я тебе покажу!!!
 */* Выходим из диалога*/
 *AI_StopProcessInfos(self);
 */* Фокс атакует ГГ */
 *B_Attack(self,other,AR_NONE,1);
	}
	/* Но что если ГГ наёмник?*/
	else if (hero.guild == GIL_SLD)
	{
 */* Проверим насколько хорош ГГ =)*/
 */* Здесь я проверяю насколько сильный и ловкий ГГ. Если сила и ловкость ГГ больше-равна 40
 * * тогда Фокс его не атакует, а если меньше 40 то ГГ попал.*/
 *if ((hero.attribute[ATR_STRENGTH] >= 40) &amp;&amp; (hero.attribute[ATR_DEXTERITY] >= 40))
 *{
 *	AI_Output(self,other,"DIA_MyPers_Fox_FUCKOFF_pers_02"); //Хм...я вижу ты молодец, не слушаешь кого попало. Так держать!
 *	AI_StopProcessInfos(self);
 *}
 *else
 *{
 *	AI_Output(self,other,"DIA_MyPers_Fox_FUCKOFF_pers_03"); //Ты думаешь что одев доспехи наёмника ты стал сильнее? А может ты их украл?
 *	AI_Output(self,other,"DIA_MyPers_Fox_FUCKOFF_pers_04");	//Хотя нет, такой слабак не мог этого сделать, сейчас я тебя проучу!!!
 *	/* Выходим из диалога*/
 *	AI_StopProcessInfos(self);
 *	/* Фокс атакует ГГ */
 *	B_Attack(self,other,AR_NONE,1);
 *};
	};
};

/* Если ГГ выбрал третий вариант*/
func void DIA_MyPers_Fox_NO()
{
	AI_Output(other,self,"DIA_MyPers_Fox_NO_gg_00"); //Нет, у меня просто на это нет времени!
	/* Снова проверка*/
	if (hero.guild == GIL_NONE)
	{
 *AI_Output(self,other,"DIA_MyPers_Fox_NO_pers_01"); //Тогда ПРОВАЛИВАЙ щенок и не мешай мне!!!
	}
	else if (hero.guild == GIL_SLD)
	{
 *AI_Output(self,other,"DIA_MyPers_Fox_NO_pers_02");	//Жаль, а мы могли потом сотрудничать.
	};
	AI_StopProcessInfos(self);
};


/* Далее старанно выполняем возложеную на нас миссию и когда будет все готово приходим к Фоксу*/
instance DIA_MyPers_Fox_Done(C_Info)
{
	npc = NONE_66613_Fox;
	nr = 2;
	condition = DIA_MyPers_Fox_Done_Condition;
	information = DIA_MyPers_Fox_Done_Info;
	permanent = FALSE;
	description = "Вот, я зделал то что ты просил!";
};

func int DIA_MyPers_Fox_Done_Condition()
{
	/* Проверяем условие начала диалога, то есть если условия будут выполнены то ГГ сможет
 ** обратиться к Фоксу, а если нет,...то понятно=)*/
	/* Делаем это просто, проверяем взялся ли ГГ выполнять одну из миссий*/
	/* Здесь важная деталь я проверяю какая миссия запущена и + выполнено ли условие миссии.
 ** Npc_IsDead(Pablo) проверка жив ли Пабло. Переменная Pablo описана в файле Npc_Globals.d.
 ** Еда и другие предметы хранятся в папке Items.*/
	if(((Kill_Pablo == LOG_Running) &amp;&amp; Npc_IsDead(Pablo)) || ((Find_Food == LOG_Running) &amp;&amp; Npc_HasItems(other,ItFo_Bacon) &amp;&amp; Npc_HasItems(other,ItFo_Bread) &amp;&amp; Npc_HasItems(other,ItFo_Beer))) 
	{
 *return TRUE;
	};
};

func void DIA_MyPers_Fox_Done_Info()
{
	/* Теперь проверяем какую именно миссию дали ГГ */
	if (Kill_Pablo == LOG_Running)
	{
 *AI_Output(other,self,"DIA_MyPers_Fox_Done_gg_00"); //Я позаботился о Пабло. Больше он нас не потревожит!
 *AI_Output(self,other,"DIA_MyPers_Fox_Done_pers_02"); //Очень хорошо, держи свое вознаграждение!
 */* Начисляем опыт ГГ*/
 *B_GivePlayerXP(500);
 */* Даем ГГ золото*/
 *B_GiveInvItems(self,other,ItMi_Gold,300);
 */* Записываем в дневник*/
 *B_LogEntry(TOPIC_KillPablo,"Я разобрался с Пабло, теперь он больше никого не потревожит.");
 */* Закрываем топик*/
 *Log_SetTopicStatus(TOPIC_KillPablo,LOG_SUCCESS);
	}
	else if (Find_Food == LOG_Running)
	{
 *AI_Output(other,self,"DIA_MyPers_Fox_Done_gg_01"); //Я принес все что ты просил.
 *AI_Output(self,other,"DIA_MyPers_Fox_Done_pers_03"); //Отлично давай сюда, давно пора.
 */* Отдаем Фоксу еду*/
 *B_GiveInvItems(other,self,ItFo_Beer,1);
 *B_GiveInvItems(other,self,ItFo_Bread,1);
 *B_GiveInvItems(other,self,ItFo_Bacon,1);
 */* Начисляем опыт ГГ*/
 *B_GivePlayerXP(150);
 */* Даем ГГ золото*/
 *B_GiveInvItems(self,other,ItMi_Gold,35);
 */* Записываем в дневник*/
 *B_LogEntry(TOPIC_Food,"Я принес все что просил Фокс.");
 */* Закрываем топик*/
 *Log_SetTopicStatus(TOPIC_Food,LOG_SUCCESS); * *
	}; 
};


/* ТЕПЕРЬ НЕКОТОРЫЕ ПРИМЕЧАНИЯ. Итак для полного счастья нужно в файл LOG_Constants_Yoly.d
 * который находится в папке Log_Entries дописать следующее: 
 * const string TOPIC_Food = "Вещи для Фокса";
 * const string TOPIC_KillPablo = "Убить Пабло";
 * это заголовки тем в дневнике.
 * Ну и конечно самое главное, это добавить такого НПС как Фокс, то есть создать 
 * файл с именем NONE_66613_Fox.d и написать нашего НПС. Потом следует прописать
 * нашего НПС и файл диалога куда нужно и скомпилить.Вот в принципе и все.
 * Желаю Удачи.*/
P.S. ему писал и тебе напишу. Скрипт не проверял, так как у меня сейчас нет Готики 2 + он сильно сырой, недоделаный, возможно и не рабочий :P . Это всего лишь пример!!!
__________________
Никогда не делай сегодня то, что можно сделать завтра. А то завтра будет нечего делать. © ???
Marvin вне форума   Ответить с цитированием
Старый 10.09.2008, 10:44   #158
Администратор
Мастер
 
Аватар для redleha
 
Регистрация: 28.02.2008
Адрес: г.Новокуйбышевск Самарская обл.
Сообщений: 1,458
Сказал(а) спасибо: 544
Поблагодарили 419 раз(а) в 183 сообщениях
По умолчанию Скриптинг

Спасибо, Marvin, что отозвался. Хотя данный пример простой, но всё равно Спасибо.
Я почему сложных НПСов просил, потому что они наиболее разнообразны во взаимодействии с ГГ.
В принципе уже с половиной скриптов Акеллы разобрался. Осталось вторая половина - сложновывернутые квесты попробовать реализовать со всевозможными ответвлениями...
__________________
redleha вне форума   Ответить с цитированием
Старый 10.09.2008, 13:01   #159
Готоман
Пользователь
 
Аватар для Marvin
 
Регистрация: 13.02.2008
Адрес: Ukraine
Сообщений: 96
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
По умолчанию Скриптинг

redleha
Там тоже нет ничего сложного ;) , просто в подобных квестах, что ты писал, как уже говорил Beckham есть переменные которые хранятся в других файлах, и получается некое ветвление, что немного, поначалу, запутывает.
__________________
Никогда не делай сегодня то, что можно сделать завтра. А то завтра будет нечего делать. © ???
Marvin вне форума   Ответить с цитированием
Старый 10.09.2008, 14:47   #160
Администратор
Мастер
 
Аватар для redleha
 
Регистрация: 28.02.2008
Адрес: г.Новокуйбышевск Самарская обл.
Сообщений: 1,458
Сказал(а) спасибо: 544
Поблагодарили 419 раз(а) в 183 сообщениях
По умолчанию Скриптинг

Цитата:
- Есть также функции ехе-шника игры, но там они не представлены т.к. не работают со скриптами напрямую.
А можно конкретные примеры привести...?
__________________
redleha вне форума   Ответить с цитированием
Ответ

Метки
доп.программы, полезная информация, скриптинг, советы, ссылки


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 11:13. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot
Magic Team© 2006-2019, The development and modification