|
|
28.03.2006, 00:31
|
#1323
|
|
|
|
|
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
|
|
|
|
|
|
Re: Скриптинг в Готике
2Тольман-Готоман: В этом и есть вся прелесть Готики :) Можно как вариант поставить какую нибудь стенку в Спэйсере, невидимую.
|
|
|
31.03.2006, 16:32
|
#1331
|
|
|
|
|
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
|
|
|
|
|
|
Re: Скриптинг в Готике
2_Странник_: Быть может допустимы только массивы констант, т.е.
Код:
const string txt[3] = { "aaa", "bbb", "ccc" };
|
|
|
03.04.2006, 16:08
|
#1334
|
|
|
|
|
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
|
|
|
|
|
|
Re: Скриптинг в Готике
2fokon: Завершить можно только подложив письмо Саре\убив ее. Все остальное квест проваливает. А выходит он все же только в 3ей главе. И вроде это ни от чего более не зависит, кроме главы.
|
|
|
03.04.2006, 17:06
|
#1336
|
|
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
|
|
Re: Скриптинг в Готике
2Тольман-Готоман:
Вот все его диалоги, решай сам:
|
Ты конечно прикольно ответил, но не подумал, что я могу в скриптах, мягко говоря, не разбираться! ;-) Ты лучше нормально обясни с какого момента в игре начинается instance DIA_Canthar_Again(C_Info)?
|
|
|
03.04.2006, 17:32
|
#1338
|
|
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:47
|
#1340
|
|
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
|
|
Re: Скриптинг в Готике
2fokon:
Что значит строка if((Canthar_Sperre == TRUE) && Npc_IsInState(self,ZS_Talk))?
|
Дай кусок скрипта побольше, а то я найти немогу...
|
|
|
03.04.2006, 18:40
|
#1342
|
|
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
|
|
Re: Скриптинг в Готике
Это порядок строки
Диалог начинает не ГГ
Диалог начинает неписсь [quote]if((Canthar_Sperre == TRUE) && Npc_IsInState(self,ZS_Talk))quote] Это условия выполнения диалога
|
|
|
04.04.2006, 00:40
|
#1344
|
|
|
|
|
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
|
|
|
|
|
|
Re: Скриптинг в Готике
2Тольман-Готоман:[quote]permanent = FALSE; Диалог начинает не ГГ important = TRUE; Диалог начинает неписсь
Вообще-то permanent = FALSE означает, что пункт меню исчезнет после выбора.
if((Canthar_Sperre == TRUE) && Npc_IsInState(self,ZS_Talk))
|
Означает, что переменная Canthar_Sperre имеет значение TRUE (что именно это означает по сюжету так сразу не скажу), а также Кантар находится в состоянии разговора с ГГ. Короче говоря, когда ГГ попытается заговорить с Кантаром, тот сразу начнет этот диалог если Canthar_Sperre = TRUE.
|
|
|
04.04.2006, 00:56
|
#1345
|
|
|
|
|
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
|
|
|
|
|
|
Re: Скриптинг в Готике
2fokon: Посмотрел в скриптах. Выпустят его в 3ей главе. А на счет торговцев... возможно.
2Тольман-Готоман: Согласен со Странником, на кой черт ты скрипт полностью выложил? Думаешь я не мог выложить? Был задан вопрос, требовался ответ, а не скрипт.
|
|
|
04.04.2006, 09:28
|
#1346
|
|
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
|
|
Re: Скриптинг в Готике
1. http://mod.worldofgothic.ru - полезные статьи, кажется была где-то есть декомпилировання болванка 2. все правильно, ошибки в скриптах от пираний, в основном отсутствуют возвращаемые значения в не void функциях. Spacer такое дело игнорирует, декомпилятор строго смотрит :) 3. править :) по своему опыту скажу (правда для Г2), сначал исправил все ошибки, потом по ходу создания своего мода постепенно вырезал ненужный код, - размер gothic.dat с 7Мб упал до 1.5Мб, правда щас уже до 3Мб растолстел, но за счет моих скриптов.
язык Готики простой, только есть много багов в реализации встроенных функций, некоторые вообще непредсказуемо работают :) Совет - использовать только те встроенные функции, которые есть в оригинальных скриптах от пираний, ну и способ и условия их пользования там же смотреть
|
|
|
04.04.2006, 11:13
|
#1349
|
|
Re: Скриптинг в Готике
2TycoooN:
когда ГГ попытается заговорить с Кантаром, тот сразу начнет этот диалог если Canthar_Sperre = TRUE.
|
А можно узнать, что такое Canthar_Sperre? 2Killer-XXX:
Посмотрел в скриптах. Выпустят его в 3ей главе. А на счет торговцев... возможно.
|
Вот и я том же... Решили тут с камрадами ФАК пересмотреть и подредактировать, так вот квест Кантара никто толком не знает. Решили у скриптеров спросить - они уж точно должны знать ;-). Так когда все-таки торговцы перестают продавать ГГ товары?
|
|
|
04.04.2006, 14:39
|
#1350
|
|
|
|
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
|
|
|
|
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, 11:45
|
#1352
|
|
|
|
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
|
|
|
|
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
|
|
Re: Скриптинг в Готике
2marazmus:
В скриптах на этот диалог в городе ("Эй, ты, у меня есть предложение для тебя.") четкие условия:
|
Не сходится чего-то. Сара жива, с Кантаром не разговаривал вообще (может здесь затык? Об этом чуть ниже) и с Лотаром поговорил, более того мало поговорить с Лотаром. Необходимо, чтобы Лотар свалил от ворот, сваливает он после объяснения правил города, т.е. ГГ должен спросить: "че там насчет правил ты сказать хотел?". Я не разговаривал с Кантаром вообще. В принципе, я и ставил перед собой задачу проверить, что будет если с Кантаром ВООБЩЕ не общатся. Первое время к нему подбегал уже в городе (для проверки) все нормально срабатывало - тот сначала тер про пропуск в город, диалог заканчивался и потом Кантар САМ начинал разговор про подставу. Позже перестал начинаться диалог про пропуск вообще и, соответственно, про подставу. Как то так в общем. Я тебя еще попрошу о маленьком одолжении - проверь, плз, при каких условиях начинает Кантар вести разговор про пропуск, а не про подставу Сары.
|
|
|
05.04.2006, 13:44
|
#1354
|
|
|
|
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
|
|
|
|
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
|
|
Re: Скриптинг в Готике
2marazmus:
Ты бы не поленился скачать программу и схему, если этого не сделал уже. Там все очень наглядно, и не нужен весь этот словесный хлам, что я здесь нагородил.
|
Скачал, посмотрел. Многое стало понятно, но тем не менее. Эт ты сам сделал? В смысле Кантар.тхт, а не редактор? Потому как там чего-то не хватает, а именно: я каким-то образом умудрился начать разговор и получить квест с подставой Сары в броне ополчения. Вступал быстрым путем через Мартина. С Кантаром был первый разговор. Спецом это в готовящемся ФАКе описал. Мол, прикольно выглядит - ГГ в броне ополченца, а Кантар по прежнему про пропуск в город трет. Если этот редактор каким-то образом сам выдирает логику, то может он забыл чего-то? Могу еще предположить, что для обновления ситуации следовало бы от Кантара отбежать подальше, но скрипты вроде срабатывают сразу при выполнении нужных условий. ЗЫ Плз, не обижайся за назойливость - совсем немножко осталось.
|
|
|
06.04.2006, 08:37
|
#1356
|
|
|
|
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
|
|
|
|
Re: Скриптинг в Готике
квест с подставой Сары в броне ополчения
|
Этот квест можно получить хоть голышом; ограничения по броне именно по разговору за пропуск. Редактор этот логику никак не выдирает, все сделано вручную, через сравнение и просмотр скриптов. Насколько я знаю, таких автоматических инструментов в природе просто нет, и вряд ли появятся.
Уже не сегодня, и не завтра, времени нет. Может, другие "скриптологи" помогут.
|
|
|
06.04.2006, 11:45
|
#1357
|
|
Re: Скриптинг в Готике
2marazmus:
Этот квест можно получить хоть голышом; ограничения по броне именно по разговору за пропуск.
|
Все правильно. Но без начинания разговора о пропуске, не будет и квеста по подставе Сары. Я получил и то, и другое в броне ополчения. В смысле подошел к Кантару в броне ополчения, это был наш первый разговор и тот предложил мне пропуск. Посему это меня и позабавило. Я диалог завершил и Кантар тут же сам началд разговор о подставе. 2All: Люди, ну гляньте пожалуйста. Для всех же стараюсь. Умел бы - сам бы глянул. Остался вот этот маленький моментик.
|
|
|
06.04.2006, 12:02
|
#1358
|
|
|
|
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
|
|
|
|
Re: Скриптинг в Готике
Но без начинания разговора о пропуске, не будет и квеста по подставе Сары.
|
НЕТ!!! Квест по подставе Сары Кантар может дать и БЕЗ разговора о пропуске. Это видно и в скриптах, и на моей схеме, посмотри внимательно, пожалуйста. Просто в списке "автоматически" начинаемых разговоров "автодиалог" о пропуске стоит выше по приоритету, чем "автодиалог" о Саре. Так что если ты с ним до этого не говорил, то сперва будет запущен разговор о пропуске. После того, как он "отработает", следующим по приоритету будет вызван разговор о Саре. Другое дело - проверка на броню. Не исключено, что глючит функция проверки на броню (не реагирует на конкретный вид брони). Поэтому и появляется разговор о пропуске, которого не должно быть в твоей броне ополчения.
|
|
|
06.04.2006, 14:00
|
#1359
|
|
Re: Скриптинг в Готике
2marazmus:
Другое дело - проверка на броню. Не исключено, что глючит функция проверки на броню (не реагирует на конкретный вид брони).
|
Чета ваще фигня какая-то. Сейчас проверил быстрое вступление в ополчение еще раз. Кантар и о пропуске и о Саре молчит. Так что скорее всего это действительно функция глючит. Все, за сим считаю вопрос полностью исчерпаным и объявляю тебе благодарность, а также говорю большое человеческое спасибо. Если мой труд дойдет до куда-нибудь - тебя не забуду :D
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 23:55. Часовой пояс GMT +4.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|