• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток! Спешите принять участие в оценке работ на конкурсе "Таинственные миры" 2024!
    Ждем именно вас!

    Ссылка на конкурсную тему - тык
    Ссылка на тему с работами участников- тык

Вопросы по скриптингу

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.803
Баллы
995
  • Первое сообщение
  • #1
Прежде чем задавать вопросы, ознакомьтесь с документацией..
1) Читать онлайн
2) Архив с офлайн-версией(chm) во вложении
 

Вложения

  • Vam_tutor.rar
    171,6 KB · Просмотры: 511
Последнее редактирование модератором:

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.238
Благодарности
2.579
Баллы
455
Блин, а я думал, что все файлы, которые распакованы в папку SFX там прописаны.
Это нужно только для некоторых функций, типа Snd_Play

А его возможно прописать?
Конечно, декомпилируй SFX.dat и сделай по аналогии с другим звуком, который использует Snd_Play, например звук золота Snd_Play("Geldbeutel");

В sfx.dat он прописан как
INSTANCE Geldbeutel(C_SFX_DEF){file="Geldbeutel.wav";vol=90;};

vol - это громкость.
 

Друид

Участник форума
Регистрация
21 Ноя 2009
Сообщения
1.169
Благодарности
395
Баллы
285
Подскажите, как заставить среагировать на открытие сундук - чтобы допустим кто-нибудь респаунился рядом.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.803
Баллы
995
Подскажите, как заставить среагировать на открытие сундук - чтобы допустим кто-нибудь респаунился рядом.
Пример этого смотри в оригинальных скриптах Г2-НВ, конкретно склеп у фермы Онара, там скелетоны респаунятся... :)
 

Alexandr-GM

Участник форума
Регистрация
12 Сен 2008
Сообщения
73
Благодарности
0
Баллы
155
Так, всем добрый день. Вопрос такой:
INSTANCE DIA_KDF_159_Ingobird_Adv1 (C_INFO)
{
npc = KDF_159_Ingobird;
nr = 1;
condition = DIA_KDF_159_Ingobird_Adv1_Condition;
information = DIA_KDF_159_Ingobird_Adv1_Info;
permanent = FALSE;
important = FALSE;
description = "Я убил их";
};

FUNC INT DIA_KDF_159_Ingobird_Adv1_Condition()
{
if (Npc_KnowsInfo (other, DIA_KDF_159_Ingobird_Adv))
&&(Npc_IsDead(Graveyard_Skeleton1))
&&(Npc_IsDead(Graveyard_Skeleton2))
&&(Npc_IsDead(Graveyard_Skeleton3))
{
return TRUE;
};
return FALSE;
};
FUNC VOID DIA_KDF_159_Ingobird_Adv1_Info()
{
AI_Output (other, self, "DIA_KDF_159_Ingobird_Adv1_15_00");//Я убил их
AI_Output (self, other, "DIA_KDF_159_Ingobird_Adv1_12_00");//Хорошо! Пойдем, пришло время заканчивать с этим...
AI_StopProcessInfos (self);
AI_GotoWP (self,"LE_INNOSLAND_SKLEP_SKELET_05");
};

В этом скрипте, мы говорим с НПС после чего диалог должен прерватся, а НПС пойти на вейпоинт... но он почему то не хочет это делать. Также хотел спросить AI_StopProcessInfos, прерывает диалог или полность функцию, т.е стоящие после него функции выполняются?
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
Функции после AI_StopProcessInfos выполняются, но он не успевает ее выполнить, как включается расписание и он идет на точку , которая в его текущем расписании. Лучше всего поменяйте ему расписание. И AI_GotoWP вообще не понадобится.
 

Alexandr-GM

Участник форума
Регистрация
12 Сен 2008
Сообщения
73
Благодарности
0
Баллы
155
А что если сделать без AI_StopProcessInfos, тогда диалог не завершится пока AI_GotoWP не выполнится и просто камера будет следить за действием НПС?

Если я делаю это через Распорядок то он выполняется только когда ГГ нет рядом... незнаю почему так.
FUNC VOID Rtn_ApplyTeleport_159 ()
{
TA_FleeToWp(08,00,23,00,"LE_INNOSLAND_SKLEP_SKELET_05");
TA_FleeToWp(23,00,08,00,"LE_INNOSLAND_SKLEP_SKELET_05");
};
 

Друид

Участник форума
Регистрация
21 Ноя 2009
Сообщения
1.169
Благодарности
395
Баллы
285
А что если сделать без AI_StopProcessInfos, тогда диалог не завершится пока AI_GotoWP не выполнится и просто камера будет следить за действием НПС?
у меня кажисть они как-то на ходу таким образом бакланили, а камера ехала за неписем :)

Если я делаю это через Распорядок то он выполняется только когда ГГ нет рядом... незнаю почему так.
FUNC VOID Rtn_ApplyTeleport_159 ()
{
TA_FleeToWp(08,00,23,00,"LE_INNOSLAND_SKLEP_SKELET_05");
TA_FleeToWp(23,00,08,00,"LE_INNOSLAND_SKLEP_SKELET_05");
};

попробуй TA_RunToWP
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
А что если сделать без AI_StopProcessInfos, тогда диалог не завершится пока AI_GotoWP не выполнится и просто камера будет следить за действием НПС?

Если я делаю это через Распорядок то он выполняется только когда ГГ нет рядом... незнаю почему так.

В диалоге делается примерно так:

Код:
AI_StopProcessInfos(self);
Npc_ExchangeRoutine (npcTMP, "waitGG1");
AI_ContinueRoutine(npcTMP);
 

Zteo

Участник форума
Регистрация
13 Янв 2010
Сообщения
25
Благодарности
0
Баллы
150
Помогите!.
Можно как-то зделать так чтоб когда я переходил в NPC то
ним я мог как и ГГ спать(чтоб таблица появлялась),ковать,
алхимичить ну и другое?
Потому-что ГГ уже задрал он хиляк а хочется поиграть за друго перса.(в етом случае за Npc который не вилияет на сюжет)
 

vmazz

Участник форума
Регистрация
18 Дек 2008
Сообщения
218
Благодарности
1
Баллы
165
Единственный вариант- лезть в скрипты и править функции вызова мобси-диалогов "(чтоб таблица появлялась),ковать,
алхимичить ну и другое"
:D , т.е. менять там PC_Hero на инстанцию нужного непися. Или как вариант юзать глоб. переменную hero

В этих диалогах идет конкретная проверка на героя или рокфеллера, а иначе прикинь чебы было, ложится какой-нибудь непись спать, а у тебя бах и диалог открывается :D
 

Zteo

Участник форума
Регистрация
13 Янв 2010
Сообщения
25
Благодарности
0
Баллы
150
Единственный вариант- лезть в скрипты и править функции вызова мобси-диалогов "(чтоб таблица появлялась),ковать,
алхимичить ну и другое"
:D , т.е. менять там PC_Hero на инстанцию нужного непися. Или как вариант юзать глоб. переменную hero

В этих диалогах идет конкретная проверка на героя или рокфеллера, а иначе прикинь чебы было, ложится какой-нибудь непись спать, а у тебя бах и диалог открывается :D

Тогда что надо для того чтоб залесть в скрипты и что там на что поменять надо.
а то я в етом деле чайник. *???*А мне очень надо
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.803
Баллы
995
Тогда что надо для того чтоб залесть в скрипты и что там на что поменять надо.
а то я в етом деле чайник. *???*А мне очень надо
В двух словах тут не скажешь, но в общем по скриптингу внимательно читаем здесь:
http://mod.worldofgothic.ru/
раздел Скрипты. ;)
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.238
Благодарности
2.579
Баллы
455
Мдя, бредятина полная. Лучше уж ГГ раскачать марвином, если он такой уж хилый, чем ломать скрипты.
 

Zteo

Участник форума
Регистрация
13 Янв 2010
Сообщения
25
Благодарности
0
Баллы
150
у меня вопрос:
Что надо делать когда я отредактировал файл(в даном случае pc_hero в папке NPC поменял ему лицо) то чтоб когда я заходил в игру то оно менялось.
Ато в файлу данные меняются а в деле нет:mad:
 

Wallerstein

Участник форума
Регистрация
26 Апр 2009
Сообщения
965
Благодарности
23
Баллы
195
У меня вопрос: мне надо сделать так, чтобы при взятии миссии, после сна на кровати (спит ГГ) 2 нпс перемещались на указанные вейпойнты, появлялось 2 итема и срабатывал триггер. Но я не могу вспомнить, где в оригинальной игре есть подобные моменты, чтобы взять оригинальный скрипт за основу. Подскажите пожалуйста, как правильно создать этот скрипт и условия для его корректной работы.*flowers*
 

vmazz

Участник форума
Регистрация
18 Дек 2008
Сообщения
218
Благодарности
1
Баллы
165
Впринципе все просто:
1. Создай переменную и при взятии квеста выстави ее в TRUE (например MyQuestStarted = True)
2. В функции сна (PC_Sleep) поставь проверку на переменную и при выполнении условия делай что заблагорассудится. Например так:

Код:
func void [B][COLOR="Blue"]PC_Sleep[/COLOR][/B](var int t)
{
.... // в начале ничего не меняй, а в конце дописывай
if(MyQuestStarted == TRUE)
	{
		Npc_ExchangeRoutine([COLOR="Green"]npc_number_1[/COLOR], [COLOR="Red"]"new_routine"[/COLOR]);
		Npc_ExchangeRoutine([COLOR="#008000"]npc_number_2[/COLOR], [COLOR="Red"]"new_routine"[/COLOR]);
		Wld_InsertItem([COLOR="#008000"]ItPo_Mana_01[/COLOR], [COLOR="Red"]"my_waypoint_1"[/COLOR]); 
		Wld_InsertItem([COLOR="#008000"]ItPo_Mana_02[/COLOR], [COLOR="Red"]"my_waypoint_2"[/COLOR]); 
		Wld_SendTrigger([COLOR="Red"]"MyTriggerName"[/COLOR]);
		MyQuestStarted = FALSE;
	}
};
Ну вот примерно так, только не забудь что для тех 2ух НПСов надо сначала создать расписания прежде чем на него переходить ;)
 

vmazz

Участник форума
Регистрация
18 Дек 2008
Сообщения
218
Благодарности
1
Баллы
165
скрипты сначала нужно откомпилировать и вставить, а потом уже ждать изменений.
Тут не будут пережевывать это по 100 раз уже все есть на mod.worldofgothic.ru :p
 

Wallerstein

Участник форума
Регистрация
26 Апр 2009
Сообщения
965
Благодарности
23
Баллы
195
Расписание кидать на func void MyQwesStarted _1000() в инстанции НПС?

MaGothИспользуй при написании своих постов в темах раздела модостроения, стандартную форму написания текста сообщений. Не нужно свои посты делать кричащими, слепых тут нет. Пост отредактировал.
 

vmazz

Участник форума
Регистрация
18 Дек 2008
Сообщения
218
Благодарности
1
Баллы
165
Ничего не понял что ты написал :eek: :D
MyQwesStarted это я переменную давал как пример, а не название расписаний.
Я так понимаю новичок, да? Тогда смотри сюда :)

Открой скрипт-файл любого нпс, у них там внизу после инстанции идут расписания там и смотри как оно все выглядит ;) И кстати заметь что в функции Npc_ExchangeRoutine 2ой параметр (название расписания) идет строкой, а не названием функции. Пример такой
Npc_ExchangeRoutine(Lothar,"START");
в то время как название расписания у Лотара такое func void Rtn_Start_203() то бишь пишешь, то что между Rtn_ и IDом перса, это важно.
 

Рипперхед

Участник форума
Регистрация
30 Ноя 2008
Сообщения
13.731
Благодарности
3.531
Баллы
1.305
Ребят, может где уже писалось, но у меня вопрос - объясните подробно как перевести мод? Какие проги нужны? Какой язык программирования необходимо для этого знать? Желательно в личку. =)
 
Сверху Снизу