|
|
17.04.2005, 15:41
|
#281
|
 |
|
 |
|
*
Регистрация: 29.08.2004
Сообщений: 1
|
|
 |
|
 |
|
Re: Скриптинг в Готике
2Vam:
Не знаю насколько актуально и не приведет ли это к задержкам в Уроках. Но стали появляться гибридные МОД-ы - к Готике 1m но с уроном и учиничеством от Аддона... Пожалуй первый из них lp_balance_v1.02beta (и 1.00 и 1.01) Не декомпилиться ни как Г1 и просто не идет в Г2... Если заинтересует, то уже скинул на Яндекс.
|
|
|
18.04.2005, 15:32
|
#282
|
|
Re: Скриптинг в Готике
2Pa:
Не декомпилиться ни как Г1 и просто не идет в Г2...
|
В этом датнике есть ошибка, она приводит к вылету декомпилятора, в ближайшее время сделаю обработчик таких ошибок, вылета не будет. PS: Это мод только для первой Готики, с опцией -zgame:1 декомпилироваться не будет. Добавление от 04/18/05, в 14:52:50 2Pa:При подробном анализе было выявлено, что ошибка не датнике, а в декомпиляторе. Скоро выложу исправленную версию.
|
|
|
18.04.2005, 17:12
|
#283
|
 |
|
 |
|
*
Регистрация: 29.08.2004
Сообщений: 1
|
|
 |
|
 |
|
Re: Скриптинг в Готике
2Vam:
В этом датнике есть ошибка,
|
В датнике ошибка все равно есть - не работает заявленная система прокачки... До 29 прокачав любой аттрибут - и за 1 LP качаешь и следующие +5 и сразу не выходя и последующие за 1 LP +5 к аттрибуту... Но выходишь и в LP полная чехарда - порядка 41 лимона пойнтов - но использовать их уже нет возможности... Пытался разными офф путями преодолеть этот глюк - но видимо надо ждать следующую бету.
|
|
|
19.04.2005, 07:01
|
#285
|
 |
|
 |
|
*
Регистрация: 29.08.2004
Сообщений: 1
|
|
 |
|
 |
|
Re: Скриптинг в Готике
2Ipse San:
При выполнении каеста с кровавыми чашами проглючивает место, где чашу надо взять нажав на лампу. Не подскажете, где этот кусок кода поискать (хоть приблизительно)?
|
В скриптах нет ни какого глюка! Просто при прорисовке вай пойнт сместился (видимо) и место откуда срабатывает эта лампа - находится в шаге-полутора от нее.
|
|
|
20.04.2005, 10:18
|
#288
|
|
Re: Скриптинг в Готике
2Galhan:
2)Надо ли для рутины TA_SmallTalk задавать какие либо параметры Ваупоинту, а то у меня неписи вместо того чтобы базарить стоят друг к другу спинами.
|
При вызове этой функции обязательно должен быть задан вайпоинт в котором должен состояться мини-диалог.
|
|
|
22.04.2005, 00:30
|
#290
|
|
Re: Скриптинг в Готике
2Galhan:
Дык я прописываю Ta_SmallTalk(21, 00, 23, 00, "Ow_NewMine_06"); одному и второму. А что еще надо???
|
Разговор может происходить только на фрипоинте, название которого начинается на FP_SMALLTALK_ Если рядом с НПС такого фрипоинта нету, то ничего этот НПС делать не будет.
|
|
|
22.04.2005, 10:42
|
#291
|
|
Re: Скриптинг в Готике
2finch
...название которого начинается на FP_SMALLTALK_ Если рядом с НПС такого фрипоинта нету, то ничего этот НПС делать не будет
|
Скрипты SLD_827_Soeldner и SLD_802_Buster(те, что стоят и базарят возле фермы Ерола). У них Ваупоинты для Smalltalk называется соответсвенно NW_BIGFARM_ALLEE_HUT и NW_BIGFARM_HUT_01. Что то я не заметил у них FP_SMALLTALK_ ::)
|
|
|
22.04.2005, 12:12
|
#292
|
|
Re: Скриптинг в Готике
2Galhan:
Скрипты SLD_827_Soeldner и SLD_802_Buster(те, что стоят и базарят возле фермы Ерола). У них Ваупоинты для Smalltalk называется соответсвенно NW_BIGFARM_ALLEE_HUT и NW_BIGFARM_HUT_01. Что то я не заметил у них FP_SMALLTALK_
|
Не надо путать вайпоинты и фрипоинты, это разные вещи, вайпоинт в скриптах задается полным именем, а фрипоинт сокращенным, для перемещения на эти точки используются разные функции. Фрипоинт представляет локальную точку на расстоянии до 20 метров от другой точки (фрипоинта или вайпоинта), а вайпоинт - глобальная точка в пределах мира Готики. Вайпоинт всегда есть (если, конечно, он определен), в него можно переместиться из любой точки, а для того, чтобы переместиться на фрипоинт, сначала необходимо проверить, существует ли он в непосредственной близости от НПС, и если да, то перейти на него. Вайпоинт НПС прописывается в его классе (инстанции) в переменной WP, фрипоинт же нигде (кроме карты) не прописывается. В твоем случае посмотри пример организации мини-диалога в файле ZS_SmallTalk.d
|
|
|
22.04.2005, 14:57
|
#293
|
|
Re: Скриптинг в Готике
Предисловие:
Необходимые файлы: _decompiled\_Intern\constants.d
_decompiled\AI\Prototypes\Npc_Default.d
_decompiled\AI\AI_Intern\Balancing.d
_decompiled\Story\B\b_giveskill.d
В данный момент я занимаюсь разработкой мода "StrongHand" для Gothic 1, подробности в одноименной теме. Мне удалось сделать в модификацию боевую систему наносимых повреждений как в Gothic 2 - т.е. чем больше умение владения мечом, тем больше шанс нанести удар в полную силу, остальные удары проходят поверхностно.
Принцип действия системы: Как известно в оригинальной Gothic 1, все повреждения наносятся в полную силу +5% - 10% шанс нанести критический удар в два раза сильнее. Критический удар описывается в файле "constants.d", пересенной "const int DAM_CRITICAL_MULTIPLIER = 2;"
По умолчанию игрок начинает с 0 уровнем меча - т.е. шанс нанести критический удар 0%, это прописано в файле Прототипа для всех персонажей "Npc_Default.d". "Npc_SetTalentValue(self,NPC_TALENT_1H,0);" - для одноручника. "Npc_SetTalentValue(self,NPC_TALENT_2H,0);" - для двуручника. Когда игрок изучает оружие, он добавляет соответсвенно 5% и 10%.
Немного поразмыслив, я установил значение "const int DAM_CRITICAL_MULTIPLIER = 0;", из чего выйдет, что урон от всех ударов будет умножаться на "0" и будет касательным, т.е. будет наносится минимальное повреждение описываемое в файле "Balancing.d", переменной "const int NPC_MINIMAL_DAMAGE = 10;", что соответствует 10 ед. урона. Итак, что мы имеем... С такими параметрами "Npc_Default.d" "Npc_SetTalentValue(self,NPC_TALENT_1H,0);" "Npc_SetTalentValue(self,NPC_TALENT_2H,0);" Естественно ранее "критические", а теперь "касательные" удары вообще не будут происходить, так как вроятность "0". Нужно же, чтобы эти удары на нулевом уровне меча происходили довольно часто, чтобы это изменить, я изменил значения "0" - на "90" "Npc_SetTalentValue(self,NPC_TALENT_1H,90);" "Npc_SetTalentValue(self,NPC_TALENT_2H,90);" Теперь, с вероятностью 90% будут наносится касательные удары, отсюда следуют что удары в полную силу будут наносится с вероятностью 10%. Значит чем меньше будет значение переменной, тем больше будет вероятность, что удары пройдут в полную силу. Впринципе вот эта и есть система Г2 :)
Но, раньше при обучении, к переменным: "Npc_SetTalentValue(self,NPC_TALENT_1H,90);" "Npc_SetTalentValue(self,NPC_TALENT_2H,90);" Прибавлялось 5 и 10, теперь же для обучения нужно убавлять, это изменяется в файле "b_giveskill.d"
Npc_SetTalentValue(typ,NPC_TALENT_1H,Npc_GetTalent Value(typ,NPC_TALENT_1H) - 40); Npc_SetTalentValue(typ,NPC_TALENT_2H,Npc_GetTalent Value(typ,NPC_TALENT_2H) - 40);
С каждым уровнем обучения от 90 отнимается число 40.
Одноручник\Двуручник: 0 - 90% вероятность провала - 10% успешная атака. 1 - 50% вероятность провала - 50% успешная атака. 2 - 10% вероятность провала - 90% успешная атака.
Эти переменные в файле "Story_Globals.d" отвечали за количество LP за обучение. const int LPCOST_TALENT_1H_1 = 10; const int LPCOST_TALENT_1H_2 = 20; const int LPCOST_TALENT_2H_1 = 50; const int LPCOST_TALENT_2H_2 = 70;
Но потом мне удалось сделать вот такую системы
--- Нет комбы --- 0 - не обучен 10% успешная атака. --- Комбо 1 --- 1 - новичок 20% успешная атака. 2 - драчун 30% успешная атака. 3 - лесоруб 40% успешная атака. 4 - боец 50% успешная атака. --- Комбо 2 --- 5 - воин 60% успешная атака. 6 - вояка 70% успешная атака. 7 - инквизитор 80% успешная атака. 8 - мастер 90% успешная атака.
Для этого пришлось добавить несколько переменный в файл "Story_Globals.d".
const int LPCOST_TALENT_1H_1 = 10; const int LPCOST_TALENT_1H_2 = 10; const int LPCOST_TALENT_1H_3 = 10; const int LPCOST_TALENT_1H_4 = 10; const int LPCOST_TALENT_1H_5 = 15; const int LPCOST_TALENT_1H_6 = 15; const int LPCOST_TALENT_1H_7 = 15; const int LPCOST_TALENT_1H_8 = 15;
const int LPCOST_TALENT_2H_1 = 10; const int LPCOST_TALENT_2H_2 = 10; const int LPCOST_TALENT_2H_3 = 10; const int LPCOST_TALENT_2H_4 = 10; const int LPCOST_TALENT_2H_5 = 15; const int LPCOST_TALENT_2H_6 = 15; const int LPCOST_TALENT_2H_7 = 15; const int LPCOST_TALENT_2H_8 = 15;
Итак новая система с более плавным обучением заработала, но стойки бойца остались прежними, а для новых переменных вообще сбросились. const int LPCOST_TALENT_2H_1 = 10; - стойка обычного бойца. const int LPCOST_TALENT_2H_2 = 10; - стойка мастера. const int LPCOST_TALENT_2H_3 = 10; - стойка "необученного"! const int LPCOST_TALENT_2H_4 = 10; - стойка "необученного"! и т. д.
Так вот -где можно найти в скриптах описание бойцлвских стоек для каждого уровня TALENT_1H_x.
|
|
|
22.04.2005, 16:07
|
#294
|
|
Re: Скриптинг в Готике
2Ukur:
Так вот -где можно найти в скриптах описание бойцлвских стоек для каждого уровня TALENT_1H_x.
|
Такого в скриптах для gothic.dat вообще нет. :( Посмотри скрипты для fight.dat, файл fight.d и директория ..\FAI, может быть найдешь что-нибудь полезное. Но, вообще-то связка между талантом и моделями движений золожена в самом движке.
|
|
|
22.04.2005, 17:43
|
#295
|
 |
|
 |
|
*
Регистрация: 29.08.2004
Сообщений: 1
|
|
 |
|
 |
|
Re: Скриптинг в Готике
2Vam:
Но, вообще-то связка между талантом и моделями движений золожена в самом движке.
|
Не только талант учитывается, а и выбор позиции - в пройгрышной позиции и талант не поможет. Если загнать противника в воду или затормозить на краю ступени (где тому не замахнуться) - то у ГГ включаются такие удары, что и мастер позавидует!!! Очень бы хотелось узнать, что есть на эту тему в экзешнике!
|
|
|
23.04.2005, 02:13
|
#296
|
|
Re: Скриптинг в Готике
2Vam:
Такого в скриптах для gothic.dat вообще нет. Посмотри скрипты для fight.dat, файл fight.d и директория ..\FAI, может быть найдешь что-нибудь полезное. Но, вообще-то связка между талантом и моделями движений золожена в самом движке.
|
Боевая система в моде StrongHand. Продолжение. Итак, поиски боевых стоек ни к чему не привели... Но, все же я решил проблему. Для развития характеристик меча я использовал два типа переменных. "Переменная A" - B_GiveSkill(hero,NPC_TALENT_dH,x,LPCOST_TALENT_dH_ j); - переменная отвечающая за боевые стойки, где "d" - тип оружия (1 или 2), "x" уровень владения мечом - боевая стойка (1 или 2), "j" - количество LP за обучение. "Переменная B" - Npc_SetTalentValue(hero,NPC_TALENT_dH,F) - переменная собсно увеличивающая шанс повреждения. "F" - указывает число вероятности неудачной атаки. Итак вставляя переменные в нужные места, я добился нормальной боевой системы аля Г2, с плавной прокачкой. Ессесно она будет в моде. На данный момент система такая. Одноручники\двуручники --- Нет комбы --- 0 - Не обучен 10% успешная атака. - 10 LP 1 - Не обучен 20% успешная атака. - 10 LP "Переменная A + 1" 2 - Боец 30% успешная атака. - 10 LP 3 - Боец 40% успешная атака. - 10 LP 4 - Боец 50% успешная атака. - 10 LP "Переменная A + 2" 5 - Мастер 60% успешная атака. - 15 LP 6 - Мастер 70% успешная атака. - 15 LP 7 - Мастер 80% успешная атака. - 15 LP 8 - Мастер 90% успешная атака. - 15 LP Система была протестирована и оказалась полностью работоспособной!!!
|
|
|
24.04.2005, 12:56
|
#299
|
 |
|
 |
|
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
|
|
 |
|
 |
|
Re: Скриптинг в Готике
2Galhan:
1)Как убрать дефултные диалоги у НПС? Я создал нового НПС(мента), поставил его на стоянке Фаета и прописал ему диалог. Но у него вместе с моим диалогом появляется куча диалогов типа "Was gibt Neues" и "Kannst du mir helfen..."
|
Поставь npcType не NPCTYPE_AMBIENT, a NPCTYPE_MAIN ::)
|
|
|
26.04.2005, 09:39
|
#301
|
|
Re: Скриптинг в Готике
Вот скрипт диалога охранника, который по-идее должен не пускать. Может кто подсказать, что в скрипте не правильно:
INSTANCE Mil_018_Migel_Exit (C_INFO) { npc = Mil_018_Migel; nr = 999; condition = Mil_018_Migel_Exit_Condition; information = Mil_018_Migel_Exit_Info; permanent = 1; description = DIALOG_ENDE; };
FUNC INT Mil_018_Migel_Exit_Condition() { return 1; };
FUNC VOID Mil_018_Migel_Exit_Info() { AI_StopProcessInfos ( self ); };
//************************************************** ***************************
const string Mil_018_CheckPoint = "Ow_NewMine_01_B"; //************************************************** ***************************
instance Mil_018_Migel_FirstWarn (C_INFO) { npc = Mil_018_Migel; nr = 1; condition = Mil_018_Migel_FirstWarn_Condition; information = Mil_018_Migel_FirstWarn_Info; permanent = TRUE; important = TRUE; };
func int Mil_018_Migel_FirstWarn_Condition() { if (Npc_GetDistToWP(other, Mil_018_CheckPoint) <= 700) { Npc_SetRefuseTalk(self,5); return FALSE; }; if ((self.aivar[AIV_Guardpassage_Status] == GP_NONE ) && (self.aivar[AIV_PASSGATE] == FALSE ) && (Hlp_StrCmp(Npc_GetNearestWP(self),self.wp) == TRUE ) && (Npc_RefuseTalk(self) == FALSE ) && (Nugget_150_Done == 0 )) { return TRUE; }; };
func void Mil_018_Migel_FirstWarn_Info() { other.aivar[AIV_LastDistToWP] = Npc_GetDistToWP(other,Mil_018_CheckPoint); self.aivar[AIV_Guardpassage_Status] = GP_FirstWarnGiven; self.aivar[AIV_PASSGATE] = FALSE; AI_Output (self, other,"Mil_018_Migel_FirstWarn_12_00"); //Стой! Ты куда это собрался, а? AI_Output (self, other,"Mil_018_Migel_FirstWarn_12_01"); //Возвращайся к работе, пока я не снес тебе башку! AI_StopProcessInfos (self); };
// ************************************************** ************************* // ************************************************** ************************* // ************************************************** *************************
INSTANCE Mil_018_Migel_SecondWarn (C_INFO) { npc = Mil_018_Migel; nr = 2; condition = Mil_018_Migel_SecondWarn_Condition; information = Mil_018_Migel_SecondWarn_Info; permanent = TRUE; important = TRUE; };
FUNC INT Mil_018_Migel_SecondWarn_Condition() { if ((self.aivar[AIV_Guardpassage_Status] == GP_FirstWarnGiven ) && (self.aivar[AIV_PASSGATE] == FALSE ) && (Hlp_StrCmp(Npc_GetNearestWP(self),self.wp) == TRUE ) && (Npc_GetDistToWP(other,Mil_018_CheckPoint) <= (other.aivar[AIV_LastDistToWP]-175) ) && (Nugget_150_Done == 0 )) { return TRUE; }; };
func void Mil_018_Migel_SecondWarn_Info() { AI_Output (self, other,"Mil_018_Migel_SecondWarn_12_00"); //Ты что оглох? Я сказал возвращайся!!!
other.aivar[AIV_LastDistToWP] = Npc_GetDistToWP (other,Mil_018_CheckPoint); other.aivar[AIV_Guardpassage_Status] = GP_SecondWarnGiven; AI_StopProcessInfos (self); };
// ************************************************** ************************* // ************************************************** ************************* // ************************************************** *************************
INSTANCE Mil_018_Migel_Attack (C_INFO) { npc = Mil_018_Migel; nr = 3; condition = Mil_018_Migel_Attack_Condition; information = Mil_018_Migel_Attack_Info; permanent = TRUE; important = TRUE; };
FUNC INT Mil_018_Migel_Attack_Condition() { if ((self.aivar[AIV_Guardpassage_Status] == GP_SecondWarnGiven ) && (self.aivar[AIV_PASSGATE] == FALSE ) && (Hlp_StrCmp(Npc_GetNearestWP(self),self.wp) == TRUE ) && (Npc_GetDistToWP(other,Mil_018_CheckPoint) < (other.aivar[AIV_LastDistToWP]-175) )) { return TRUE; }; };
func void Mil_018_Migel_Attack_Info() { other.aivar[AIV_LastDistToWP] = 0; other.aivar[AIV_Guardpassage_Status] = GP_NONE; AI_Output (self, other,"Mil_018_Migel_Attack_12_00"); //Ты сам напросился! AI_StopProcessInfos (self); B_Attack (self, other, AR_GuardStopsIntruder, 0); };
// ************************************************** ************************* // ************************************************** ************************* // ************************************************** *************************
INSTANCE Mil_018_Migel_NuggetControl_Yes (C_INFO) { npc = Mil_018_Migel; nr = 4; condition = Mil_018_Migel_NuggetControl_Yes_Condition; information = Mil_018_Migel_NuggetControl_Yes_Info; permanent = 1; important = 0; description = "Я уже нароботал дневную норму!"; };
FUNC INT Mil_018_Migel_NuggetControl_Yes_Condition() { if ((Npc_HasItems(other, ItMi_Nugget) >= 150) && (Nugget_150_Done == 0 )) { return TRUE; }; };
FUNC VOID Mil_018_Migel_NuggetControl_Yes_Info() { AI_Output (other, self,"Mil_018_Migel_NuggetControl_Yes_12_00"); //Эй, я уже нароботал дневную норму. AI_Output (self, other,"Mil_018_Migel_NuggetControl_Yes_12_01"); //Парень, а ты не такой уж бездельник, как я думал! AI_Output (self, other,"Mil_018_Migel_NuggetControl_Yes_12_02"); //Ладно, проходи, только не вздумай препрятать себе хоть кусок руды, а то тебя по всей стоянке не соберут, усек? self.aivar[AIV_PASSGATE] = TRUE; Nugget_150_Done = 1; B_CheckLog(); AI_StopProcessInfos (self); };
// ************************************************** ************************* // ************************************************** ************************* // ************************************************** *************************
INSTANCE Mil_018_Migel_NuggetControl_No (C_INFO) { npc = Mil_018_Migel; nr = 5; condition = Mil_018_Migel_NuggetControl_No_Condition; information = Mil_018_Migel_NuggetControl_No_Info; permanent = 1; important = 0; description = "Я уже нароботал дневную норму!"; };
FUNC INT Mil_018_Migel_NuggetControl_No_Condition() { if ((Npc_HasItems(other, ItMi_Nugget) < 150) && (Nugget_150_Done == 0 )) { return TRUE; }; };
FUNC VOID Mil_018_Migel_NuggetControl_No_Info() { AI_Output (other, self,"Mil_018_Migel_NuggetControl_No_12_00"); //Эй, я уже нароботал дневную норму. AI_Output (self, other,"Mil_018_Migel_NuggetControl_No_12_01"); //Знаешь, мне кажеться ты меня обманываешь- здесь нет 150 кусков! А я не люблю, когда меня обманывают! AI_Output (self, other,"Mil_018_Migel_NuggetControl_No_12_02"); //А ну быстро работать, а то счас шкуру спущу! self.aivar[AIV_PASSGATE] = FALSE; Nugget_150_Done = 0; AI_StopProcessInfos (self); };
З.Ы.Где лежат скрипты писем, книжек и т.д.?
|
|
|
26.04.2005, 10:17
|
#302
|
|
Re: Скриптинг в Готике
2Galhan:
Где лежат скрипты писем, книжек и т.д.?
|
Для любой Готики - директория скриптов ..\Items, файлы IT_Written.d или Written.d PS: Мог бы и написать, что в твоем скрипте не работает.
|
|
|
27.04.2005, 10:40
|
#304
|
|
Re: Скриптинг в Готике
2Galhan:
SecondWarn и Attack - уже никак, проходи, сколько хочеш
|
В твоем скрипте напутано, переменная aivar[AIV_Guardpassage_Status] при втором предупреждении и атаке должна относиться не к other (ГГ), а к self (охранник).
|
|
|
27.04.2005, 22:52
|
#305
|
 |
|
 |
|
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
|
|
 |
|
 |
|
Re: Скриптинг в Готике
2TeMnI MaG:
Вот я не потеме можноли читом или скриптами стать орком в Готике ?
|
В каком смысле стать? Если просто побегать, то можно читами вселиться в любого орка: войти в режим Марвина, подойти к орку и нажать 'o'.
|
|
|
28.04.2005, 11:02
|
#306
|
|
Re: Скриптинг в Готике
2Galhan:
Почему при изминении гильдии и внешности ГГ, многие НПС перестают с ним говорить?
|
Посмотри описание функции B_AssessTalk() в Уроках скриптологии, там все варианты подробно рассмотрены.
|
|
|
28.04.2005, 13:09
|
#307
|
 |
|
 |
|
*
Регистрация: 29.08.2004
Сообщений: 1
|
|
 |
|
 |
|
Re: Скриптинг в Готике
2Vam: и 2All:
Конверт DDS в TEX и обратно от Нико Бендлина http://www.bendlins.de/nico/gothic2/ztextools.zip Пишу об этом здесь, так как еще раз хочу, что-бы обратили внимание на сайт Нико http://www.bendlins.de/nico/
|
|
|
01.05.2005, 02:40
|
#310
|
|
Re: Скриптинг в Готике
Цитата:
Сообщение от francisc link=board=gothic&t=1105030050&start=300#308 date=04/30/05, в 19:58:07
Не нужно что бы она лежала там все время.Ведь нпс теряет до того,как говорит ГГ.
|
Что-то я не понял, что ты такое написал. А вот эта функция: Wld_InsertItem (int itemInstance, string spawnPoint); - разместить в мире один предмет, где itemInstance – ссылка на предмет, spawnPoint – имя точки размещения (может быть как WP, так и FP). Можно попробовать...
|
|
|
01.05.2005, 05:25
|
#311
|
|
Re: Скриптинг в Готике
Цитата:
Сообщение от Vam link=board=gothic&t=1105030050&start=300#303
В твоем скрипте напутано, переменная aivar[AIV_Guardpassage_Status] при втором предупреждении и атаке должна относиться не к other (ГГ), а к self (охранник).
|
Вроде бы и так, но все равно - *не помагает! :(
|
|
|
01.05.2005, 13:38
|
#312
|
 |
|
 |
|
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
|
|
 |
|
 |
|
Re: Скриптинг в Готике
2Galhan: В принципе, у тебя там вроде бы все сделано точно так же, как у Таламона в Монастыре, так что ума не приложу, почему не работает... *::)
А вот по поводу других скриптов, у тебя там не очень рационально сделано. Я бы на твоем месте сделал так:
instance Mil_018_Migel_NuggetControl_Yes(c_info) { * * *npc = Mil_018_Migel; * * *nr = 4; * * *condition = Mil_018_Migel_NuggetControl_Yes_Condition; * * *information = Mil_018_Migel_NuggetControl_Yes_Info; * * *permanent = TRUE; * * *description = "Я уже нароботал дневную норму!"; };
func int Mil_018_Migel_NuggetControl_Yes_Condition() { * * *if(!Nugget_150_Done) * * *{ * * * * * *return TRUE; * * *}; };
func void Mil_018_Migel_NuggetControl_Yes_Info() { * * *AI_Output(other,self,"Mil_018_Migel_NuggetControl _Yes_12_00"); //Эй, я уже нароботал дневную норму. * * * * * *if(Npc_HasItems(other,ItMi_Nugget) >= 150) * * *{ * * * * * *AI_Output(self,other,"Mil_018_Migel_NuggetControl _Yes_12_01"); //Парень, а ты не такой уж бездельник, как я думал! * * * * * *AI_Output(self,other,"Mil_018_Migel_NuggetControl _Yes_12_02"); //Ладно, проходи, только не вздумай препрятать себе хоть кусок руды, а то тебя по всей стоянке не соберут, усек?
* * * * * *Nugget_150_Done = TRUE; * * * * * *B_CheckLog(); //Не совсем понятно, зачем тут эта функция. Она обычно применяется после скажем MIS_Nugget_150_Done = LOG_SUCCESS * * *} * * *else * * *{ * * * * * *AI_Output (self, other,"Mil_018_Migel_NuggetControl_No_12_01"); //Знаешь, мне кажеться ты меня обманываешь- здесь нет 150 кусков! А я не люблю, когда меня обманывают! * * * * * *AI_Output (self, other,"Mil_018_Migel_NuggetControl_No_12_02"); //А ну быстро работать, а то счас шкуру спущу! * * *}; };
|
|
|
07.05.2005, 13:40
|
#314
|
|
Re: Скриптинг в Готике
2Ukur:
Где в скриптах можно найти описание количества одеваемых одновременно предметов
|
Насколько мне известно, такого в скриптах нет, данный параметр определяется экзешником (движком) в зависимости от флага предмета flags при попытке одеть предмет.
|
|
|
07.05.2005, 23:07
|
#317
|
|
Re: Скриптинг в Готике
2Beliar@Alexey:
Как сделать монстра, чтобы он не нападал на npc а вёл себя как человек
|
Посмотри скрипт Ищущего Огонька, ведь он же монстр от рождения, а по поведению - можно и поменять.
|
|
|
07.05.2005, 23:26
|
#318
|
|
Re: Скриптинг в Готике
2Vam: Обычный огонёк нашел, а где то, что в аддоне из амулета появляется или это он же? Добавление от 05/07/05, в 22:29:05
P.S: И как написать диалог для любого npc? Добавление от 05/07/05, в 22:31:16
а где то, что в аддоне из амулета появляется или это он же?
|
И его нашел в том же файле instance Wisp_Detector(Mst_Default_Wisp)
|
|
|
08.05.2005, 00:55
|
#319
|
 |
|
 |
|
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
|
|
 |
|
 |
|
Re: Скриптинг в Готике
2Beliar@Alexey:
как написать диалог для любого npc?
|
См. папку story\dialoge Ищущий огонёк - это тот, которого в Аддоне Ватрас даёт ::)
|
|
|
08.05.2005, 01:02
|
#320
|
|
Re: Скриптинг в Готике
Дык я пишу - нашел обычный в папке story\npc\monster/MST_Wisp.d В нем instance Wisp_Detector(Mst_Default_Wisp) это и есть ищущий огонек?
как написать диалог для любого npc? См. папку story\dialoge
|
Yee/// Там я смотрел, а как сделать диалог, например, для нового npc "none_077_NewNPC", что-бы он хотя бы говорил мне привет, рассказал что-нить... и т.п.
|
|
|
Здесь присутствуют: 5 (пользователей: 0 , гостей: 5)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 12:04. Часовой пояс GMT +4.
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|