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

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

Расширенный поиск
Старый 27.03.2006, 15:04   #1321
DEDROIT

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

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

2yarikkkkk:
Это вопрос или утверждение?
Если вопрос,то все квесты находятмя в папке Dialoge(если пользуешь компилятором Вама,то путь такой _work\data\Scripts\_decompiled\Story\Dialoge)
Ответить с цитированием
Старый 27.03.2006, 20:45   #1322
Tolman

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

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

Вопросец: как делается огранечитель подёма гг по скале, а то он у меня под такие склоны забегает... :)
Ответить с цитированием
Старый 28.03.2006, 00:31   #1323
Killer-XXX
Строители Миртаны
 
 
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
Killer-XXX вне форума

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

2Тольман-Готоман:
В этом и есть вся прелесть Готики :)
Можно как вариант поставить какую нибудь стенку в Спэйсере, невидимую.
Ответить с цитированием
Старый 28.03.2006, 01:21   #1324
Wandererru

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

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

в Species.d

INSTANCE Gil_Values(C_GILVALUES)
// HUMAN
     SLIDE_ANGLE                        [GIL_HUMAN] = 50;                        // Winkel ab der Model in      CLIMB_HEADING_ANGLE            [GIL_HUMAN] = 50;
     CLIMB_HORIZ_ANGLE            [GIL_HUMAN] = 50;
     CLIMB_GROUND_ANGLE        [GIL_HUMAN] = 50;

вот эти углы не пробовал крутить? я не пробовал :) так что за последствия не отвечаю
Ответить с цитированием
Старый 28.03.2006, 01:40   #1325
Tolman

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

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

2_Странник_:
в этих скриптах не лазил, так вот чем больше угол тем тяжелее гг будет подыматся?
Ответить с цитированием
Старый 28.03.2006, 11:46   #1326
Wandererru

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

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

я ж говорю не проверял, проверь, побегай по одному и тому же склону с разными настрйками углов - поделись опытом с окружающими халявщиками, типа меня :)
Ответить с цитированием
Старый 28.03.2006, 11:53   #1327
Tolman

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

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

Я попробую, но придупреждаю, бегает он в спасере в режиме текстурирования, так что посмотрим
Ответить с цитированием
Старый 30.03.2006, 20:01   #1328
Wandererru

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

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

проблемка с массивами:

var string txt[3]; txt[0]="aaa"; txt[1]="bbb"; txt[2]="ccc";
var int rnd; rnd=Hlp_Random(2);
print(txt[rnd]); // вот на это компилятор ругается, т.е. *присвоить значение элементу можно, но получить его компилятор не дает, че делать? не хотелось бы писать кучу if - else, особенно при массиве длинной 100 элементов :)
Ответить с цитированием
Старый 31.03.2006, 03:31   #1329
boobl

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

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

Судя по тому что Vam не смог сделать чтоб при декомпиляции индексы массивов подставлялись переменными а не числами(в массиве отношений вроде) то вероятно значения индексов вычисляются при компиляции и динамически изменяемых индексов не может быть

А ещё я вполне могу быть неправ.
Ответить с цитированием
Старый 31.03.2006, 11:42   #1330
Wandererru

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

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

дело не в динамических индексах, вызов вида
print(txt[1]);
тоже не прокатывает, хотя мне как раз нужна динамика
Ответить с цитированием
Старый 31.03.2006, 16:32   #1331
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

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

2_Странник_:
Быть может допустимы только массивы констант, т.е.
Код:
const string txt[3] = { "aaa", "bbb", "ccc" };
Отправить личное сообщение для Ответить с цитированием
Старый 31.03.2006, 16:56   #1332
Wandererru

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

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

та же фигня, проверял уже, не дает обращаться к массиву строк. работает только в случае целочисленных массивов со статическим индексом, т.е. var int ax[100]; n=ax[3];
строки не пашут, тем более с динамикой, придется if-else клепать :(
Ответить с цитированием
Старый 03.04.2006, 14:55   #1333
fokon

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

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

ДрУги!

Нужна помощь скриптера в Г2 НОТР! Квест про Кантара и Сару. Подскажите в какой момент Кантар выходит из тюрьмы (проверено, что вне зависимости от главы), да и вобще какие возможные варианты завершения этого квеста?

З.Ы. Нужно для ФАКа. Помощь не будет забыта ;)!
Ответить с цитированием
Старый 03.04.2006, 16:08   #1334
Killer-XXX
Строители Миртаны
 
 
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
Killer-XXX вне форума

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

2fokon:
Завершить можно только подложив письмо Саре\убив ее. Все остальное квест проваливает.
А выходит он все же только в 3ей главе. И вроде это ни от чего более не зависит, кроме главы.
Ответить с цитированием
Старый 03.04.2006, 16:25   #1335
fokon

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

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

2Killer-XXX:
Это ты в скриптах высмотрел или так думаешь по игровым наблюдениям? Так я тебе скажу, что у меня было так (а проходил я Готику немеряно раз), что торговцы уже в первой главе не соглашались с ГГ торговать из-за того что Канатр накапал! Вот в этом то и суть вопроса...
Ответить с цитированием
Старый 03.04.2006, 17:06   #1336
Tolman

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

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

2fokon:
Вот все его диалоги, решай сам:

instance DIA_Canthar_PICKPOCKET(C_Info)
{
     npc = VLK_468_Canthar;
     nr = 900;
     condition = DIA_Canthar_PICKPOCKET_Condition;
     information = DIA_Canthar_PICKPOCKET_Info;
     permanent = TRUE;
     description = Pickpocket_20;
};


func int DIA_Canthar_PICKPOCKET_Condition()
{
     return C_Beklauen(20,25);
};

func void DIA_Canthar_PICKPOCKET_Info()
{
     Info_ClearChoices(DIA_Canthar_PICKPOCKET);
     Info_AddChoice(DIA_Canthar_PICKPOCKET,Dialog_Back ,DIA_Canthar_PICKPOCKET_BACK);
     Info_AddChoice(DIA_Canthar_PICKPOCKET,DIALOG_PICK POCKET,DIA_Canthar_PICKPOCKET_DoIt);
};

func void DIA_Canthar_PICKPOCKET_DoIt()
{
     B_Beklauen();
     Info_ClearChoices(DIA_Canthar_PICKPOCKET);
};

func void DIA_Canthar_PICKPOCKET_BACK()
{
     Info_ClearChoices(DIA_Canthar_PICKPOCKET);
};


instance DIA_Canthar_EXIT(C_Info)
{
     npc = VLK_468_Canthar;
     nr = 999;
     condition = DIA_Canthar_EXIT_Condition;
     information = DIA_Canthar_EXIT_Info;
     permanent = TRUE;
     description = "Мне нужно идти!";
};


func int DIA_Canthar_EXIT_Condition()
{
     return TRUE;
};

func void DIA_Canthar_EXIT_Info()
{
     AI_Output(other,self,"DIA_Canthar_EXIT_15_00" );      //Мне нужно идти!
     AI_Output(self,other,"DIA_Canthar_EXIT_09_01" );      //Как знаешь.
     AI_StopProcessInfos(self);
};


instance DIA_Canthar_PersonalCRIMES(C_Info)
{
     npc = VLK_468_Canthar;
     nr = 1;
     condition = DIA_Canthar_PersonalCRIMES_Condition;
     information = DIA_Canthar_PersonalCRIMES_Info;
     permanent = TRUE;
     important = TRUE;
};


func int DIA_Canthar_PersonalCRIMES_Condition()
{
     if(Npc_IsInState(self,ZS_Talk) && (self.aivar[AIV_LastFightComment] == FALSE) && (self.aivar[AIV_LastFightAgainstPlayer] != FIGHT_NONE))
     {
           return TRUE;
     };
};

func void DIA_Canthar_PersonalCRIMES_Info()
{
     if(self.aivar[AIV_LastFightAgainstPlayer] == FIGHT_LOST)
     {
           AI_Output(self,other,"DIA_Canthar_PersonalCRIMES_ 09_00");      //Это было очень глупо с твоей стороны атаковать меня.
     }
     else
     {
           AI_Output(self,other,"DIA_Canthar_PersonalCRIMES_ 09_01");      //(насмешливо) Ты думал, что так просто сможешь справиться со мной?
     };
     AI_Output(self,other,"DIA_Canthar_PersonalCRIMES_ 09_02");      //Либо ты сейчас извинишься, либо я позабочусь, чтобы ты горько пожалел о том, что сделал!
     AI_Output(other,self,"DIA_Canthar_PersonalCRIMES_ 15_03");      //А что именно ты имел в виду?
     B_Say_Gold(self,other,100);
     Info_ClearChoices(DIA_Canthar_PersonalCRIMES) ;
     Info_AddChoice(DIA_Canthar_PersonalCRIMES,"У меня нет столько!",DIA_Canthar_PersonalCRIMES_NotEnough);
     if(Npc_HasItems(other,ItMi_Gold) >= 100)
     {
           Info_AddChoice(DIA_Canthar_PersonalCRIMES,"Во т твое золото - давай забудем об этом!",DIA_Canthar_PersonalCRIMES_Pay);
     };
};

func void DIA_Canthar_PersonalCRIMES_Pay()
{
     AI_Output(other,self,"DIA_Canthar_PersonalCRIMES_ Pay_15_00");      //Вот твое золото - давай забудем об этом!
     AI_Output(self,other,"DIA_Canthar_PersonalCRIMES_ Pay_09_01");      //Очень разумно с твоей стороны!
     self.aivar[AIV_LastFightComment] = TRUE;
     AI_StopProcessInfos(self);
};

func void DIA_Canthar_PersonalCRIMES_NotEnough()
{
     AI_Output(other,self,"DIA_Canthar_PersonalCRIMES_ NotEnough_15_00");      //У меня нет столько!
     AI_Output(self,other,"DIA_Canthar_PersonalCRIMES_ NotEnough_09_01");      //Тогда зачем ты попусту тратишь мое время?
     AI_StopProcessInfos(self);
};


instance DIA_Canthar_Hallo(C_Info)
{
     npc = VLK_468_Canthar;
     nr = 1;
     condition = DIA_Canthar_Hallo_Condition;
     information = DIA_Canthar_Hallo_Info;
     permanent = FALSE;
     important = TRUE;
};


func int DIA_Canthar_Hallo_Condition()
{
     if(Npc_IsInState(self,ZS_Talk))
     {
           return TRUE;
     };
};

func void DIA_Canthar_Hallo_Info()
{
     var C_Item itm;
     itm = Npc_GetEquippedArmor(other);
     if(Npc_HasEquippedArmor(other) == FALSE)
     {
           AI_Output(self,other,"DIA_Canthar_Hallo_09_00 ");      //Посмотрите, кто у нас здесь!
           AI_Output(self,other,"DIA_Canthar_Hallo_09_01 ");      //Ты ведь идешь в город - я не прав?
           AI_Output(other,self,"DIA_Canthar_Hallo_15_02 ");      //Может быть.
           AI_Output(self,other,"DIA_Canthar_Hallo_09_03 ");      //Хм! (фыркает) ты похож на беглеца! Все беглецы направляются в город.
           AI_Output(self,other,"DIA_Canthar_Hallo_09_04 ");      //Возможно, ты даже беглый каторжник из колонии.
           AI_Output(self,other,"DIA_Canthar_Hallo_09_05 ");      //(торопливо) Меня не волнует, откуда ты пришел. Но мне кажется, у меня есть интересное предложение для тебя...
           Canthar_GotMe = TRUE;
     }
     else if(Hlp_IsItem(itm,ITAR_Bau_L) || Hlp_IsItem(itm,ITAR_Bau_M))
     {
           AI_Output(self,other,"DIA_Canthar_HelloArmor_09_0 6");      //Как идет работа, крестьянин?
           Info_ClearChoices(DIA_Canthar_Hallo);
           Info_AddChoice(DIA_Canthar_Hallo,"Я похож на фермера?",DIA_Canthar_Hallo_NoBauer);
           Info_AddChoice(DIA_Canthar_Hallo,"Мне не на что жаловаться.",DIA_Canthar_Hallo_Bauer);
     }
     else
     {
           AI_Output(self,other,"DIA_Canthar_Hallo_09_07 ");      //Что я могу сделать для тебя?
     };
};

func void DIA_Canthar_Hallo_Bauer()
{
     AI_Output(other,self,"DIA_Canthar_Hallo_Bauer_15_ 00");      //Мне не на что жаловаться.
     AI_Output(self,other,"DIA_Canthar_Hallo_Bauer_09_ 01");      //Могу я что-нибудь сделать для тебя?
     Info_ClearChoices(DIA_Canthar_Hallo);
};

func void DIA_Canthar_Hallo_NoBauer()
{
     AI_Output(other,self,"DIA_Canthar_Hallo_NoBauer_1 5_00");      //Я похож на фермера?
     AI_Output(self,other,"DIA_Canthar_Hallo_NoBauer_0 9_01");      //Ты выглядишь как фермер. Но говоришь совсем не так, как они!
     AI_Output(self,other,"DIA_Canthar_Hallo_NoBauer_0 9_02");      //(в раздумьях) Если я ни в чем не ошибаюсь, у меня есть интересное предложение для тебя...
     Canthar_GotMe = TRUE;
     Info_ClearChoices(DIA_Canthar_Hallo);
};


instance DIA_Canthar_WhatOffer(C_Info)
{
     npc = VLK_468_Canthar;
     nr = 1;
     condition = DIA_Canthar_WhatOffer_Condition;
     information = DIA_Canthar_WhatOffer_Info;
     permanent = FALSE;
     description = "Что ты можешь предложить мне?";
};


func int DIA_Canthar_WhatOffer_Condition()
{
     if(Npc_KnowsInfo(other,DIA_Canthar_Hallo))
     {
           return TRUE;
     };
};

func void DIA_Canthar_WhatOffer_Info()
{
     AI_Output(other,self,"DIA_Canthar_WhatOffer_15_00 ");      //Что ты можешь предложить мне?
     if(Canthar_GotMe == TRUE)
     {
           if(Npc_HasEquippedArmor(other) == FALSE)
           {
                 AI_Output(self,other,"DIA_Canthar_WhatOffer_09_01 ");      //Судя по тому, как ты выглядишь, стража никогда не пустит тебя в город.
           }
           else
           {
                 AI_Output(self,other,"DIA_Canthar_WhatOffer_09_02 ");      //(иронично) Если ты будешь говорить так же 'убедительно' со стражей у ворот, как говоришь со мной, они никогда не пустят тебя в город.
           };
           AI_Output(self,other,"DIA_Canthar_WhatOffer_09_03 ");      //Я могу помочь тебе попасть в город.
           AI_Output(self,other,"DIA_Canthar_WhatOffer_09_04 ");      //У меня есть вот этот клочок бумаги. С королевской печатью и подписью губернатора. Пропуск.
           if(Npc_HasEquippedArmor(other) == FALSE)
           {
                 AI_Output(self,other,"DIA_Canthar_WhatOffer_09_05 ");      //С этим пропуском в кармане ты сможешь спокойно войти в город, и страже придется пропустить тебя.
           };
           AI_Output(self,other,"DIA_Canthar_WhatOffer_09_06 ");      //Тебе это интересно?
           Info_ClearChoices(DIA_Canthar_WhatOffer);
           Info_AddChoice(DIA_Canthar_WhatOffer,"Нет! Оставь эту бумагу себе!",DIA_Canthar_WhatOffer_No);
           Info_AddChoice(DIA_Canthar_WhatOffer,"Что ты хочешь за этот пропуск?",DIA_Canthar_WhatOffer_Price);
           Info_AddChoice(DIA_Canthar_WhatOffer,"А как ТЫ попадешь в город?",DIA_Canthar_WhatOffer_HowYouIn);
           Info_AddChoice(DIA_Canthar_WhatOffer,"Это похоже на подвох...",DIA_Canthar_WhatOffer_Strings);
     }
     else
     {
           AI_Output(self,other,"DIA_Canthar_WhatOffer_09_07 ");      //Я бродячий торговец. Я торгую всем.
     };
     Log_CreateTopic(TOPIC_CityTrader,LOG_NOTE);
     B_LogEntry(TOPIC_CityTrader,"Кантар торгует различным оружием.");
};

func void DIA_Canthar_WhatOffer_Strings()
{
     AI_Output(other,self,"DIA_Canthar_WhatOffer_Strin gs_15_00");      //Это похоже на подвох...
     AI_Output(self,other,"DIA_Canthar_WhatOffer_Strin gs_09_01");      //Нет! Никакого подвоха. Ты просто окажешь мне услугу.
};

func void DIA_Canthar_WhatOffer_HowYouIn()
{
     AI_Output(other,self,"DIA_Canthar_WhatOffer_HowYo uIn_15_00");      //А как ТЫ попадешь в город?
     AI_Output(self,other,"DIA_Canthar_WhatOffer_HowYo uIn_09_01");      //Стража знает меня. Я просто скажу им, что потерял мой пропуск.
};

func void DIA_Canthar_WhatOffer_Price()
{
     AI_Output(other,self,"DIA_Canthar_WhatOffer_Price _15_00");      //Что ты хочешь за этот пропуск?
     AI_Output(self,other,"DIA_Canthar_WhatOffer_Price _09_01");      //(удовлетворенно) Я ЗНАЛ, что не ошибся в тебе!
     AI_Output(self,other,"DIA_Canthar_WhatOffer_Price _09_02");      //Послушай. Ты получишь от меня пропуск. Прямо сейчас!
     AI_Output(other,self,"DIA_Canthar_WhatOffer_Price _15_03");      //Просто так?
     AI_Output(self,other,"DIA_Canthar_WhatOffer_Price _09_04");      //Да. НО: если я встречу тебя в городе, ты будешь должен оказать мне услугу.
     AI_Output(self,other,"DIA_Canthar_WhatOffer_Price _09_05");      //Ну что, договорились?
     Info_AddChoice(DIA_Canthar_WhatOffer,"Конечно . Давай сюда эту бумагу.",DIA_Canthar_WhatOffer_Ok);
};

func void DIA_Canthar_WhatOffer_Ok()
{
     AI_Output(other,self,"DIA_Canthar_WhatOffer_Ok_15 _00");      //Конечно. Давай сюда эту бумагу.
     AI_Output(self,other,"DIA_Canthar_WhatOffer_Ok_09 _01");      //Держи. Но обращайся с ней аккуратно, она очень ценная.
     CreateInvItems(self,ItWr_Passierschein,1);
     B_GiveInvItems(self,other,ItWr_Passierschein, 1);
     AI_Output(self,other,"DIA_Canthar_WhatOffer_Ok_09 _02");      //И еще одно: даже и не думай нарушить свое слово!
     AI_Output(self,other,"DIA_Canthar_WhatOffer_Ok_09 _03");      //Я торговец и имею очень большое влияние в городе - просто так это тебе с рук не сойдет, уж поверь мне!
     Canthar_Gefallen = TRUE;
     Info_ClearChoices(DIA_Canthar_WhatOffer);
     Log_CreateTopic(TOPIC_City,LOG_MISSION);
     Log_SetTopicStatus(TOPIC_City,LOG_Running);
     B_LogEntry(TOPIC_City,"Я получил пропуск у торговца Кантара, который позволит мне попасть в город. Взамен, я должен оказать ему услугу в следующий раз, когда увижу его в городе.");
};

func void DIA_Canthar_WhatOffer_No()
{
     AI_Output(other,self,"DIA_Canthar_WhatOffer_No_15 _00");      //Нет! Оставь эту бумагу себе!
     AI_Output(self,other,"DIA_Canthar_WhatOffer_No_09 _01");      //Хм. Похоже, я недооценил тебя, а?
     AI_Output(self,other,"DIA_Canthar_WhatOffer_No_09 _02");      //Ладно. Тебе нужно что-нибудь еще? Может тебе показать мои товары?
     Info_ClearChoices(DIA_Canthar_WhatOffer);
};


instance DIA_Canthar_TRADE(C_Info)
{
     npc = VLK_468_Canthar;
     nr = 888;
     condition = DIA_Canthar_TRADE_Condition;
     information = DIA_Canthar_TRADE_Info;
     permanent = TRUE;
     description = "Покажи мне свои товары!";
     trade = TRUE;
};


func int DIA_Canthar_TRADE_Condition()
{
     if(Npc_KnowsInfo(other,DIA_Canthar_WhatOffer) )
     {
           return TRUE;
     };
};

func void DIA_Canthar_TRADE_Info()
{
     AI_Output(other,self,"DIA_Canthar_TRADE_15_00 ");      //Покажи мне свои товары!
     B_GiveTradeInv(self);
     AI_Output(self,other,"DIA_Canthar_TRADE_09_01 ");      //Выбирай.
};


instance DIA_Canthar_PAYPRICEINCITY(C_Info)
{
     npc = VLK_468_Canthar;
     nr = 2;
     condition = DIA_Canthar_PAYPRICEINCITY_Condition;
     information = DIA_Canthar_PAYPRICEINCITY_Info;
     important = TRUE;
     permanent = FALSE;
};


func int DIA_Canthar_PAYPRICEINCITY_Condition()
{
     if((Canthar_InStadt == TRUE) && (Npc_IsDead(Sarah) == FALSE) && (Canthar_GotMe == TRUE))
     {
           return TRUE;
     };
};

func void DIA_Canthar_PAYPRICEINCITY_Info()
{
     if(Canthar_Gefallen == TRUE)
     {
           AI_Output(self,other,"DIA_Canthar_PAYPRICEINCITY_ 09_00");      //За тобой должок. И пришло время вернуть его.
     }
     else
     {
           AI_Output(self,other,"DIA_Canthar_PAYPRICEINCITY_ 09_01");      //Эй, ты, у меня есть предложение для тебя.
     };
     AI_Output(other,self,"DIA_Canthar_PAYPRICEINCITY_ 15_02");      //Что ты хочешь?
     AI_Output(self,other,"DIA_Canthar_PAYPRICEINCITY_ 09_03");      //Я хочу вернуть мой старый прилавок на рыночной площади. Сара увела его у меня.
     AI_Output(self,other,"DIA_Canthar_PAYPRICEINCITY_ 09_04");      //И я хочу, чтобы она вернула мне этот прилавок назад.
     AI_Output(other,self,"DIA_Canthar_PAYPRICEINCITY_ 15_05");      //А моя роль в этом какая?
     AI_Output(self,other,"DIA_Canthar_PAYPRICEINCITY_ 09_06");      //Я дам тебе письмо, которое ты должен подложить в ее карман.
     AI_Output(self,other,"DIA_Canthar_PAYPRICEINCITY_ 09_07");      //Затем ты пойдешь к Андрэ и скажешь ему, что Сара продает оружие Онару.
     AI_Output(self,other,"DIA_Canthar_PAYPRICEINCITY_ 09_08");      //Ее посадят в тюрьму, ты получишь награду, а я свой прилавок.
     AI_Output(self,other,"DIA_Canthar_PAYPRICEINCITY_ 09_09");      //У тебя есть два дня на выполнение этого.
     if(Canthar_Gefallen == FALSE)
     {
           AI_Output(other,self,"DIA_Canthar_PAYPRICEINCITY_ 15_10");      //А что мне с этого будет?
           AI_Output(self,other,"DIA_Canthar_PAYPRICEINCITY_ 09_11");      //Когда я верну себе прилавок, ты получишь оружие от меня - очень хорошее оружие.
     };
     Info_ClearChoices(DIA_Canthar_PAYPRICEINCITY) ;
     Info_AddChoice(DIA_Canthar_PAYPRICEINCITY,"Не т, я не буду участвовать в этом.",DIA_Canthar_PAYPRICEINCITY_Nein);
     Info_AddChoice(DIA_Canthar_PAYPRICEINCITY,"Хорошо , я сделаю это.",DIA_Canthar_PAYPRICEINCITY_Ok);
     Info_AddChoice(DIA_Canthar_PAYPRICEINCITY,"А что будет, если я откажусь?",DIA_Canthar_PAYPRICEINCITY_If);
};

func void DIA_Canthar_PAYPRICEINCITY_If()
{
     AI_Output(other,self,"DIA_Canthar_PAYPRICEINCITY_ if_15_00");      //А что будет, если я откажусь?
     AI_Output(self,other,"DIA_Canthar_PAYPRICEINCITY_ if_09_01");      //Это будет очень глупо с твоей стороны. Понимаешь, я знаю, что ты беглый каторжник.
     AI_Output(self,other,"DIA_Canthar_PAYPRICEINCITY_ if_09_02");      //Если об этом прознают остальные, это нанесет значительный урон твоей репутации в городе...
};

func void DIA_Canthar_PAYPRICEINCITY_Nein()
{
     AI_Output(other,self,"DIA_Canthar_PAYPRICEINCITY_ Nein_15_00");      //Нет, я не буду участвовать в этом.
     AI_Output(self,other,"DIA_Canthar_PAYPRICEINCITY_ Nein_09_01");      //Это было неверное решение, мой мальчик. Но мы еще поговорим.
     MIS_Canthars_KomproBrief = LOG_OBSOLETE;
     B_CheckLog();
     Info_ClearChoices(DIA_Canthar_PAYPRICEINCITY) ;
};

func void DIA_Canthar_PAYPRICEINCITY_Ok()
{
     AI_Output(other,self,"DIA_Canthar_PAYPRICEINCITY_ Ok_15_00");      //Хорошо, похоже, у меня нет выбора.
     AI_Output(self,other,"DIA_Canthar_PAYPRICEINCITY_ Ok_09_01");      //Ты сообразительный парень. Вот, держи письмо.
     CreateInvItems(self,ItWr_Canthars_KomproBrief_MIS ,1);
     B_GiveInvItems(self,other,ItWr_Canthars_KomproBri ef_MIS,1);
     AI_Output(other,self,"DIA_Canthar_PAYPRICEINCITY_ Ok_15_02");      //А как я подложу ей это письмо?
     AI_Output(self,other,"DIA_Canthar_PAYPRICEINCITY_ Ok_09_03");      //Пусть она покажет тебе свои товары - а пока она будет делать это, ты подложишь ей письмо.
     AI_Output(self,other,"DIA_Canthar_PAYPRICEINCITY_ Ok_09_04");      //И помни, я очень влиятельный человек, так что не пытайся провести меня.
     MIS_Canthars_KomproBrief = LOG_Running;
     MIS_Canthars_KomproBrief_Day = Wld_GetDay();
     Log_CreateTopic(TOPIC_Canthar,LOG_MISSION);
     Log_SetTopicStatus(TOPIC_Canthar,LOG_Running) ;
     if(Canthar_Gefallen == TRUE)
     {
           B_LogEntry(TOPIC_Canthar,"Кантар хочет, чтобы я оказал ему услугу, как обещал.");
     }
     else
     {
           B_LogEntry(TOPIC_Canthar,"Кантар пообещал дать мне оружие, взамен на оказанную ему услугу.");
     };
     B_LogEntry(TOPIC_Canthar,"Я должен подложить письмо  торговке Саре, которое даст повод подозревать ее в том, что она продает оружие Онару. Затем я должен пойти к лорду Андре и настучать на нее.");
     Info_ClearChoices(DIA_Canthar_PAYPRICEINCITY) ;
};


instance DIA_Canthar_SARAHERLEDIGT(C_Info)
{
     npc = VLK_468_Canthar;
     nr = 5;
     condition = DIA_Canthar_SARAHERLEDIGT_Condition;
     information = DIA_Canthar_SARAHERLEDIGT_Info;
     permanent = TRUE;
     description = "Насчет Сары ...";
};


func int DIA_Canthar_SARAHERLEDIGT_Condition()
{
     if(MIS_Canthars_KomproBrief == LOG_Running)
     {
           return TRUE;
     };
};

func void DIA_Canthar_SARAHERLEDIGT_Info()
{
     if(Npc_IsDead(Sarah) == FALSE)
     {
           if(MIS_Canthars_KomproBrief_Day <= (Wld_GetDay() + 2))
           {
                 AI_Output(self,other,"DIA_Canthar_SARAHERLEDIGT_0 9_00");      //У тебя нет работы для меня?
                 AI_Output(self,other,"DIA_Canthar_SARAHERLEDIGT_0 9_01");      //Сначала подложи письмо Саре, а затем сходи к Андрэ и обвини ее.
                 AI_Output(self,other,"DIA_Canthar_SARAHERLEDIGT_0 9_02");      //Сделай же это. И не пытайся обмануть меня, ты пожалеешь об этом.
           }
           else
           {
                 AI_Output(self,other,"DIA_Canthar_SARAHERLEDIGT_0 9_03");      //Ты попусту тратишь свое драгоценное время. За дело!
           };
     }
     else
     {
           AI_Output(other,self,"DIA_Canthar_SARAHERLEDIGT_1 5_04");      //Сара мертва.
           AI_Output(self,other,"DIA_Canthar_SARAHERLEDIGT_0 9_05");      //Правда? Превосходно. Значит, ты выполнил свою часть нашей маленькой сделки.
           MIS_Canthars_KomproBrief = LOG_SUCCESS;
           B_GivePlayerXP(XP_Ambient);
           Npc_ExchangeRoutine(self,"MARKTSTAND");
     };
     AI_StopProcessInfos(self);
};


instance DIA_Canthar_Success(C_Info)
{
     npc = VLK_468_Canthar;
     nr = 5;
     condition = DIA_Canthar_Success_Condition;
     information = DIA_Canthar_Success_Info;
     permanent = FALSE;
     description = "Насчет Сары ...";
};


func int DIA_Canthar_Success_Condition()
{
     if((MIS_Canthars_KomproBrief == LOG_SUCCESS) && (Npc_IsDead(Sarah) == FALSE))
     {
           return TRUE;
     };
};

func void DIA_Canthar_Success_Info()
{
     AI_Output(self,other,"DIA_Canthar_Success_09_00") ;      //Отлично. Сара отправилась туда, где ей самое место.
     AI_Output(self,other,"DIA_Canthar_Success_09_01") ;      //Я забрал ее товары, так что, если тебе нужно оружие, заходи ко мне.
     if(Kapitel == 1)
     {
           CreateInvItems(self,ItMw_ShortSword3,1);
           CreateInvItems(self,ItMw_ShortSword4,1);
           CreateInvItems(self,ItMw_ShortSword5,1);
           CreateInvItems(self,ItMw_Kriegshammer1,1);
           CreateInvItems(self,ItMw_1h_Vlk_Sword,1);
           CreateInvItems(self,ItMw_1h_Nov_Mace,1);
     };
     if(Kapitel == 2)
     {
           CreateInvItems(self,ItMw_Stabkeule,1);
           CreateInvItems(self,ItMw_Steinbrecher,1);
           CreateInvItems(self,ItMw_Schwert2,1);
           CreateInvItems(self,ItMw_Bartaxt,1);
     };
     if(Canthar_Gefallen == FALSE)
     {
           AI_Output(other,self,"DIA_Canthar_Success_15_02") ;      //Ты собирался дать мне оружие.
           AI_Output(self,other,"DIA_Canthar_Success_09_03") ;      //Правильно. Вот, это оружие - произведение оружейного искусства.
           B_GiveInvItems(self,other,ItMw_Schiffsaxt,1);
     };
     B_GivePlayerXP(XP_Canthars_KomproBrief);
};


instance DIA_Canthar_Again(C_Info)
{
     npc = VLK_468_Canthar;
     nr = 5;
     condition = DIA_Canthar_Again_Condition;
     information = DIA_Canthar_Again_Info;
     permanent = FALSE;
     important = TRUE;
};


func int DIA_Canthar_Again_Condition()
{
     if((Canthar_Sperre == TRUE) && Npc_IsInState(self,ZS_Talk))
     {
           return TRUE;
     };
};

func void DIA_Canthar_Again_Info()
{
     AI_Output(self,other,"DIA_Canthar_Again_09_00 ");      //Ох, опять ты.
     if(MIS_Canthars_KomproBrief == LOG_FAILED)
     {
           AI_Output(other,self,"DIA_Canthar_Again_15_01 ");      //Почему ты не в тюрьме?
           AI_Output(self,other,"DIA_Canthar_Again_09_02 ");      //Меня отпустили. Как я уже говорил тебе - я очень влиятельный человек в этом городе.
     }
     else if(MIS_Canthars_KomproBrief == LOG_Running)
     {
           AI_Output(self,other,"DIA_Canthar_Again_09_03 ");      //Кстати, я разделался с Сарой сам. Ты можешь забыть об этом деле с письмом.
     }
     else if(MIS_Canthars_KomproBrief == LOG_OBSOLETE)
     {
           AI_Output(self,other,"DIA_Canthar_Again_09_04 ");      //Разве я не предупреждал тебя? Было бы лучше, если бы ты делал то, что я говорю.
     };
     AI_Output(self,other,"DIA_Canthar_Again_09_05 ");      //Теперь все торговцы узнали, что ты беглый каторжник.
     AI_Output(self,other,"DIA_Canthar_Again_09_06 ");      //Какая жалость - теперь ты не сможешь купить на рыночной площади даже куска хлеба.
     AI_Output(self,other,"DIA_Canthar_Again_09_07 ");      //Я могу, конечно же, уладить эту проблему для тебя, это будет стоить, скажем...
     B_Say_Gold(self,other,Canthar_Gold);
     AI_StopProcessInfos(self);
};


instance DIA_Canthar_Pay(C_Info)
{
     npc = VLK_468_Canthar;
     nr = 2;
     condition = DIA_Canthar_Pay_Condition;
     information = DIA_Canthar_Pay_Info;
     permanent = TRUE;
     important = TRUE;
};


func int DIA_Canthar_Pay_Condition()
{
     if(Npc_KnowsInfo(other,DIA_Canthar_Again) && (Canthar_Sperre == TRUE) && Npc_IsInState(self,ZS_Talk))
     {
           return TRUE;
     };
};

func void DIA_Canthar_Pay_Info()
{
     AI_Output(self,other,"DIA_Canthar_Pay_09_00") ;      //Ты готов заплатить?
     Info_ClearChoices(DIA_Canthar_Pay);
     if(Npc_HasItems(other,ItMi_Gold) >= Canthar_Gold)
     {
           Info_AddChoice(DIA_Canthar_Pay,"Хорошо, я заплачу ...",DIA_Canthar_Pay_Ja);
     };
     Info_AddChoice(DIA_Canthar_Pay,"У меня нет с собой столько денег...",DIA_Canthar_Pay_Nein);
     Info_AddChoice(DIA_Canthar_Pay,"Сколько там нужно?",DIA_Canthar_Pay_Wieviel);
};

func void DIA_Canthar_Pay_Ja()
{
     AI_Output(other,self,"DIA_Canthar_Pay_Ja_15_0 0");      //Хорошо, я заплачу, ты не оставляешь мне выбора.
     B_GiveInvItems(other,self,ItMi_Gold,Canthar_Gold) ;
     AI_Output(self,other,"DIA_Canthar_Pay_Ja_09_0 1");      //(ухмыляется) Хорошо. А теперь я позабочусь, чтобы твоя репутация среди торговцев выросла опять.
     Canthar_Sperre = FALSE;
     Canthar_Pay = TRUE;
     Info_ClearChoices(DIA_Canthar_Pay);
};

func void DIA_Canthar_Pay_Nein()
{
     AI_Output(other,self,"DIA_Canthar_Pay_Nein_15_00" );      //У меня нет с собой столько денег...
     AI_Output(self,other,"DIA_Canthar_Pay_Nein_09_01" );      //Тогда добудь их.
     Info_ClearChoices(DIA_Canthar_Pay);
     AI_StopProcessInfos(self);
};

func void DIA_Canthar_Pay_Wieviel()
{
     AI_Output(other,self,"DIA_Canthar_Pay_Wieviel_15_ 00");      //Сколько там нужно?
     B_Say_Gold(self,other,Canthar_Gold);
};


instance DIA_Canthar_CANTHARANGEPISST(C_Info)
{
     npc = VLK_468_Canthar;
     nr = 2;
     condition = DIA_Canthar_CANTHARANGEPISST_Condition;
     information = DIA_Canthar_CANTHARANGEPISST_Info;
     important = TRUE;
     permanent = TRUE;
};


func int DIA_Canthar_CANTHARANGEPISST_Condition()
{
     if((Canthar_Ausgeliefert == TRUE) && (Npc_GetDistToWP(self,"NW_CITY_HABOUR_KASERN_RENGA RU") <= 1000) && Npc_IsInState(self,ZS_Talk))
     {
           return TRUE;
     };
};

func void DIA_Canthar_CANTHARANGEPISST_Info()
{
     AI_Output(self,other,"DIA_Canthar_CANTHARANGEPISS T_09_00");      //Я предупреждал тебя, но ты не слушал. Мы обсудим этот вопрос позже.
     AI_Output(self,other,"DIA_Canthar_CANTHARANGEPISS T_09_01");      //А теперь проваливай, я хочу отдохнуть.
     AI_StopProcessInfos(self);
};


instance DIA_Canthar_MinenAnteil(C_Info)
{
     npc = VLK_468_Canthar;
     nr = 3;
     condition = DIA_Canthar_MinenAnteil_Condition;
     information = DIA_Canthar_MinenAnteil_Info;
     description = "Ты продаешь поддельные акции!";
};


func int DIA_Canthar_MinenAnteil_Condition()
{
     if((hero.guild == GIL_KDF) && (MIS_Serpentes_MinenAnteil_KDF == LOG_Running) && Npc_KnowsInfo(other,DIA_Canthar_WhatOffer))
     {
           return TRUE;
     };
};

func void DIA_Canthar_MinenAnteil_Info()
{
     AI_Output(other,self,"DIA_Canthar_Minenanteil_15_ 00");      //Ты продаешь поддельные акции!
     AI_Output(self,other,"DIA_Canthar_Minenanteil_09_ 01");      //Да? И что?! Если не я, так другой.
     B_GivePlayerXP(XP_Ambient);
};

Ответить с цитированием
Старый 03.04.2006, 17:25   #1337
fokon

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

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

2Тольман-Готоман:
Вот все его диалоги, решай сам:
Ты конечно прикольно ответил, но не подумал, что я могу в скриптах, мягко говоря, не разбираться! ;-)
Ты лучше нормально обясни с какого момента в игре начинается
instance DIA_Canthar_Again(C_Info)?
Ответить с цитированием
Старый 03.04.2006, 17:32   #1338
Tolman

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

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

Диалоги игры написаны после двойного слеша \\
Тоесть там и нужно искать то что тебе нужно.
Вот то что он будет говорить в игре:
{
    AI_Output(other,self,"DIA_Canthar_Pay_Ja_15_00");      //Хорошо, я заплачу, ты не оставляешь мне выбора.
    B_GiveInvItems(other,self,ItMi_Gold,Canthar_Gold);
    AI_Output(self,other,"DIA_Canthar_Pay_Ja_09_01");      //(ухмыляется) Хорошо. А теперь я позабочусь, чтобы твоя репутация среди торговцев выросла опять.
    Canthar_Sperre = FALSE;
    Canthar_Pay = TRUE;
    Info_ClearChoices(DIA_Canthar_Pay);
};

Вот если нужно ещё диалоги Сары
instance DIA_Sarah_EXIT(C_Info)
{
     npc = VLK_470_Sarah;
     nr = 999;
     condition = DIA_Sarah_EXIT_Condition;
     information = DIA_Sarah_EXIT_Info;
     permanent = TRUE;
     description = Dialog_Ende;
};


func int DIA_Sarah_EXIT_Condition()
{
     return TRUE;
};

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


instance DIA_Sarah_PICKPOCKET(C_Info)
{
     npc = VLK_470_Sarah;
     nr = 900;
     condition = DIA_Sarah_PICKPOCKET_Condition;
     information = DIA_Sarah_PICKPOCKET_Info;
     permanent = TRUE;
     description = Pickpocket_60_Female;
};


func int DIA_Sarah_PICKPOCKET_Condition()
{
     return C_Beklauen(57,60);
};

func void DIA_Sarah_PICKPOCKET_Info()
{
     Info_ClearChoices(DIA_Sarah_PICKPOCKET);
     Info_AddChoice(DIA_Sarah_PICKPOCKET,Dialog_Back,D IA_Sarah_PICKPOCKET_BACK);
     Info_AddChoice(DIA_Sarah_PICKPOCKET,DIALOG_PICKPO CKET,DIA_Sarah_PICKPOCKET_DoIt);
};

func void DIA_Sarah_PICKPOCKET_DoIt()
{
     B_Beklauen();
     Info_ClearChoices(DIA_Sarah_PICKPOCKET);
};

func void DIA_Sarah_PICKPOCKET_BACK()
{
     Info_ClearChoices(DIA_Sarah_PICKPOCKET);
};


instance DIA_Sarah_Greet(C_Info)
{
     npc = VLK_470_Sarah;
     nr = 1;
     condition = DIA_Sarah_Greet_Condition;
     information = DIA_Sarah_Greet_Info;
     permanent = TRUE;
     important = TRUE;
};


func int DIA_Sarah_Greet_Condition()
{
     if(Npc_IsInState(self,ZS_Talk) && (Canthar_Ausgeliefert == TRUE))
     {
           return TRUE;
     };
};

func void DIA_Sarah_Greet_Info()
{
     AI_Output(self,other,"DIA_Sarah_Add_16_07");      //Ах! Опять ты!
};


instance DIA_Sarah_HALLO(C_Info)
{
     npc = VLK_470_Sarah;
     condition = DIA_Sarah_HALLO_Condition;
     information = DIA_Sarah_HALLO_Info;
     permanent = FALSE;
     description = "Как торговля?";
};


func int DIA_Sarah_HALLO_Condition()
{
     return TRUE;
};

func void DIA_Sarah_HALLO_Info()
{
     AI_Output(other,self,"DIA_Sarah_HALLO_15_00") ;      //Как торговля?
     AI_Output(self,other,"DIA_Sarah_HALLO_16_01") ;      //Когда пришли паладины, я сначала думала, что это хорошо для бизнеса.
     AI_Output(self,other,"DIA_Sarah_HALLO_16_02") ;      //Но теперь Гарад делает для них оружие, а ни я, ни Хакон еще не получили от них ни одной монеты.
     AI_Output(self,other,"DIA_Sarah_HALLO_16_03") ;      //И, что еще хуже, фермеры больше не поставляют нам продовольствие, и цены на все взлетели до небес.
     AI_Output(self,other,"DIA_Sarah_Add_16_00");      //Одно маленькое утешение - паладины оплачивают мою комнату в отеле.
     Log_CreateTopic(TOPIC_CityTrader,LOG_NOTE);
     B_LogEntry(TOPIC_CityTrader,"Сара торгует оружием на рыночной площади.");
};


instance DIA_Sarah_Bauern(C_Info)
{
     npc = VLK_470_Sarah;
     nr = 2;
     condition = DIA_Sarah_Bauern_Condition;
     information = DIA_Sarah_Bauern_Info;
     permanent = FALSE;
     description = "А что за проблема с фермерами?";
};


func int DIA_Sarah_Bauern_Condition()
{
     if(Npc_KnowsInfo(other,DIA_Sarah_HALLO))
     {
           return TRUE;
     };
};

func void DIA_Sarah_Bauern_Info()
{
     AI_Output(other,self,"DIA_Sarah_Bauern_15_00" );      //А что за проблема с фермерами?
     AI_Output(self,other,"DIA_Sarah_Bauern_16_01" );      //Они отказываются поставлять нам продовольствие.
     AI_Output(self,other,"DIA_Sarah_Bauern_16_02" );      //Теперь, когда корабли больше не заходят в наш порт, город полностью зависит от продуктов, производимых нашими фермерами.
     AI_Output(self,other,"DIA_Sarah_Bauern_16_03" );      //А Онар, самый крупный фермер, нанял наемников, чтобы защищать свою ферму от городской стражи. До этого они забирали у него все подчистую.
     AI_Output(self,other,"DIA_Sarah_Add_16_01");      //Но наемники не просто охраняют ферму Онара.
     AI_Output(self,other,"DIA_Sarah_Add_16_02");      //Они добрались даже до маленьких ферм у города, и запугивают их владельцев.
     AI_Output(self,other,"DIA_Sarah_Add_16_03");      //Я видела их, когда ходила на ферму Акила. Не хотела бы я сейчас оказаться на его месте.
};


instance DIA_Sarah_AkilsHof(C_Info)
{
     npc = VLK_470_Sarah;
     nr = 3;
     condition = DIA_Sarah_AkilsHof_Condition;
     information = DIA_Sarah_AkilsHof_Info;
     permanent = FALSE;
     description = "Где мне найти ферму Акила?";
};


func int DIA_Sarah_AkilsHof_Condition()
{
     if(Npc_KnowsInfo(other,DIA_Sarah_Bauern))
     {
           return TRUE;
     };
};

func void DIA_Sarah_AkilsHof_Info()
{
     AI_Output(other,self,"DIA_Sarah_AkilsHof_15_0 0");      //Где мне найти ферму Акила?
     AI_Output(self,other,"DIA_Sarah_Add_16_04");      //Если выйдешь из восточных ворот и пойдешь по дороге направо, скоро ты увидишь каменную лестницу.
     AI_Output(self,other,"DIA_Sarah_Add_16_05");      //Она ведет прямо к ферме Акила.
     AI_Output(self,other,"DIA_Sarah_Add_16_06");      //Но я бы сейчас туда не совалась - эти наемники наверняка все еще там.
};


instance DIA_Sarah_Trade(C_Info)
{
     npc = VLK_470_Sarah;
     nr = 99;
     condition = DIA_Sarah_Trade_Condition;
     information = DIA_Sarah_Trade_Info;
     trade = TRUE;
     permanent = TRUE;
     description = "Покажи мне свои товары.";
};


func int DIA_Sarah_Trade_Condition()
{
     if(Npc_KnowsInfo(other,DIA_Sarah_HALLO) && (MIS_Canthars_KomproBrief != LOG_SUCCESS))
     {
           return TRUE;
     };
};

func void DIA_Sarah_Trade_Info()
{
     B_GiveTradeInv(self);
     AI_Output(other,self,"DIA_Sarah_Trade_15_00") ;      //Покажи мне свои товары.
     Sarah_WaffenGesehen = TRUE;
};


instance DIA_Sarah_IMKNAST(C_Info)
{
     npc = VLK_470_Sarah;
     nr = 99;
     condition = DIA_Sarah_IMKNAST_Condition;
     information = DIA_Sarah_IMKNAST_Info;
     permanent = TRUE;
     important = TRUE;
};


func int DIA_Sarah_IMKNAST_Condition()
{
     if((MIS_Canthars_KomproBrief == LOG_SUCCESS) && Npc_IsInState(self,ZS_Talk))
     {
           return TRUE;
     };
};

func void DIA_Sarah_IMKNAST_Info()
{
     AI_Output(self,other,"DIA_Sarah_IMKNAST_16_00 ");      //Ты! Ты осмелился появиться здесь! Я, конечно не могу доказать этого, но я готова поклясться, что это твоих рук дело!
     AI_Output(self,other,"DIA_Sarah_IMKNAST_16_01 ");      //Это ты виноват, что я здесь. Ты и этот проклятый Кантар - да накажет вас Иннос!
     AI_StopProcessInfos(self);
};


instance DIA_Sarah_Success(C_Info)
{
     npc = VLK_470_Sarah;
     nr = 4;
     condition = DIA_Sarah_Success_Condition;
     information = DIA_Sarah_Success_Info;
     permanent = FALSE;
     description = "Кантар пытался подставить тебя ...";
};


func int DIA_Sarah_Success_Condition()
{
     if(Canthar_Ausgeliefert == TRUE)
     {
           return TRUE;
     };
};

func void DIA_Sarah_Success_Info()
{
     AI_Output(other,self,"DIA_Sarah_Success_15_00 ");      //Кантар пытался подставить тебя и заполучить твой прилавок. Но я сдал его городской страже.
     AI_Output(self,other,"DIA_Sarah_Success_16_01 ");      //Ты этим нажил себе очень опасного врага. Я давно знаю этого ублюдка. И он всегда хотел заполучить мой прилавок.
     AI_Output(self,other,"DIA_Sarah_Success_16_02 ");      //Возьми это оружие в знак моей благодарности.
     B_GivePlayerXP(XP_CantharImKnast);
     B_GiveInvItems(self,other,ItMw_Piratensaebel, 1);
};

Ответить с цитированием
Старый 03.04.2006, 17:41   #1339
Wandererru

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

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

не народ, давайте сюда все Vam'освкие уроки постить будем, нам ведь одной темы мало...
сори за оффтоп.

кто-нить знает, можно ли реализовать прыжки ГГ повыше, по типу заклинания какой-то там жабы в Morrowind?
Ответить с цитированием
Старый 03.04.2006, 17:47   #1340
fokon

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

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

2Тольман-Готоман:
func int DIA_Canthar_Again_Condition()
{
    if((Canthar_Sperre == TRUE) && Npc_IsInState(self,ZS_Talk))
    {
          return TRUE;
    };
};
Что значит строка if((Canthar_Sperre == TRUE) && Npc_IsInState(self,ZS_Talk))?
Ответить с цитированием
Старый 03.04.2006, 18:34   #1341
Tolman

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

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

2fokon:
Что значит строка if((Canthar_Sperre == TRUE) && Npc_IsInState(self,ZS_Talk))?
Дай кусок скрипта побольше, а то я найти немогу...
Ответить с цитированием
Старый 03.04.2006, 18:40   #1342
fokon

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

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

2Тольман-Готоман:
Дай кусок скрипта побольше, а то я найти немогу...
instance DIA_Canthar_Again(C_Info)
{
    npc = VLK_468_Canthar;
    nr = 5;
    condition = DIA_Canthar_Again_Condition;
    information = DIA_Canthar_Again_Info;
    permanent = FALSE;
    important = TRUE;
};


func int DIA_Canthar_Again_Condition()
{
    if((Canthar_Sperre == TRUE) && Npc_IsInState(self,ZS_Talk))
    {
          return TRUE;
    };
};

func void DIA_Canthar_Again_Info()
{
    AI_Output(self,other,"DIA_Canthar_Again_09_00");      //Ох, опять ты.
    if(MIS_Canthars_KomproBrief == LOG_FAILED)
    {
          AI_Output(other,self,"DIA_Canthar_Again_15_01");      //Почему ты не в тюрьме?
          AI_Output(self,other,"DIA_Canthar_Again_09_02");      //Меня отпустили. Как я уже говорил тебе - я очень влиятельный человек в этом городе.
    }
    else if(MIS_Canthars_KomproBrief == LOG_Running)
    {
          AI_Output(self,other,"DIA_Canthar_Again_09_03");      //Кстати, я разделался с Сарой сам. Ты можешь забыть об этом деле с письмом.
    }
    else if(MIS_Canthars_KomproBrief == LOG_OBSOLETE)
    {
          AI_Output(self,other,"DIA_Canthar_Again_09_04");      //Разве я не предупреждал тебя? Было бы лучше, если бы ты делал то, что я говорю.
    };
    AI_Output(self,other,"DIA_Canthar_Again_09_05");      //Теперь все торговцы узнали, что ты беглый каторжник.
    AI_Output(self,other,"DIA_Canthar_Again_09_06");      //Какая жалость - теперь ты не сможешь купить на рыночной площади даже куска хлеба.
    AI_Output(self,other,"DIA_Canthar_Again_09_07");      //Я могу, конечно же, уладить эту проблему для тебя, это будет стоить, скажем...
    B_Say_Gold(self,other,Canthar_Gold);
    AI_StopProcessInfos(self);
};


Разъясни плз выделенные строки
Ответить с цитированием
Старый 03.04.2006, 19:09   #1343
Tolman

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

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

nr = 5;
Это порядок строки
permanent = FALSE;
Диалог начинает не ГГ
important = TRUE;
Диалог начинает неписсь
[quote]if((Canthar_Sperre == TRUE) && Npc_IsInState(self,ZS_Talk))quote]
Это условия выполнения диалога
Ответить с цитированием
Старый 04.04.2006, 00:40   #1344
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

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

2Тольман-Готоман:
[quote]permanent = FALSE;
Диалог начинает не ГГ
important = TRUE;
Диалог начинает неписсь
if((Canthar_Sperre == T
Вообще-то permanent = FALSE означает, что пункт меню исчезнет после выбора.

if((Canthar_Sperre == TRUE) && Npc_IsInState(self,ZS_Talk))
Означает, что переменная Canthar_Sperre имеет значение TRUE (что именно это означает по сюжету так сразу не скажу), а также Кантар находится в состоянии разговора с ГГ. Короче говоря, когда ГГ попытается заговорить с Кантаром, тот сразу начнет этот диалог если Canthar_Sperre = TRUE.
Отправить личное сообщение для Ответить с цитированием
Старый 04.04.2006, 00:56   #1345
Killer-XXX
Строители Миртаны
 
 
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
Killer-XXX вне форума

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

2fokon:
Посмотрел в скриптах. Выпустят его в 3ей главе. А на счет торговцев... возможно.

2Тольман-Готоман:
Согласен со Странником, на кой черт ты скрипт полностью выложил? Думаешь я не мог выложить? Был задан вопрос, требовался ответ, а не скрипт.
Ответить с цитированием
Старый 04.04.2006, 09:28   #1346
kraw

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

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

Прошу прощения за невежество. Пытаюсь сейчас создать свой (микро)мод для Г1. Пока только вставить в НЛ еще одного второстепенного персонажа. Почитал уроки скриптологии. Написал скриптик, описывающий персонажа и задающий расписание его действий. (Как понял из форума нужно будет его еще добавить в startup.d, но "об этом позже") Встала проблема с компиляцией. Скачал GothicSourcerV2_30. Составил src-файл. И тут начались проблемы. Сначала выяснилось, что в src нужно добавить компиляцию всех используемых библиотек. Когда истощилось терпение при попытке вставлять только требуемые библиотеки, стал использовать стандартный gothic.src. И тут столкнулся с тем, что компилятор нашел 50 нефатальных ошибок компиляции и отказался дальше компилить. При том, что в моем собственном скрипте ошибок компиляции не было. Поскольку я использовал d-файлы из поставки GothicSourcerV2_30 с добавлением недостающих из GDK, делаю вывод, что я что-то сделал не так.

"Внимание - вопрос!!!!" Точнее - несколько:

1) существует ли какое-нибудь описание процесса создания мода для начинающего модостроителя? Если да, то откуда его скачать? (подготовка программиста у меня есть - 28-летний опыт программирования)

2) Что я делал неправильно? Получается, что вместо мода я делаю другой вариант Готики1. А у модов, все-таки, гораздо меньшие размеры. (задним умом понимаю, что не нужно было компилить d-файлы NPC, миссий и т. п. М. б. где-то написано, что точно не требуется компилить?)

3) Как быть с этими ошибками компиляции?

Очень надеюсь на ответ. Во-первых - до официальной локализованной Г3 еще долго, а другие игры не цепляют. Во-вторых программировать приходилось много чего - и банковские системы, и биллинговые, и "оборонные", а вот игры - не приходилось. Хочется попробовать. Даже если это не приведет к созданию полноценного мода.
Ответить с цитированием
Старый 04.04.2006, 10:26   #1347
Wandererru

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

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

1. http://mod.worldofgothic.ru - полезные статьи, кажется была где-то есть декомпилировання болванка
2. все правильно, ошибки в скриптах от пираний, в основном отсутствуют возвращаемые значения в не void функциях. Spacer такое дело игнорирует, декомпилятор строго смотрит :)
3. править :) по своему опыту скажу (правда для Г2), сначал исправил все ошибки, потом по ходу создания своего мода постепенно вырезал ненужный код, - размер gothic.dat с 7Мб упал до 1.5Мб, правда щас уже до 3Мб растолстел, но за счет моих скриптов.

язык Готики простой, только есть много багов в реализации встроенных функций, некоторые вообще непредсказуемо работают :) Совет - использовать только те встроенные функции, которые есть  в оригинальных скриптах от пираний, ну и способ и условия их пользования там же смотреть
Ответить с цитированием
Старый 04.04.2006, 11:04   #1348
kraw

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

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

Спасибо за ответ. Буду разбираться.
Ответить с цитированием
Старый 04.04.2006, 11:13   #1349
fokon

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

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

2TycoooN:
когда ГГ попытается заговорить с Кантаром, тот сразу начнет этот диалог если Canthar_Sperre = TRUE.
А можно узнать, что такое Canthar_Sperre?

2Killer-XXX:
Посмотрел в скриптах. Выпустят его в 3ей главе. А на счет торговцев... возможно.
Вот и я том же... Решили тут с камрадами ФАК пересмотреть и подредактировать, так вот квест Кантара никто толком не знает. Решили у скриптеров спросить - они уж точно должны знать ;-).
Так когда все-таки торговцы перестают продавать ГГ товары?
Ответить с цитированием
Старый 04.04.2006, 14:39   #1350
marazmus
A.G.F.C.
 
Регистрация: 02.09.2005
Сообщений: 6
marazmus вне форума

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

По Кантару и Саре:

"Технически" Кантар "выходит" из тюрьмы, когда начинается третья глава (ГГ возвращается в Хоринис из Миненталя).
Условия - провалить или вообще не брать квест Кантара про подложное письмо для Сары. Ну и Кантар д.б. жив, естественно.

Чтобы не быть голословным, привожу логическую схему, которую накропал в explain.

1) Сама схема: http://marazmus.worldofgothic.ru/canthar.zip (6 кб, zip, внутри txt-файл для explain)
2) Программа для составления логических схем (в т.ч. и т.н. mindmaps) explain: http://marazmus.worldofgothic.ru/explain/explain.zip (696 097 байт, zip, внутри инсталлер, freeware)

Лучше всего не полениться, скачать программу и посмотреть в ней. Все видно наглядно.

...я тебе скажу, что у меня было так (а проходил я Готику немеряно раз), что торговцы уже в первой главе не соглашались с ГГ торговать из-за того что Канатр накапал! Вот в этом то и суть вопроса...
Это происходит, если
а) взять квест Кантара о подложном письме
Код:
MIS_Canthars_KomproBrief == LOG_Running
а) задержаться с выполнением квеста Кантара о подложном письме больше, чем на два дня
Код:
MIS_Canthars_KomproBrief_Day <= (Wld_GetDay() - 2)
б) "Попасться на разговор" *лорду Андре (DIA_Andre_CantharFalle) после того, как прошло больше чем 2 дня с момента начала квеста -
"Ко мне приходил торговец Кантар. Он сказал, что ты беглый каторжник из колонии. Я не знаю, правда ли это, и предпочитаю не спрашивать тебя об этом, но ты должен уладить этот вопрос."

В этом же диалоге с лордом Андре Сару "убирают" с торговой площади и "ставят" на ее место Кантара.

Это все из скриптов.

p.s. Убедительная просьба к администрации форума - удалить недавние сообщения с бесполезными для не-скриптеров скриптами Кантара, оставленные некоторыми не совсем вменяемыми форумитами. Лишний трафик и раздувание темы.
Отправить личное сообщение для Ответить с цитированием
Старый 05.04.2006, 10:49   #1351
BigMaus

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

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

2marazmus: А не мог ты еще немного уточнить по Кантару? Дело в том, что если с ним не разговаривать вообще, то через некоторое время он сидя на лавочке в городе НЕ ДАЕТ квеста по подставе Сары. Мне кажется, это происходит после поступления в ученики к кому-нибудь, но хотелось бы скриптового подтвержедения :)

И заодно, когда исчезает Сара из тюрьмы если ее таки подставить?
Ответить с цитированием
Старый 05.04.2006, 11:45   #1352
marazmus
A.G.F.C.
 
Регистрация: 02.09.2005
Сообщений: 6
marazmus вне форума

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

В скриптах на этот диалог в городе ("Эй, ты, у меня есть предложение для тебя.") четкие условия:

Код:
if((Canthar_InStadt == TRUE) && (Npc_IsDead(Sarah) == FALSE) && (Canthar_GotMe == TRUE))
1) Сара жива: Npc_IsDead(Sarah) == FALSE
2) Выразили заинтересованность предложением Кантара о пропуске в город :Canthar_GotMe == TRUE (но не обязательно приняли его, всего лишь заинтересовались)
3) Поговорили с паладином Лотаром на входе в город через главные ворота :Canthar_InStadt == TRUE (эта переменная выставляется в TRUE только в этом диалоге, больше не нашел)

На все условия стоит "И", т.е. все три условия должны быть выполнены, чтобы этот диалог с Кантаром произошел.
Отправить личное сообщение для Ответить с цитированием
Старый 05.04.2006, 13:14   #1353
BigMaus

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

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

2marazmus:
В скриптах на этот диалог в городе ("Эй, ты, у меня есть предложение для тебя.") четкие условия:
Не сходится чего-то. Сара жива, с Кантаром не разговаривал вообще (может здесь затык? Об этом чуть ниже) и с Лотаром поговорил, более того мало поговорить с Лотаром. Необходимо, чтобы Лотар свалил от ворот, сваливает он после объяснения правил города, т.е. ГГ должен спросить: "че там насчет правил ты сказать хотел?".
Я не разговаривал с Кантаром вообще. В принципе, я и ставил перед собой задачу проверить, что будет если с Кантаром ВООБЩЕ не общатся. Первое время к нему подбегал уже в городе (для проверки) все нормально срабатывало - тот сначала тер про пропуск в город, диалог заканчивался и потом Кантар САМ начинал разговор про подставу. Позже перестал начинаться диалог про пропуск вообще и, соответственно, про подставу. Как то так в общем.

Я тебя еще попрошу о маленьком одолжении - проверь, плз, при каких условиях начинает Кантар вести разговор про пропуск, а не про подставу Сары.
Ответить с цитированием
Старый 05.04.2006, 13:44   #1354
marazmus
A.G.F.C.
 
Регистрация: 02.09.2005
Сообщений: 6
marazmus вне форума

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

потом Кантар САМ начинал разговор про подставу
Так и должно быть, в скриптах стоит флаг "Начать разговор с ГГ первым"

при каких условиях начинает Кантар вести разговор про пропуск
Разговор про пропуск (DIA_Canthar_Hallo) начинается без каких-либо условий. Стоит флаг "Начать разговор с ГГ первым".

Но в самом "теле" диалога есть условия:

1) если на ГГ нет никакой одежды/брони, то начинается ветка "Посмотрите, кто у нас здесь!", выход из этой ветки на диалог "Что ты можешь предложить мне?" (DIA_Canthar_WhatOffer).
Также в этой ветке автоматом проставляется флаг Canthar_GotMe = TRUE (выражение заинтересованности в предложении Кантара - см. предыдущий мой пост)

2) Если на ГГ крестьянская одежда (if(Hlp_IsItem(itm,ITAR_Bau_L) || Hlp_IsItem(itm,ITAR_Bau_M)), то начинается ветка "Как идет работа, крестьянин?", из нее можно так же выйти на диалог "Что ты можешь предложить мне?" (DIA_Canthar_WhatOffer). Если далее выбран пункт "Я похож на фермера?", то в этом же пункте выставляется флаг заинтересованности Canthar_GotMe = TRUE).
Если выбрать пункт "Мне не на что жаловаться.", то флаг не выставляется.

В дальнейшем на работу диалога "Что ты можешь предложить мне?" (DIA_Canthar_WhatOffer) влияет именно этот флаг заинтересованности: если он установлен в TRUE, то Кантар предлагает пропуск; если не установлен, то просто говорит "Я бродячий торговец. Я торгую всем."

3) Если на ГГ одета броня, и это не крестьянская одежда, то идет просто разговор "Что я могу сделать для тебя?" и в дальнейшем на вопрос "Что ты можешь предложить мне?" идет разговор про торговлю.

p.s. Ты бы не поленился скачать программу и схему, если этого не сделал уже. Там все очень наглядно, и не нужен весь этот словесный хлам, что я здесь нагородил.
Отправить личное сообщение для Ответить с цитированием
Старый 05.04.2006, 17:40   #1355
BigMaus

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

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

2marazmus:
Ты бы не поленился скачать программу и схему, если этого не сделал уже. Там все очень наглядно, и не нужен весь этот словесный хлам, что я здесь нагородил.
Скачал, посмотрел. Многое стало понятно, но тем не менее. Эт ты сам сделал? В смысле Кантар.тхт, а не редактор? Потому как там чего-то не хватает, а именно: я каким-то образом умудрился начать разговор и получить квест с подставой Сары в броне ополчения. Вступал быстрым путем через Мартина. С Кантаром был первый разговор. Спецом это в готовящемся ФАКе описал. Мол, прикольно выглядит - ГГ в броне ополченца, а Кантар по прежнему про пропуск в город трет. Если этот редактор каким-то образом сам выдирает логику, то может он забыл чего-то? Могу еще предположить, что для обновления ситуации следовало бы от Кантара отбежать подальше, но скрипты вроде срабатывают сразу при выполнении нужных условий.

ЗЫ Плз, не обижайся за назойливость - совсем немножко осталось.
Ответить с цитированием
Старый 06.04.2006, 08:37   #1356
marazmus
A.G.F.C.
 
Регистрация: 02.09.2005
Сообщений: 6
marazmus вне форума

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

квест с подставой Сары в броне ополчения
Этот квест можно получить хоть голышом; ограничения по броне именно по разговору за пропуск.

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

совсем немножко осталось
Уже не сегодня, и не завтра, времени нет. Может, другие "скриптологи" помогут.
Отправить личное сообщение для Ответить с цитированием
Старый 06.04.2006, 11:45   #1357
BigMaus

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

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

2marazmus:
Этот квест можно получить хоть голышом; ограничения по броне именно по разговору за пропуск.
Все правильно. Но без начинания разговора о пропуске, не будет и квеста по подставе Сары. Я получил и то, и другое в броне ополчения. В смысле подошел к Кантару в броне ополчения, это был наш первый разговор и тот предложил мне пропуск. Посему это меня и позабавило. Я диалог завершил и Кантар тут же сам началд разговор о подставе.

2All: Люди, ну гляньте пожалуйста. Для всех же стараюсь. Умел бы - сам бы глянул. Остался вот этот маленький моментик.
Ответить с цитированием
Старый 06.04.2006, 12:02   #1358
marazmus
A.G.F.C.
 
Регистрация: 02.09.2005
Сообщений: 6
marazmus вне форума

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

Но без начинания разговора о пропуске, не будет и квеста по подставе Сары.
НЕТ!!! Квест по подставе Сары Кантар может дать и БЕЗ разговора о пропуске. Это видно и в скриптах, и на моей схеме, посмотри внимательно, пожалуйста.

Просто в списке "автоматически" начинаемых разговоров "автодиалог" о пропуске стоит выше по приоритету, чем "автодиалог" о Саре. Так что если ты с ним до этого не говорил, то сперва будет запущен разговор о пропуске. После того, как он "отработает", следующим по приоритету будет вызван разговор о Саре.

Другое дело - проверка на броню. Не исключено, что глючит функция проверки на броню (не реагирует на конкретный вид брони). Поэтому и появляется разговор о пропуске, которого не должно быть в твоей броне ополчения.
Отправить личное сообщение для Ответить с цитированием
Старый 06.04.2006, 14:00   #1359
BigMaus

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

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

2marazmus:
Другое дело - проверка на броню. Не исключено, что глючит функция проверки на броню (не реагирует на конкретный вид брони).
Чета ваще фигня какая-то. Сейчас проверил быстрое вступление в ополчение еще раз. Кантар и о пропуске и о Саре молчит. Так что скорее всего это действительно функция глючит. Все, за сим считаю вопрос полностью исчерпаным и объявляю тебе благодарность, а также говорю большое человеческое спасибо. Если мой труд дойдет до куда-нибудь - тебя не забуду :D
Ответить с цитированием
Старый 06.04.2006, 14:09   #1360
marazmus
A.G.F.C.
 
Регистрация: 02.09.2005
Сообщений: 6
marazmus вне форума

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

Да не за что :) Надеюсь, вопрос в самом деле закрыт (а то еще приснятся ночью Кантар с Сарой... :) )

Насчет глючности функций - есть такое, многие встроенные функции работают непредсказуемо, сталкивался с этим, когда углублялся в модостроение. Конкретно по броне - для "слежения" за броней, одетой на ГГ, пришлось заполнять ID для каждой брони, и отслеживать экипировку через проверку ID в функциях OnEquip(). Способ из скриптов оригинала почему-то не всегда возвращал корректное значение (хотя как раз в скриптах оригинала содержатся почти все верные решения по использованию встроенных функций - т.е. пираньи делали скрипты с учетом заведомой глючности функций).
Отправить личное сообщение для Ответить с цитированием
Страница 34 из 65 « Первая 242728293031323334 3536373839404144 Последняя »


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

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

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

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


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

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

AGFC: Valley of Gothic © 2004-2022

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