[AGFC: Valley of Gothic] М: Скриптинг в Готике

Страница 14 из 65 « Первая 47891011121314 151617181920212464 Последняя »
Поиск в этой теме:

Расширенный поиск
Старый 04.07.2005, 20:08   #521
Bliz@rd

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

У меня вот такой вопрос:
Создал диалог(DIA_NONE_666_Leo),вот его содержимое:
instance None_666_Leo_AskForSword (C_INFO)
{
npc = None_666_Leo;
condition = None_666_Leo_AskForSword_Condition;
information = None_666_Leo_AskForSword_Info;
important = TRUE;
permanent = FALSE;
description = "";
};

FUNC int None_666_Leo_AskForSword_Condition()
{
if (hero.level >= 0)
{
return TRUE;
};
return FALSE;
};

func void None_666_Leo_AskForSword_Info()
{
AI_Output ( self, other, "None_666_Leo_AskForSword_Info_8_01"); // Эй, ты занят ?

Info_ClearChoices (None_666_Leo_AskForSword);
Info_AddChoice (None_666_Leo_AskForSword, "Нет, а что?",
None_666_Leo_AskForSword_Yes);
Info_AddChoice (None_666_Leo_AskForSword, "Боюсь, что да",
None_666_Leo_AskForSword_No);
};
Func void None_666_Leo_AskForSword_No ()
{
AI_Output(other,self, "None_666_Leo_AskForSword_Info_8_02"); // Я занят...
AI_Output(self,other, "None_666_Leo_AskForSword_Info_8_03"); //Ну и вали отсюда...
AI_StopProcessInfos (self);
};
func void None_666_Leo_AskForSword_Yes ()
{
AI_Output(other,self,"None_666_Leo_AskForSword_Inf o_8_04"); // Да,вроде,нет.
AI_Output(self,other,"None_666_Leo_AskForSword_Inf o_8_05"); // Тогда *убей Вино.
Log_CreateTopic(TOPIC_KillVino,LOG_MISSION);
Log_SetTopicStatus(TOPIC_KillVino,LOG_Running);
B_LogEntry(TOPIC_KillVino,"Лео хочет чтобы я убил Вино.");
};
// ************************ EXIT **************************
instance None_666_Leo_AskForSword_Exit (C_INFO)
{
npc = None_666_Leо;
condition = None_666_Leo_AskForSword_Exit_Condition;
information = None_666_Leo_AskForSword_Exit_Info;
important = 0;
permanent = 1;
description = "конец";
};

FUNC int None_666_Leo_AskForSword_Exit_Condition()
{
return 1;
};

FUNC VOID None_666_Leo_AskForSword_Exit_Info()
{
AI_StopProcessInfos ( self );
};
instance DIA_Leo_VinoDead(C_Info)
{
* * *npc = NONE_666_Leo;
* * *nr = 8;
* * *condition = DIA_Leo_VinoDead_Condition;
* * *information = DIA_Leo_VinoDead_Info;
* * *permanent = FALSE;
* * *description = "Вино мёртв!";
};


func int DIA_Leo_VinoDead_Condition()
{
* * *if(Npc_IsDead(Vino) && (MIS_KillVino == LOG_Running))
* * *{
* * * * * *return TRUE;
* * *};
};

func void DIA_Leo_VinoDead_Info()
{
* * *AI_Output(other,self,"DIA_Leo_VinoDead_15_00"); * * *//Вино мёртв!
* * *AI_Output(self,other,"DIA_Leo_VinoDead_11_01"); * * *//Отлично. * * *
* * *AI_Output(self,other,"DIA_Leo_VinoDead_11_02"); * * *//Я думаю, это позволит нам получить передышку, по крайней мере, на неделю.
* * *MIS_KillVino = LOG_SUCCESS;
* * *B_GivePlayerXP(250);
};
потом прописал диалог в Story_Globals.d(в самом конце) следующее:
var int MIS_KillVino; И прописал диалог в Gothic src:
после этого *Story\Dialoge\DIA_NONE_100_Xardas.d
прописпл это
Story\Dialoge\DIA_NONE_666_Leo.d.Но прикомпиляции вылаёт 3 ошибки:
1)
00:14 Fault:0 U: PAR:STORY\DIALOGE\DIA_NONE_666_Leo.D:’TOPIC_KILLVI NO’undeclared name (line 40)…<zError.cpp,#477>
2)
00:14 Fault:0 U: PAR:STORY\DIALOGE\DIA_NONE_666_Leo.D:’TOPIC_KILLVI NO’undeclared name (line 41)…<zError.cpp,#477>
3)
00:14 Fault:0 U: PAR:STORY\DIALOGE\CDIA_NONE_666_Leo.D:’TOPIC_KILLV INO’undeclared name (line 42)…<zError.cpp,#477>
Правильно ли я прописал в Story_Globals.d?Делал по примеру мага,который просит убить черного волка в 1 главе и паладина в долине который просит убить Гош пака.
Ответить с цитированием
Старый 04.07.2005, 21:26   #522
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

По умолчанию Re: Скриптинг в Готике

2Bliz@rd:
Правильно ли я прописал в Story_Globals.d?
Вроде да.

1)
00:14 Fault:0 U: PAR:STORY\DIALOGE\DIA_NONE_666_Leo.D:’TOPIC_KILLVI NO’undeclared name (line 40)…<zError.cpp,#477>
2)
00:14 Fault:0 U: PAR:STORY\DIALOGE\DIA_NONE_666_Leo.D:’TOPIC_KILLVI NO’undeclared name (line 41)…<zError.cpp,#477>
3)
00:14 Fault:0 U: PAR:STORY\DIALOGE\CDIA_NONE_666_Leo.D:’TOPIC_KILLV INO’undeclared name (line 42)…<zError.cpp,#477>
’TOPIC_KILLVINO’undeclared name - необъявленное имя.
Нужно объявить TOPIC_KillVino в story/log_entries/LOG_Constants_*.d (в любом).
В принципе, необязательно именно там, как и во многих других случаях с прописыванием глобальных переменных\констант.
Отправить личное сообщение для Ответить с цитированием
Старый 05.07.2005, 09:55   #523
Bliz@rd

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

TycoooN спосибо я прописал в LOG_Constants_Yoly.d следующее:
const string TOPIC_KillVino= "Лео хочет чтобы я убил Вино";
Закомпелировал без ошибок.Но с диалогом проблема.Он как и должен начинает диалог,появляется выбор занят я или нет.Если нет он даёт задание,но после того как даёт задание "Конец" не появляется,а появляется опция "я занят".Потом иду убиваю Вино(Находится на ферме Лобарта),подхожу к нему,а у него этой обции нет,только конец.Что я не правильно сделал в диалоге?*
Ответить с цитированием
Старый 05.07.2005, 10:28   #524
BORISOFF

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2Bliz@rd:
Если нет он даёт задание,но после того как даёт задание "Конец" не появляется, а появляется опция "я занят".
Чтобы появился "конец" допиши в функциях
Func void None_666_Leo_AskForSword_No ()
и
func void None_666_Leo_AskForSword_Yes ()
в конце Info_ClearChoices (None_666_Leo_AskForSword);
а вообще, опять хочется сказать фразу
Просто забей на скриптинг... =( Больше посоветовать нечего...
- неужели было сложно поглядеть аналогичные скрипты у готических неписей?
Ответить с цитированием
Старый 05.07.2005, 20:18   #525
Bliz@rd

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

У меня всё таки получилось создать миссию убить кого-нибудь.А насчёт совета,то я уже сказал что забивать не буду,извини конечно,но я повтарюсь,что просто так разбирался в скриптинге и я привык доводить дело до конца!
Ответить с цитированием
Старый 07.07.2005, 15:00   #526
Vendiga

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

Доброго времени суток уважаемые модостроители! Позвольте представиться - VenDigo, сценарист-скриптер мод. команды NWMT. За подомными темами на АГ слежу уже давольно таки давно, но в вопросах не было необходимости. До сягодняшнего дня...
Спрашиваю в этой теме, потому как вопросы по этому поводу уже затрагивалась здесь когда-то.
Теперь к делу. Я научился снимать ролик в спейсере при помощи камер, но возникло пара проблем. Что я делал: создал камеру и кейфреймы, подогнал их как мне надо(получился облёт Хориниса сверху), сохранил зен файл(NEWWORLD.ZEN), запаковал его вместе с остальными зенами в Worlds.mod, переименовал в Worlds.vdf и заменил уже существующий в папке ...\Data. Вроде пока всё правильно делал. Если не прав, поправьте плиз. Кстати, зен получился примерно на 10 метров больше исходника. И это из-за одной то камеры?! Открывал новый NEWWORLD - камера на месте и работает.
А теперь вопросы:

1. Как изменить скорость движения камеры и сгладить её передвежение? А то в некоторых переходах кейфреймов оно скачкообразно.
2. Как врубить камеру в игре? Подозреваю что через триггер Wld_SendTrigger("Название камеры"), но как и где его прописывать? Пробовал в диалоге, но ничего не получилось :( Может его где расписывать надо? Или достаточно добавить данную строку в условие? Если так, то не помагает...
3. Можно ли врубить камеру, которая находится на порядочном расстоянии от ГГ? Т.е. нужно врубить камеру, которая находится на противоположенном ГГ конце острова?
4. На практике нужно чтобы ролик врубался сразу по началу игры. Но если триггер Wld_SendTrigger прописывается или в диалоге, или в условии, то как это сделать? Возможно ли такое вообще?
5. Может мне кто-нибудь помочь? Буду очень благодарен ::)
Ответить с цитированием
Старый 08.07.2005, 16:10   #527
Vendiga

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

Ну что никто не знает? В урокох Вама об этом триггере тоже ничего не известно :(...
Дословно: Wld_SendTrigger (string name); - активировать функцию VOB объекта с именем name. (Я не знаю где где прописаны эти функции).***
Ответить с цитированием
Старый 08.07.2005, 16:33   #528
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2Vendiga:
Ну что никто не знает? В урокох Вама об этом триггере тоже ничего не известно
Триггер задается в Спейсере, там же в свойствах VOB объекта прописывается имя функции, которая будет вызвана, сама функция размещается в скриптах (желательно в папке ..Story\Events). Более подробно пока сказать больше нечего.
Саму функцию Wld_SendTrigger можно вызвать из любого места скриптов.
Ответить с цитированием
Старый 08.07.2005, 16:46   #529
Vendiga

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2Vam: Значит я всё правильно делал? Хоть это радует... А нет примеров таких функций в Готике? Вроде бы по прибытии на сотров Ирдорат был такой ролик, нет? Я поищу, постараюсь. Так он может только в Evants быть?
Ответить с цитированием
Старый 08.07.2005, 16:54   #530
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2Vendiga:
А нет примеров таких функций в Готике?
В Готике2 + аддон они не встречаются, в других модах Готик (1 и 2) я не искал, возможно где-нибудь и есть.
Есть в скриптах Готики1, этой функцией включается концерт InExtremo, файл ..Story\InExtremo.d
Ответить с цитированием
Старый 08.07.2005, 17:03   #531
Vendiga

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

Есть конечно же в Диккурике... ладно, ща устанолю Диккурик, облазаю скрипты и камеру посмотрю, которая за собачками следит. А где смотреть то, в свойствах камеры? Object?
Ответить с цитированием
Старый 08.07.2005, 20:02   #532
Bliz@rd

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

У меня есть вопрос:
Я в спайсере создал веппоинт(NW_FARM4_Leo) он находится *на ферме Секоба.
Потом сохранил мир и закомпелировал.Без ошибок.
Дальше создал непися(NONE_999_Leo),вот его содержимое:
instance NONE_999_Leo (Npc_Default)
{
* * *// ------ NSC ------
* * *name  * * * * * *= "Лео";
* * *guild  * * * * * *= GIL_NONE;
* * *id  * * * * * * * * *= 999;
* * *voice  * * * * * *= 3;
* * *flags * * * = 0; * * * * * * * * * * * * * * * * * * * * *//NPC_FLAG_IMMORTAL oder 0
* * *npctype * * * * * *= NPCTYPE_OCMAIN;
* * *
* * *// ------ Attribute ------
* * *B_SetAttributesToChapter (self, 1); * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//setzt Attribute und LEVEL entsprechend dem angegebenen Kapitel (1-6)
* * * * * *
* * *// ------ Kampf-Taktik ------
* * *fight_tactic * * * * * *= FAI_HUMAN_COWARD; * * *// MASTER / STRONG / COWARD
* * *
* * *// ------ Equippte Waffen ------ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//Munition wird automatisch generiert, darf aber angegeben werden
* * *EquipItem * * * * * * * * *(self, ItMw_1h_Bau_Mace);
* * *
* * *// ------ Inventory ------
* * *B_CreateAmbientInv  * * *(self);
* * *
* * * * * *
* * *// ------ visuals ------ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//Muss NACH Attributen kommen, weil in B_SetNpcVisual die Breite abh. v. STR skaliert wird
* * *
* * *B_SetNpcVisual  * * * * * *(self, MALE, "Hum_Head_Bald", Face_N_NormalBart_Huno, BodyTex_N, ITAR_Mil_L); * * *
* * *Mdl_SetModelFatness * * *(self, 0);
* * *Mdl_ApplyOverlayMds * * *(self, "Humans_Relaxed.mds"); // Tired / Militia / Mage / Arrogance / Relaxed
* * *
* * *// ------ NSC-relevante Talente vergeben ------
* * *B_GiveNpcTalents (self);
* * *
* * *// ------ Kampf-Talente ------ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//Der enthaltene B_AddFightSkill setzt Talent-Ani abhдngig von TrefferChance% - alle Kampftalente werden gleichhoch gesetzt
* * *B_SetFightSkills (self, 30); //Grenzen fьr Talent-Level liegen bei 30 und 60

* * *// ------ TA anmelden ------
* * *daily_routine  * * * * * *= Rtn_Start_999;
};

FUNC VOID Rtn_Start_999 ()
{ * * *
TA_Stand_Eating * *(08,00,23,00,"NW_FARM4_Leo");

TA_Stand_ArmsCrossed * (23,00,08,00,"NW_FARM4_Leo"); * * *
};
Потом прописал его везде.Т.е в NPC_Globals прописал
После var C_NPC Till; прописал var C_NPC Leo; *и
После Till = Hlp_GetNpc (BAU_931_Till);прописал
Leo = Hlp_GetNpc (NONE_999_Leo);
Так же прописал в статупе после
Wld_InsertNpc  * * *(BAU_931_Till, "BIGFARM");
Прописал это
Wld_InsertNpc  * * *(NONE_999_Leo, "NW_FARM4_Leo");
И соответственно прописал в Gothic src.
Дальше компилирую.Закомпилировалось без ошибок. Захожу в игру
А моего непися там нет.А когда вызываю с помощью марвина,то он появляется.
Почему он не появляется сам(без марвина)?
Ответить с цитированием
Старый 08.07.2005, 20:13   #533
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2Bliz@rd:
Захожу в игру
А моего непися там нет.А когда вызываю с помощью марвина,то он появляется.
Почему он не появляется сам(без марвина)?
А как ты заходишь в игру? Если загружая сейв, то НПС и не будет, если заходить с нуля, то будет.
Ответить с цитированием
Старый 08.07.2005, 20:50   #534
Bliz@rd

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

После того как я вставляю что-нибудь в игру я всегда ничинаю
игру сначала,таких ошибок я не делаю.Просто сейчас я пытаюсь
создать мод и уж довольно много сделал.Но мне нужно поставить неписей где я создал веппоинт.и вот что я заметил у меня почему-то не встают неписи ещё в городе хотя вставляю уже на существующий веппоинт,и знаю что неписей я создаю правильно и прописываю я их тоже правильно(компилирую без ошибок).Но в городе неписи не встают и вот сейчас не встают на тот веппоинт,хотя спомущью марвина неписи вызываются и в городе и на веппоинт
(игру начинаю заного).Може быть ещё что нибудь посоветуешь?
Ответить с цитированием
Старый 09.07.2005, 02:03   #535
B_Wolf

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2Bliz@rd:
Може быть ещё что нибудь посоветуешь?
Неписей в файле Startup.d прописывал?
Ответить с цитированием
Старый 09.07.2005, 12:46   #536
Vendiga

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

Короче устроил я вчера исследовательскую работу по теме триггеры и вот к чему это привело:

Для начала я изучил одну камеру из Диккурика(ту которая падальщиков призывает в самом начале игры) и её свойства.
Начиналось всё из рук вон плохо - только замучился открывать зен диккурика - забыл содержимое модфайла перекинуть в каталог игры, а он блин и не хочет открываться!
Камера та называлась CAMERA_HOCHSTAND(zCCSCamera). Долгим экспериментальным путём я нашол два триггера, прикреплённых к этой камере.
Экскурс для тех кто не знает: каждый триггер несёт в себе какую-то скриптовую функцию, которая должна быть расписана в *d. файле. Т.е. scriptFUNC по-научному(занимаеет последнее место по порядку, но первое по важности в свойствах триггера).
Так вот, первым триггером был TS_HOCHSTAND(oCTriggerScript) c scriptFunc  HOCHSTANDWOELFE. Визуально выглядит как "коробочка" из красных линий(когда отсутствует 3дс файл обычно такое бывает - это пример, тут совершенно не к месту) на всю площадь поверхности башни(на которой должен стоять ГГ в момент включения камеры.
Второй триггер выглядет так: TS_CAMERA_HOCHSTAND(oCTriggerScript) со скриптфунцией START_CAMERA_HOCHSTAND. Прикреплён к камере как кейфрейм, но совсем близко, можно сказать на неё.

Далее я задался целью найти эти триггеры в датнике Диккурика. Учитывая то, что прогой Вама я пользовался второй раз, для меня распаковать модовский файл было трудновато. Но ничего, и с этим я справился :)
Первое что я нашол, был скрипт рога, который приводит в движение саму камиру:

instance SCAVHORN(C_Item)
{
     name = "mysteriцses Horn";\\Загадочный рог
     mainflag = ITEM_KAT_NONE;
     flags = ITEM_MULTI;
     value = 0;
     visual = "ItMi_Alarmhorn_01.3DS";
     material = MAT_WOOD;
     scemeName = "HORN";\\Рог
     on_state[0] = use_scavhorn;\\Функция использования
     description = name;
     text[5] = NAME_Value;
     count[5] = value;
};


func void use_scavhorn()\\Описание функции использования
{
     if((Npc_GetDistToWP(self,"SEE_VOR_STADT_12") <= 1000) && (DC_1_TOWER != 3) && !SCAVHORNUSED)\\если ГГ стоит на расстоянии <= 1000 от варпоинта и вроде на башне, то....

     {
           Wld_SetGuildAttitude(GIL_WOLF,ATT_ANGRY,GIL_SCAVE NGER);\\Волки вдруг стали врагами падальщиков
           Wld_InsertNpc(v_scav1,"SEE_VOR_STADT_06");\\Появл яются сами падальщики
           Wld_InsertNpc(v_scav2,"SEE_VOR_STADT_06");
           Wld_InsertNpc(v_scav3,"SEE_VOR_STADT_06");
           Wld_InsertNpc(v_scav4,"SEE_VOR_STADT_06");
           SCAVHORNUSED = TRUE;\\Не нашол где эта функция декларирована
           Wld_SendTrigger("TS_CAMERA_HOCHSTAND");\\Подключа ется камера
     }
     else
     {
           PrintScreen("Nichts passiert...",-1,-1,"font_old_20_white.tga",3);\\Вывод текста "Ничего не произошло"
     };
};

Привожу с комментариями на том уровне, на котором могу. Сам файл scavhorn.d нашолся по адресу _Work\Data\Scripts\Content\_misc_
В эту же папку разрабы диккурика скидывали все триггеры. А в оссобенности в файл schrank_a_nah.d. Там я и нашол скриптфункции триггеров камеры CAMERA_HOCHSTAND.

func void hochstandwoelfe()
{
     if(HOCHSTANDAKTIVIERT == 0)\\??? Вроде условие если камера включена...
     {
           HOCHSTANDAKTIVIERT = HOCHSTANDAKTIVIERT + 1;\\Вопросы, кругом вопросы ::)
           if(Npc_GetDistToWP(sld_b,"AM_HOCHSTAND_00") < 800))\\ если дистанция до варпоинта меньше 800
           {
                 Npc_ExchangeRoutine(sld_b,"RALF");\\Убежали неписи, которые ГГ подставили
                 Npc_ExchangeRoutine(sld_a,"RAL");
                 AI_ContinueRoutine(sld_b);
                 AI_ContinueRoutine(sld_a);
           };
           AI_OutputSVM_Overlay(hero,hero,"TurmGefangen_15_0 0");");//Это реплика Ардарика, когда приходят волки. «Откуда взялись эти волки...» говорит он
           AI_StandupQuick(hero);\\Перевод ГГ в стоячее состояние
           Wld_SendTrigger("TS_CAMERA_HOCHSTAND");\\Опят ь камера
           bh_wolfspawn();\\Функция такая. Приведена в отдельном одноимённом файле
     };
};

bh_wolfspawn.d:

func void bh_wolfspawn()
{
     Wld_InsertNpc(v_wolf1,"SEE_VOR_STADT_06");\\Появл яются четыре волка
     Wld_InsertNpc(v_wolf2,"SEE_VOR_STADT_06");
     Wld_InsertNpc(v_wolf3,"SEE_VOR_STADT_06");
     Wld_InsertNpc(v_wolf4,"SEE_VOR_STADT_06");
};

И для триггера TS_CAMERA_HOCHSTAND(oCTriggerScript) скрипт нашолся:

func void start_camera_hochstand()
{
     Wld_SendTrigger("CAMERA_HOCHSTAND");\\Просто опять включает камеру. Они что перестраховывались чтоли три раза писали? lol...
};

И ещё одна вещь. В своём посте с вопросами, некоторые из которых уже сам разобрал, я спрашивал возможно ли включить камеру с самого начала игры и как, ведь в таком случае невозможно включить триггер скриптово!
Тему такую замутить можно. Те кто играл в Диккурик, вспомните - там в самом начале вокруг Ардарика, когда тот говорит крутится камера. Причём крутится по кругу, циклично! Я проверял, кейфремы там не замкнуты! Камера называется CAMERA_GAME_START. И триггеров к ней действительно НЕТ! Я всё облазил, но не нашол ни одного. В свойствах от камеры CAMERA_HOCHSTAND она отличается только одним параметром. Что за параметр и на что он влияет я не знаю. Если кому интересно какой, спрашивайте, щас нет желания смотреть - может и не нужен он вовсе...
Однако скрипт с этой камерой всё же есть. Это тот самый разговор Ардарика, но запихнут он почему-то всё в тот же файл schrank_a_nah.d, а не в диалоги ГГ.

func void vor_hochstand()
{
     if(STARTDIALOGGESPROCHEN == 0)\\Опять какая-то малопонятная функция
     {
           IntroduceChapter("Kapitel 1","Ardarics Leben","chapter.tga","levelup.wav",6000);\\Окно первой главы "Жизнь Ардарика" с файлом заставки chapter.tga и звуковым файлом levelup.wav на время 6000
           AI_Standup(self);\\Перевод ГГ в стоячее положение
           Wld_SendTrigger("CAMERA_GAME_START");\\Наша камера!
           AI_Output(hero,hero,"DIA_DIC_Monolog_15_00");\\Бл а, бла, бла и всё такое... ::)
           AI_Wait(hero,1);\\Чего ждать?
           AI_StandupQuick(hero);
           AI_Output(hero,hero,"DIA_DIC_Monolog_15_01");      
           AI_Output(hero,hero,"DIA_DIC_Monolog_15_02");      
           AI_Wait(hero,1);
           AI_StandupQuick(hero);
           AI_Output(hero,hero,"DIA_DIC_Monolog_15_03");      
           AI_TurnAway(hero,sld_b);
           AI_Wait(hero,1);
           AI_StandupQuick(hero);
           AI_Output(hero,hero,"DIA_DIC_Monolog_15_04");      
           AI_Output(hero,hero,"DIA_DIC_Monolog_15_05");      
           AI_Wait(hero,1);
           AI_StandupQuick(hero);
           AI_Output(hero,hero,"DIA_DIC_Monolog_15_06");      
           AI_Wait(hero,1);
           AI_StandupQuick(hero);
           AI_Output(hero,hero,"DIA_DIC_Monolog_15_07");      
           AI_Wait(hero,1);
           AI_StandupQuick(hero);
           AI_Output(hero,hero,"DIA_DIC_Monolog_15_08");      
           AI_Output(hero,hero,"DIA_DIC_Monolog_15_09");      
           AI_Wait(hero,1);
           AI_StandupQuick(hero);
           AI_GotoNpc(hero,sld_a);\\Ардарик идёт к Солдатику.
           AI_GotoNpc(sld_b,sld_a);\\К другому солдатику.
           STARTDIALOGGESPROCHEN = 1;\\Опять неизвестно где декларированная функция...
     };
};

Исходя из всего вышесказанного думаю что вопросы возникли не только у меня. Попробую их сформулировать для ясности и давайте их вместе как-нибудь решим.

1. С какой целью к камере приязали два триггера, одним из которых ещё заключили стоящего на вышке ГГ в "кубик"?
2. Зачем второй триггер "прилипили" прямо на камеру?
3. Где декларированны все эти функции: SCAVHORNUSED = TRUE; if(HOCHSTANDAKTIVIERT == 0); HOCHSTANDAKTIVIERT = HOCHSTANDAKTIVIERT + 1; if(STARTDIALOGGESPROCHEN == 0); STARTDIALOGGESPROCHEN = 1; и что они все означают?
4. Зачем задавать подобного типа условия: if((Npc_GetDistToWP(self,"SEE_VOR_STADT_12") <= 1000) && (DC_1_TOWER != 3) && !SCAVHORNUSED); if(Npc_GetDistToWP(sld_b,"AM_HOCHSTAND_00") < 800))???
5. Почему нельзя было все эти скрипты соединить в один? Зачем разбрасывать по файлам?
6. Если я не ошибаюсь, триггер Wld_SendTrigger("CAMERA_HOCHSTAND") включает функционирование камеры. Зачем его писать три раза  разных скриптах? Ведь они все выполняются одновременно!
7. Как Amatheur Gothic Mod Team(кажется так они называются) врубили камеру без триггера? Откуда скрипт vor_hochstand? Или я что-то просмотрел? Но в списке триггеров на камеру CAMERA_GAME_START точно ничего нет!
8. Как разрабы зациклили камеру CAMERA_GAME_START?

Надеюсь на сильных мира сего. Модостроительством занимаюсь около двух месяцев, думаю тут у многих опыта больше, поэтому ПАМАГИТЕ ::)

Спешиал сэнкс камраду Отцу Левонтию за помощь в столь трудном деле :)

Ответить с цитированием
Старый 09.07.2005, 13:38   #537
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

По умолчанию Re: Скриптинг в Готике

2Vendiga:
Во-первых, респект за исследование :pivo:

[q]3. Где декларированны все эти функции: SCAVHORNUSED = TRUE; if(HOCHSTANDAKTIVIERT == 0); HOCHSTANDAKTIVIERT = HOCHSTANDAKTIVIERT + 1; if(STARTDIALOGGESPROCHEN == 0); STARTDIALOGGESPROCHEN = 1; и что они все означают?[/q]

Переменные (а не функции) HochstandAktiviert и StartDialogGesprochen введены в файле Story_Globals.d и они нужны лишь для одной цели: дабы увериться, что функция выполнится только один раз. Потому что при следующем входе переменная HochstandAktiviert будет уже иметь значение один, и самое первое условие не выполнится.

[q]4. Зачем задавать подобного типа условия: if((Npc_GetDistToWP(self,"SEE_VOR_STADT_12") <= 1000) && (DC_1_TOWER != 3) && !SCAVHORNUSED); if(Npc_GetDistToWP(sld_b,"AM_HOCHSTAND_00") < 800))???[/q]

Чтобы проверить, находится ли Ардарик там, где нужно, активируя рог, не использовался ли уже рог для этой же цели, а DC_1_TOWER - это какая-то глобальная вспомогательная переменная, которая довольно часто меняет свое значение в диалогах, в общем, какое-то состояние сюжета или игры, а вообще точно сказать не могу.

5. Почему нельзя было все эти скрипты соединить в один? Зачем разбрасывать по файлам?
Гм, возможно разрабы специально хотели нас запутать. Или неаккуратные они :)

На остальные вопросы попытаюсь ответить позже, поисследовав немного ZEN Диккурика, просто сейчас времени нет ::)
Отправить личное сообщение для Ответить с цитированием
Старый 09.07.2005, 14:27   #538
Bliz@rd

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

Ukur в статупе я прописывал,я же написал выше,что после чего прописываю!
Ответить с цитированием
Старый 09.07.2005, 14:41   #539
Vendiga

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2TycoooN: -    :pivo: :pivo: :pivo:
3. Ну... на самом деле я эти переменнные и не искал ещё - тож ленюсся ::)
Ща посмотрю чего они творят и зачем...
4. Это я так же думал... но ИМХО можно было и без них обойтись или прописать по-другому - попроще. Потому и задумался...
5. И эта мысль мне тоже приходила - может эти разрабы порядок в скриптах не очень то любили, как я? :) Потому мне это странным показалось... в одну папку запихивать совершенно разные скрипты - жуть!
Ответить с цитированием
Старый 09.07.2005, 15:27   #540
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2Vendiga:
Потому мне это странным показалось... в одну папку запихивать совершенно разные скрипты - жуть!
Если ты про папку _misk_, то туда файлы запихивает только Декомпилятор, когда не может точно определить к какой папке относится файл. Настройка папок в Декомпиляторе сделана только под оригинальные версии игр Готика1 и Готика2 + аддон.

Откуда скрипт vor_hochstand?
Данная функция повешена на триггер TS_VOR_HOSHSTAND, при каком условии он срабатывает надо смотреть zen файл. Таких триггеров в файле даже четыре.

8. Как разрабы зациклили камеру CAMERA_GAME_START?
Вот эти параметры camTrjFOR и targetTrjFOR камеры зацикливают её движение (имхо), параметров у камеры очень много, нужно разбираться.
Ответить с цитированием
Старый 09.07.2005, 18:54   #541
Vendiga

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

Вношу некоторые поправки к переменным:

func void use_scavhorn()\\Описание функции использования
{
     if((Npc_GetDistToWP(self,"SEE_VOR_STADT_12") <= 1000) && (DC_1_TOWER != 3) && !SCAVHORNUSED)\\Здесь яно видно, что функуция выполняется, если не определена переменная SCAVHORNUSED (!SCAVHORNUSED)
     {
           Wld_SetGuildAttitude(GIL_WOLF,ATT_ANGRY,GIL_SCAVE NGER);\\Волки вдруг стали врагами падальщиков
           Wld_InsertNpc(v_scav1,"SEE_VOR_STADT_06");\\Появл яются сами падальщики
           Wld_InsertNpc(v_scav2,"SEE_VOR_STADT_06");
           Wld_InsertNpc(v_scav3,"SEE_VOR_STADT_06");
           Wld_InsertNpc(v_scav4,"SEE_VOR_STADT_06");
           SCAVHORNUSED = TRUE;\\А вот тут она и определяется как TRUE. Т.е. выполнение функции вторично уже неозможно.
           Wld_SendTrigger("TS_CAMERA_HOCHSTAND");\\Подключа ется камера
     }

func void hochstandwoelfe()
{
     if(HOCHSTANDAKTIVIERT == 0)\\Тут условие выполняется если HOCHSTANDAKTIVIERT равно 0.
     {
           HOCHSTANDAKTIVIERT = HOCHSTANDAKTIVIERT + 1;\\HOCHSTANDAKTIVIERT + 1 уже не рано 0. поэтому вторично функция не выполняется.
           if(Npc_GetDistToWP(sld_b,"AM_HOCHSTAND_00") < 800))\\ если дистанция до варпоинта меньше 800

func void vor_hochstand()
{
     if(STARTDIALOGGESPROCHEN == 0)\\Всё тоже самое.
     {            
     STARTDIALOGGESPROCHEN = 1;\\STARTDIALOGGESPROCHEN уже не рана 0 поэтому вторично функция не вызывается.
};

Но я всё-равно не пойму - ЗАЧЕМ??? Все переменные выполняют одну функцию - не дать вторично запустить функцию. Но в первром случае всё достаточно просто и грамматно, а востальных... по-карсацки... наверно скрипты писали два разных человека со своим пониманием и своими тараканими. Другого объяснения у меня нет...

Добавление от 07/09/05, в 16:24:56
2Vam:
Данная функция повешена на триггер TS_VOR_HOSHSTAND, при каком условии он срабатывает надо смотреть zen файл. Таких триггеров в файле даже четыре.
Где ты их нашол???  :dead:
Вот эти параметры camTrjFOR и targetTrjFOR камеры зацикливают её движение (имхо), параметров у камеры очень много, нужно разбираться.
Ща проверю...

Добавление от 07/09/05, в 18:53:42
Так, блин, теперь одно всаёт на своиё место, но появляются новые вопросы!!!

Короче вот как этоо выглядет в игре:
Когда Ардарик забирается на башню, попадает в поле действия триггера TS_HOCHSTAND, срабатывает его скриптфункция HOCHSTANDWOELFE

func void hochstandwoelfe()
{
     if(HOCHSTANDAKTIVIERT == 0)\\??? Вроде условие если камера включена...
     {
           HOCHSTANDAKTIVIERT = HOCHSTANDAKTIVIERT + 1;\\Вопросы, кругом вопросы ::)
           if(Npc_GetDistToWP(sld_b,"AM_HOCHSTAND_00") < 800))\\ если дистанция до варпоинта меньше 800
           {
                 Npc_ExchangeRoutine(sld_b,"RALF");\\Убежали неписи, которые ГГ подставили
                 Npc_ExchangeRoutine(sld_a,"RAL");
                 AI_ContinueRoutine(sld_b);
                 AI_ContinueRoutine(sld_a);
           };
           AI_OutputSVM_Overlay(hero,hero,"TurmGefangen_15_0 0");");//Это реплика Ардарика, когда приходят волки. «Откуда взялись эти волки...» говорит он
           AI_StandupQuick(hero);\\Перевод ГГ в стоячее состояние
           Wld_SendTrigger("TS_CAMERA_HOCHSTAND");\\
           bh_wolfspawn();\\Функция такая. Приведена в отдельном одноимённом файле
     };
};

Который врубает другой триггер TS_CAMERA_HOCHSTAND, а тот в свою очередь выполняет свою скриптфункцию START_CAMERA_HOCHSTAND и врубает камеру в первый раз(да-да, именно в первый, так как она включается два раза - сначала при появлении волков, потом при появлении падальщиков. Но в первый раз камеру включает триггер, а во второй скрипт рога)

Потом чтобы избавиться от волков ГГ использует рог, который снова активирует триггер TS_CAMERA_HOCHSTAND, который активирует во второй раз функцию  START_CAMERA_HOCHSTAND.

Но я никак не могу отследить каким образом триггер реагирует на появление ГГ в своём фокусе! Единственное что приходит в голову свойство триггера reapondToPC(дословно переводится как отзыв на Player Characters - игровой характер). Думаю это и есть реакция на ГГ. Но вот проблема - этот параметр выставлен на TRUE у всех триггеров! То есть они все должны реагировать на ГГ, даже если несут другую функцию. На мой взгляд объясняется это тем, что эти триггеры точечные и не должны функционировать при приближении к ним главного героя. Чёрт, я сам запутался!
Короче триггер TS_HOCHSTAND отличается от остальных тем, что не реагирует ни на объекты, ни на НПС. Только на ГГ.

Вношу ещё несколько поправок:

Я ошибся. Мне стыдно. Камера начала Диккурика не зациклина. Она Просто не выключается, когда пройдёт цикл, а смотрит на ГГ в точке своей последней остановки. ГГ поварачивается к камере и продолжает свой монолог.
И ещё я ошибся на счёт того, что она включается сразу сначала игры. Нет, сначала мы видим ГГ. Нужно сделать один шаг в любую сторону, чтобы камера активировалась. Но я всё-таки не нашол ни одного триггера, привязанного к ней! Vam триггера TS_vor_hochstand  не существует! Более того нет ни одного триггера со скриптфункцией vor_hochstand.
Так как же разрабы Диккурика включили камеру?
Так как же отследить в триггере появление ГГ?



Добавление от 07/09/05, в 19:14:55
А может быть камера реагирует на ГГ не триггером, а скриптом? Вот этой функциейif(Npc_GetDistToWP(sld_b,"AM_HOCHSTAND_00") < 800))
Ответить с цитированием
Старый 09.07.2005, 22:27   #542
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2Vendiga:
Vam триггера TS_vor_hochstand  не существует! Более того нет ни одного триггера со скриптфункцией vor_hochstand.
Ты триггера ищещь в Спейсере, а я прямо в zene, вот текст этого триггера:
[% oCTriggerScript:zCTrigger:zCVob 24577 11141]
     pack=int:0
     presetName=string:
     bbox3DWS=rawFloat:41520.625 13904.0352 -10567.6445 42020.625 14104.0352 -10467.6445
     trafoOSToWSRot=raw:0000803f0000000000000000000000 000000803f0000000000000000000000000000803f
     trafoOSToWSPos=vec3:41770.625 14004.0352 -10517.6445
     vobName=string:TS_VOR_HOCHSTAND
     visual=string:
     showVisual=bool:1
     visualCamAlign=enum:0
     cdStatic=bool:0
     cdDyn=bool:1
     staticVob=bool:0
     dynShadow=enum:0
     [visual % 0 0]
     []
     [ai % 0 0]
     []
     triggerTarget=string:
     flags=raw:07
     filterFlags=raw:3f
     respondToVobName=string:
     numCanBeActivated=int:-1
     retriggerWaitSec=float:0
     damageThreshold=float:0
     fireDelaySec=float:0
     scriptFunc=string:VOR_HOCHSTAND
[]
их всего четыре, а где они находятся на карте я не знаю.  :(
Может в Спейсере есть какой-нибудь поиск по имени или по номеру.
Ответить с цитированием
Старый 10.07.2005, 01:13   #543
Vendiga

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2Vam:
их всего четыре, а где они находятся на карте я не знаю.  
Может в Спейсере есть какой-нибудь поиск по имени или по номеру.
Четыре одинаковых? Хм... странно, вроде везде где могут быть триггеры я смотрел...
поиска тоже вроде в спейсере нет :(
Ответить с цитированием
Старый 13.07.2005, 23:41   #544
Otec_Levontiy

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

Привет всем! Давно хотел зарегиться и вот решил наконец...
Вот мой первый вопрос, который я уже на АЛЛГОТИК задавал, но мне ни чего не ответили :(
Надеюсь,тут мне помогут... ::)
Я хочу сдалать такую штуку, чтобы если ГГ подходит к варпоинту, то на нем появляется монстр.
Вот мой скрипт:
func void B_Ins_Monstr()
{
if(Npc_GetDistToWP(Dragon_PLOT_DEMON, "NW_XARDAS_TOWER_PATH_01") < 2000)//если ГГ до варпоинта осталось меньше 20 метров, то
{
Wld_InsertNpc(Giant_Bug,"NW_XARDAS_TOWER_PATH_01") ;// на этом варпоинте появляется Полевой жук
};
};

Для моего скрипта я создал отдельный файл B_Ins_Monstr.d в папке B_Content(более подходящей не нашел), при компиляции нет ни каких ошибок, но в игре эта штука не работает. Запускаю не с сейва, а начинаю новую игру.
Помогите, кто может!
З.Ы. Dragon_PLOT_DEMON - это мой дракон ::)
Ответить с цитированием
Старый 14.07.2005, 06:30   #545
BORISOFF

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2Отец Левонтий: может я не так понял, но:
if(Npc_GetDistToWP(Dragon_PLOT_DEMON, "NW_XARDAS_TOWER_PATH_01") < 2000)//если ГГ до варпоинта осталось меньше 20 метров
- то, если
Dragon_PLOT_DEMON - это мой дракон
значит получается, что если драгон находится в 20 метрах от вайпоинта, то тогда инсертнется
Giant_Bug
, а тебе надо, чтобы монстр появлялся при подходе ГГ, значит надо заменить
if(Npc_GetDistToWP(Dragon_PLOT_DEMON, "NW_XARDAS_TOWER_PATH_01") < 2000)//
на
if(Npc_GetDistToWP(self, "NW_XARDAS_TOWER_PATH_01") < 2000)//
Ответить с цитированием
Старый 14.07.2005, 10:03   #546
finch

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2Отец Левонтий:
на
if(Npc_GetDistToWP(self, "NW_XARDAS_TOWER_PATH_01") < 2000)
а лучше на if(Npc_GetDistToWP(hero, "NW_XARDAS_TOWER_PATH_01") < 2000)
Ответить с цитированием
Старый 14.07.2005, 10:06   #547
BORISOFF

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2finch:
а лучше на if(Npc_GetDistToWP(hero, "NW_XARDAS_TOWER_PATH_01") < 2000)
а чем лучше?
Ответить с цитированием
Старый 14.07.2005, 11:13   #548
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2finch:
а лучше на if(Npc_GetDistToWP(hero, "NW_XARDAS_TOWER_PATH_01") < 2000)
2Borisoff:
а чем лучше?
Всё зависит от того, откуда вызывается данная функция, на self, если ГГ в этот момент не self, может не сработать, на hero же сработает всегда. Если использовать self, то надо добавить условие if(Npc_IsPlayer(self))
Ответить с цитированием
Старый 14.07.2005, 12:39   #549
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

По умолчанию Re: Скриптинг в Готике

А чего вы тут спорите? Скрипт-то все равно работать не будет, пока функция B_Ins_Monstr() не будет вызвана. Ее можно вызвать через триггер, но тут уж я не силен :)
Отправить личное сообщение для Ответить с цитированием
Старый 14.07.2005, 12:53   #550
BORISOFF

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2TycoooN: но ведь даже если вызывать, то в начальном варианте работать она не будет.
Ответить с цитированием
Старый 14.07.2005, 14:35   #551
Otec_Levontiy

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

Цитата:
Сообщение от TycoooN link=board=gothic&t=1105030050&start=525#548 date=07/14/05, в 12:39:45
А чего вы тут спорите? Скрипт-то все равно работать не будет, пока функция B_Ins_Monstr() не будет вызвана. Ее можно вызвать через триггер, но тут уж я не силен :)
Почему через триггер? Вот, например, в скриптах одного наемника, с которым ГГ идет убивать Полевых жуков в конце *одной из фраз прописана вставка 4-х Полевых жуков и без триггеров. Просто прописан инсерт, как в Стартупе...

З.Ы. Вопрос не в тему: как сохранить странички с этого форума? Жму файл -> сохранить как..., но ни чего не происходит... Кнопка для печати открывает новое окно, в котором не найдена страница... Как мне скачать страничу с форума?
Ответить с цитированием
Старый 14.07.2005, 14:54   #552
BORISOFF

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2Отец Левонтий:
Вот, например, в скриптах одного наемника, с которым ГГ идет убивать Полевых жуков в конце *одной из фраз прописана вставка 4-х Полевых жуков и без триггеров. Просто прописан инсерт, как в Стартупе...
потому что инсерт прописан в функции диалога. А там у тебя отдельная функция.
2TycoooN: а если ссылку на функцию вставить в диалоговую функцию, тоже что ли не будет пахать? Имхо, должна, но только пока идет диалог. То есть если во время диалога ГГ в двух метрах от ваупоинта, то монстр инсертнется, иначе же ничего не произойдет. Я прав?
Ответить с цитированием
Старый 14.07.2005, 15:02   #553
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2Отец Левонтий:
2Borisoff:
Товарищи, чтобы функция выполнилась, её надо откуда-нибудь вызвать (из диалога, из циклов состояний, через триггер и т.д.), без разницы откуда.
А чтобы пахало, то внутри функции не должно быть ошибок.
А там у тебя отдельная функция и ее надо э... инициализировать.
Инициализация как раз уже есть, это объявление имени функции с её телом. Это всё банально просто.

как сохранить странички с этого форума?
Выделяешь, копируешь, вставляешь  :D
Ответить с цитированием
Старый 14.07.2005, 15:04   #554
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

По умолчанию Re: Скриптинг в Готике

Почему через триггер? Вот, например, в скриптах одного наемника, с которым ГГ идет убивать Полевых жуков в конце *одной из фраз прописана вставка 4-х Полевых жуков и без триггеров. Просто прописан инсерт, как в Стартупе...
а если ссылку на функцию вставить в диалоговую функцию, тоже что ли не будет пахать? Имхо, должна, но только пока идет диалог. То есть если во время диалога ГГ в двух метрах от ваупоинта, то монстр инсертнется, иначе же ничего не произойдет. Я прав?
Да я не об инсерте говорил, а о том, что функция в любом случае не сработает, что бы в ней ни было прописано, т.к. ее нужно как-то вызвать. А уж как - это проблема. Можно через триггер.
Отправить личное сообщение для Ответить с цитированием
Старый 14.07.2005, 19:12   #555
Otec_Levontiy

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

чтобы функция выполнилась, её надо откуда-нибудь вызвать (из диалога, из циклов состояний, через триггер и т.д.), без разницы откуда.
А если ее вызвать из диалога(сделать переменную, если диалог совершен, то TRUE), то обязательно находиться во время разговора на расстоянии <20 метров от данного варпоинта?
Ответить с цитированием
Старый 14.07.2005, 20:19   #556
finch

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2Отец Левонтий:
А если ее вызвать из диалога(сделать переменную, если диалог совершен, то TRUE), то обязательно находиться во время разговора на расстоянии <20 метров от данного варпоинта?
Все можно сделать гораздо проще, т.е. через триггер (как говорил товарищ TycoooN:).
Ставишь триггер (этак, 40х40 метров :)) вокруг своего вэйпоинта, ГГ попадает в зону триггера, монстр инсертится... Это будет стопудово проще! ;)
Ответить с цитированием
Старый 14.07.2005, 20:51   #557
Vendiga

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2finch:
Ну а как этот блин тргиггер заразмерить?
Теперь ясно зачем этот Edit the box нужен! Вот только обращаться я с ним не научился :( Как размеры то задавать? Ну нажал я Edit the box, появилось два точечных воба "DRAGVOB 1" и "DRAGVOB 2"... я так понял размеры задавать надо координатами через Boundingbox-Dialog, но они не меняются! Какие не задаёшь, всё равно остаются прежними... ::(
Ответить с цитированием
Старый 14.07.2005, 23:24   #558
Otec_Levontiy

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2finch:
И как этот триггер реализовать в скриптах? Че и где надо прописывать?
Ответить с цитированием
Старый 15.07.2005, 00:51   #559
finch

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

2Vendiga:
я так понял размеры задавать надо координатами через Boundingbox-Dialog, но они не меняются! Какие не задаёшь, всё равно остаются прежними...
Правильно понял! ;) Выделяешь свой тригер, на закладке modify нажимаешь
Edit the box
, выскакивает
Boundingbox-Dialog
, нажимаешь Define, там будет три показателя (x, y, z), поставь например везде по 100, вокруг триггера появится такой красный куб... вот и все! :)

2Отец Левонтий:
И как этот триггер реализовать в скриптах? Че и где надо прописывать?
Млин... Достаточно долго все объяснять... попробуй разобраться на готовом примере.. возле двора Онара есть склеп со скелетами... там когда сундуки открываешь, эти скелеты как раз и появляются... все это реализовано при помощи триггеров... посмотри, попробуй разобраться! ;) если что будет непонятно - спрашивай!
Ответить с цитированием
Старый 15.07.2005, 10:48   #560
Killer-XXX
Строители Миртаны
 
 
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
Killer-XXX вне форума

По умолчанию Re: Скриптинг в Готике

Вопрос такой:
Замучился я уже с этими диалогов после боя. Оказалось, что у всех работает нормально, а у наемников не хотел.
Сделал я так, чтобы говорил он мне мой диалог. Но...
Наемник сначала говорит SVM 'Хорошо, ты победил', и открывает диалог с ним. Если выйти, то только тогда он скажет МОЙ диалог.
Задача. Нужно как то отключить для определенного NPC вывод SVM после боя.

З.Ы. Я делал через B_AssignToughGuyNews.d. Сначала сделал так, чтобы не говорил он, не говорит, но все равно открывал диалог с собой. Тогда я сделал, чтобы он делал AI_StopProcessInfos(self); - т.е. не говорил и автоматом закрывал диалог, вроде все работает как надо, но камера дергается от диалога к простой. Вообщем вы поняли через какое место это реализовано :), хотелось бы по нормальному реализовать.
Ответить с цитированием
Страница 14 из 65 « Первая 47891011121314 151617181920212464 Последняя »


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

Расширенный поиск

Ваши права в разделе

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


Текущее время: 12:43. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot

AGFC: Valley of Gothic © 2004-2022

Яндекс.Метрика