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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

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

MaGoth

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

Вложения

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

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.300
Благодарности
4.633
Баллы
625
Ну ваще экстендером можно в очередь их поместить
1698699645052.png
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.992
Благодарности
967
Баллы
275
Если нет ничего стандартного, то может плагин у кого завалялся на эту тему?

если стоит юнион (zParserExtender)без юниона
Код:
// Ставит вызов функции funcName в AI очередь
// и при ее вызове помещает значения slf & oth
// в глобальные self & other (соотвественно)
func void AI_CallScript(var string funcName, var C_Npc slf, var C_Npc oth)
Код:
func void AI_StartState(var c_npc self, var func what, var int statebehaviour, var string wpname)
Daedalus:
func void DIA_blabla_Info()
{
    AI_Output(other,self,"DIA_blabla_15_00");    //Как дела?
    AI_Output(other,self,"DIA_blabla_15_01");    //Как дела_2?
    AI_Output(other,self,"DIA_blabla_15_01");    //Как дела_3?
    AI_Output(other,self,"DIA_blabla_15_01");    //Как дела_4?
    AI_CallScript("B_func", self, other)
    AI_Output(self,other,"DIA_blabla_09_02");    //Так же.
    AI_Output(self,other,"DIA_blabla_09_02");    //Так же_2.
    AI_Output(self,other,"DIA_blabla_09_02");    //Так же_3.
    AI_Output(self,other,"DIA_blabla_09_02");    //Так же_4.
    AI_CallScript("B_func_dva", self, other)
    AI_Output(other,self,"DIA_blabla_15_01");    //Как дела_5?
    AI_Output(self,other,"DIA_blabla_09_02");    //Так же_5.
};
Daedalus:
func void DIA_blabla_Info_3()
{
    B_func_dva();
    AI_Output(other,self,"DIA_blabla_15_01");    //Как дела_5?
    AI_Output(self,other,"DIA_blabla_09_02");    //Так же_5.
};
func void DIA_blabla_Info_2()
{
    B_func();
    AI_Output(self,other,"DIA_blabla_09_02");    //Так же.
    AI_Output(self,other,"DIA_blabla_09_02");    //Так же_2.
    AI_Output(self,other,"DIA_blabla_09_02");    //Так же_3.
    AI_Output(self,other,"DIA_blabla_09_02");    //Так же_4.
   AI_StartState    (self, DIA_blabla_Info_3, 1, "");
};
func void DIA_blabla_Info()
{
    AI_Output(other,self,"DIA_blabla_15_00");    //Как дела?
    AI_Output(other,self,"DIA_blabla_15_01");    //Как дела_2?
    AI_Output(other,self,"DIA_blabla_15_01");    //Как дела_3?
    AI_Output(other,self,"DIA_blabla_15_01");    //Как дела_4?
    AI_StartState    (self, DIA_blabla_Info_2, 1, "");
};
 
Последнее редактирование:

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
да тот же Print("какой-то текст");
Для текста в движке Г2 есть функция AI_PrintScreen.

Если используется Юнион, то лучше, конечно, применять, предоставляемые расширителем возможности, как написали выше. Но можно костылями сделать и без Юнион. В мод-фиксе, например, в очередь AI-функций встраивается использование служебного предмета. А уже при использовании предмета вызывается связанная с ним скриптовая функция.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.840
Благодарности
6.725
Баллы
1.625
Для текста в движке Г2 есть функция AI_PrintScreen.
Да, это знаю, но мне нужна функция Wld_PlayEffect и PrintDialog.
Да и вообще пытаюсь реализовать триалог/квадралог ))
Получаться - получается, только вот текст второго/третьего непися выводится в 4й диалоговый бар(где в smalltalk выводится). Вот и пытаюсь вывести в нормальное диалоговое окно, которое через PrintDialog выводится))
И тут собсно опять вопросы:
Какой шрифт используется в диалогах?
Как сделать перенос строки, если выходит за рамки? "\n" - неканат))
Как сделать вывод в диалоговое окно сразу несколько шрифтов?
Либо все это объединить то: Как ввести второго/третьего непися в режим диалога? Ибо если второй/третий непись стоит руки-в-боки, то у него только челюсть шевелится, как и текст печатается в 4й диалоговый бар...
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Да и вообще пытаюсь реализовать триалог/квадралог ))
Кажется, в Юнион есть что-то по этому поводу. Gratt подскажет, наверное.

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

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.300
Благодарности
4.633
Баллы
625
Я этим точно не занимался. Могу попробовать, если кто-то сами диалоги сделает
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.992
Благодарности
967
Баллы
275
Либо все это объединить то: Как ввести второго/третьего непися в режим диалога? Ибо если второй/третий непись стоит руки-в-боки, то у него только челюсть шевелится, как и текст печатается в 4й диалоговый бар...
покажи свой текущий код
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.840
Благодарности
6.725
Баллы
1.625
покажи свой текущий код
Рабочий дома, но он почти такой:
Daedalus:
instance DIA_Sentenza_test(C_Info)
{
    npc = SLD_814_Sentenza;
    nr = 1;
    condition = DIA_Sentenza_test_Condition;
    information = DIA_Sentenza_test_Info;
    permanent = TRUE;
    description = "asdasd";
};


func int DIA_Sentenza_test_Condition()
{
    return TRUE;
};

func void DIA_Sentenza_test_Info()
{
    AI_Output(other,self,"DIA_Sentenza_PERM_15_00");    //Эй, как дела?
    AI_WaitTillEnd(SLD_817_Soeldner, other);
    AI_Output(SLD_817_Soeldner,other,"DIA_Sentenza_PERM_09_01");    //Мало кто заходит сюда, но до последнего времени все они платили мне сбор.
    AI_WaitTillEnd(self, SLD_817_Soeldner);
    AI_Output(self,other,"DIA_Sentenza_PERM_09_02");    //За исключением тебя.
};
Эт на скоряк сварганил
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.840
Благодарности
6.725
Баллы
1.625
надо только в gothic.ini включить все субтитры:
subTitles=1
subTitlesAmbient=1
subTitlesPlayer=1
subTitlesNoise=1
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.992
Благодарности
967
Баллы
275
MEG@VOLT, в Истории Хориноса это было реализовано путём смены НПС участвующего в диалоге. там была функция написанная на Union

Код:
extern func void TR_ChangeSpeaker(var instance par0);

в скриптах это выглядело так
Daedalus:
    AI_Output (other, self, "DIA_Rhobar_TR_Start_00"); //Wasza wysokoњж.

    TR_ChangeSpeaker(VLK_885_Rigaldo_TR);

    AI_LookAtNpc(other, VLK_885_Rigaldo_TR);

    AI_Output (other, self, "DIA_Rhobar_TR_Start_01"); //Marszaіku.

    AI_StopLookAt (VLK_885_Rigaldo_TR);
    TR_ChangeSpeaker(self);

    AI_Output (self,other, "DIA_Rhobar_TR_Start_02");  //Arcymistrzu.

    TR_ChangeSpeaker(VLK_885_Rigaldo_TR);

    AI_Output (self,other, "DIA_Rhobar_TR_Start_03");  //To dla mnie zaszczyt.

    TR_ChangeSpeaker(self);

    AI_Output (self,other, "DIA_Rhobar_TR_Start_04"); //Pora otworzyж obrady.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.840
Благодарности
6.725
Баллы
1.625
Вот получить бы еще эту функцию))
Яж ни бум-бум в Union ))
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.992
Благодарности
967
Баллы
275
точнее взятая функция из пакета lego и написанная под Union
мы сейчас будем играть в слова? или проводить следственный эксперимент? давай доставим авторов в подвалы лубянки и устроим перекрёстный допрос что бы выяснить переписали ли они функцию лего под юнион, или взяли идею из лего и написали на юнион свой код, или они вообще даже не знали о существование такого аналога на лего. можно и паяльник задействовать для получения истины.

Вот получить бы еще эту функцию))
надо Gratt просить или Slavemaster
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.992
Благодарности
967
Баллы
275
MEG@VOLT, попробовал на скриптах. как то мутно получается
Daedalus:
func void DIA_Addon_Martin_MeetingIsRunning_Info_2()
{
    Hlp_PrintConsole(Str_Format("DIA_Addon_Martin_MeetingIsRunning_Info_2 self.name=%s",self.name));

    AI_StopProcessInfos(self);


    // корд начало
    var c_npc newnpc;
    newnpc = Hlp_GetNpc(SLD_805_Cord);
    
    Npc_ClearAIQueue    (newnpc);
    B_ClearPerceptions    (newnpc);   
    
    // вариант1
    //AI_ProcessInfos(npc); // не подходит
    //AI_Wait(npc,10);
    // вариант2
    AI_StartState     (newnpc, ZS_Talk, 1, "");     //подходит


    // диалог
    AI_Output(newnpc,hero,"DIA_Addon_Cord_MeetingIsRunning_14_01");    //Ты должен поговорить с Ватрасом...
    
    AI_StopProcessInfos(newnpc);

    // корд конец
};

func void DIA_Addon_Martin_MeetingIsRunning_Info()
{
    if(DIA_Addon_Martin_MeetingIsRunning_OneTime == FALSE)
    {
        AI_Output(self,other,"DIA_Addon_Cord_MeetingIsRunning_07_00");    //Итак, ты новенький? Добро пожаловать в Братство, брат по Кольцу.
        DIA_Addon_Martin_MeetingIsRunning_OneTime = TRUE;
    };
    AI_Output(self,other,"DIA_Addon_Cord_MeetingIsRunning_07_01");    //Сначала ты должен сходить к Ватрасу. Возможно, потом у меня найдется для тебя время.
    
    
    if Npc_IsInCutscene(self)
    {
        Hlp_PrintConsole(Str_Format("Npc_IsInCutscene [%s]",self.name));
    };   
    
    AI_StartState    (self, DIA_Addon_Martin_MeetingIsRunning_Info_2, 1, "");
};
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.840
Благодарности
6.725
Баллы
1.625
MW 7, два раза AI_StopProcessInfos ?
И при этом диалог не завершается?
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
1.640
Благодарности
2.438
Баллы
380
Slavemaster, у меня все через плагин + внешки. Если захотите, код скину, только не знаю кому.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.840
Благодарности
6.725
Баллы
1.625
@MEG@VOLT, попробовал на скриптах. как то мутно получается
Не... Это вообще криво получается.
Сначала с одним диалог, он тут же закрывается, начинается с другим диалог.
Тоже самое, как прописать обоим неписям, чтое сли есть инфа от первого, то второй тут же начинает разговор, и так по очереди передергивают друг друга. Выглядит ужасно...
 
Сверху Снизу