- Регистрация
- 24 Мар 2006
- Сообщения
- 9.860
- Благодарности
- 6.740
- Баллы
- 1.625
Для начала - немного из библии скриптера, «Уроков скриптологии» от Vam.
Для описания диалогов применяется класс C_Info. Вот его параметры:
Параметры
Теперь разберем параметры немного подробнее.
npc
Параметр npc - это ID персонажа, которому принадлежит этот диалог. Простой пример:
В данном примере параметр npc - это ссылка на instance персонажа с именем BAU_900_Onar. И данный пункт диалога появится только при разговоре с данным персонажем (Онар).
Примечание:
Есть одна тонкость - параметр npc желателен, но не обязателен. Это значит, что диалог можно описать, но не присваивать его конкретному npc. И сделать, к примеру, чтобы он появлялся при разговоре с любым персонажем, через присвоение в функции ZS_Talk. Например, сделаем пункт диалога «Украсть» с именем instance DIA_Theft(C_Info).
Тогда, чтобы пункт диалога DIA_Theft появлялся в разговоре с каждым npc, в функции ZS_Talk делаем присвоение
Естественно, на это присвоение можно «навешать» дополнительные условия (кроме условий самого диалога), что разнообразит игру; но нужно иметь в виду, что в иерархии условий условие в ZS_Talk будет в данном случае самым верхним, т.е. обрабатываться первым.
В скриптах оригинала таким образом реализованы ambient-диалоги (см. к примеру папку B_AssignAmbientInfos).
Но нужно следить за совпадением номеров голосов персонажей в диалогах такого типа, если внутри диалога будут применяться операторы типа AI_Output*, иначе персонажи могут заговорить разными голосами.
nr
Параметр nr определяет, каким в списке пунктов диалога будет идти данный пункт. Чем больше nr, тем ниже будет показан этот пункт в меню.
В скриптах оригинала nr c номером 999 обычно используется для пункта диалога «Закончить разговор».
Если nr не указан, то пункт диалога будет показан в зависимости от порядка своего описания в файле скрипта диалога.
Обратите внимание, что для пунктов выбора, формируемых конструкцией Info_AddChoice, параметр nr не играет роли - пункты выбора показываются в зависимости от того, как они описаны в тексте скрипта - чем позже описан пункт выбора, тем выше он будет показан.
important
Параметр important отвечает за то, кто именно начинает данный диалог - персонаж или ГГ.
important = true означает, что персонаж сам обратится к ГГ.
important = false означает, что игроку нужно будет выбрать данный пункт диалога из меню.
Если есть несколько important-диалогов, то они будут отображаться в зависимости от параметра nr (если нет дополнительных условий).
condition
Параметр condition - это имя функции, которая должна вернуть true или false.
Если возвращено false, этот пункт диалога не будет отображен в меню (или не сработает, если это important-диалог).
Если возвращено true, то пункт диалога будет отображен в меню (или персонаж завяжет разговор с ГГ в случае important-диалога).
По сути, это обычная функция типа int, в теле которой допустимы любые конструкции скриптового языка готики. Но, так как она вызывается обработчиком восприятий каждого персонажа в поле зрения ГГ, то крайне нежелательно сильно утяжелять код этой функции, иначе игра начнет тормозить. И само собой, нежелательны операторы «активного управления» персонажем, типа смены расписания, атаки и т.п. - все подобное лучше и естественней делать в теле диалога, функции-параметре info.
Раз это обычная функция, ее можно вызывать и вне данного диалога, в других местах. Но движок вызывает ее и автоматически, исходя из параметра npc - если ID персонажа совпадает с параметром npc данного диалога, и персонаж в поле зрения ГГ.
Простой пример condition-функции:
Как видим, здесь применяется простая проверка ГГ на принадлежность его к определенной гильдии (то есть, если он НЕ принадлежит к конкретной гильдии - параметр guild ГГ равен GIL_NONE, что означает - «Нет гильдии»).
information
Параметр information - это имя функции, которая является «телом» диалога; в которой происходит основное действие, реакция на выбор данного пункта диалога из меню (в случае important-диалога - тело данного диалога).В данной функции происходит обмен репликами между ГГ и персонажем с помощью операторов AI_Output.
Пример - см. выше.
description
Параметр description - это строка текста, которая будет отображена в меню в качестве заголовка данного пункта диалога.
Пример - см. выше.
trade
Параметр trade отвечает за то, будет ли показан диалог торговли после того, как закончится обмен репликами (если он есть) в теле info-функции. trade = true означает, что торговля начнется, false - нет.
permanent
Параметр permanent отвечает за «постоянность» данного пункта диалога.
Если permanent = true, то этот пункт диалога не будет исчезать из меню после того, как «отработает» один раз.
Если permanent = false, то пункт диалога исчезнет из меню после того, как один раз будет выбран.
Обычно этот параметр применяют в паре с параметром trade; также он ставится в true для пункта «Закончить».
Автор - Маразмус
Для описания диалогов применяется класс C_Info. Вот его параметры:
Код:
class c_info
{
var int npc; //ID НПС, которому принадлежит диалог
var int nr; //Опция диалога с большим nr будет отображаться в списке ниже
var int important; //Флаг начала диалога (TRUE - диалог начинаешь ты, FALSE - с тобой)
var func condition; //Функция проверки условий начала диалога (пока функция не возвратит TRUE, диалог не начнется)
var func information; //Функция управления диалогом
var string description; //Строка, которая выводится в окно выбора вариантов ответов
var int trade; //Возможность торговли (TRUE - возможно торговать, FALSE - нет)
var int permanent; //Постоянность диалога (TRUE - диалог повторяется при каждом обращении, FALSE - однократный)
};
Теперь разберем параметры немного подробнее.
npc
Параметр npc - это ID персонажа, которому принадлежит этот диалог. Простой пример:
Код:
instance DIA_Onar_EXIT(C_Info)
{
npc = Bau_900_Onar;
nr = 999;
condition = DIA_Onar_EXIT_Condition;
information = DIA_Onar_EXIT_Info;
permanent = TRUE;
description = Dialog_Ende;
};
func int DIA_Onar_EXIT_Condition()
{
return TRUE;
};
func void DIA_Onar_EXIT_Info()
{
AI_StopProcessInfos(self);
};
Примечание:
Есть одна тонкость - параметр npc желателен, но не обязателен. Это значит, что диалог можно описать, но не присваивать его конкретному npc. И сделать, к примеру, чтобы он появлялся при разговоре с любым персонажем, через присвоение в функции ZS_Talk. Например, сделаем пункт диалога «Украсть» с именем instance DIA_Theft(C_Info).
Тогда, чтобы пункт диалога DIA_Theft появлялся в разговоре с каждым npc, в функции ZS_Talk делаем присвоение
Код:
DIA_Theft.npc = HLP_GetInstanceID(self)
В скриптах оригинала таким образом реализованы ambient-диалоги (см. к примеру папку B_AssignAmbientInfos).
Но нужно следить за совпадением номеров голосов персонажей в диалогах такого типа, если внутри диалога будут применяться операторы типа AI_Output*, иначе персонажи могут заговорить разными голосами.
nr
Параметр nr определяет, каким в списке пунктов диалога будет идти данный пункт. Чем больше nr, тем ниже будет показан этот пункт в меню.
В скриптах оригинала nr c номером 999 обычно используется для пункта диалога «Закончить разговор».
Если nr не указан, то пункт диалога будет показан в зависимости от порядка своего описания в файле скрипта диалога.
Обратите внимание, что для пунктов выбора, формируемых конструкцией Info_AddChoice, параметр nr не играет роли - пункты выбора показываются в зависимости от того, как они описаны в тексте скрипта - чем позже описан пункт выбора, тем выше он будет показан.
important
Параметр important отвечает за то, кто именно начинает данный диалог - персонаж или ГГ.
important = true означает, что персонаж сам обратится к ГГ.
important = false означает, что игроку нужно будет выбрать данный пункт диалога из меню.
Если есть несколько important-диалогов, то они будут отображаться в зависимости от параметра nr (если нет дополнительных условий).
condition
Параметр condition - это имя функции, которая должна вернуть true или false.
Если возвращено false, этот пункт диалога не будет отображен в меню (или не сработает, если это important-диалог).
Если возвращено true, то пункт диалога будет отображен в меню (или персонаж завяжет разговор с ГГ в случае important-диалога).
По сути, это обычная функция типа int, в теле которой допустимы любые конструкции скриптового языка готики. Но, так как она вызывается обработчиком восприятий каждого персонажа в поле зрения ГГ, то крайне нежелательно сильно утяжелять код этой функции, иначе игра начнет тормозить. И само собой, нежелательны операторы «активного управления» персонажем, типа смены расписания, атаки и т.п. - все подобное лучше и естественней делать в теле диалога, функции-параметре info.
Раз это обычная функция, ее можно вызывать и вне данного диалога, в других местах. Но движок вызывает ее и автоматически, исходя из параметра npc - если ID персонажа совпадает с параметром npc данного диалога, и персонаж в поле зрения ГГ.
Простой пример condition-функции:
Код:
instance DIA_Thekla_Lecker(C_Info)
{
npc = BAU_913_Thekla;
nr = 2;
condition = DIA_Thekla_Lecker_Condition;
information = DIA_Thekla_Lecker_Info;
permanent = FALSE;
description = "Как у тебя здесь вкусно пахнет!";
};
func int DIA_Thekla_Lecker_Condition()
{
if(other.guild == GIL_NONE)
{
return TRUE;
};
};
func void DIA_Thekla_Lecker_Info()
{
AI_Output(other,self,"DIA_Thekla_Lecker_15_00"); //Как у тебя здесь вкусно пахнет!
AI_Output(self,other,"DIA_Thekla_Lecker_17_01"); //Не подлизывайся! Я знаю таких, как ты, как облупленных! Вон их сколько вокруг бродит!
AI_Output(self,other,"DIA_Thekla_Lecker_17_02"); //Сначала вы пытаетесь подхалимничать, а затем, когда от вас что-то нужно, то никого не найдешь!
};
information
Параметр information - это имя функции, которая является «телом» диалога; в которой происходит основное действие, реакция на выбор данного пункта диалога из меню (в случае important-диалога - тело данного диалога).В данной функции происходит обмен репликами между ГГ и персонажем с помощью операторов AI_Output.
Пример - см. выше.
description
Параметр description - это строка текста, которая будет отображена в меню в качестве заголовка данного пункта диалога.
Пример - см. выше.
trade
Параметр trade отвечает за то, будет ли показан диалог торговли после того, как закончится обмен репликами (если он есть) в теле info-функции. trade = true означает, что торговля начнется, false - нет.
permanent
Параметр permanent отвечает за «постоянность» данного пункта диалога.
Если permanent = true, то этот пункт диалога не будет исчезать из меню после того, как «отработает» один раз.
Если permanent = false, то пункт диалога исчезнет из меню после того, как один раз будет выбран.
Обычно этот параметр применяют в паре с параметром trade; также он ставится в true для пункта «Закончить».
Автор - Маразмус