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

Страница 8 из 65 12345678 91011121314151858 Последняя »
Поиск в этой теме:

Расширенный поиск
Старый 17.04.2005, 14:41   #281
PA
Строители Миртаны
*
 
Регистрация: 29.08.2004
Сообщений: 1
PA вне форума

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

2Vam:

Не знаю насколько актуально и не приведет ли это к задержкам в Уроках.
Но стали появляться гибридные МОД-ы - к Готике 1m но с уроном и учиничеством от Аддона...
Пожалуй первый из них lp_balance_v1.02beta (и 1.00 и 1.01)
Не декомпилиться ни как Г1 и просто не идет в Г2...
Если заинтересует, то уже скинул на Яндекс.

Ответить с цитированием
Старый 18.04.2005, 14:32   #282
Vam

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

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

2Pa:
Не декомпилиться ни как Г1 и просто не идет в Г2...
В этом датнике есть ошибка, она приводит к вылету декомпилятора, в ближайшее время сделаю обработчик таких ошибок, вылета не будет.
PS: Это мод только для первой Готики, с опцией -zgame:1 декомпилироваться не будет.

Добавление от 04/18/05, в 14:52:50
2Pa:
При подробном анализе было выявлено, что ошибка не датнике, а в декомпиляторе.
Скоро выложу исправленную версию.
Ответить с цитированием
Старый 18.04.2005, 16:12   #283
PA
Строители Миртаны
*
 
Регистрация: 29.08.2004
Сообщений: 1
PA вне форума

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

2Vam:
В этом датнике есть ошибка,
В датнике ошибка все равно есть - не работает заявленная система прокачки...
До 29 прокачав любой аттрибут - и за 1 LP качаешь и следующие +5 и сразу не выходя и последующие за 1 LP  +5 к аттрибуту...
Но выходишь и в LP полная чехарда - порядка 41 лимона пойнтов - но использовать их уже нет возможности...
Пытался разными офф путями преодолеть этот глюк - но видимо надо ждать следующую бету.
Ответить с цитированием
Старый 18.04.2005, 20:34   #284
Ipse_Sun

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

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

2Vam:
При выполнении каеста с кровавыми чашами проглючивает место, где чашу надо взять нажав на лампу. Не подскажете, где этот кусок кода поискать (хоть приблизительно)?
Ответить с цитированием
Старый 19.04.2005, 06:01   #285
PA
Строители Миртаны
*
 
Регистрация: 29.08.2004
Сообщений: 1
PA вне форума

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

2Ipse San:
При выполнении каеста с кровавыми чашами проглючивает место, где чашу надо взять нажав на лампу. Не подскажете, где этот кусок кода поискать (хоть приблизительно)?
В скриптах нет ни какого глюка!
Просто при прорисовке вай пойнт сместился (видимо) и место откуда срабатывает эта лампа - находится в шаге-полутора от нее.

Ответить с цитированием
Старый 19.04.2005, 07:08   #286
Ipse_Sun

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

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

2Pa:
А резюм какой? Глюк плавающий и может появиться, а может и не появиться? И вылечить никак?
Ответить с цитированием
Старый 20.04.2005, 01:54   #287
Galhan

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

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

1)Может кто подсказать как написать такой диалог, чтобы непись-охранник не выпускал из пещеры(стоянка Фаета) пока не добудешь ему 10 кусков руды. Я писал на основе скриптов ментов, но у меня чето не получилось :(

2)Надо ли для рутины TA_SmallTalk задавать какие либо параметры Ваупоинту, а то у меня неписи вместо того чтобы базарить стоят друг к другу спинами.

3)Посмотрел х-ки allround_testmodell и нашел интересный параметр "Мастер огня". У других НПС я такого не видел(хотя,может просто плохо смотрел :) ) и хотелось бы узнать че этот Мастер означает ?

Заранее спасибо!
Ответить с цитированием
Старый 20.04.2005, 09:18   #288
Vam

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

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

2Galhan:
2)Надо ли для рутины TA_SmallTalk задавать какие либо параметры Ваупоинту, а то у меня неписи вместо того чтобы базарить стоят друг к другу спинами.
При вызове этой функции обязательно должен быть задан вайпоинт в котором должен состояться мини-диалог.
Ответить с цитированием
Старый 21.04.2005, 17:48   #289
Galhan

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

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

2VamДык я прописываю Ta_SmallTalk(21, 00, 23, 00, "Ow_NewMine_06"); одному и второму. А что еще надо??? ::)
Ответить с цитированием
Старый 21.04.2005, 23:30   #290
finch

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

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

2Galhan:
Дык я прописываю Ta_SmallTalk(21, 00, 23, 00, "Ow_NewMine_06"); одному и второму. А что еще надо???
Разговор может происходить только на фрипоинте, название которого начинается на FP_SMALLTALK_
Если рядом с НПС такого фрипоинта нету, то ничего этот НПС делать не будет.
Ответить с цитированием
Старый 22.04.2005, 09:42   #291
Galhan

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

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

2finch
...название которого начинается на FP_SMALLTALK_
Если рядом с НПС такого фрипоинта нету, то ничего этот НПС делать не будет
Скрипты SLD_827_Soeldner и SLD_802_Buster(те, что стоят и базарят возле фермы Ерола). У них Ваупоинты для Smalltalk называется соответсвенно
NW_BIGFARM_ALLEE_HUT и NW_BIGFARM_HUT_01.
Что то я не заметил у них FP_SMALLTALK_ ::)
Ответить с цитированием
Старый 22.04.2005, 11:12   #292
Vam

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

По умолчанию 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, 13:57   #293
B_Wolf

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

По умолчанию 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, 15:07   #294
Vam

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

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

2Ukur:
Так вот -где можно найти в скриптах описание бойцлвских стоек для каждого уровня TALENT_1H_x.
Такого в скриптах для gothic.dat вообще нет.  :(  Посмотри скрипты для fight.dat, файл fight.d и директория ..\FAI, может быть найдешь что-нибудь полезное. Но, вообще-то связка между талантом и моделями движений золожена в самом движке.
Ответить с цитированием
Старый 22.04.2005, 16:43   #295
PA
Строители Миртаны
*
 
Регистрация: 29.08.2004
Сообщений: 1
PA вне форума

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

2Vam:
Но, вообще-то связка между талантом и моделями движений золожена в самом движке.
Не только талант учитывается, а и выбор позиции - в пройгрышной позиции и талант не поможет.
Если загнать противника в воду или затормозить на краю ступени (где тому не замахнуться) - то у ГГ включаются такие удары, что и мастер позавидует!!!
Очень бы хотелось узнать, что есть на эту тему в экзешнике!

Ответить с цитированием
Старый 23.04.2005, 01:13   #296
B_Wolf

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

По умолчанию 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

Система была протестирована и оказалась полностью работоспособной!!!
Ответить с цитированием
Старый 23.04.2005, 05:56   #297
Ipse_Sun

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

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

2Ukur:
Ого, 110 LP. Как я понимаю, суть этого нововведения - искуственно не дать игроку быстро(?) прокачать другие характеристики, отобрав все очки обучения на прокачку боевых скиллов (или не качать оружие)? ;)
Ответить с цитированием
Старый 24.04.2005, 09:42   #298
Galhan

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

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

1)Как убрать дефултные диалоги у НПС? Я создал нового НПС(мента), поставил его на стоянке Фаета и прописал ему диалог. Но у него вместе с моим диалогом появляется куча диалогов типа "Was gibt Neues" и "Kannst du mir helfen..."
2)Как менять скрипт ГГ? Я меняю в скрипте PC_HERO.d его внешний вид. Захожу в игру -  вроде все нормально. Но некоторые мужики не хотят с ним базарить. Когда я начинаю разговор, он просто стоит и махает руками, но режим диалога не начинается. При этом, когда я вставляю PC_L10 и вселяюсь в него, то все со мной говорят.  :o Я предпологаю, что моего PC_HERO просто не определяет как self.
Ответить с цитированием
Старый 24.04.2005, 11:56   #299
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

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

2Galhan:
1)Как убрать дефултные диалоги у НПС? Я создал нового НПС(мента), поставил его на стоянке Фаета и прописал ему диалог. Но у него вместе с моим диалогом появляется куча диалогов типа "Was gibt Neues" и "Kannst du mir helfen..."
Поставь npcType не NPCTYPE_AMBIENT, a NPCTYPE_MAIN ::)
Отправить личное сообщение для Ответить с цитированием
Старый 26.04.2005, 02:35   #300
TeMnI_MaG

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

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

Вот я не потеме можноли читом или скриптами стать орком в Готике ?  ::)Извените что не по теме :'(
Ответить с цитированием
Старый 26.04.2005, 08:39   #301
Galhan

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

По умолчанию 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, 09:17   #302
Vam

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

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

2Galhan:
Где лежат скрипты писем, книжек и т.д.?
Для любой Готики - директория скриптов ..\Items, файлы IT_Written.d или Written.d

PS: Мог бы и написать, что в твоем скрипте не работает.
Ответить с цитированием
Старый 27.04.2005, 08:26   #303
Galhan

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

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

В моем скрипте работает все кроме главного - чтобы он не выпускал ГГ оттуда. То есть при попытке вырваться, он говорит только "Стой! Ты куда это собрался, а? Возвращайся к работе, пока я не снес тебе башку!"(FirstWarn), а SecondWarn и Attack - уже никак, проходи, сколько хочеш :(
З.Ы. Почему при изминении гильдии и внешности ГГ, многие НПС перестают с ним говорить? ::)
Ответить с цитированием
Старый 27.04.2005, 09:40   #304
Vam

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

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

2Galhan:
SecondWarn и Attack - уже никак, проходи, сколько хочеш
В твоем скрипте напутано, переменная aivar[AIV_Guardpassage_Status] при втором предупреждении и атаке должна относиться не к other (ГГ), а к self (охранник).
Ответить с цитированием
Старый 27.04.2005, 21:52   #305
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

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

2TeMnI MaG:
Вот я не потеме можноли читом или скриптами стать орком в Готике ?
В каком смысле стать? Если просто побегать, то можно читами вселиться в любого орка:
войти в режим Марвина, подойти к орку и нажать 'o'.
Отправить личное сообщение для Ответить с цитированием
Старый 28.04.2005, 10:02   #306
Vam

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

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

2Galhan:
Почему при изминении гильдии и внешности ГГ, многие НПС перестают с ним говорить?
Посмотри описание функции B_AssessTalk() в Уроках скриптологии, там все варианты подробно рассмотрены.
Ответить с цитированием
Старый 28.04.2005, 12:09   #307
PA
Строители Миртаны
*
 
Регистрация: 29.08.2004
Сообщений: 1
PA вне форума

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

2Vam: и 2All:

Конверт DDS в TEX и обратно от Нико Бендлина
http://www.bendlins.de/nico/gothic2/ztextools.zip
Пишу об этом здесь, так как еще раз хочу, что-бы обратили внимание на сайт Нико
http://www.bendlins.de/nico/

Ответить с цитированием
Старый 29.04.2005, 08:34   #308
Galhan

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

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

А можно ли как-то зделать, чтобы после определенных действий, на карте появлялся ВОБ.
Пример: чел просит ГГ принести ему трубку, колбу и табак, когда приносишь, он ставит кальян.
Ответить с цитированием
Старый 30.04.2005, 19:58   #309
francisc

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

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

Не нужно что бы она лежала там все время.Ведь нпс теряет до того,как говорит ГГ.
Ответить с цитированием
Старый 01.05.2005, 01:40   #310
basilio58

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

По умолчанию 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, 04:25   #311
Galhan

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

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

Цитата:
Сообщение от Vam link=board=gothic&t=1105030050&start=300#303
В твоем скрипте напутано, переменная aivar[AIV_Guardpassage_Status] при втором предупреждении и атаке должна относиться не к other (ГГ), а к self (охранник).
Вроде бы и так, но все равно - *не помагает! :(
Ответить с цитированием
Старый 01.05.2005, 12:38   #312
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

По умолчанию 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"); //А ну быстро работать, а то счас шкуру спущу!
* * *};
};

Отправить личное сообщение для Ответить с цитированием
Старый 06.05.2005, 23:22   #313
B_Wolf

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

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

Значица так...

Я попытался вставить в свой мод для Г1 "StrongHand" пояса из Г2, пояса отлично заработали, но есть кое-какие странности.

В описании пояса стоит такой флаг:
mainflag = ITEM_KAT_MAGIC;

С данным флагом пояс появляется в инвентаре с магическими предметами. При этом можно одеть ВСЕ пояса сразу. А это НЕ ЕСТЬ хорошо.

Глючноватое решение проблемы:
Если флаг "mainflag = ITEM_KAT_MAGIC;" изменить на "mainflag = ITEM_KAT_ARMOR;" и добавить флаг "wear = WEAR_HEAD;" (одеть пояс на голову, так как больше некуда одеть...) пояса начинают работать более правильно. Т.е. одевается только один пояс и один доспех...

Все было бы отлично, если бы через голову не проходила .3ds модель одетого пояса, взятая из строки: Например: "visual = "ItMI_Belt_06.3ds";. Хотя строки описывающей визуальные изменения "visual_change = ... " в описании амулетов вообще НЕТ!

Так вот, вопрос...
Где в скриптах можно найти описание количества одеваемых одновременно предметов, ИЛИ как полностью отключить общую визуализацию "visual_change = ... ", но чтобы при этом его было видно в инвентаре: "visual = "ItMI_Belt_06.3ds".
Ответить с цитированием
Старый 07.05.2005, 12:40   #314
Vam

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

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

2Ukur:
Где в скриптах можно найти описание количества одеваемых одновременно предметов
Насколько мне известно, такого в скриптах нет, данный параметр определяется экзешником (движком) в зависимости от флага предмета flags при попытке одеть предмет.
Ответить с цитированием
Старый 07.05.2005, 21:09   #315
Zaraza123

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

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

Где нужно в Globals и в Startup прописывать своего NPC,чтобы он появился в игре !!!!Помогите плиззззззззззз!!
Ответить с цитированием
Старый 07.05.2005, 21:30   #316
Beliar@Alexey

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

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

Кхм... Возник такой вопрос:

Как сделать монстра, чтобы он не нападал на npc а вёл
себя как человек - говорил с ГГ, вёл его куда-нибуть, шёл
за ним?
Ответить с цитированием
Старый 07.05.2005, 22:07   #317
Vam

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

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

2Beliar@Alexey:
Как сделать монстра, чтобы он не нападал на npc а вёл
себя как человек
Посмотри скрипт Ищущего Огонька, ведь он же монстр от рождения, а по поведению - можно и поменять.
Ответить с цитированием
Старый 07.05.2005, 22:26   #318
Beliar@Alexey

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

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

2Vam:
Обычный огонёк нашел, а где то, что в аддоне из амулета появляется или это он же?

Добавление от 05/07/05, в 22:29:05
P.S: И как написать диалог для любого npc?

Добавление от 05/07/05, в 22:31:16
а где то, что в аддоне из амулета появляется или это он же?
И его нашел в том же файле instance Wisp_Detector(Mst_Default_Wisp)
Ответить с цитированием
Старый 07.05.2005, 23:55   #319
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

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

2Beliar@Alexey:
как написать диалог для любого npc?
См. папку story\dialoge

Ищущий огонёк - это тот, которого в Аддоне Ватрас даёт ::)
Отправить личное сообщение для Ответить с цитированием
Старый 08.05.2005, 00:02   #320
Beliar@Alexey

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

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

Дык я пишу - нашел обычный в папке story\npc\monster/MST_Wisp.d
В нем instance Wisp_Detector(Mst_Default_Wisp)
это и есть ищущий огонек?
как написать диалог для любого npc?
См. папку story\dialoge
Yee/// Там я смотрел, а как сделать диалог, например, для
нового npc "none_077_NewNPC", что-бы он хотя бы говорил мне привет,
рассказал что-нить... и т.п.
Ответить с цитированием
Страница 8 из 65 12345678 91011121314151858 Последняя »


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

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

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

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


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

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

AGFC: Valley of Gothic © 2004-2022

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