Re: Скриптинг в Готике
2Vam: <br><br>Не знаю насколько актуально и не приведет ли это к задержкам в Уроках.<br>Но стали появляться гибридные МОД-ы - к Готике 1m но с уроном и учиничеством от Аддона...<br>Пожалуй первый из них lp_balance_v1.02beta (и 1.00 и 1.01)<br>Не декомпилиться ни как Г1 и просто не идет в Г2...<br>Если заинтересует, то уже скинул на Яндекс.<br><br>
|
Re: Скриптинг в Готике
2Pa:<br>
Цитата:
|
Re: Скриптинг в Готике
2Vam:<br>
Цитата:
|
Re: Скриптинг в Готике
2Vam: <br>При выполнении каеста с кровавыми чашами проглючивает место, где чашу надо взять нажав на лампу. Не подскажете, где этот кусок кода поискать (хоть приблизительно)?
|
Re: Скриптинг в Готике
2Ipse San:<br>
Цитата:
|
Re: Скриптинг в Готике
2Pa: <br>А резюм какой? Глюк плавающий и может появиться, а может и не появиться? И вылечить никак?
|
Re: Скриптинг в Готике
1)Может кто подсказать как написать такой диалог, чтобы непись-охранник не выпускал из пещеры(стоянка Фаета) пока не добудешь ему 10 кусков руды. Я писал на основе скриптов ментов, но у меня чето не получилось :(<br><br>2)Надо ли для рутины TA_SmallTalk задавать какие либо параметры Ваупоинту, а то у меня неписи вместо того чтобы базарить стоят друг к другу спинами.<br><br>3)Посмотрел х-ки allround_testmodell и нашел интересный параметр "Мастер огня". У других НПС я такого не видел(хотя,может просто плохо смотрел :) ) и хотелось бы узнать че этот Мастер означает ?<br><br>Заранее спасибо!
|
Re: Скриптинг в Готике
2Galhan:<br>
Цитата:
|
Re: Скриптинг в Готике
2VamДык я прописываю Ta_SmallTalk(21, 00, 23, 00, "Ow_NewMine_06"); одному и второму. А что еще надо??? ::)
|
Re: Скриптинг в Готике
2Galhan:
Цитата:
|
Re: Скриптинг в Готике
2finch
Цитата:
|
Re: Скриптинг в Готике
2Galhan:<br>
Цитата:
|
Re: Скриптинг в Готике
Предисловие:<br><br>Необходимые файлы:<br>_decompiled\_Intern\constants.d<br><br>_ decompiled\AI\Prototypes\Npc_Default.d<br><br>_dec ompiled\AI\AI_Intern\Balancing.d<br><br>_decompile d\Story\B\b_giveskill.d<br><br><br>В данный момент я занимаюсь разработкой мода "StrongHand" для Gothic 1, подробности в одноименной теме.<br>Мне удалось сделать в модификацию боевую систему наносимых повреждений как в Gothic 2 - т.е. чем больше умение владения мечом, тем больше шанс нанести удар в полную силу, остальные удары проходят поверхностно.<br><br>Принцип действия системы:<br>Как известно в оригинальной Gothic 1, все повреждения наносятся в полную силу +5% - 10% шанс нанести критический удар в два раза сильнее.<br>Критический удар описывается в файле "constants.d", пересенной "const int DAM_CRITICAL_MULTIPLIER = 2;"<br><br>По умолчанию игрок начинает с 0 уровнем меча - т.е. шанс нанести критический удар 0%, это прописано в файле Прототипа для всех персонажей "Npc_Default.d".<br>"Npc_SetTalentV alue(self,NPC_TALENT_1H,0);" - для одноручника.<br>"Npc_SetTalentValue(self,NPC_ TALENT_2H,0);" - для двуручника.<br>Когда игрок изучает оружие, он добавляет соответсвенно 5% и 10%.<br><br>Немного поразмыслив, я установил значение "const int DAM_CRITICAL_MULTIPLIER = 0;", из чего выйдет, что урон от всех ударов будет умножаться на "0" и будет касательным, т.е. будет наносится минимальное повреждение описываемое в файле "Balancing.d", переменной "const int NPC_MINIMAL_DAMAGE = 10;", что соответствует 10 ед. урона.<br>Итак, что мы имеем...<br>С такими параметрами "Npc_Default.d"<br>"Npc_SetTalentVa lue(self,NPC_TALENT_1H,0);"<br>"Npc_SetT alentValue(self,NPC_TALENT_2H,0);"<br>Естеств енно ранее "критические", а теперь "касательные" удары вообще не будут происходить, так как вроятность "0".<br>Нужно же, чтобы эти удары на нулевом уровне меча происходили довольно часто, чтобы это изменить, я изменил значения "0" - на "90"<br>"Npc_SetTalentValue(self,NP C_TALENT_1H,90);"<br>"Npc_SetTalentValue (self,NPC_TALENT_2H,90);"<br>Теперь, с вероятностью 90% будут наносится касательные удары, отсюда следуют что удары в полную силу будут наносится с вероятностью 10%. Значит чем меньше будет значение переменной, тем больше будет вероятность, что удары пройдут в полную силу.<br>Впринципе вот эта и есть система Г2 :)<br><br>Но, раньше при обучении, к переменным:<br>"Npc_SetTalentValue(self,NPC_T ALENT_1H,90);"<br>"Npc_SetTalentValue(se lf,NPC_TALENT_2H,90);"<br>Прибавлялось 5 и 10, теперь же для обучения нужно убавлять, это изменяется в файле "b_giveskill.d"<br><br>Npc_SetTalentValu e(typ,NPC_TALENT_1H,Npc_GetTalentValue(typ,NPC_TAL ENT_1H) - 40);<br>Npc_SetTalentValue(typ,NPC_TALENT_2H,Npc_G etTalentValue(typ,NPC_TALENT_2H) - 40);<br><br>С каждым уровнем обучения от 90 отнимается число 40.<br><br>Одноручник\Двуручник:<br>0 - 90% вероятность провала - 10% успешная атака.<br>1 - 50% вероятность провала - 50% успешная атака.<br>2 - 10% вероятность провала - 90% успешная атака.<br><br>Эти переменные в файле "Story_Globals.d" отвечали за количество LP за обучение.<br>const int LPCOST_TALENT_1H_1 = 10;<br>const int LPCOST_TALENT_1H_2 = 20;<br>const int LPCOST_TALENT_2H_1 = 50;<br>const int LPCOST_TALENT_2H_2 = 70;<br><br>Но потом мне удалось сделать вот такую системы<br><br>--- Нет комбы ---<br>0 - не обучен 10% успешная атака.<br>--- Комбо 1 ---<br>1 - новичок 20% успешная атака.<br>2 - драчун 30% успешная атака.<br>3 - лесоруб 40% успешная атака.<br>4 - боец 50% успешная атака.<br>--- Комбо 2 ---<br>5 - воин 60% успешная атака.<br>6 - вояка 70% успешная атака.<br>7 - инквизитор 80% успешная атака.<br>8 - мастер 90% успешная атака.<br><br>Для этого пришлось добавить несколько переменный в файл "Story_Globals.d".<br><br>const int LPCOST_TALENT_1H_1 = 10;<br>const int LPCOST_TALENT_1H_2 = 10;<br>const int LPCOST_TALENT_1H_3 = 10;<br>const int LPCOST_TALENT_1H_4 = 10;<br>const int LPCOST_TALENT_1H_5 = 15;<br>const int LPCOST_TALENT_1H_6 = 15;<br>const int LPCOST_TALENT_1H_7 = 15;<br>const int LPCOST_TALENT_1H_8 = 15;<br><br>const int LPCOST_TALENT_2H_1 = 10;<br>const int LPCOST_TALENT_2H_2 = 10;<br>const int LPCOST_TALENT_2H_3 = 10;<br>const int LPCOST_TALENT_2H_4 = 10;<br>const int LPCOST_TALENT_2H_5 = 15;<br>const int LPCOST_TALENT_2H_6 = 15;<br>const int LPCOST_TALENT_2H_7 = 15;<br>const int LPCOST_TALENT_2H_8 = 15;<br><br>Итак новая система с более плавным обучением заработала, но стойки бойца остались прежними, а для новых переменных вообще сбросились.<br>const int LPCOST_TALENT_2H_1 = 10; - стойка обычного бойца.<br>const int LPCOST_TALENT_2H_2 = 10; - стойка мастера.<br>const int LPCOST_TALENT_2H_3 = 10; - стойка "необученного"!<br>const int LPCOST_TALENT_2H_4 = 10; - стойка "необученного"!<br>и т. д.<br><br>Так вот -где можно найти в скриптах описание бойцлвских стоек для каждого уровня TALENT_1H_x.
|
Re: Скриптинг в Готике
2Ukur:<br>
Цитата:
|
Re: Скриптинг в Готике
2Vam:<br>
Цитата:
|
Re: Скриптинг в Готике
2Vam:
Цитата:
|
Re: Скриптинг в Готике
2Ukur: <br>Ого, 110 LP. Как я понимаю, суть этого нововведения - искуственно не дать игроку быстро(?) прокачать другие характеристики, отобрав все очки обучения на прокачку боевых скиллов (или не качать оружие)? ;)
|
Re: Скриптинг в Готике
1)Как убрать дефултные диалоги у НПС? Я создал нового НПС(мента), поставил его на стоянке Фаета и прописал ему диалог. Но у него вместе с моим диалогом появляется куча диалогов типа "Was gibt Neues" и "Kannst du mir helfen..."<br>2)Как менять скрипт ГГ? Я меняю в скрипте PC_HERO.d его внешний вид. Захожу в игру - вроде все нормально. Но некоторые мужики не хотят с ним базарить. Когда я начинаю разговор, он просто стоит и махает руками, но режим диалога не начинается. При этом, когда я вставляю PC_L10 и вселяюсь в него, то все со мной говорят. :o Я предпологаю, что моего PC_HERO просто не определяет как self.
|
Re: Скриптинг в Готике
2Galhan: <br>
Цитата:
|
Re: Скриптинг в Готике
Вот я не потеме можноли читом или скриптами стать орком в Готике ? ::)Извените что не по теме :'(
|
Re: Скриптинг в Готике
Вот скрипт диалога охранника, который по-идее должен не пускать. Может кто подсказать, что в скрипте не правильно:<br><br>INSTANCE Mil_018_Migel_Exit (C_INFO)<br>{<br> npc = Mil_018_Migel;<br> nr = 999;<br> condition = Mil_018_Migel_Exit_Condition;<br> information = Mil_018_Migel_Exit_Info;<br> permanent = 1;<br> description = DIALOG_ENDE;<br>}; <br><br>FUNC INT Mil_018_Migel_Exit_Condition()<br>{<br> return 1;<br>};<br><br>FUNC VOID Mil_018_Migel_Exit_Info()<br>{<br> AI_StopProcessInfos ( self );<br>};<br><br>//************************************************** ***************************<br><br> const string Mil_018_CheckPoint = "Ow_NewMine_01_B"; <br>//************************************************** ***************************<br><br>instance Mil_018_Migel_FirstWarn (C_INFO)<br>{<br> npc = Mil_018_Migel;<br> nr = 1;<br> condition = Mil_018_Migel_FirstWarn_Condition;<br> information = Mil_018_Migel_FirstWarn_Info;<br> permanent = TRUE;<br> important = TRUE;<br>}; <br><br>func int Mil_018_Migel_FirstWarn_Condition()<br>{<br> if (Npc_GetDistToWP(other, Mil_018_CheckPoint) <= 700) <br> {<br> Npc_SetRefuseTalk(self,5);<br> return FALSE;<br> };<br> <br> if ((self.aivar[AIV_Guardpassage_Status] == GP_NONE )<br> && (self.aivar[AIV_PASSGATE] == FALSE )<br> && (Hlp_StrCmp(Npc_GetNearestWP(self),self.w p) == TRUE )<br> && (Npc_RefuseTalk(self) == FALSE )<br> && (Nugget_150_Done == 0 ))<br> {<br> return TRUE;<br> };<br>};<br><br>func void Mil_018_Migel_FirstWarn_Info()<br>{<br> other.aivar[AIV_LastDistToWP] = Npc_GetDistToWP(other,Mil_018_CheckPoint);<br> self.aivar[AIV_Guardpassage_Status] = GP_FirstWarnGiven;<br> self.aivar[AIV_PASSGATE] = FALSE;<br> AI_Output (self, other,"Mil_018_Migel_FirstWarn_12_00"); //Стой! Ты куда это собрался, а?<br> AI_Output (self, other,"Mil_018_Migel_FirstWarn_12_01"); //Возвращайся к работе, пока я не снес тебе башку!<br> AI_StopProcessInfos (self);<br>};<br><br>// ************************************************** *************************<br>// ************************************************** *************************<br>// ************************************************** *************************<br><br>INSTANCE Mil_018_Migel_SecondWarn (C_INFO)<br>{<br> npc = Mil_018_Migel;<br> nr = 2;<br> condition = Mil_018_Migel_SecondWarn_Condition;<br> information = Mil_018_Migel_SecondWarn_Info;<br> permanent = TRUE;<br> important = TRUE;<br>}; <br><br>FUNC INT Mil_018_Migel_SecondWarn_Condition()<br>{<br> if ((self.aivar[AIV_Guardpassage_Status] == GP_FirstWarnGiven )<br> && (self.aivar[AIV_PASSGATE] == FALSE ) <br> && (Hlp_StrCmp(Npc_GetNearestWP(self),self.w p) == TRUE )<br> && (Npc_GetDistToWP(other,Mil_018_CheckPoint ) <= (other.aivar[AIV_LastDistToWP]-175) )<br> && (Nugget_150_Done == 0 ))<br> {<br> return TRUE;<br> };<br>};<br><br>func void Mil_018_Migel_SecondWarn_Info()<br>{<br> AI_Output (self, other,"Mil_018_Migel_SecondWarn_12_00"); //Ты что оглох? Я сказал возвращайся!!!<br><br> other.aivar[AIV_LastDistToWP] = Npc_GetDistToWP (other,Mil_018_CheckPoint);<br> other.aivar[AIV_Guardpassage_Status] = GP_SecondWarnGiven; <br> <br> AI_StopProcessInfos (self);<br>};<br><br>// ************************************************** *************************<br>// ************************************************** *************************<br>// ************************************************** *************************<br><br>INSTANCE Mil_018_Migel_Attack (C_INFO)<br>{<br> npc = Mil_018_Migel;<br> nr = 3;<br> condition = Mil_018_Migel_Attack_Condition;<br> information = Mil_018_Migel_Attack_Info;<br> permanent = TRUE;<br> important = TRUE;<br>}; <br><br>FUNC INT Mil_018_Migel_Attack_Condition()<br>{<br> if ((self.aivar[AIV_Guardpassage_Status] == GP_SecondWarnGiven )<br> && (self.aivar[AIV_PASSGATE] == FALSE ) <br> && (Hlp_StrCmp(Npc_GetNearestWP(self),self.w p) == TRUE )<br> && (Npc_GetDistToWP(other,Mil_018_CheckPoint ) < (other.aivar[AIV_LastDistToWP]-175) ))<br> {<br> return TRUE;<br> };<br>};<br><br>func void Mil_018_Migel_Attack_Info()<br>{<br> other.aivar[AIV_LastDistToWP] = 0;<br> other.aivar[AIV_Guardpassage_Status] = GP_NONE; <br> AI_Output (self, other,"Mil_018_Migel_Attack_12_00"); //Ты сам напросился!<br> AI_StopProcessInfos (self); <br> B_Attack (self, other, AR_GuardStopsIntruder, 0); <br>};<br><br>// ************************************************** *************************<br>// ************************************************** *************************<br>// ************************************************** *************************<br><br>INSTANCE Mil_018_Migel_NuggetControl_Yes (C_INFO)<br>{<br> npc = Mil_018_Migel;<br> nr = 4;<br> condition = Mil_018_Migel_NuggetControl_Yes_Condition;<br> information = Mil_018_Migel_NuggetControl_Yes_Info;<br> permanent = 1;<br> important = 0;<br> description = "Я уже нароботал дневную норму!";<br>};<br><br>FUNC INT Mil_018_Migel_NuggetControl_Yes_Condition()<br>{ <br> if ((Npc_HasItems(other, ItMi_Nugget) >= 150)<br> && (Nugget_150_Done == 0 ))<br> {<br> return TRUE;<br> };<br>};<br><br>FUNC VOID Mil_018_Migel_NuggetControl_Yes_Info()<br>{<br> AI_Output (other, self,"Mil_018_Migel_NuggetControl_Yes_12_00&q uot;); //Эй, я уже нароботал дневную норму.<br> AI_Output (self, other,"Mil_018_Migel_NuggetControl_Yes_12_01& quot;); //Парень, а ты не такой уж бездельник, как я думал!<br> AI_Output (self, other,"Mil_018_Migel_NuggetControl_Yes_12_02& quot;); //Ладно, проходи, только не вздумай препрятать себе хоть кусок руды, а то тебя по всей стоянке не соберут, усек?<br> <br> self.aivar[AIV_PASSGATE] = TRUE;<br> Nugget_150_Done = 1;<br> B_CheckLog();<br> AI_StopProcessInfos (self);<br>};<br><br>// ************************************************** *************************<br>// ************************************************** *************************<br>// ************************************************** *************************<br><br>INSTANCE Mil_018_Migel_NuggetControl_No (C_INFO)<br>{<br> npc = Mil_018_Migel;<br> nr = 5;<br> condition = Mil_018_Migel_NuggetControl_No_Condition;<br> information = Mil_018_Migel_NuggetControl_No_Info;<br> permanent = 1;<br> important = 0;<br> description = "Я уже нароботал дневную норму!";<br>};<br><br>FUNC INT Mil_018_Migel_NuggetControl_No_Condition()<br>{ <br> if ((Npc_HasItems(other, ItMi_Nugget) < 150)<br> && (Nugget_150_Done == 0 ))<br> {<br> return TRUE;<br> };<br>};<br><br>FUNC VOID Mil_018_Migel_NuggetControl_No_Info()<br>{<br> AI_Output (other, self,"Mil_018_Migel_NuggetControl_No_12_00&qu ot;); //Эй, я уже нароботал дневную норму.<br> AI_Output (self, other,"Mil_018_Migel_NuggetControl_No_12_01&q uot;); //Знаешь, мне кажеться ты меня обманываешь- здесь нет 150 кусков! А я не люблю, когда меня обманывают!<br> AI_Output (self, other,"Mil_018_Migel_NuggetControl_No_12_02&q uot;); //А ну быстро работать, а то счас шкуру спущу!<br> <br> self.aivar[AIV_PASSGATE] = FALSE;<br> Nugget_150_Done = 0;<br> AI_StopProcessInfos (self);<br>};<br><br><br>З.Ы.Где лежат скрипты писем, книжек и т.д.?
|
Re: Скриптинг в Готике
2Galhan:<br>
Цитата:
|
Re: Скриптинг в Готике
В моем скрипте работает все кроме главного - чтобы он не выпускал ГГ оттуда. То есть при попытке вырваться, он говорит только "Стой! Ты куда это собрался, а? Возвращайся к работе, пока я не снес тебе башку!"(FirstWarn), а SecondWarn и Attack - уже никак, проходи, сколько хочеш :(<br>З.Ы. Почему при изминении гильдии и внешности ГГ, многие НПС перестают с ним говорить? ::)
|
Re: Скриптинг в Готике
2Galhan:<br>
Цитата:
|
Re: Скриптинг в Готике
2TeMnI MaG: <br>
Цитата:
|
Re: Скриптинг в Готике
2Galhan:<br>
Цитата:
|
Re: Скриптинг в Готике
2Vam: и 2All:<br><br>Конверт DDS в TEX и обратно от Нико Бендлина<br>http://www.bendlins.de/nico/gothic2/ztextools.zip<br>Пишу об этом здесь, так как еще раз хочу, что-бы обратили внимание на сайт Нико<br>http://www.bendlins.de/nico/<br><br>
|
Re: Скриптинг в Готике
А можно ли как-то зделать, чтобы после определенных действий, на карте появлялся ВОБ.<br>Пример: чел просит ГГ принести ему трубку, колбу и табак, когда приносишь, он ставит кальян.
|
Re: Скриптинг в Готике
Не нужно что бы она лежала там все время.Ведь нпс теряет до того,как говорит ГГ.
|
Re: Скриптинг в Готике
Цитата:
|
Re: Скриптинг в Готике
Цитата:
|
Re: Скриптинг в Готике
2Galhan: <br>В принципе, у тебя там вроде бы все сделано точно так же, как у Таламона в Монастыре, так что ума не приложу, почему не работает... *::)<br><br>А вот по поводу других скриптов, у тебя там не очень рационально сделано.<br>Я бы на твоем месте сделал так:<br><br><br>instance Mil_018_Migel_NuggetControl_Yes(c_info)<br>{<br> * * *npc = Mil_018_Migel;<br> * * *nr = 4;<br> * * *condition = Mil_018_Migel_NuggetControl_Yes_Condition;<br> * * *information = Mil_018_Migel_NuggetControl_Yes_Info;<br> * * *permanent = TRUE;<br> * * *description = "Я уже нароботал дневную норму!";<br>};<br><br>func int Mil_018_Migel_NuggetControl_Yes_Condition()<br>{ <br> * * *if(!Nugget_150_Done)<br> * * *{<br> * * * * * *return TRUE;<br> * * *};<br>};<br><br>func void Mil_018_Migel_NuggetControl_Yes_Info()<br>{<br> * * *AI_Output(other,self,"Mil_018_Migel_NuggetCo ntrol_Yes_12_00"); //Эй, я уже нароботал дневную норму.<br> * * *<br> * * *if(Npc_HasItems(other,ItMi_Nugget) >= 150)<br> * * *{<br> * * * * * *AI_Output(self,other,"Mil_018_Migel_NuggetCo ntrol_Yes_12_01"); //Парень, а ты не такой уж бездельник, как я думал!<br> * * * * * *AI_Output(self,other,"Mil_018_Migel_NuggetCo ntrol_Yes_12_02"); //Ладно, проходи, только не вздумай препрятать себе хоть кусок руды, а то тебя по всей стоянке не соберут, усек?<br><br> * * * * * *Nugget_150_Done = TRUE;<br> * * * * * *B_CheckLog(); //Не совсем понятно, зачем тут эта функция. Она обычно применяется после скажем MIS_Nugget_150_Done = LOG_SUCCESS<br> * * *}<br> * * *else<br> * * *{<br> * * * * * *AI_Output (self, other,"Mil_018_Migel_NuggetControl_No_12_01&q uot;); //Знаешь, мне кажеться ты меня обманываешь- здесь нет 150 кусков! А я не люблю, когда меня обманывают!<br> * * * * * *AI_Output (self, other,"Mil_018_Migel_NuggetControl_No_12_02&q uot;); //А ну быстро работать, а то счас шкуру спущу!<br> * * *};<br>};<br><br>
|
Re: Скриптинг в Готике
Значица так...<br><br>Я попытался вставить в свой мод для Г1 "StrongHand" пояса из Г2, пояса отлично заработали, но есть кое-какие странности.<br><br>В описании пояса стоит такой флаг:<br>mainflag = ITEM_KAT_MAGIC;<br><br>С данным флагом пояс появляется в инвентаре с магическими предметами. При этом можно одеть ВСЕ пояса сразу. А это НЕ ЕСТЬ хорошо.<br><br>Глючноватое решение проблемы:<br>Если флаг "mainflag = ITEM_KAT_MAGIC;" изменить на "mainflag = ITEM_KAT_ARMOR;" и добавить флаг "wear = WEAR_HEAD;" (одеть пояс на голову, так как больше некуда одеть...) пояса начинают работать более правильно. Т.е. одевается только один пояс и один доспех... <br><br>Все было бы отлично, если бы через голову не проходила .3ds модель одетого пояса, взятая из строки: Например: "visual = "ItMI_Belt_06.3ds";. Хотя строки описывающей визуальные изменения "visual_change = ... " в описании амулетов вообще НЕТ!<br><br>Так вот, вопрос...<br>Где в скриптах можно найти описание количества одеваемых одновременно предметов, ИЛИ как полностью отключить общую визуализацию "visual_change = ... ", но чтобы при этом его было видно в инвентаре: "visual = "ItMI_Belt_06.3ds".
|
Re: Скриптинг в Готике
2Ukur:<br>
Цитата:
|
Re: Скриптинг в Готике
Где нужно в Globals и в Startup прописывать своего NPC,чтобы он появился в игре !!!!Помогите плиззззззззззз!!
|
Re: Скриптинг в Готике
Кхм... Возник такой вопрос:<br><br>Как сделать монстра, чтобы он не нападал на npc а вёл<br>себя как человек - говорил с ГГ, вёл его куда-нибуть, шёл<br>за ним?
|
Re: Скриптинг в Готике
2Beliar@Alexey:<br>
Цитата:
|
Re: Скриптинг в Готике
2Vam: <br>Обычный огонёк нашел, а где то, что в аддоне из амулета появляется или это он же?<br><br>Добавление от 05/07/05, в 22:29:05 <hr class="hr_agfc">P.S: И как написать диалог для любого npc?<br><br>Добавление от 05/07/05, в 22:31:16 <hr class="hr_agfc">
Цитата:
|
Re: Скриптинг в Готике
2Beliar@Alexey: <br>
Цитата:
|
Re: Скриптинг в Готике
Дык я пишу - нашел обычный в папке story\npc\monster/MST_Wisp.d<br>В нем instance Wisp_Detector(Mst_Default_Wisp)<br>это и есть ищущий огонек?<br>
Цитата:
|
Текущее время: 19:43. Часовой пояс GMT +4. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
AGFC: Valley of Gothic © 2004-2022