Просмотр полной версии : М: Скриптинг в Готике
Страницы :
[
1]
2
3
4
5
6
7
8
9
10
11
BORISOFF
06.01.2005, 20:47
Создаю тему для обсуждения скриптов в играх любимой нами серии Gothic. Собственно создаю эту тему по следующим причинам:<br>1. актуальность темы в связи с широким распространением декомпилятора Vam`а;<br>2. в данный момент многие из форумцев изучают скрипты (Я, francisc, Alexus_G, Killer-XXX и д.р.), и я думаю - тема очень даже пригодится;<br>3. невозможность обсуждения в других темах;<br><br>Мой вопрос состоит вот в чем. Я создал скрипт по котрому непись показывает дорогу в СЛ. Вот он:<br><br>instance GOTO_PAL_OC(C_Info)<br>{<br> * * *npc = pal_5000_agafon;<br> * * *nr = 2;<br> * * *condition = goto_pal_oc_condition;<br> * * *information = goto_pal_oc_info;<br> * * *important = 0;<br> * * *permanent = 0;<br> * * *description = "Ты можешь отвести меня в Старый лагерь?";<br>};<br><br><br>func int goto_pal_oc_condition()<br>{<br> * * * * *if(Npc_KnowsInfo(hero,info_pal_info))<br> * * *{<br> * * * * * *self.flags = 0;<br> * * * * * *return 1;<br> * * *};<br>};<br><br>func void goto_pal_oc_info()<br>{<br> * * *AI_Output(hero,self,"goto_pal_oc1"); * * *//Ты можешь показать мне дорогу в Старый лагерь?<br> * * *AI_Output(self,hero,"goto_pal_oc2"); * * *//Конечно! Идем.<br> * * *AI_StopProcessInfos(self);<br> * * *Npc_SetPermAttitude(self,ATT_FRIENDLY);<br> * * *Npc_ExchangeRoutine(self,"GUIDE");<br>};<br><br><br>instance GOTO_PAL_INOC(C_Info)<br>{<br> * * *npc = pal_5000_agafon;<br> * * *condition = goto_pal_inoc_condition;<br> * * *information = goto_pal_inoc_info;<br> * * *important = 1;<br> * * *permanent = 0;<br>};<br><br><br>func int goto_pal_inoc_condition()<br>{<br> * * *if(Npc_KnowsInfo(hero,goto_pal_oc) && Hlp_StrCmp(Npc_GetNearestWP(self),"OC1"))<br> * * *{<br> * * * * * *self.flags = 0;<br> * * * * * *return 1;<br> * * *};<br>};<br><br>func void goto_pal_inoc_info()<br>{<br> * * * *AI_Output(self,hero,"goto_pal_inoc_1"); * * *//Ну, вот мы и пришли. прямо перед тобой находится старый лагерь. Впечатляет?<br> * * *AI_Output(hero,self,"goto_pal_inoc_10"); * * *//Еще бы!<br> * * *AI_Output(self,hero,"goto_pal_inoc_2"); * * *//Ну так заходи, но будь осторожен!<br> * * *AI_Output(hero,self,"goto_pal_inoc_3"); * * *//Что мне нужно знать?<br> * * *AI_Output(self,hero,"goto_pal_inoc_grd"); * * *//Если сдешняя стража скажет тебе заплатить за защиту, лучше подчиниться, потом будешь рад, что заплатил<br> * * *AI_Output(hero,self,"goto_pal_inoc_grd2"); * * *//Спасибо за совет!<br> * * *AI_Output(self,hero,"goto_pal_inoc_end"); * * *//Удачи! Я возвращаюсь к метсу обмена. Если тебе что-нибудь понадобится, ты можешь найти меня там.<br> * * *AI_StopProcessInfos(self);<br> * * *Npc_ExchangeRoutine(self,"PRESTART");<br>};<br><br><br>Непись как и нужно, отправляется в СЛ, ждет ГГ, если тот отстал. но есть одна поблема - экспа за убитых им зверей не начисляется. я сравнивал со скриптами Мордрага - вроде все также. Так как прописать, чтобы начислялась экспа?
Killer-XXX
06.01.2005, 22:27
2Borisoff:<br>Наверна, тогда тебя еще не было на форуме, но тема то уже поднималась,вот (http://forums.gothic.ag/showthread.php?&s=25&t=1098161614).<br>А вообще, мне кажется, что эту тему бы неплохо было прикрепить.
2Borisoff: Так как прописать, чтобы начислялась экспа?<br>pal_5000_agafon.aivar[AIV_PARTYMEMBER] = TRUE;
Какой признак отвечает за то кто враг, а кто друг. Если я хочу двух НПСов рядом поставить, и чтоб они начали сражаться когда я с кемнибудь из них поговорю.<br>А еще как в скриптах написано, появление монстров в разных главах.<br>
2dftool: <br>Какой признак отвечает за то кто враг, а кто друг<br>Гильдия.<br><br>А еще как в скриптах написано, появление монстров в разных главах.<br>В папке SCRIPTS/CONTENT/STORY/B_STORY/<br>файлы B_Enter_AddonWorld.d, B_Enter_DragonIsland.d, B_Enter_NewWorld.d и B_Enter_OldWorld.d<br>Кажется, так ::)
Alexus_G
07.01.2005, 19:08
Некоторым я уже задавал этот вопрос в приват, но если кто знает, ответьте пожалуйста:<br>NPC, которого я хочу вставить в игру, ни в какую не хочет появляться на карте сам. Если вставлять через консоль, то все нормально. В файлах Story NPC_Globals.d и Startup.d все прописано. Waypoint, на котором должен появляться персонаж тоже существует.
2Alexus_G: <br>Странно... покажи файлы НПС, что ли... ::)
Alexus_G
07.01.2005, 20:55
2TycoooN: Вот, еще раз все проверил, и все равно сам не появляется: <br>Файл none_668_Alexus.d:<br><br>instance none_668_Alexus (Npc_Default)<br>{<br> // ------ NSC ------<br> name = "Alexus";<br> guild = GIL_none;<br> id = 668;<br> voice = 13;<br> flags = 0;<br> npctype = NPCTYPE_MAIN;<br> <br> // ------ Attribute ------<br> B_SetAttributesToChapter (self, 1);<br><br> // ------ Kampf-Taktik ------<br> fight_tactic = FAI_HUMAN_NORMAL;<br> <br> // ------ Equippte Waffen ------ <br> EquipItem (self, ItMw_1h_Sld_Axe);<br> EquipItem (self, ItRw_Sld_Bow);<br> CreateInvItems (self, ItRw_Arrow, 10);<br> <br> // ------ Inventory ------<br> B_CreateAmbientInv (self);<br> <br> // ------ visuals ------ <br> B_SetNpcVisual (self, MALE, "Hum_Head_FatBald", Face_N_Drax, BodyTex_N, ITAR_SLD_L); <br> Mdl_SetModelFatness (self, 0);<br> Mdl_ApplyOverlayMds (self, "Humans_Relaxed.mds");<br> <br> // ------ NSC-relevante Talente vergeben ------<br> B_GiveNpcTalents (self);<br> <br> // ------ Kampf-Talente ------ <br> B_SetFightSkills (self, 30);<br><br> // ------ TA anmelden ------<br> daily_routine = Rtn_Start_668;<br>};<br><br>FUNC VOID Rtn_Start_668 ()<br>{<br> TA_Stand_Eating (07,00,21,00,"NW_BIGFARM_HUT_02");//оба Waypoint'а существуют, связаны Waynet'ом<br> TA_Stand_ArmsCrossed (21,00,07,00,"NW_BIGFARM_HUT_05");//и находятся недалеко друг от друга: рядом с Бастером<br>};<br><br>В файле Story NPC_Globals.d:<br>var C_NPC Alexus;<br>Alexus = hlp_GetNpc (none_668_Alexus);<br><br>В файле Startup.d:<br>Wld_InsertNpc (none_668_Alexus, "BIGFARM");<br><br>Каждая строчка в последних двух файлах прописана после соответствующей строчки Бастера.<br><br>Кстати, забыл написать: Такая проблема у меня тогда, когда пытаешься вставить кого-то на уже готовую карту (Newworld, в моем случае). Если же я вставляю персонажа в свою собственную карту, то, как ни странно, все работает.
2Alexus_G: Попробуй в файле startup.d вместо <br>Wld_InsertNpc (none_668_Alexus, "BIGFARM");<br> <br>прописать строку <br>Wld_InsertNpc (none_668_Alexus, "NW_BIGFARM_HUT_02");<br><br><br>По идее, должно сработать, т.к. ошибок в скриптах я, например, не вижу.
Wld_InsertNpc * * *(none_668_Alexus, "NW_BIGFARM_HUT_02");<br>Можно и <br>Wld_InsertNpc * * *(Alexus, "NW_BIGFARM_HUT_02"); <br>раз уж ты прописал, что var C_NPC Alexus;<br>Alexus * * * * * * * * *= hlp_GetNpc (none_668_Alexus);
Alexus_G
08.01.2005, 01:02
2TycoooN: 2finch: Попробовал вместо Bigfarm прописать полное имя waypoint'а. Все равно не появляется. Я, кстати, и раньше пробовал так делать.<br>Я уверен, что дела в какой-нибудь мелочи, о которой даже упоминать-то не стоит, но которую я по своей невнимательности пропустил.<br>А что вы думаете по поводу того, что на созданной мной карте все работает как надо? Чем она отличается от готовой?
francisc
08.01.2005, 10:51
У меня такая же проблема.НПС не появляется на созданном мной вуапоинте,а появляется толко на уже сушествуюшим в игре.<br>Объясните как создавать вуапоинты,может я чего не так делаю.
2Fatalick: <br>Отвечаю в этой теме.<br><br>Да, я хотел сказать как сделать отдельный запуск через GothicStarter?<br>Что там с ini-файлами делать?<br>Заходишь в папку игры system/ и видишь там файл GothicGame.ini, создаешь его копию и переименовываешь её из GothicGame.ini в Mymod.ini (например). Далее, открываешь этот файл Mymod.ini и меняешь в нем строку VDF=GothicGame.mod на vdf=<mod-файлы твоего мода>. *Они должны лежать в папке игры data/modvdf.<br>Можно также изменить графы Title=, Version=, Authors=, Webpage=, Description=, Icon=, но это по желанию - это всё отвечает за текст, который будет отображаться при выборе мода в GothicStarter'e<br><br>Если что не понятно - спрашивай ещё :)
francisc
10.01.2005, 17:19
Такой вопрос,у меня в моем моде не появляются диалоги.<br>При начале диалога есть только тема,когда ее нажиаешь,диалога не происходит,пресы не говорят,потом показывается меню с надписью енд.<br>Это для г2.<br>
Alexus_G
10.01.2005, 19:49
2francisc: Скорее всего твои диалоги не заносятся в файл OU.csl. Об этом уже писали ранее. Я лично делал так:<br>1. Компилирую Gothic.dat. Все новые диалоги при этом заносятся в файл Ouinfo.inf<br>2. Открываю панель Output-Units и нажимаю Update. Затем Save.<br>И у меня все работало.<br><br>Вопрос ко всем:<br>За то, чтобы персонажи появлялись в игре отвечает файл Startup.d?<br>Если удалить из него кого-либо, то он в игре не должен появляться?<br>А у меня все равно появляется! Так же, и когда добавляешь в него что-то. Такое ощущение, что игра не видит этот файл. Подскажите, пожалуйста, кто знает, в чем дело.
francisc
10.01.2005, 20:25
2Alexus_G: <br>Его видит спайсер когда компилирует датинк.Ты попробуй удалить датник и компилировать новый.А ты НПС_глобл удалил записи?
2francisc: А ты НПС_глобл удалил записи?<br><br>NPC_Global не отвечает за появление НПС!<br><br>Подскажите, пожалуйста, кто знает, в чем дело.<br><br>Попробуй удалить всех НПС из Стартапа. Если все равно НПС будут появляться, значит, у тебя спейсер перестал компилировать..
2finch:<br>Попробуй удалить всех НПС из Стартапа. Если все равно НПС будут появляться, значит, у тебя спейсер перестал компилировать..<br><br>Самое интересное, что сперва можно и не компилировать, а оставить все в исходниках. Кто установил полный Кит меня поймет и изменеиия вступают в силу после того как удалишь файл VDFS.DMP - игра при запуске построит новый VDFS.DMP с учетом твоих исправлений - типа добавленных неписей и т.д.<br>А когда все скрипты отладишь, только тогда и компилируй...<br>
2Pa: <br>Самое интересное, что сперва можно и не компилировать, а оставить все в исходниках. Кто установил полный Кит меня поймет и изменеиия вступают в силу после того как удалишь файл VDFS.DMP - игра при запуске построит новый VDFS.DMP с учетом твоих исправлений - типа добавленных неписей и т.д.<br>А когда все скрипты отладишь, только тогда и компилируй...<br>Имхо скрипты надо компилировать прогой от Vam'a. С ней уж точно не будет никаких проблем - сунул новые gothic.dat и ou.bin - и всё работает :D :D :D
Fatalick
11.01.2005, 17:54
2TycoooN: <br>А чем открыть/создать .mod файл?
BORISOFF
11.01.2005, 17:56
2Fatalick: прошу в World of Gothic FAQ. там все основные проги расписаны, найдешь ;)
Alexus_G
11.01.2005, 18:50
2finch: Пробовал удалять из Startup'а всех, точнее многих. Все равно появляются. А Spacer компилирует! Я когда созданный им Gothic.dat декомпилирую прогой Vam'а, там все так, как и должно быть. Такое ощущение, что игра вообще не смотрит именно на Startup, а берет информацию о вставке из какого-то другого места.<br><br>2Pa: Что-то я не очень понял, что ты имеешь в виду. Как это не надо компилировать. VDFS.dmp по-моему за другое отвечает. Но в любом случае, я пробовал его удалять.
2Pa: Кто установил полный Кит меня поймет Я установил, но не понял. :) Т.е. ты предлагешь не компилировать скрипты в Спейсере, а просто прописывать НПС во всех нужных файлах и удалять VDFS.DMP? За что же, интересно, тогда отвечает этот файл?
2Alexus_G: Я когда созданный им Gothic.dat декомпилирую прогой Vam'а, там все так, как и должно быть. Не совсем понятно, что должно быть "как и". По идее, если Спейсер перестал компилировать, у тебя все остается неизменным, как было в исходной версии, изменения в которую ты вносишь. Старые неписи остануться, новые не появятся. Попробуй скомпилировать прогой Vam'а датник со своими изменениями.
francisc
11.01.2005, 22:26
У меня такая проблема диалоги не появляются в игре.<br>Хотя в меню появляется то что написанно в дескрипшонс,когда нажиаешь<br>ничего не происходит неписи не говорят,появляется окно с надписью енд.<br>Ou обновлял.Апдейт,а потом сохранить.<br>Если у кого есть идеи пожалуйста ответьте.
Alexus_G
11.01.2005, 22:35
2Mitrich: Не совсем понятно, что должно быть "как и".Я имел в виду следующее: например я добавляю в Startup своего персонажа, компилирую Spacer'ом, затем декомпилирую обратно прогой Vam'а. И в получившемся после декомпиляции Startup'е есть строчка, добавляющая моего непися. Это и есть то, что должно быть, но игра ведет себя так, как будто ей пофиг, что написано в Startup'е и как будто берет данные откуда-то еще.<br>Попробуй скомпилировать прогой Vam'а датник со своими изменениями.<br>при компилировании прогой Vam'а у меня вылазит ошибка. Я уже написал в соответствующую тему. Жду ответа.
2francisc: <br>У меня такая проблема диалоги не появляются в игре.<br>Хотя в меню появляется то что написанно в дескрипшонс,когда нажиаешь<br>ничего не происходит неписи не говорят,появляется окно с надписью енд.<br>Ou обновлял.Апдейт,а потом сохранить.<br>Если у кого есть идеи пожалуйста ответьте.<br>Попробуй руками открыть OU.BIN и поискать, добавились ли туда фразы, которые ты прописал в скриптах. Если да - то не знаю что и посоветовать ::)
Alexus_G
11.01.2005, 23:42
2TycoooN: Спасибо. Поменял slf на self. Скомпилировал прогой Vam'а без ошибок. Но проблемы это не решило, как я и предпологал.<br>Кто как думает, почему моя Готика не смотрит в Startup, а ваши смотрят? :)
2Alexus_G: Кто как думает, почему моя Готика не смотрит в Startup, а ваши смотрят?<br>1. Попробуй удалить ВСЕ файлы из папки Gothic II\Data\modvdf.<br><br>2. После этого открой ИНИ-файл, через который ты запускаешь мод (возможно, что у тебя это GothicGame.ini).Файл находится в директории system. Только не спутай его с Gothic.ini Найди в этом файлике строчку, которая начинается на VDF=<br>После VDF= не должно стоять НИЧЕГО. Если после = стоит названия МОД-файла, удали его. Сохрани ИНИ-файл и запусти игру. Если это не сработает, то больше идей у меня нету.
francisc
12.01.2005, 13:32
2TycoooN: <br>Я открывал...но не могу найти свои диалоги...нверное они почему то не заносятся в ou.<br>Вот сам скрипт ,файл называется dia_none_fortuna<br>"INSTANCE DIA_Fortuna_EXIT (C_INFO)<br>{<br> npc = None_1986_Fortuna;<br> nr = 999;<br> condition = DIA_Fortuna_EXIT_Condition;<br> information = DIA_Fortuna_EXIT_Info;<br> permanent = TRUE;<br> description = DIALOG_ENDE;<br>};<br>FUNC INT DIA_Fortuna_EXIT_Condition()<br>{ <br> return TRUE;<br>};<br>FUNC VOID DIA_Fortuna_EXIT_Info()<br>{<br> AI_StopProcessInfos (self);<br>};<br><br>INSTANCE DIA_Fortuna_HI (C_INFO)<br>{<br> npc = None_1986_Fortuna ;<br> nr = 1;<br> condition = DIA_Fortuna_HI_Condition;<br> information = DIA_Fortuna_HI_Info;<br> permanent = FALSE;<br> important = False; <br> description = "Привет"; <br>}; <br><br>FUNC INT DIA_Fortuna_HI_Condition()<br>{<br> return TRUE;<br><br>};<br><br>FUNC VOID DIA_Fortuna_HI_Info() <br><br>{<br> AI_Output (other, self, "DIA_Fortuna_HI_1_00");//Привет<br> AI_Output (self, other, "DIA_Fortuna_HI_01_01");//ТЫ!Это в самом деле ты!<br> AI_Output (other, self, "DIA_Fortuna_HI_01_02");//Да,это я.<br> AI_Output (other, self, "DIA_Fortuna_HI_01_03");//Ты Фортуно?<br> AI_Output (self, other, "DIA_Fortuna_HI_01_04");//Да,а ты меня не забыл.<br> <br> };"
Fatalick
12.01.2005, 17:13
2TycoooN: <br>Где в startup.d (если вообще там) прописывается начальное положенние ГГ?
2Fatalick: Где в startup.d (если вообще там) прописывается начальное положенние ГГ?<br>Нигде. Начальное положение ГГ задается при помощи специального вэйпоинта.
Alexus_G
13.01.2005, 16:34
2finch: Даже не знаю, с чего начать. Спасибо за подсказку, которая решила мою проблему. Я раньше запускал Готику не как мод, а как игру, и она, видимо, действительно смотрела на какой-то другой файл (возможно как раз на GothicGame), только непонятно, почему? По умолчанию она ведь вроде не должна этого делать. Я запокавал свой датник в VDF, написал для него ini-файл и запустил как мод: все работает! Из-за такой ерунды столько мучений. Спасибо еще раз!
2Alexus_G: Всегда пожалуйста! ;D<br><br>Я раньше запускал Готику не как мод, а как игру, и она, видимо, действительно смотрела на какой-то другой файл (возможно как раз на GothicGame), только непонятно, почему?<br>Ты запускал игру через GothicStarter, а он "видит" только ИНИ-файлы модов. Если бы ты запускал через gothic.exe или lr.exe, этих проблем бы не возникло.
Вот проблемка: Декомпелировал я gothic.dat вместе c ou.bin,создалось много там всяких папок и файлов, нажимаю компилировать декомпилированный gothic.dat все нормально.<br>Но вот попытался в Г1 добавить своего НПСа, создал файл, прописал в Startup.d, пытаюсь компилировать это декомпилятором, но он выдает ошибку что проблема именно в моем неписе.<br>Поэтому у меня парочку вопросов возникло, могут конечно показаться глупыми но всеже:<br>Все вопросы для Г1:<br>1) При распаковке worlds.VDF спейсер1 выдает сообщение какоето и никак нехочет загружаться?<br>2) Как создать в Спейсере свой вейпоинт?<br>3) Как созданного НПСа в самой готике вызвать через insert (как написать название НПСа)?<br>4) Для чего нужен файл FIGHT.DAT, menu.DAT и другие файлы из папки _compiled, придекомпиляции их ведь не создается?<br>5) Для чего нужен gothic.src?<br>6) Где надо прописовать своего НПСа кроме Startup.d, и после этого чем компилировать Спейсером или декомпилятором, чтобы язык остался русский?<br>При компиляции gothic.src или при компиляции декомпилированного gothic.dat такое сообщение об ошибке:<br>PAR: STORY/STARTUP.D: Unknown identifier: EBR_1001_ARTUR<br>Заранее спасибо!!!<br>
francisc
14.01.2005, 00:48
2dftool: но он выдает ошибку что проблема именно в моем неписе.<br>Что именно пишет?При распаковке worlds.VDF спейсер1 выдает сообщение какоето и никак нехочет загружаться?<br>Какое?У меня были проблемы,он не мог найти 3ds файлы вроде.Но не при распаковке ,а при загрузке зена.<br>А распоковывал я VDFS`ом.<br>Как создать в Спейсере свой вейпоинт?<br>Шелкаешь на W при этом показываются пути,потом найди на горизонтальной понели ногу,нажми ее потом правой кнопкой на экран ,потом там должно быть наиписанно инсерт вуапоинт(или типа того),потом в окне вводишь имя вуапринта.А не забудь вначале счелкнуть на какой -нибудь вуапоинт.<br> Как созданного НПСа в самой готике вызвать через insert (как написать название НПСа)?<br>insert название гильдии_идентификационный номер_имя.<br>Для чего нужен gothic.src?<br>Для обновления скриптов...<br>Где надо прописовать своего НПСа кроме Startup.d, и после этого чем компилировать Спейсером или декомпилятором, чтобы язык остался русский?<br>Компилировать прогой от VAM`a<br>такое сообщение об ошибке:<br>PAR: STORY/STARTUP.D: Unknown identifier: EBR_1001_ARTUR<br>Скорее всего ты либо не положил скрипт нпс в папку NPC ,или там прописанно другое имя,или оно прписанно неверно.<br>Заранее спасибо!!!<br>Всегда пожалуйста.<br>PS просьба в меня помидорами не бросать,я в принципе мог что то пропустить.
Спасибо francisc: <br>Уточняю:<br>1)Про распаковку worlds.VDF верно, распаковывается все нормально, а вот в Спейсере1 при открытии *.Zen файла выдает сообщение об ошибке, но не про 3ds а про другое (непонятное, вылезает менюшка там выбрать Cancle, Complite и какието еще настройки). <br>2) При добавлении НПС в самой игре: вроде в Г1 нельзя писать символ "_" может ты написал про Г2 (в Г2 все нормально получалось).<br>
2dftool: 1)Про распаковку worlds.VDF верно, распаковывается все нормально, а вот в Спейсере1 при открытии *.Zen файла выдает сообщение об ошибке, но не про 3ds а про другое (непонятное, вылезает менюшка там выбрать Cancle, Complite и какието еще настройки). <br>Знаешь, когда я только начинал разбираться в этом, мне на такие вопросы никто не отвечал... Лично я в теме Русская дока по спейсеру (http://forums.gothic.ag/showthread.php?&s=0&t=1078004330) раза три писал, как "вылечить" эту ошибку! Слабо перелопатить? А самому с этой ошибкой разобраться?<br>Понимаешь, если начать подробно отвечать на все твои вопросы, то не хватит ни времени, ни ограничения на сообщение в 25Кб!<br>Если ты хочешь со всем разобраться, то обязательно разберешься! Проверено на своем опыте! Если будет что-то не получаться, то тебе всегда посоветуют, но вот список таких вопросов, половина из которых уже обсуждалось, вывешивать не надо!<br>
finch: <br>Что верно то верно, с этим я разобрался просто переустановил Г1 и все нормально (просто я до этого очень много всего в готике поизменял).<br>Проверил декомпилятор версии 1.8. то же все работает - это Good!!!<br><br>Про вопросы верно буду стараться поменьше задавать, но кто хочет отвечайте, а кто не хочет того я же не заставляю!!! <br>
2dftool: <br>При добавлении НПС в самой игре: вроде в Г1 нельзя писать символ "_"<br>Можно. В Г1 надо нажать shift+"кнопка ? чуть левее правого shift'a"
Alexus_G
14.01.2005, 11:09
2finch: Ты запускал игру через GothicStarter, а он "видит" только ИНИ-файлы модов. Если бы ты запускал через gothic.exe или lr.exe, этих проблем бы не возникло.<br>Нет! Я запускал именно через Gothic.exe.<br>Я только сейчас понял, что моя проблема была даже не в том, что я писал. Все гораздо проще... Я взял и сохранил игру около Бастера, а потом, когда добавлял в скрипты что-то новое, просто загружал этот сейв, и удивлялся, почему ничего не появлялось :) А когда я создавал свою карту, то естественно каждый раз начинал игру заново, поэтому там появлялось все, что нужно.<br>Мне даже стыдно, что я мог допустить такую ошибку... Надеюсь другие примут к сведению, что когда вносишь в скрипты что-то новое, в частности, новых персонажей, нельзя пользоваться сейвами!
francisc
14.01.2005, 11:20
2dftool: Судя по всему надо просто компилировать мир.хотя у меня в г1 такой проблемы не возникало.<br>Можно. В Г1 надо нажать shift+"кнопка ? чуть левее правого shift'a"<br>В г1 вроде клавиатура немецкая.<br>Про вопросы верно буду стараться поменьше задавать, но кто хочет отвечайте<br>Да не задавай,если смогу объясню...
francisc: <br>При загрузки Zen файла требует 3ds файлы, влияет ли она на что-то, как ты это вылечил?<br><br>С помощью декомпилятора декомпилирую Gothic.dat и ou.bin, в получившихся файлах создаю своего НПСа, прописываю его в Startup.d Почемуто не хочет компилироваться декомпилированный gothic.dat в декомпиляторе и в Спейсере2 также не получается обновить скрипты?<br>Пишет ошибку именно про моего непися, но не пишет строчку в где ошибка, т.е. ошибка не в орфографии, а что-то я не так делаю.<br><br><br><br>
2dftool: <br>Пишет ошибку именно про моего непися, но не пишет строчку в где ошибка, т.е. ошибка не в орфографии, а что-то я не так делаю.<br>Покажи тогда сам скрипт НПС ::)
dftool:<br>С помощью декомпилятора декомпилирую Gothic.dat и ou.bin, в получившихся файлах создаю своего НПСа, прописываю его в Startup.d Почемуто не хочет компилироваться декомпилированный gothic.dat в декомпиляторе и в Спейсере2 также не получается обновить скрипты?<br>Пишет ошибку именно про моего непися, но не пишет строчку в где ошибка, т.е. ошибка не в орфографии, а что-то я не так делаю<br><br>Приведи сообщение с ошибкой и получишь подробный ответ.
Сообщение следующее:<br>PAR: STORY/STARTUP.D: Unknown identifier: GRD_300_MY... <zParser.cpp,#599><br><br>Насчет самого скрипта НПСа, просто копирую любой заменяю имя, id, ну и вэйпоинт.<br>Интересно если на одном вейпоинте прописать двух НПСов то один из них наверное даже не появиться?<br><br>Может ли на это влиять фомат ou.bin?
francisc
14.01.2005, 21:06
Интересно если на одном вейпоинте прописать двух НПСов то один из них наверное даже не появиться?<br>Как правило появится ошибка,что вуапоинт уже занят.<br>ообщение следующее:<br>PAR: STORY/STARTUP.D: Unknown identifier: GRD_300_MY... <zParser.cpp,#599><br>Судя по всему,в STARTUP.D указано не верное имя,скорее всего в скрипте нпс ты указал другое имя.А вообше,Id 300 неудачное число.<br>Если это г1 то оно уже занято.Я для г1 использовал число ок 1000.<br>
2dftool: <br>Пропиши файл своего НПС в gothic.src, рядом с другими НПС.
dftool:<br>PAR: STORY/STARTUP.D: Unknown identifier: GRD_300_MY... <zParser.cpp,#599><br>Это сообщение выдается при компиляции, оно у тебя похоже выдается линковщиком (просьба не путать: процесс создания датника состоит из двух процессов - компиляции и линковки).<br>При компиляции выявляются ошибки синтаксиса, выдается имя файла и номер строки с ошибкой, при линковке выявляются ошибки деклараций (объявлений), если какое-то имя в скриптах используется, но не декларировано - имеем ошибку. В твоем случае в файле STARTUP.D встретилось линковщику имя GRD_300_MY... (полностью не приведено), но оно нигде не объявлено (т.е. линковщик не знает что это за переменная: int, string, instance, class и т.д.). Надеюсь, объяснил хоть немного понятно. :)
Всем спасибо: в принципе я понял ошибку поэксперементировав с gothic.dat и gothic.scr.<br>Вроде все получилось: делал я так<br>1) Декомпилировал gothic.dat вместе с ou.bin (режим в декомпиляторе 0,0)<br>2) Создал своего непися и прописал его в Startup.d<br>3) С помощью декомпилятора выбрал режим компилировать gothic.src (режим 1,0), при этом в папке создался новый gothic.dat и ou.bin<br>Ошибка скорей всего была в том, что я пользовался только папкой _decompiled, а когда произвел изменения в папке content, то все получилось, насчет id = 300, заменил его на 3300, а то насчет этого ругался декомпилятор.<br>Осталось закрепить это еше раз и все будет ок!!!<br>
dftool:<br>3) С помощью декомпилятора выбрал режим компилировать gothic.src (режим 1,0), при этом в папке создался новый gothic.dat и ou.bin<br>Ошибка скорей всего была в том, что я пользовался только папкой _decompiled, а когда произвел изменения в папке content, то все получилось, насчет id = 300, заменил его на 3300, а то насчет этого ругался декомпилятор.<br>Осталось закрепить это еше раз и все будет ок!!!<br>Режим 1,0 применяется для компиляции оригинальных скриптов, которые находятся в папке Content, а режим 1,1 применяется для компиляции декомпилированных скриптов, которые находятся в папке _decompiled. Смотря что правим (или дописываем), то и компилируем! :)
Vam.<br>Полезную вещь ты токо что написал, а то в Readme не так все понятно, вот и путался я в "трех соснах".<br>Получилось и непися добавить, и русский язык сохранить. <br>Так, что теперь буду двигаться дальше!!!
Может кто подкинет инфу как создавать waypoint в Спейсере1 для Г1.<br>Прочитал все инфу на форуме связанную с этим и ничего не получается.<br><br>К примеру:<br>Если вы в Spacer'е первый раз, то вы будете передвигаться медленно. Зайдите в Settings/Generals и там будет movement-speed. Настройте. В окошке Objects нажмите zCVOB, затем oCVOB (abstract), потом oCNPC и в списке выберите любого NPC. Похлопайте на радостях в ладоши... =))). Нажмите в том же окошке zCVOBWaypoint и напишите имя вашему в waypoint'у. Назовите (!) его NPC_STAND_HERE, и создайте еще один (!) NPC_STAND_HERE2. Все, сохраните (сохранять будет долго!!!).<br><br>У меня никакого НПСа вообще не выбирается.<br><br>Или так:<br><br>Шелкаешь на W при этом показываются пути,потом найди на горизонтальной понели ногу,нажми ее потом правой кнопкой на экран ,потом там должно быть наиписанно инсерт вуапоинт(или типа того),потом в окне вводишь имя вуапринта.А не забудь вначале счелкнуть на какой -нибудь вуапоинт.<br><br>Вуапоинт создаю пишу ему имя, он вопервых несоединен путями как другие вуапоинты, ну это ладно,<br>потом сохраняю World.Zen. При дальнейше попытке открыть этот сохраненный World.Zen выдается ошибка и вылет автоматический.<br><br>Может ошибка в том, что не просто надо сохранять zen файл, нужноли обновлять скрипты, если да то где прописывается сам ваупоинт. И чем кроме готики можно создать ваупоинт (может GoMan'ом)?<br><br><br>
francisc
15.01.2005, 20:54
И чем кроме готики можно создать ваупоинт (может GoMan'ом)?<br>Не....гоманн для просмотра текстурам и изображениям.<br>Вуапоинт создаю пишу ему имя, он вопервых несоединен путями как другие<br>Надо нажать w потом переключится в "виденье глазами",ну что бы мышки не было видно,это кнопка f3, направить взгляд на один вуапоинт,счелкнуть на левую кнопку мыши,потом держа shift так же счелкнуть на другой вуапоинт.После этого должна загорется кнопка на вертикальной панели,нажимаете f3 и счелкаете на загоревшуюся кнопку.<br>После надо сохраниться.<br>Вот тут у меня проблема,тк мои неписи не хотят вставать на мой вуапоинт.Так что если кто знает в чем ошибка просьба сообшить.
Ответьте пожалуйста кто знает:<br>1. Как можно сделать амулет регенерации жизни или маны?<br>2. Как можно добавить особенность регенерации жизни персонажу (как у дракона в аддоне)?<br>Если можно, с примерами...
2B Wolf:<br>Ответьте пожалуйста кто знает:<br>1. Как можно сделать амулет регенерации жизни или маны?<br>2. Как можно добавить особенность регенерации жизни персонажу (как у дракона в аддоне)?<br>Если можно, с примерами...<br><br>Я уже писал об этом - в МОД-е МанаРелод все по полочкам разложено http://www.worldofgothic.de/dl/index.php?go=downloads&release_id=112<br><br>
francisc. Как ты избавился от того, что Спейсер при открытии Zen файла требует 3ds файлы?<br><br>finch. Я как-то спрашивал почему при открытии Zen файла Спейсер выдает ошибку (Сomplit? Cancel и т.д.), то ли ты имел в виду, но вродебы это из-за того что я менял дерикторию расположения Zen файлов.<br><br>francisc. А у тебя НПСы появляются ли в игре если ты не на самим созданный вэйпоинт ставишь НПСа, а на уже созданный по игре. Если на уже созданный по игре вэйпоинт появляется НПС, то значит ошибка в самом создании Вэйпоинта. <br>Или еше может надо в спейсере обновить скрипты "Word->Reparse Scripfiles" или еше на форме Output-Units "Update->Save"<br>
2dftool: finch. Я как-то спрашивал почему при открытии Zen файла Спейсер выдает ошибку (Сomplit? Cancel и т.д.), то ли ты имел в виду, но вродебы это из-за того что я менял дерикторию расположения Zen файлов.<br>Ну вот видишь... Стоит задаться целью - проблема сразу решится! :)
Killer-XXX
16.01.2005, 00:41
Подскажите люди добрые...<br>Как мне зациклить действие? Вот если допустим регенерация, у разрабов Mana Reload стоит:<br>if (Npc_GetStateTime(self) > 3); <br>Но это вроде как проверка, на то, произодит ли действие определенное кол-во секунд...<br>тогда вопрос, где же тут зацикленность, тут то оно должно повторятся?<br>Может это return LOOP_CONTINUE;?<br>Если нет, то зачем эта функция стоит в конце каждого ZS_*.d файла? :'(
francisc
16.01.2005, 01:06
2dftool: <br>На уже сушествуюших появляются...
2Killer-XXX:<br>Как мне зациклить действие? Вот если допустим регенерация, у разрабов <br><br>Действие не зацикливается.<br>Просто включены тики (вроде 100 и 300) и после проверки условий по регнерации, по тикам начинает по отмерянным порцайкам (вроде 10 и 20) течь жизнь и мана.<br>А если же проц в цикле игры это будет делать...<br>То будет такой зависон...<br><br>ЗЫ: В свое время занимался системами реального времени...<br><br>
francisc.<br>На уже существующих у меня тоже появляются. <br>Ты сейчас работаешь над Г1?<br>Если я неошебаюсь то создание Вейпоинтов, приведет к тому что надо будет создавать свой файл .mod. Простой компиляцией с помощью декомпилятора здесь уже необойтись.<br><br>all.<br>Только одно непойму куда спейсер записывает после компиляции новые текстуры и покакому принципу.<br>Вроде где-то читал что переводят туториал по скриптингу или модмейкерству, если да то как продвигаются дела, а то уж очень много вопросов.<br><br><br><br>
BORISOFF
16.01.2005, 06:56
2dftool: Как ты избавился от того, что Спейсер при открытии Zen файла требует 3ds файлы? я просто запихал в директорию игры эти 3ds файлы (из ГМДК взятые) ;D
Alexus_G
16.01.2005, 12:06
2dftool: Простой компиляцией с помощью декомпилятора здесь уже необойтись. Обойтись.<br>куда спейсер записывает после компиляции новые текстуры А куда он их должен записывать? Он их по-моему вообще не должен трогать. Как они лежали, так и лежат, или ты что-то другое имеешь в виду?
Alexus_G. Простой компиляцией с помощью декомпилятора здесь уже необойтись. Обойтись. <br>Конечно хотелось бы поконкретнее услышать что-то.<br><br>Вэйпоинты записываются ли в zen файл (как например текстуры), или просто дочтаточно обновить скрипты с спейсере?<br> <br>
dftool:<br>Вэйпоинты записываются ли в zen файл (как например текстуры), или просто дочтаточно обновить скрипты с спейсере?<br><br>В тексты скриптов никакие программы ничего не записывают, ни компилятор, ни Спейсер, скрипты правятся только ручками, а следовательно в датнике есть только информация из файлов скриптов и ниоткуда более.<br>
По поводу регенерации жизни...<br><br>На основе сорцов из мода "Mana Reload" попытался добавить в мод Bumshak амулет, который регенерирует жизнь...<br><br>Немного подправил файл ZS_Recharger.d из оригинального "Mana Reload", т.е. вырезал зависимость от обученности к регенерации.<br><br>...Содержимое файла ZS_Recharger.d...<br><br>func void ZS_Recharger()<br>{<br> //Perception_Set_Normal();<br> B_ResetAll (self);<br> B_ClearPerceptions (self);<br>};<br><br>func int ZS_Recharger_loop()<br>{<br> if (Npc_GetStateTime(self) > 3)<br> {<br> Npc_SetStateTime (self, 4);<br><br> if (hero.attribute[ATR_HITPOINTS] < hero.attribute[ATR_HITPOINTS_MAX])<br> {<br> hero.attribute[ATR_HITPOINTS]=hero.attribute[ATR_HITPOINTS]+10;<br> };<br> };<br><br> return LOOP_CONTINUE;<br>};<br><br>func void ZS_Recharger_end()<br>{<br>};<br><br>...<br><br>Прописал путь ZS_Recharger.d в gothic.src<br><br>...<br><br>Потом вставил эту функцию " AI_StartState(self,ZS_Recharger,0,""); " для амулета:<br><br>...<br><br>var int herousingspecam;<br><br>instance ITMI_GLUECKSBRINGER(C_Item)<br>{<br> name = "Вестник удачи";<br> mainflag = ITEM_KAT_MAGIC;<br> flags = ITEM_MISSION | ITEM_AMULET;<br> value = 0;<br> visual = "ItAm_Prot_Fire_01.3ds";<br> material = MAT_STONE;<br> on_equip = equip_itmi_gluecksbringer;<br> on_unequip = unequip_itmi_gluecksbringer;<br> wear = WEAR_EFFECT;<br> effect = "SPELLFX_ITEMGLIMMER";<br> description = name;<br> text[0] = "Обладатель этого Вестника удачи";<br> text[1] = "никогда не будет малодушным";<br> text[2] = "в бою.";<br> inv_zbias = INVCAM_ENTF_AMULETTE_STANDARD;<br>};<br><br><br>func void equip_itmi_gluecksbringer()<br>{<br> HEROUSINGSPECAM = TRUE;<br> AI_StartState(self,ZS_Recharger,0,"");<br>}; <br><br>func void unequip_itmi_gluecksbringer()<br>{<br> HEROUSINGSPECAM = FALSE;<br>};<br><br>...<br><br>Скомпилировал, проверил... Амулет не работает :( Пожалуйста помогите подправить ошибки...<br>Хм.. можно ли как-то вставить функцию регенерации непосредственно в скрипт амулета, а не описывать функцию в отдельном файле?
Vam. (Для Г1) Тогда что происходит с вейпоинтом когда его в спейсере создаешь? Нужно ли его где-то в скриптах ручками прописывать? Если я добовляю вейпоинты, то значит ли это, что мне прейдется создавать свой файл mod. <br><br>Просто такие глупы вопросы потому что, пока я непойму принцип что куда и откуда, буду просто тыкаться во все файлы и ни к чему хорошему не прийду? <br><br>
BORISOFF
16.01.2005, 15:51
2dftool: Нужно ли его где-то в скриптах ручками прописывать? чтобы вайпоинт работал нигде в скриптах его прописывать не нужно.<br>Если я добовляю вейпоинты, то значит ли это, что мне прейдется создавать свой файл mod. если ты создал свой вайпоинт, то соответственно ты изменил игровой мир, - а значит, тебе нужно сохранить ЗЕН-файл, а затем запаковать его в VDF-том и поместить в папку DATA, а запускать с экзешника gothic.exe . VDF файл делается простым переименованием расширения созданного в GothicVDFS MOD-файла.
2B Wolf: В файле TA.d необходимо прописать такую строчку:<br>func void TA_Recharger (var int start_h, var int start_m, var int stop_h, var int stop_m, VAR string waypoint){TA_Min(self,start_h,start_m, stop_h, stop_m, ZS_Recharger,waypoint);};<br>
francisc
16.01.2005, 16:42
2Borisoff: <br>Я пробовал твоим способом,но не получилось.
2finch: 2B Wolf: В файле TA.d необходимо прописать такую строчку:<br>func void TA_Recharger (var int start_h, var int start_m, var int stop_h, var int stop_m, VAR string waypoint){TA_Min(self,start_h,start_m, stop_h, stop_m, ZS_Recharger,waypoint);};<br>Пробовал... Все равно амулет не работает...
2B Wolf: Эта строка в любом случае обязательна. Ща попробую сделать такой амулет, исходя из собственных соображений. Через пару часов сообщу результат.
BORISOFF
16.01.2005, 17:47
2francisc: Я пробовал твоим способом,но не получилось. уж даже не знаю, что тебе предложить... у меня-то все работает! а ты точно в VDF-томе правильную иерархию сделал? _work/data/worlds/world.zen? точно через gothic.exe запускаещь?
Alexus_G
16.01.2005, 19:04
У меня вопрос: в Готике 2 у меня почему-то не работает функция Practice_Magic. NPC просто стоит и ничего не делает. При этом Practice_Sword работает нормально. Кто знает, подскажите, плиз...
2B Wolf:<br>По поводу регенерации жизни...<br><br>А стоит ли с амулетом заморачиваться - перекинь в учителя шамана, который стоит рядом с местом под юнитор - все равно сачек...<br><br>
Borisoff:<br>Спасибо огромное все получилось!!!<br> <br>francisc:<br>Навсякий случай кину ссылку как работать с GothicVDFS 2.6. К примеру я ею пользовался и для Г1. http://www.travel.ag.ru/gothic/mods/GothicVDFS.shtml<br><br>Когда ты создал в спейсере метку, появилась ли у тебя запись о ней в форме Output-units (зелененьким цветом). А на панели Objects ты нажимал Modify -> Apply, перед тем как сохранить в zen файл. Я так навсякий случай говорю, как сам делал.<br><br>И еще попробу написать туториал по модмейкерству для Г1, хотя для Г2 неособо отличаться будут, думаю что пригодиться.<br><br>
BORISOFF
16.01.2005, 19:37
2dftool: Спасибо огромное все получилось!!! пожалуйста :)<br><br>И еще попробу написать туториал по модмейкерству для Г1 имхо, лучше помоги Irwin1138 переводить уже существующий хэлп на немецком языке. Ирвин уже перевел хэлп ПРОМТом, осталось только привести все в нормальный вид, а за одно можешь добавить что-нибудь свое ;)<br>Вот ссылка на тему:<br>http://forums.gothic.ag/showthread.php?&s=25&t=1102275156
2Pa: 2B Wolf:<br>По поводу регенерации жизни...<br><br>А стоит ли с амулетом заморачиваться - перекинь в учителя шамана, который стоит рядом с местом под юнитор - все равно сачек...<br>Нет, я ничего не хочу менять в авторском сюжете Бумшака, мне нужен именно рабочий амулет регенерации жизни. А мод Бумшак был использован в качестве примера...
2B Wolf:<br>Нет, я ничего не хочу менять в авторском сюжете Бумшака, мне нужен именно рабочий амулет регенерации жизни. А мод Бумшак был использован в качестве примера...<br><br>Тогда завяжи проверку условия обучения на наличие амулета - все равно свойство регенерации это умение ГГ и в меню это явно видно - обучен или нет.<br><br>Я еще более смешную вещь готовлю к 1.04...<br>
Killer-XXX
17.01.2005, 00:23
2Pa:<br>Я еще более смешную вещь готовлю к 1.04...<br>Интересно, интересно... может намекнешь хотя бы? :)
2Pa: Тогда завяжи проверку условия обучения на наличие амулета - все равно свойство регенерации это умение ГГ и в меню это явно видно - обучен или нет.<br>ИМХО, не совсем верно!<br>То что видно в меню - это Умение. Если ГГ не обучен, умение равно 0.<br>Умение ГГ - это лишь зависимость устанавливающая количество прибавляемой жизни в ед. времени. А я эту зависимость вырезал начисто из функции описывающей регенерацию, определив явным образом количество прибавляемой жизни (урезанная версия скрипта приведена в пред. постах), отсюда следует, что ГГ даже с 0-евым умением т.е. необученный к регенерации в данном случае должен регенерировать жизнь при исп. амулета.<br>И функция описывающая регенерацию забита именно на амулет, а не на НПС.
B Wolf:<br>И функция описывающая регенерацию забита именно на амулет, а не на НПС.<br><br>Предлагаю функцию регенерации повесить на npc, а активировать ее только тогда, когда одет амулет, должно сработать. :)
Кто-нибудь может что-то подсказать по погодным явлениям? Как отследить наступление дождя, например? Похоже, что эффект вшит в движок, но есть безумная мысль попытаться отловить его через регистрацию проигрывания звука дождя.
Ура, товарищи! ;D<br>Два дня "битья" над регенерацией не прошли даром!<br>Пробовал создать амулет регенерации разными способами, но в конце концов получилось только при использовании исходников мода Mana Reload.<br><br>Короче, описываю алгоритм действий для создания амулета регенерации маны, который будет прибавлять +1 к мане каждую секунду.<br><br><br>В папке AI\Human\TA_Human создаем файл ZS_Recharger.d<br><br>Вот его содержимое(взято из Mana Reload и немного подправлено):<br><br><br>func void ZS_Recharger()<br>{<br> B_ResetAll (self);<br> B_ClearPerceptions (self);<br>};<br><br>func int ZS_Recharger_loop()<br>{<br> if (Npc_GetStateTime(self) > 3)<br> {<br> Npc_SetStateTime (self, 0);<br><br> if (hero.attribute[ATR_MANA] < hero.attribute[ATR_MANA_MAX])<br> {<br> hero.attribute[ATR_MANA]=hero.attribute[ATR_MANA]+1;<br> };<br><br> AI_Teleport (self, Npc_GetNearestWP (hero));<br> <br> };<br><br> return LOOP_CONTINUE;<br>};<br><br>func void ZS_Recharger_end()<br>{<br> AI_PlayAni (self,"T_LGUARD_2_STAND"); <br>};<br><br><br><br>Далее в файле TA.d дописываем следующую строчку:<br><br><br>func void TA_Recharger (var int start_h, var int start_m, var int stop_h, var int stop_m, VAR string waypoint) {TA_Min (self, start_h,start_m, stop_h, stop_m, ZS_Recharger, waypoint);};<br><br><br>Теперь создаем НПС, который будет отвечать за нашу регенерацию.<br><br>В папку Story\NPC вставляем файл None_999_Recharger.d, следующего содержания:<br><br><br>instance None_999_Recharger (Npc_Default) <br>{<br> name = "";<br> guild = GIL_NONE;<br> npctype = NPCTYPE_AMBIENT;<br> flags = NPC_FLAG_IMMORTAL|NPC_FLAG_GHOST;<br> level = 999;<br> voice = 0;<br> id = 999;<br> noFocus = 1;<br> bodyStateInterruptableOverride = 1;<br><br> damagetype = DAM_EDGE;<br> damage [DAM_INDEX_EDGE] = 0;<br><br><br> //-------- visuals --------<br> B_SetNpcVisual (self, MALE, "Hum_Head_Fatbald", 0, 0, ITAR_MIL_M); <br> Mdl_SetModelScale (self, 0.01, 0.01, 0.01);<br><br><br> //-------- talents --------<br> B_SetFightSkills (self, 0); <br><br><br> //------------- ai -------------<br> fight_tactic = FAI_HUMAN_COWARD;<br><br><br> daily_routine = Rtn_start_999;<br>};<br><br><br>func void Rtn_Regeneration_999 ()<br>{<br> TA_Recharger (0,00,13,00, Npc_GetNearestWP (hero));<br> TA_Recharger (13,00,0,00, Npc_GetNearestWP (hero));<br>};<br><br>func void Rtn_start_999 ()<br>{<br> TA_Stand_WP (0,00,13,00, Npc_GetNearestWP (hero));<br> TA_Stand_WP (13,00,0,00, Npc_GetNearestWP (hero));<br>};<br><br><br><br>Обратите внимание, что НПС почти невидим!<br><br>Прописываем нового НПС в стартапе:<br><br><br>Wld_InsertNpc (None_999_Recharger,Npc_GetNearestWP (hero)); <br><br><br><br><br>Ну и в конце-концов вставляем в файле It_Amulette.d следующее:<br><br><br> INSTANCE ItAm_Mana_Regener(C_Item)<br>{<br> name = NAME_Amulett;<br><br> mainflag = ITEM_KAT_MAGIC;<br> flags = ITEM_AMULET;<br><br> value = Value_Mana_Regener;<br><br> visual = "ItAm_Strg_01.3ds";<br><br> visual_skin = 0;<br> material = MAT_METAL;<br> on_equip = Equip_ItAm_Mana_Regener;<br> on_unequip = UnEquip_ItAm_Mana_Regener;<br><br> wear = WEAR_EFFECT;<br> effect = "SPELLFX_ITEMGLIMMER"; <br><br> description = "Амулет регенерации маны";<br> <br> <br> TEXT[5] = NAME_Value;<br> COUNT[5] = value;<br><br> INV_ZBIAS = INVCAM_ENTF_AMULETTE_STANDARD;<br> <br>};<br><br>FUNC VOID Equip_ItAm_Mana_Regener()<br>{<br> Npc_ExchangeRoutine (None_999_Recharger,"Regeneration");<br>};<br><br>FUNC VOID UnEquip_ItAm_Mana_Regener()<br>{<br> Npc_ExchangeRoutine (None_999_Recharger,"Start");<br>};<br><br><br><br><br>Вот, собственно говоря и все. Амулет работает. Единственное, если пользоваться F8 для перелетов на большие расстояния, амулет перестает работать. Чтобы он снова заработал, его надо снять и снова одеть. Этот баг появляется из-за того, что наш речаджер не успевает за нами, т.к. не умеет пользоваться "марвином"! :D<br>Но, в принципе, тем кто пользуется F8 регенерация маны ни к чему! :lol:<br><br>2Dagot_Ur: Если будешь читать этот топик, расскажи, плз, свой способ создания предмета с регенерирующими способностями.
2Vam: Предлагаю функцию регенерации повесить на npc, а активировать ее только тогда, когда одет амулет, должно сработать. <br>2Pa: Тогда завяжи проверку условия обучения на наличие амулета - все равно свойство регенерации это умение ГГ и в меню это явно видно - обучен или нет.<br>Одно и тоже, только разными словами... Ээээ... немножко топорно, амулет получается именной и на других действовать не будет, если у всех остальных НПС это не прописывать... :)<br><br>2finch: Ура, товарищи! <br>Два дня "битья" над регенерацией не прошли даром!<br>Пробовал создать амулет регенерации разными способами, но в конце концов получилось только при использовании исходников мода Mana Reload.<br><br>Короче, описываю алгоритм действий для создания амулета регенерации маны, который будет прибавлять +1 к мане каждую секунду.<br><br><br>В папке AI\Human\TA_Human создаем файл ZS_Recharger.d<br><br>Вот его содержимое(взято из Mana Reload и немного подправлено):<br>Ну а эта... уже реальная тема. finch, большое спасибо за оперативное решение и полное разъяснение работы скрипта.<br>Хы... намано придумали... Летающий подзарядник, активирующийся при одетом амулете :))))
2B Wolf: Нема за цо! ;D<br><br>закралась ошибка...<br>амулета регенерации маны, который будет прибавлять +1 к мане каждую секунду.<br>Не каждую секунду, а каждые три секунды... Очепятался... ;D
2finch: закралась ошибка...<br>амулета регенерации маны, который будет прибавлять +1 к мане каждую секунду.<br>Не каждую секунду, а каждые три секунды... Очепятался... <br>Как я понял, это можно установить здесь: if (Npc_GetStateTime(self) > 3)
2B Wolf: Как я понял, это можно установить здесь: if (Npc_GetStateTime(self) > 3) Да. <br><br>hero.attribute[ATR_MANA]=hero.attribute[ATR_MANA]+1;<br>А здесь, сколько маны будет прибавляться в этот промежуток времени...<br><br>Ну да это и так понятно...
2finch: <br>AI_Teleport (self, Npc_GetNearestWP (hero));<br>А это зачем? ::)<br><br>Способ у тебя, конечно, хитрый, но не оптимальный...<br>Надо будет тоже попробовать :)
2TycoooN: А это зачем?<br>Чтобы речарджер постоянно "догонял" ГГ. Эту строчку можно было бы не прописывать, если бы ГГ во время регенерации постоянно стоял на месте.<br><br>Надо будет тоже попробовать<br>А вот это ОБЯЗАТЕЛЬНО! :)
Пару слов об амулете восстановления...<br><br>Попробовал я таки ввести ентот амулет в модификацию Бумшака.<br>Заметил несколько особенностей:<br><br>Хорошие:<br>1) Амулет работает :)<br><br>Нехорошие:<br>1) Иногда орки, звери и пр. существа начинают нападать на невидимку-реченджера (нужно гильдии смотреть).<br>2) Иногда невидимка-реченджер получает от меня оружием во время боя, т.к. все время путается под ногами.<br><br>А вообщем неплохо :)
2B Wolf:<br>А разве нельзя сделать регенерацию аналогично драконьей, только сначала проверять на наличие амулета, и никаких невидимок не надо?<br>
francisc
19.01.2005, 13:05
При создании миссий,надо ли что-нибудь писать в файл Story globals?<br>И вообше что содердится в этом файле?
2francisc:<br>При создании миссий,надо ли что-нибудь писать в файл Story globals?<br>И вообше что содердится в этом файле? <br><br>Файл содержит объявления нескольких констант и кучи переменных для скриптов папки globals.<br>А писать, или не писать - все зависит от тебя; будешь заводить переменные или нет; запишешь их в файл миссий или нет; обязательного в этом файле ничего нет!<br>
aleks999
19.01.2005, 19:26
Как сделать так, чтобы после разговора с НПС у другого НПС добавлялась новая тема типа "Кто-то говорил..." ??? :-/
2Vam: <br>Файл содержит объявления нескольких констант и кучи переменных для скриптов папки globals.<br>Не знаю такой папки. Может, ты имел в виду папку dialoge?<br><br>2francisc: <br>Я туда прописывал только переменыые MIS_*** для новых миссий ::)<br><br><br>2aleks999: <br>Как сделать так, чтобы после разговора с НПС у другого НПС добавлялась новая тема типа "Кто-то говорил..." ???<br>Для этого нужно прописать в Condition второго диалога условие. Например, <br><br>if (Npc_KnowsInfo (other, <твой C_Info>))<br>
2TycoooN:<br>Не знаю такой папки. Может, ты имел в виду папку dialoge?<br>Пардон, я имел в виду папку Story. :-[
Вопрос: какая функция создает в инвентаре НПС предмет?
2Mitrich: <br>Вопрос: какая функция создает в инвентаре НПС предмет?<br>Из туторов Vam'a:<br><br>void CreateInvItem(c_npc n0,int n1); - создает в инвентаре npc n0 предмет с ID n1.<br>void CreateInvItems(c_npc n0,int n1,int n2); - создает в инвентаре npc n0 предметы с ID n1 количеством n2.<br><br>Пример: CreateInvItems (self, ItMi_Gold, 10);<br>
francisc
19.01.2005, 23:21
void CreateInvItem(c_npc n0,int n1); - создает в инвентаре npc n0 предмет с ID n1.<br>void CreateInvItems(c_npc n0,int n1,int n2); - создает в инвентаре npc n0 предметы с ID n1 количеством n2.<br>А еще есть что игра сама в произвольном порядке создает предметы.<br>Вопрос,как сделать,что бы после передачи предмета,оружия неписю,он его одевал на себя?
2francisc: <br>Вопрос,как сделать,что бы после передачи предмета,оружия неписю,он его одевал на себя?<br>Для этого есть такая функция:<br><br>void EquipItem(c_npc n0,int n1); - экипировать npc n0 предметом с ID n1.<br><br>Пример: EquipItem(self,ItMw_1h_Bau_Axe);
Хмм... Тогда попробуем зайти с другого конца. Это код ТА "пилить"<br>// ****************************<br>// NSC benutzt Sдge Mobsi <br>// ****************************<br><br>FUNC VOID ZS_Saw ()<br>{<br> Perception_Set_Normal();<br> <br> B_ResetAll (self);<br><br> AI_SetWalkmode (self, NPC_WALK); <br> <br> if (Hlp_StrCmp (Npc_GetNearestWP(self), self.wp) == FALSE)<br> {<br> AI_GotoWP (self, self.wp);<br> };<br>};<br><br>FUNC int ZS_Saw_Loop ()<br>{<br> // ------ Saegen ------<br> if (!C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT))<br> && (Wld_IsMobAvailable(self,"BAUMSAEGE"))<br> {<br> AI_UseMob (self, "BAUMSAEGE", 1);<br> };<br><br> // ------ Random-Ani beim Hдmmern ------<br> if (Npc_GetStateTime(self) > 15)<br> && (C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT))<br> {<br> Npc_SetStateTime (self, 0);<br> };<br><br> return LOOP_CONTINUE;<br>};<br><br>FUNC VOID ZS_Saw_End ()<br>{<br> AI_UseMob (self, "BAUMSAEGE", -1);<br>};<br><br>Что выполняет данный блок?<br>// ------ Random-Ani beim Hдmmern ------<br> if (Npc_GetStateTime(self) > 15)<br> && (C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT))<br> {<br> Npc_SetStateTime (self, 0);<br> };<br><br>Особенно интересует /C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT/ в условии. Что это?
francisc
20.01.2005, 01:05
2TycoooN: <br>Это в скрипте нпс надо писать,как я понял.Или в тексте миссии нужно?<br>Вот следуюшй вопрос,как сделать так что бы нпс бежал на какое-то место с оружеем и нападал на кого-нибудь?(бандитов например)
2francisc: Вот следуюшй вопрос,как сделать так что бы нпс бежал на какое-то место с оружеем и нападал на кого-нибудь?(<br>Из темы "уроки скриптологии":<br> void AI_SetWalkmode(c_npc n,int n0); - установить режим передвижения n0 для npc n. Определены следующие режимы: NPC_RUN – бег, NPC_WALK – ходьба шагом, NPC_SNEAK – подкрадывание, NPC_RUN_WEAPON – бег с оружием, NPC_WALK_WEAPON – ходьба с оружием, NPC_SNEAK_WEAPON – подкрадывание с оружием.<br><br>void AI_Attack(c_npc self); - npc self начинает сражение (эта функция должна вызываться внутри ZS_Attack_Loop). Атакуется внутренняя цель, которая была задана функцией Npc_SetTarget или Npc_GetNextTarget. <br><br> int Wld_IsRaining(); – возвращает 1, если идет дождь, иначе – 0.<br>Ура! Я ее нашел в дополнительных функциях второй Готики! :) Vam, ты гений, только об этом пока не догадываешься. (отпирался, что не знает) ;)
По-моему я неудачно зашел с другого конца. Предлагаю рассмотреть ТА ZS_Saw с моими комментариями в качестве примера. Передо мной стоит задача добавлять НПС при пилении каждые 15 секунд некий контрольный предмет. Но некоторые вещи мне непонятны. Кто сможет что-то разьяснить или поправить, буду очень благодарен.<br>Зеленым понятные вещи, красным неясности.<br><br>// ****************************<br>// NSC benutzt Sдge Mobsi <br>// ****************************<br><br>FUNC VOID ZS_Saw () //Объявление функции<br>{<br> * * *Perception_Set_Normal(); //Установка восприятия на нормальный уровень * * *<br> * * *B_ResetAll (self); //Сбрасывание какого-то паретра(ов)???<br> * * *AI_SetWalkmode ** * *(self, NPC_WALK); * * //Перевод НПС в режим ходьбы шагом * * * * * *<br> * * *if (Hlp_StrCmp (Npc_GetNearestWP(self), self.wp) == FALSE)<br> * *{<br> * * * * * *AI_GotoWP * * *(self, self.wp); // npc n0 перемещается в указанную WP s0.<br><br> * * *};<br>};<br><br>FUNC int ZS_Saw_Loop () * *//Начало функции использования МОВ{ * * *<br><br>// ------ Saegen ------<br> * * *if (!C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT)) //поверка на использование МОВ другим "телом"??? <br>* * *<br>&& (Wld_IsMobAvailable(self,"BAUMSAEGE")) //подозреваю, что это условие непосредственной близости НПС с МОВ с именем "BAUMSAEGE" *<br> * *{<br> * * * * * *AI_UseMob (self, "BAUMSAEGE", 1); ** * *//см сноску*<br> * * *};<br><br> * * *// ------ Random-Ani beim Hдmmern ------<br> * * *if (Npc_GetStateTime(self) > 15) //если НПС находится в таком состоянии более 15 секунд * * *&& (C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT)) //и ??? непонятное условие<br> * *{<br> * * * <br> * * *CreatInvItems (self, ItPo_Mana_01, 1); // ----Суть задачи всего примера: Добавление контрольного предмета каждые 15 сек---<br><br> * * *Npc_SetStateTime (self, 0); ** * * //обнулить время нахождения НПС в данном состоянии. Если убрать это действие НПС <br>}; * * * * * * * * * * * * * * *//будет дергаться возле бревна, но пилить так и не начнет. <br><br> * * *return LOOP_CONTINUE; //возврат к началу функции<br>};<br><br>FUNC VOID ZS_Saw_End () //функция завершения действия для НПС self над МОВ "BAUMSAEGE" <br>{<br> * * *AI_UseMob (self, "BAUMSAEGE", -1); //прекратить использовать МОВ (установка флага функции AI_UseMob в -1<br><br>}; <br><br><br>//* *int AI_UseMob(c_npc self,string schemeName,int targetState); - npc self использует MOB с именем schemeName до указанного состояния targetState.<br>Если указанное состояние у MOBа уже имеется, npc self приближается к нему, но ничего не делает.<br>На мой взгляд, здесь требуется уточнение - 1 это флаг начала использования МОВ, а -1 окончание использования, а не проверка состояния МОВ.
2Mitrich: Что выполняет данный блок?<br>// ------ Random-Ani beim Hдmmern ------<br> if (Npc_GetStateTime(self) > 15)<br> && (C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT))<br> {<br> Npc_SetStateTime (self, 0);<br> };<br>Если прошло > 15 секунд и состояние тела (положение) НПС self соответствует BS_MOBINTERACT_INTERRUPT (какая-то фаза выполняемых действий с MOBом (MoveObject) завершена [в моем понимании анимационная фаза движения]), то время сбрасывается в 0 (начинается новый цикл работы в LOOP функции или работа заканчивается в END функции).<br>
2Mitrich: <br>хммм... вот смотри что получается - получаетя сначала идет проверка "если НЕ завершена фаза анимации (в твоем варианте) и достигнута непосредственная близость":<br>// ------ Saegen ------<br> if (!C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT)) <br>&& (Wld_IsMobAvailable(self,"BAUMSAEGE")) <br><br>а во втором случае "если находится в состоянии > 15 сек и фаза анимации закончилась":<br>if (Npc_GetStateTime(self) > 15) //если НПС находится в таком состоянии более 15 секунд && (C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT)) //и ??? непонятное условие<br>На мой взгляд в первом случае логика немного странная. Может все-таки тут что-то иное?
2Mitrich: На мой взгляд в первом случае логика немного странная. Может все-таки тут что-то иное?<br>Необходимо функцию C_BodyStateContains рассмотреть подробно, там проверяются и другие параметры а не только аргумент "состояние тела".
2Mitrich:<br>По-моему я неудачно зашел с другого конца. Предлагаю рассмотреть ТА ZS_Saw с моими комментариями в качестве примера. Передо мной стоит задача добавлять НПС при пилении каждые 15 секунд некий контрольный предмет. Но некоторые вещи мне непонятны.<br><br>Очень советую тебе и всем вскрыть МОД Dunkle Brut Demo v0.73 <br>http://www.worldofgothic.de/dl/index.php?go=downloads&release_id=107<br>Там много новых умений разложено по полочкам (правда заточено на Г1).<br>Еще раз спрашиваю - Нет ли желающих его перевести - очень интересный МОД!<br><br>
aleks999
20.01.2005, 15:57
Можно ли сделать так, что при убийстве каждого стажника начислялось 1 очко(как при поступлении в лагеря в Г1), а при наборе определенного кол-ва что-нибудь происходило?
francisc
20.01.2005, 16:50
2Pa: <br>Это пока демо-мод,там всего прару НПС.Переводить,ну можно,если у кого жедание будет.<br>2aleks999:<br>Можно миссию написать с условием ,что бы она срабатывала при определенном уровне. А что вообше теребуется?
aleks999
20.01.2005, 18:00
2francisc: <br><br>Ну нужно мочить стражников, за убийство каждого дают +1 очко.<br>Когда набирается определенное кол-во этих очков, срабатывает скрипт... наподобие такого...<br><br>func void Info_Diego_JoinAnalyze_Info()<br>{<br> AI_Output(hero,self,"Info_Diego_JoinAnalyze_15_00 "); //<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_11_01 "); //<br> AI_Output(hero,self,"Info_Diego_JoinAnalyze_15_02 "); //<br> Points_OC = 0;<br> if(Scatty_ChargeKirgo == LOG_SUCCESS)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Scatt y_11_01"); //<br> Points_OC = Points_OC + 2;<br> }<br> else if(Scatty_ChargeKirgo == LOG_FAILED)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Scatt y_11_02"); //<br> Points_OC = Points_OC - 1;<br> }<br> else if(Scatty_ChargeKirgo == LOG_RUNNING)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Scatt y_11_03"); //<br> };<br> if(Scatty_ChargeKharim == LOG_FAILED)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Scatt y_11_04"); //<br> Points_OC = Points_OC + 2;<br> }<br> else if(Scatty_ChargeKharim == LOG_SUCCESS)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Scatt y_11_05"); //<br> Points_OC = Points_OC + 5;<br> }<br> else if(Scatty_ChargeKharim == LOG_RUNNING)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Scatt y_11_06"); //<br> };<br> if(Whistler_BuyMySword == LOG_SUCCESS)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Whist ler_11_01"); //<br> Points_OC = Points_OC + 3;<br> }<br> else if((Whistler_BuyMySword == LOG_FAILED) || ((Whistler_BuyMySword == LOG_RUNNING) && (Whistler_BuyMySword_Day <= (Wld_GetDay() - 2))))<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Whist ler_11_02"); //<br> Points_OC = Points_OC + 2;<br> }<br> else if(Whistler_BuyMySword == LOG_RUNNING)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Whist ler_11_03"); //<br> };<br> if(Sly_LostNek == LOG_SUCCESS)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Sly_1 1_01"); //<br> Points_OC = Points_OC + 4;<br> }<br> else if(Sly_LostNek == LOG_RUNNING)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Sly_1 1_02"); //<br> };<br> if(Fingers_Learnt == LOG_RUNNING)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Finge rs_11_01"); //<br> }<br> else if(Fingers_Learnt == LOG_SUCCESS)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Finge rs_11_02"); //<br> Points_OC = Points_OC + 3;<br> };<br> if(Dexter_GetKalomsRecipe == LOG_RUNNING)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Dexte r_11_01"); //<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Dexte r_11_02"); //<br> }<br> else if(Dexter_GetKalomsRecipe == LOG_SUCCESS)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Dexte r_11_03"); //<br> Points_OC = Points_OC + 5;<br> };<br> if(Thorus_MordragKo == LOG_RUNNING)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Thoru s_11_01"); //<br> }<br> else if(Thorus_MordragKo == LOG_SUCCESS)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Thoru s_11_02"); //<br> Points_OC = Points_OC + 5;<br> }<br> else<br> {<br> if(Thorus_MordragKo == LOG_FAILED)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Thoru s_11_03"); //<br> Points_OC = Points_OC - 5;<br> };<br> if(Fisk_GetNewHehler == LOG_SUCCESS)<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Fisk_ 11_01"); //<br> Points_OC = Points_OC + 5;<br> }<br> else if((MordragKO_HauAb == TRUE) || (MordragKO_StayAtNC == TRUE))<br> {<br> AI_Output(self,hero,"Info_Diego_JoinAnalyze_Fisk_ 11_02"); //<br> };<br> };<br> if(Points_OC > 15)<br> {<br> AI_Output(self,hero,"Info_Diego_Points_11_00" ); //<br> if(hero.level >= 5)<br> {<br> if(Diego_BringList == LOG_SUCCESS)<br> {<br> AI_Output(self,hero,"Info_Diego_Points_11_01" ); //<br> Diego_GomezAudience = TRUE;<br> Log_SetTopicStatus(CH1_JoinOC,LOG_SUCCESS);<br> B_LogEntry(CH1_JoinOC,"Диего сказал, что я могу встретиться с Гомезом. Теперь я смогу стать одним из людей Гомеза и войти в замок. Нужно лишь поговорить с Торусом.");<br> }<br> else<br> {<br> AI_Output(self,hero,"Info_Diego_Points_11_02" ); //<br> };<br> }<br> else<br> {<br> B_PrintGuildCondition(5);<br> };<br> }<br> else if(Points_OC > 10)<br> {<br> AI_Output(self,hero,"Info_Diego_Points_11_10" ); //<br> }<br> else if(Points_OC >= 0)<br> {<br> AI_Output(self,hero,"Info_Diego_Points_11_20" ); //<br> };<br>};<br><br><br>Только надо с убийством стражников сделать. Я пробовал, че то не получается...
aleks999
20.01.2005, 18:10
2Pa: <br>Очень советую тебе и всем вскрыть МОД Dunkle Brut Demo v0.73 <br>http://www.worldofgothic.de/dl/index.php?go=downloads&release_id=107<br>Там много новых умений разложено по полочкам (правда заточено на Г1).<br>Еще раз спрашиваю - Нет ли желающих его перевести - очень интересный МОД!<br><br>Сейчас докачаю, посмотрю, а там и переведу... :)
2aleks999: <br>Можно ли сделать так, что при убийстве каждого стажника начислялось 1 очко(как при поступлении в лагеря в Г1), а при наборе определенного кол-ва что-нибудь происходило?<br>Можно. Для этого в файле AI/Human/ZS_Human/ZS_Dead.d пропиши такое условие:<br><br>if (self.guild == GIL_GRD) && (Npc_IsPlayer(other))<br>{<br> *grd_counter += 1;<br>};<br><br>Соответственно, нужно прописать где-нибудь эту переменную:<br><br>var int grd_counter;<br><br>Ну и сделать миссию на основе этого счётчика :)<br>
aleks999
20.01.2005, 18:34
2TycoooN: <br>В Г1 файл ZS_Dead.d находится здесь: AI\ZS_Human *:) Еле нашел :)<br><br>if (self.guild == GIL_GRD) && (Npc_IsPlayer(other))<br>{<br> grd_counter += 1; - я делаю мод для Г1, а там счетчик начисляется по-другому: grd_counter = grd_counter + 1;<br>};
aleks999
20.01.2005, 20:05
Идея для игры.<br>Вот то, что пока готово:<br><br>- Графические изменения<br> *- Интерфейс игры<br> *- Текстуры животных<br> * *- Мракорис<br> * *- Огненный ящер<br> * *- Ледяной голем<br> * *- Шныг<br> * *- Мясной жук<br> * *- Кротокрыс<br> * *- Орк-воин<br> * *- Падальщик<br> * *- Ящер<br> * *- ...<br> *- Текстуры людей<br> *- Текстуры брони (Легкие, средние, тяжелые)<br> * *- Стражник<br> * *- Маг огня<br> * *- Маг воды<br> * *- Послушник<br> * *- Вор<br> * *- Рудокоп<br> * *- Наемник<br> * *- Призрак<br> * *- Страж<br> *- Прочие текстуры<br> * *- Еда<br> * *- Некоторые предметы<br> * *- Оружие<br> * *- ...<br>- Игровой баланс<br> *- Действия<br> * *- Делать болотник<br> * *- Рубить деревья<br> * *- Добывать руду<br> * *- Готовить<br> * *- Ковать новое оружие<br> * *- ...<br> *- Руда подорожала, в обороте золото<br>- Новые предметы, оружие...<br>- И многое другое... (пока не знаю, что именно :) )
2aleks999:<br> grd_counter += 1; - я делаю мод для Г1, а там счетчик начисляется по-другому: grd_counter = grd_counter + 1;<br>Для любых Готик оба варианта приемлемы и работают одинаково. :)
2Vam: Обращаюсь в первую очередь к тебе, но может быть, кто-нить еще знает.<br>В журнале миссий слева внизу указан сегодняшний день и время. Также время регистрируется при сейвах. Отсюда вопрос: каким образом игра узнает настоящее время? Может есть какая-нить функция?
2finch:<br>В журнале миссий слева внизу указан сегодняшний день и время. Также время регистрируется при сейвах. Отсюда вопрос: каким образом игра узнает настоящее время? *Может есть какая-нить функция?<br>Не понял вопроса - настоящее время это какое: игровое, или в котором мы живем? (Не помню что в журнале миссий указывается). В принципе без разницы, настоящее время берется с компа, а игровое время считается экзешником с начала новой игры, при сейвах оно сохраняется, при загрузке восстанавливается. *:)<br><br>Вот функции, оперирующие игровым временем:<br>int Wld_GetDay(); - получить текущий день, отсчет дней идет от дня старта (Gamestart) *= 0.<br>int Wld_IsTime(int hour1,int min1,int hour2,int min2); - возвращает 1, если текущее время находится между границами (hour1, min1 – нижняя граница, hour2, min2 – верхняя граница в часах и минутах), иначе возвращает 0.<br>void Wld_SetTime(int hour,int min); - установить текущее время в часах hour и минутах min. ***<br>
Может кто-нибудь истолковать перевод слова Wusel по отношению к животным. В словарях ничего похожего не нашел. :(
2Vam: <br>Может кто-нибудь истолковать перевод слова Wusel по отношению к животным. В словарях ничего похожего не нашел. <br>Хм... вот, что нашёл:<br><br>wuseln<br>1) бодро [проворно, живо] двигаться <br>2) кишеть (чем-л)<br><br>wuselig<br>1) живой, проворный <br>2) кишащий (чем-л) <br>3) приятный
aleks999
21.01.2005, 17:20
2Vam: <br>Wusel отвечает за преследование монстром игрока.
aleks999
21.01.2005, 20:56
Сразу извиняюсь, если вопрос не по теме.<br>В папке _work\DATA\ANIMS\MDS_MOBSI лежат СКРИПТОВЫЕ файлы анимации MOBов, которые также отвечают за визуализацию моделей в игре и Спэйсере.<br>Но в этой папке НЕТ кровати, стула, руды... Что делать?<br>Можно ли где-то скачать эти скрипты или надо их прописывать в ручную?
2aleks999:<br>Сразу извиняюсь, если вопрос не по теме.<br>В папке _work\DATA\ANIMS\MDS_MOBSI лежат СКРИПТОВЫЕ файлы анимации MOBов, которые также отвечают за визуализацию моделей в игре и Спэйсере.<br>Но в этой папке НЕТ кровати, стула, руды... Что делать?<br>Можно ли где-то скачать эти скрипты или надо их прописывать в ручную?<br>Непонятно, какую анимацию ты хочешь видеть от кровати и стула? :o Файлы моделей этих предметов находятся в папке ..\work\Data\Meshes\Mobs.
2Vam: Не понял вопроса - настоящее время это какое: игровое, или в котором мы живем?<br>Игровое.int Wld_GetDay(); - получить текущий день, отсчет дней идет от дня старта (Gamestart) = 0.<br>int Wld_IsTime(int hour1,int min1,int hour2,int min2); - возвращает 1, если текущее время находится между границами (hour1, min1 – нижняя граница, hour2, min2 – верхняя граница в часах и минутах), иначе возвращает 0.<br>void Wld_SetTime(int hour,int min); - установить текущее время в часах hour и минутах min. ***<br>Ни одна из этих функций не выдает точное игровое время, а мне необходимо именно оно...
aleks999
22.01.2005, 20:57
2Vam: <br>Ну в Спейсере в MOBах нужно указать в поле visual .mds-файл, который будет отображать модель и анимацию взаимодействия с ним, к примеру, кузнечная печь, которая есть в mds и ее можно туда вставить, а кровати и стула там нет!
aleks999
23.01.2005, 00:49
2Vam: <br>Вот скрин. Вот про что именно я говорю (MDS)<br><br>http://www.abosoft.nm.ru/data/1.JPG
Vam, еще раз великий респект тебе, за "Уроки скриптологии", в особенности за статью "Уроки скриптологии (Ответ #115)" - Тема первая: Глобальные константы.<br><br>Итак просмотрев данный урок, я заметил очень интересные...<br>// Индексы атрибутов НПС<br>const int ATR_HITPOINTS * * * * * * * * *= 0; //Текущая жизнь<br>const int ATR_HITPOINTS_MAX * * * * * *= 1; //Макс. жизнь<br>const int ATR_MANA * * * * * * * * * * * *= 2; //Текущая мана<br>const int ATR_MANA_MAX * * * * * * * * *= 3; //Макс. мана<br>const int ATR_STRENGTH * * * * * * * * *= 4; //Сила<br>const int ATR_DEXTERITY * * * * * * * * *= 5; //Ловкость<br>const int ATR_REGENERATEHP * * * * * *= 6; //Регенерация жизни в секунду<br>const int ATR_REGENERATEMANA * * *= 7; //Регенерация маны в секунду<br><br>И тут на меня нашло озарение! Оказывается все совершенное просто!<br><br>Через пол часа я изготовил следующий предмет:<br><br>instance ITAM_HEALTHBRINGER(C_Item)<br>{<br> * * *name = "Милость Аданоса";<br> * * *mainflag = ITEM_KAT_MAGIC;<br> * * *flags = ITEM_MISSION | ITEM_AMULET;<br> * * *value = 0;<br> * * *visual = "ItAm_Hp_01.3ds";<br> * * *material = MAT_STONE;<br> * * *<br> * * *on_equip * * *= * * *Equip_ITMI_HEALTHBRINGER;<br> * * *on_unequip * * *= * * *UnEquip_ITMI_HEALTHBRINGER; * * *<br> * * *wear = WEAR_EFFECT;<br> * * *effect = "SPELLFX_ITEMGLIMMER";<br> * * *description = name;<br> * * *text[0] = "Милость Аданоса";<br> * * *text[1] = "будет оберегать тебя в бою.";<br> * * *inv_zbias = INVCAM_ENTF_AMULETTE_STANDARD;<br>};<br><br>func void Equip_ITMI_HEALTHBRINGER ()<br>{<br> * * *self.attribute[ATR_REGENERATEHP] = 1;<br>};<br><br>func void UnEquip_ITMI_HEALTHBRINGER ()<br>{<br> * * *self.attribute[ATR_REGENERATEHP] = 0;<br>};<br><br>Амулет регенерации жизни...<br>И не нужно никаких громоздкий скриптов с летающим подзарядником, или проверки присутствия амулета у НПЦ (http://forums.gothic.ag/showthread.php?&s=35&t=1105030050&start=75) :)<br><br>Амулет просто работает :)<br><br>Далее вставляем код амулета в IT_Amulette.d, компилируем...<br>И вызываем любыми доступными средствами, например через MARVIN.<br>Insert ITAM_HEALTHBRINGER
Нда... Все гениальное просто...<br>Блин, а я два дня возился...<br>ПоставьтеB Wolf'у плюс кто-нибудь что ли... :)
Если теперь кто-нибудь найдет встроенные в НПС часы (функцию получения текущего времени), на площади Хориниса рядом с Vam`ом появится вторая статуя. :)
aleks999
28.01.2005, 17:26
2B Wolf: <br>ОШИБОЧКА ВЫШЛА! Жизненная сила регенерируется, а вот магическая сила при ношении этого амулета - БЕСКОНЕЧНА!
aleks999
28.01.2005, 17:35
2Mitrich: <br>Только так:<br><br>instance MENU_ITEM_TIME(C_MENU_ITEM_DEF)<br>{<br> * * *text[0] = "XX:XX";<br> * * *posx = 2200;<br> * * *posy = 6300;<br> * * *fontname = LOG_FONT_DATETIME;<br> * * *flags = flags & ~IT_SELECTABLE;<br>};
2aleks999: И что это нам дает???
aleks999
29.01.2005, 14:07
2finch: <br>Если изменить некоторые параметры, время можно вставить куда угодно :). К примеру, этот код взят из окна заданий. Таким же образом можно вставить его в любое другое окно. И сделать условие, что по времени XX:XX что-нибудь происходит, вот :D
francisc
29.01.2005, 17:01
Люди,как сделать так что бы бандиты не умирали когда у них кончается жизнь,а теряли сознание.Какой скрипт за это отвечает?
aleks999
29.01.2005, 18:25
2francisc: <br>за это отвечает гильдия персонажа. Если у него стоит гильдия типа ZOMBIE, то он умрет. Другими словами, они умирают, если название гильдии имеет значение монстра. Если же нет - он не умирает а падает. Вот. :)
BORISOFF
29.01.2005, 18:49
2aleks999: хм... спрошу для общего развития :) а нельзя ли изменить параметры самой гильдии? и если да, то как?
francisc
29.01.2005, 18:56
2Borisoff: <br>Я собственно и имел ввиду это.
aleks999
29.01.2005, 20:22
2Borisoff: <br>В каком-то файле, помоему в guilds.d прописано все... только в числовом формате :)<br><br>Вот декомпилированный вариант:<br><br>const int TAB_ANZAHL = 256;<br><br>const int GIL_ATTITUDES[256] =<br>{<br> * * *2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,<br> * * *2,3,3,3,3,3,1,1,1,1,1,2,2,2,2,2,<br> * * *2,3,3,3,3,3,1,1,1,1,1,2,2,2,2,2,<br> * * *2,3,3,3,3,3,1,1,1,1,1,2,2,2,2,2,<br> * * *2,3,3,3,3,3,3,1,1,1,1,1,1,1,3,2,<br> * * *2,3,3,3,3,3,1,1,1,1,1,2,2,2,2,2,<br> * * *2,2,2,2,3,2,3,3,2,2,2,2,2,2,3,2,<br> * * *2,1,1,1,1,1,3,3,2,3,3,2,2,2,2,2,<br> * * *2,1,1,1,1,1,2,2,3,3,3,2,2,2,2,2,<br> * * *2,1,1,1,1,1,3,3,3,3,3,2,2,2,2,2,<br> * * *2,1,1,1,1,1,3,3,3,3,3,2,2,2,2,2,<br> * * *2,2,2,2,1,2,1,2,2,2,2,3,3,3,2,2,<br> * * *2,2,2,2,1,2,1,2,2,2,2,3,3,3,2,2,<br> * * *2,2,2,2,1,2,1,2,2,2,2,3,3,3,2,2,<br> * * *2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,<br> * * *2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3<br>};<br><br>const int GIL_ATTITUDES_FMTAKEN[256] =<br>{<br> * * *2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,<br> * * *0,3,3,3,0,3,0,0,0,0,0,0,0,0,0,2,<br> * * *0,3,3,3,0,3,0,0,0,0,0,0,0,0,0,2,<br> * * *0,3,2,3,0,2,0,0,0,0,0,0,0,0,0,2,<br> * * *3,0,0,0,3,2,3,3,3,3,3,3,3,3,3,2,<br> * * *0,2,2,2,2,2,0,0,0,0,0,0,0,0,0,2,<br> * * *3,0,0,0,3,0,3,3,2,2,2,3,3,3,3,3,<br> * * *3,0,0,0,3,0,3,3,2,3,3,3,3,3,3,3,<br> * * *3,0,0,0,3,0,2,2,3,3,3,3,3,3,3,3,<br> * * *3,0,0,0,3,0,3,3,3,3,3,2,2,2,2,2,<br> * * *3,0,0,0,3,0,3,3,3,3,3,2,2,2,2,2,<br> * * *3,0,0,0,3,2,1,2,2,2,2,3,3,3,2,2,<br> * * *3,0,0,0,3,2,1,2,2,2,2,3,3,3,2,2,<br> * * *3,0,0,0,3,2,3,3,3,3,3,3,3,3,2,2,<br> * * *2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,<br> * * *2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3<br>};<br><br>const int GIL_ATTITUDES_ORCASSAULT[256] =<br>{<br> * * *2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,<br> * * *2,3,2,2,2,2,1,1,1,1,1,2,2,2,2,2,<br> * * *2,2,3,2,2,2,1,1,1,1,1,2,2,2,2,2,<br> * * *2,2,2,3,2,2,1,1,1,1,1,2,2,2,2,2,<br> * * *2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,<br> * * *2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,<br> * * *2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,<br> * * *2,1,1,1,2,2,2,3,2,2,2,2,2,2,2,2,<br> * * *2,1,1,1,2,2,2,2,3,2,2,2,2,2,2,2,<br> * * *2,1,1,1,2,2,2,2,2,3,2,2,2,2,2,2,<br> * * *2,1,1,1,2,2,2,2,2,2,3,2,2,2,2,2,<br> * * *2,1,1,1,1,1,1,1,2,2,1,3,2,2,2,2,<br> * * *2,1,1,1,1,1,2,1,2,2,1,2,3,2,2,2,<br> * * *2,1,1,1,1,1,2,1,2,2,1,2,2,3,2,2,<br> * * *2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,<br> * * *2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3<br>};<br><br>const int GIL_ATTITUDES_NEMESIS[256] =<br>{<br> * * *1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,<br> * * *1,2,2,1,2,1,1,1,1,1,1,1,1,1,2,2,<br> * * *1,2,2,1,2,1,1,1,1,1,1,1,1,1,2,2,<br> * * *1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,<br> * * *1,2,1,1,2,1,2,1,1,1,1,1,1,1,2,2,<br> * * *1,1,1,1,2,2,1,1,1,1,1,1,1,1,2,2,<br> * * *1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,2,<br> * * *1,0,0,0,0,0,1,2,1,1,1,1,1,1,2,2,<br> * * *1,0,0,0,0,0,1,1,2,1,1,1,1,1,2,2,<br> * * *1,0,0,0,0,0,1,1,1,2,1,1,1,1,2,2,<br> * * *1,0,0,0,0,0,1,1,1,1,2,1,1,1,2,2,<br> * * *1,0,0,0,1,0,1,1,1,1,1,2,1,1,2,2,<br> * * *1,0,0,0,1,0,1,1,1,1,1,1,2,1,2,2,<br> * * *1,0,0,0,1,0,1,1,1,1,1,1,1,2,2,2,<br> * * *1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,<br> * * *1,2,2,2,2,2,1,1,1,1,1,1,1,1,2,3<br>};<br><br>Вот оригинальные исходники:<br><br><br>////////////////////////////////////////////////////////////////////////////////<br>///////////<br>// Gilden<br>// Aufnahmebedingungen<br>// Lernprogramme<br>////////////////////////////////////////////////////////////////////////////////<br>///////////<br><br>// ************************************************** ******************************<br>************************************<br>// Gruppenattitьden <br>// ************************************************** ******************************<br>************************************<br><br>CONST INT TAB_ANZAHL = 16 * 16;<br><br>CONST INT GIL_ATTITUDES [TAB_ANZAHL] = * * *// AL und *NL verдrgert (Magier zueinander freundlich) ST neutral zu AL und NL (Magier verдrgert zu ST)<br>{<br>// * * * * * *None * * * * * * * * *EBr * * * * * * * * * * * *Grd * * * * * * * * * * * *Stt * * * * * * * * * * * *KdF * * * * * * * * * * * *Vlk ** * * * * * * * * * * * * * *KdW ** * * * * * * * *Sld * * * * * * * * * * * *Org ** * * * * * * * *Bau ** * * * * * * * *SfB ** * * * * * * * * * * * * * *Gur ** * * * * * * * *Nov ** * * * * * * * *Tpl ** * * * * * * * * * * * * * *Dдm ** * * * * * * * *Bab * * * * * *<br>/*Non*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Non*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Non*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Non*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br><br>/*Ebr*/ * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Ebr*/ * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * */*Ebr*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Ebr*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Grd*/ * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Grd*/ * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * */*Grd*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Grd*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Stt*/ * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Stt*/ * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * */*Stt*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Stt*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Kdf*/ * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Kdf*/ * * *ATT_FRIENDLY, * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * */*Kdf*/ * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * */*Kdf*/ * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *<br>/*Vlk*/ * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Vlk*/ * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * */*Vlk*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Vlk*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br><br>/*Kdw*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * */*Kdw*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Kdw*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Kdw*/ * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *<br>/*Sld*/ * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * */*Sld*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Sld*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Sld*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Org*/ * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * */*Org*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Org*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Org*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Bau*/ * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * */*Bau*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Bau*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Bau*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Sfb*/ * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * *ATT_ANGRY, * * * * * */*Sfb*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Sfb*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Sfb*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br><br>/*Gur*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * * * * *ATT_NEUTRAL, * * */*Gur*/ * * *ATT_ANGRY, * * * * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Gur*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Gur*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Nov*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * * * * *ATT_NEUTRAL, * * */*Nov*/ * * *ATT_ANGRY, * * * * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Nov*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Nov*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Tpl*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * * * * *ATT_NEUTRAL, * * */*Tpl*/ * * *ATT_ANGRY, * * * * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Tpl*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Tpl*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br><br>/*Dmb*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Dmb*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * */*Dmb*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Dmb*/ * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *<br>/*Bab*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Mst*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Mst*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Mst*/ * * *ATT_NEUTRAL, * * *ATT_FRIENDLY * * *<br><br>};<br><br>CONST INT GIL_ATTITUDES_FMTAKEN [TAB_ANZAHL] = * * *// AL und NL feindlich<br>{ * * * * * *<br>// * * * * * *None * * * * * * * * *EBr * * * * * * * * * * * *Grd * * * * * * * * * * * *Stt * * * * * * * * * * * *KdF * * * * * * * * * * * *Vlk ** * * * * * * * * * * * * * *KdW ** * * * * * * * *Sld * * * * * * * * * * * *Org ** * * * * * * * *Bau ** * * * * * * * *SfB ** * * * * * * * * * * * * * *Gur ** * * * * * * * *Nov ** * * * * * * * *Tpl ** * * * * * * * * * * * * * *Dдm ** * * * * * * * *Bab * * * * * *<br>/*Non*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Non*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Non*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Non*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Ebr*/ * * *ATT_HOSTILE, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_HOSTILE, * * *ATT_FRIENDLY, * * */*Ebr*/ * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * */*Ebr*/ * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * */*Ebr*/ * * *ATT_HOSTILE, * * *ATT_NEUTRAL, * * *<br>/*Grd*/ * * *ATT_HOSTILE, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_HOSTILE, * * *ATT_FRIENDLY, * * */*Grd*/ * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * */*Grd*/ * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * */*Grd*/ * * *ATT_HOSTILE, * * *ATT_NEUTRAL, * * *<br>/*Stt*/ * * *ATT_HOSTILE, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_HOSTILE, * * *ATT_NEUTRAL, * * */*Stt*/ * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * */*Stt*/ * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * */*Stt*/ * * *ATT_HOSTILE, * * *ATT_NEUTRAL, * * *<br>/*Kdf*/ * * *ATT_FRIENDLY, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * */*Kdf*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Kdf*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Kdf*/ * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *<br>/*Vlk*/ * * *ATT_HOSTILE, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Vlk*/ * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * */*Vlk*/ * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * */*Vlk*/ * * *ATT_HOSTILE, * * *ATT_NEUTRAL, * * *<br><br>/*Kdw*/ * * *ATT_FRIENDLY, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_FRIENDLY, * * *ATT_HOSTILE, * * */*Kdw*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Kdw*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Kdw*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *<br>/*Sld*/ * * *ATT_FRIENDLY, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_FRIENDLY, * * *ATT_HOSTILE, * * */*Sld*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Sld*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Sld*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *<br>/*Org*/ * * *ATT_FRIENDLY, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_FRIENDLY, * * *ATT_HOSTILE, * * */*Org*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Org*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Org*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *<br>/*Bau*/ * * *ATT_FRIENDLY, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_FRIENDLY, * * *ATT_HOSTILE, * * */*Bau*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Bau*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Bau*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Sfb*/ * * *ATT_FRIENDLY, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_FRIENDLY, * * *ATT_HOSTILE, * * */*Sfb*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Sfb*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Sfb*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br><br>/*Gur*/ * * *ATT_FRIENDLY, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * */*Gur*/ * * *ATT_ANGRY, * * * * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Gur*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Gur*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Nov*/ * * *ATT_FRIENDLY, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * */*Nov*/ * * *ATT_ANGRY, * * * * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Nov*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Nov*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Tpl*/ * * *ATT_FRIENDLY, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * */*Tpl*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Tpl*/ * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * *ATT_FRIENDLY, * * */*Tpl*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br><br>/*Dmb*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Dmb*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * */*Dmb*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Dmb*/ * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *<br>/*Bab*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Mst*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Mst*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Mst*/ * * *ATT_NEUTRAL, * * *ATT_FRIENDLY * * *<br><br>};<br>.................................................. .....
aleks999
29.01.2005, 20:23
..................................................<br>//#################################<br>//<br>// * * *SN 09.01.01: Alter Kram<br>//<br>//#################################<br><br>CONST INT GIL_ATTITUDES_ORCASSAULT [TAB_ANZAHL] = * * * * * * * * *// von Steffen (so gelassen)<br>{<br>// * * *None * * * * * *EBr * * * * * *Grd * * * * * *Stt * * * * * *KdF * * * * * *Vlk * * * * * * * * *KdW * * * * * *Sld * * * * * *Org * * * * * *Bau * * * * * *SfB * * * * * * * * *Gur * * * * * *Nov * * * * * *Tpl * * * * * * * * *Dдm * * * * * *Mst * * * * * *<br>/*Non*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Non*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Non*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Non*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Ebr*/ * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Ebr*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Ebr*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Ebr*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Grd*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Grd*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Grd*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Grd*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Stt*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Stt*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Stt*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Stt*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Kdf*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * */*Kdf*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Kdf*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Kdf*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Vlk*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * */*Vlk*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Vlk*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Vlk*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br><br>/*Kdw*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Kdw*/ * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Kdw*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Kdw*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Sld*/ * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Sld*/ * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Sld*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Sld*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Org*/ * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Org*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Org*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Org*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Bau*/ * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Bau*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * */*Bau*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Bau*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Sfb*/ * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Sfb*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * */*Sfb*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Sfb*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br><br>/*Gur*/ * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Gur*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * */*Gur*/ * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Gur*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Nov*/ * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Nov*/ * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * */*Nov*/ * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * */*Nov*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Tpl*/ * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Tpl*/ * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * */*Tpl*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_FRIENDLY, * * */*Tpl*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br><br>/*Dmb*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Dmb*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Dmb*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Dmb*/ * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *<br>/*Mst*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Mst*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Mst*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Mst*/ * * *ATT_NEUTRAL, * * *ATT_FRIENDLY * * *<br>};<br><br>CONST INT GIL_ATTITUDES_NEMESIS [TAB_ANZAHL] = * * * * * * * * * * * *// von Steffen (so gelassen)<br>{<br>// * * *None * * * * * *EBr * * * * * *Grd * * * * * *Stt * * * * * *KdF * * * * * *Vlk * * * * * * * * *KdW * * * * * *Sld * * * * * *Org * * * * * *Bau * * * * * *SfB * * * * * * * * *Gur * * * * * *Nov * * * * * *Tpl * * * * * * * * *Dдm * * * * * *Mst * * * * * *<br>/*Non*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Non*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Non*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Non*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Ebr*/ * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * */*Ebr*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Ebr*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Ebr*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Grd*/ * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * */*Grd*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Grd*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Grd*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Stt*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Stt*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Stt*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Stt*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Kdf*/ * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * */*Kdf*/ * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Kdf*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Kdf*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Vlk*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Vlk*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Vlk*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Vlk*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br><br>/*Kdw*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Kdw*/ * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Kdw*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Kdw*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Sld*/ * * *ATT_ANGRY, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * */*Sld*/ * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Sld*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Sld*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Org*/ * * *ATT_ANGRY, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * */*Org*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Org*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Org*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Bau*/ * * *ATT_ANGRY, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * */*Bau*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * */*Bau*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Bau*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Sfb*/ * * *ATT_ANGRY, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * */*Sfb*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * */*Sfb*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Sfb*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br><br>/*Gur*/ * * *ATT_ANGRY, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_ANGRY, * * *ATT_HOSTILE, * * */*Gur*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Gur*/ * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Gur*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Nov*/ * * *ATT_ANGRY, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_ANGRY, * * *ATT_HOSTILE, * * */*Nov*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Nov*/ * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_ANGRY, * * */*Nov*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br>/*Tpl*/ * * *ATT_ANGRY, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_HOSTILE, * * *ATT_ANGRY, * * *ATT_HOSTILE, * * */*Tpl*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Tpl*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * */*Tpl*/ * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *<br><br>/*Dmb*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Dmb*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Dmb*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Dmb*/ * * *ATT_FRIENDLY, * * *ATT_NEUTRAL, * * *<br>/*Mst*/ * * *ATT_ANGRY, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * *ATT_NEUTRAL, * * */*Mst*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Mst*/ * * *ATT_ANGRY, * * *ATT_ANGRY, * * *ATT_ANGRY, * * */*Mst*/ * * *ATT_NEUTRAL, * * *ATT_FRIENDLY * * *<br>};<br><br><br>Вот тут и изменять
BORISOFF
29.01.2005, 20:32
2aleks999: const int TAB_ANZAHL = 256;<br><br>const int GIL_ATTITUDES[256] =<br>{<br> 2,2,2,2,2,2,2... всю эту чешую я находил, но как изменять-то ее?<br><br>Вот оригинальные исходники: всмысле? каким путем они получены, и где лежат? :)
aleks999
29.01.2005, 21:48
2Borisoff: <br>GMDK\_work\data\Scripts\content\Story\Guilds.d
francisc
30.01.2005, 12:55
Если в мисии при определенном условии и диалоге прописать это<br>self.guild = GIL_DJG; будет ли меняться гильдия у нпс?Если нет,то как сделать что бы менялась?
aleks999
30.01.2005, 13:21
2francisc: <br>Не-а, нужно еще кое-что приписать.<br>Вот так:<br>Npc_SetTrueGuild(hero,GIL_DJG);<br>hero.guild = GIL_DJG;
Alexus_G
30.01.2005, 14:13
А пробовал кто-нибудь делать переход из Newworld'a на какую-нибудь свою карту. У меня такая проблема: карта грузится, но после загрузки - темнота, и ничего и никого нет. Кто знает, подскажите, плиз, где/что нужно прописать?
francisc
30.01.2005, 14:28
2aleks999: <br>А в какой-нибудь миссии это можно посмотреть,было ли что-нибудь похожее?Знаю у бандита,который рядом с Ковалорном стоит было это прописанно :<br>B_SetAttitude(self,ATT_FRIENDLY);<br> self.npcType = NPCTYPE_FRIEND;<br> self.aivar[AIV_EnemyOverride] = FALSE;<br>Это не изменение гильдии,это изменение отношения<br>
BORISOFF
30.01.2005, 16:12
какой скрипт отвечает за то, когда будет крутиться мельница? или такого скрипта вообще нет?
francisc
30.01.2005, 16:54
Мельница это объект.А зачем тебе это?
BORISOFF
30.01.2005, 17:00
2francisc: Мельница это объект но она же по ночам останавливается! (или я что-то перепутал?) А зачем тебе это? для общего развития опять. можно было к примеру сделать квест со сломанной мельницей :)
2Mitrich: <br>Если теперь кто-нибудь найдет встроенные в НПС часы (функцию получения текущего времени), на площади Хориниса рядом с Vam`ом появится вторая статуя.<br>Я знаю способ, как сделать переменную, скажем, time, которая всегда будет равна количеству реальных секунд, прошедших с начала игры. Но способ слегка громоздкий :)
2TycoooN: Я знаю способ, как сделать переменную, скажем, time, которая всегда будет равна количеству реальных секунд, прошедших с начала игры. Но способ слегка громоздкий<br>Ну так выкладывай!! :)
aleks999
30.01.2005, 21:00
2francisc: <br>По поводу изменения гильдий посмотри в диалогах у тех, кто ее меняет (Лорд Андре, лорд Хаген, Ли...)
2finch: <br>Делаем где-нить мини-НПС, где его никто никогда не видит и не услышит (кк вариант - в горах).<br>Далее прописываем ему в расписание дня такую функцию:<br><br>func void ZS_Time()<br>{<br> B_ResetAll(self);<br>};<br><br>func int ZS_Time_loop()<br>{<br> if (Npc_GetStateTime(self) >= 2)<br> {<br> time += 1;<br> Npc_SetStateTime(MiniMan,1);<br> };<br> return LOOP_CONTINUE;<br>};<br><br>func void ZS_Time_end()<br>{<br>};<br><br><br>После этого переменная time должна быть равна кол-ву секунд, но я еще такой вариант не тестил ::)
C изменением гильдии никаких проблем нет...<br>Чтобы изменить гильдию ГГ, например, на послушника, вставляем<br><br> NPC_SetTrueGuild(hero,GIL_NOV);<br> hero.guild = GIL_NOV;<br><br>Чтобы изменить гильдию любого другого НПС, hero заменяем на имя этого НПС.<br><br><br>2TycoooN: Делаем где-нить мини-НПС, где его никто никогда не видит и не услышит (кк вариант - в горах).<br>Так точно не прокатит... Если мини-НПС будет находиться вне пределов видимости ГГ, то он не будет выполнять свой ТА...<br>Возможно, этот код будет работать при условии, что мини-НПС будет постоянно летать за ГГ, как "речаджер" из скрипта амулета регенерации.
aleks999
31.01.2005, 16:09
А можно сделать такой амулет, чтоб после смерти мы оживали, как при нажатии F8?
Dagot_Ur
31.01.2005, 21:41
2aleks999: А зачем? Лучше сразу бессмертие и вперед с песнями! :)
aleks999
31.01.2005, 22:20
2Dagot_Ur: <br>Ну нужен такой амулет, чтоб он действовал только один раз, как Глаз Инноса, и когда мы умирали - один раз оживали.
Dagot_Ur
03.02.2005, 06:48
Народ, давайте поговорим о роликах на движке игры (движение камеры). Как их можно создавать, каким способом. Я, если честно, до сих пор так и не разобрался с подобным вопросом. Может где-то у немцев и написано про это, но я ихнего языка не знаю и поэтому ничего не понимаю... :( :)
francisc
03.02.2005, 11:13
2Dagot_Ur: <br>К несчастью я сам этого е знаю.<br>Где надо прописывать :<br>MIS_Rafael_problem = LOG_RUNNING;<br>и <br>MIS_Rafael_problem = LOG_SUCCESS; ?<br>Как сделать, что бы начислялась экспа?В каких файлах надо писать?<br>Я точно знаю что експа это b_giveplayerxp(XP_VINOWEIN);<br>А вот только где прописывать XP_VINOWEIN?<br>
2Dagot_Ur: finch определенно имеет опыт в этом деле - он мне объяснил в двух словах, но лучше он сам более подробно расскажет при желании.<br><br>Раз уж ты объявился, не подскажешь, тебе что-нибудь известно про прямую функцию получения текущего времени? И второе - сейчас AI поизводит рассчет ТА НПС в очень маленьком радиусе вокруг игрока - мне нужно его существенно увеличить. Как это сделать, есть мысли?
2Mitrich:<br>И второе - сейчас AI поизводит рассчет ТА НПС в очень маленьком радиусе вокруг игрока - мне нужно его существенно увеличить. Как это сделать, есть мысли?<br>Что ты понимаешь под расчетом распорядка дня вокруг ГГ? ::)<br>А такую переменную не пробовал менять?<br>const int TA_DIST_SELFWP_MAX = 500; //Дистанция до объекта, на которой начинают выполняться функции распорядка дня
2Vam: Что ты понимаешь под расчетом распорядка дня вокруг ГГ? ТА НПС начинают рассчитываться только при определенном приближении к ним игрока, т.е. фактически в некоем радиусе. Поэтому и вокруг. :)<br><br>А такую переменную не пробовал менять?<br>Если она была в уроках, то я ее пропустил. :( А где она находится?
2Mitrich:<br>Если она была в уроках, то я ее пропустил. *А где она находится?<br>Пост №141 уроков.<br>ТА НПС начинают рассчитываться только при определенном приближении к ним игрока, т.е. фактически в некоем радиусе. Поэтому и вокруг.<br>Но ведь многие НПС идут выполнять свои функции, а это и есть распорядок дня, в разные точки, в независимости от того, был ли рядом с ними ГГ или нет.
aleks999
03.02.2005, 14:56
Кто-нибудь скажет, как сделать, чтобы амулет один раз возрождал после смерти?<br><br>И кто-нибудь исправит ошибку в амулете регенерации?
2francisc: Где надо прописывать :<br>MIS_Rafael_problem = LOG_RUNNING;<br>и <br>MIS_Rafael_problem = LOG_SUCCESS; ?<br>В скрипте самого диалога<br><br>XP_VINOWEIN<br>Можно в файле XP_Constants.d, а можно просто написать<br>B_GivePlayerXP(100) , и ГГ получит 100 экспы ::)
2Dagot_Ur:<br>Народ, давайте поговорим о роликах на движке игры (движение камеры). Как их можно создавать, каким способом. Я, если честно, до сих пор так и не разобрался с подобным вопросом. Может где-то у немцев и написано про это, но я ихнего языка не знаю и поэтому ничего не понимаю... <br><br>Отвязываешь камеру от ГГ (но можно этого и не делать) включаешь грабилку (как правило fraps) и проигрываешь сюжетик (ну ГГ прыгает и дерется... или какой ладшафт облетаем).<br>После этого полученный мувик обрабатываешь - проще загнать в флэшку и УСЕ.<br><br>
2Pa: включаешь грабилку (как правило fraps) <br>Звук она захватывать умеет?
2Mitrich:<br>Звук она захватывать умеет?<br>Sorry, что вмешиваюсь.<br>Можно воспользоваться "HyperCam"-я с её помощью видеокараоке делал-захватывает окно плейера с картинкой, а звук пишет с master volume в wav-e.<br>Только, наверное, проще звук потом наложить.<br>
francisc
03.02.2005, 19:47
2TycoooN: <br><br>2francisc: Где надо прописывать :<br>MIS_Rafael_problem = LOG_RUNNING;<br>и<br>MIS_Rafael_problem = LOG_SUCCESS; ?<br>В скрипте самого диалога<br><br>Нет,при компиляции мне пишет ошибку unknown indentifer MIS_Rafael_problem
aleks999
03.02.2005, 20:09
2francisc: <br>нужно еще в Story_globals.d прописать что значат твои MIS_Rafael_problem = "Проблема Рафаеля"
2ZXZX: Sorry, что вмешиваюсь.<br>Да какое уж тут "сорри", спасибо, что вмешиваешься. :) <br><br>Тут не много крутых перцев из мира аудио/видеозахвата, поэтому будет крайне удачно, если ты поделишься своим опытом в более доступной и развернутой форме. Наложить звук потом можно, но в том то и вся прелесть, чтобы использовать не только видео, но и звук, создаваемый движком. Для этого, как я понимаю, было бы идеальным вариантом снимать не только картинку с экрана (зачем нам вообще плеер?), но и звук с выхода. А уж как потом все это вместе сводить, AdobePremier сам разберется. :)
2Dagot_Ur: Данные ролики делаются в Спейсере с помощью объекта zCCSCamera. Для этого объекта набираются фреймы zCCamTrj_KeyFrame. Вызывается ролик командой Wld_SendTrigger(""); скриптово. Я к сожалению пока такие ролики не делал и не исключено, что там куча вопросов при реализации возникнет.<br>2Mitrich, Vam: Расчет всех TA нерационален. Самое главное - расчет таких TA, как RunToWP и подобных, тем самым можно убрать эффект телепортирования НПСов при переходе на заданный вейпойнт. У меня пока нет идей, как это сделать.
2aleks999: <br>нужно еще в Story_globals.d прописать что значат твои MIS_Rafael_problem = "Проблема Рафаеля"<br>Вообще-то это не строковая, а целочисленная переменная, и ей не може быть присвоено значение "Проблема Рафаеля". Переменные вроде MIS_*** просто вводят как var int MIS_*** в файле Story_globals.d
aleks999
03.02.2005, 21:46
2francisc: 2TycoooN: <br>Вот все, что нужно где-нибудь прописать:<br>const string MIS_Rafael_problem = "Проблема Рафаэля";<br>var int MIS_END_Rafael_problem;<br>B_CloseTopic(MIS_Rafael_problem,0,MIS_END_Rafael_p roblem,6);<br><br>И в самом диалоге:<br>При получении миссии:<br>Log_CreateTopic(MIS_Rafael_problem,LOG_MISSION);<br>Log_SetTopicStatus(MIS_Rafael_problem,LOG_Running) ;<br>B_LogEntry(MIS_Rafael_problem,"Тут нужно написать то, что будет в журнале.");<br>И при завершении миссии:<br>MIS_END_Rafael_problem = TRUE;
2WSA: Расчет всех TA нерационален. Самое главное - расчет таких TA, как RunToWP и подобных, тем самым можно убрать эффект телепортирования НПСов при переходе на заданный вейпойнт. А я планировал сегодня закончить свои эксперименты, чтобы уже аргументированно подойти к ответу. Но для их чистоты мне нужно было адекватны полигон создать, а я не успел. :(<br><br>2Vam: Но ведь многие НПС идут выполнять свои функции, а это и есть распорядок дня, в разные точки, в независимости от того, был ли рядом с ними ГГ или нет.<br>Как совершенно правильно заметил WSA, за пределами радиуса просчета происходит не выполнение ТА и всех внутренних его функций, а проверяется только точка выполнения (но не само выполнение). Т.е. если НПС за пределами радуиса просчета, а вейпойнт в ТА изменился, НПС будет мгновенно туда перенесен, но делать он там ничего не будет, пока игрок не приблизится. Проверялся спектакль зашитой в ТА функцией, которая добавляет единицу N-контрольного предмета за каждые время t выполнения ТА. Если 5 минут стоять рядом с НПС, он честно получит в инвентарь Nхt. Если от него удалиться, количество полученных предметов явно меньше.<br>Второй вариант (исторически первый) - запуск Готик 2 через GothicStarter с ZSpy. Выходим из башни Ксардаса, следим за сообщениями ZSpy. Где-то в районе пенька (прямо перед башней) выдается сообщение "02.30 Info 2U NPC:AI Insert NPC Goblin YGOBBO_GREEN <oNpc.cpp, #9188>" Насколько я понимаю, это начался рассчет гоблина, который слева у озера. Если назад отойти вместо Insert будет Removed.
2Mitrich:<br>снимать не только картинку с экрана (зачем нам вообще плеер?), но и звук с выхода<br>Плеер это для примера.:)<br> *HyperCam (есть и другие подобные проги),захватывает и графику и звук.<br>Игра запускается в оконном режиме, выставляется оптимальное разрешение и битность цвета.<br>Alt-tab перемещаемся между окном игры и окном HyperCam.<br><br> *В HyperCam выбираются параметры захвата и сохранения видео и звука,затем -область захвата(окно целиком или произвольную).Горячими клавишами или мышой запускаем захват.Переключаемся на окно игры и запускаем нужный фрагмент.При захвате вокруг окна начинает мигать рамка.<br><br>По-окончании, вновь Alt-tab на HyperCam , останавливаем захват потом ставим игру на паузу.<br>Можно сразу просмотреть, что и как получилось, щелкнув на play в HyperCam.<br><br>Далее, вырезаем из получившейся avi-шки нужное(можно использовать VirtualDub) и в RADVideo<br>Tools конвертим в стандартный .bik. <br><br> Я сейчас пробовал.Все работает, но на Athlon 2800/512/FX5200 игра подтормаживает во время захвата1024X768 в 32-битном цвете. Надо тыкаться-может проц разгружать, память..<br><br><br>
francisc
03.02.2005, 23:52
const string MIS_Rafael_problem = "Проблема Рафаэля";<br>var int MIS_END_Rafael_problem;<br>B_CloseTopic(MIS_Rafael_problem,0,MIS_END_Rafael_p roblem,6<br><br>Это как я поянл нужно в Story_globals.d.
2francisc: <br>Нет.<br>B_CloseTopic нужно прописать в Log_Entries\B_CloseTopics_***.d<br>const string MIS_Rafael_problem - в Log_Entries\LOG_Constants_***.d<br><br><br>
2Dagot_Ur: Народ, давайте поговорим о роликах на движке игры (движение камеры). Как их можно создавать, каким способом.<br><br>finch определенно имеет опыт в этом деле - он мне объяснил в двух словах, но лучше он сам более подробно расскажет при желании.<br><br>Все зависит от того, как ты собираешься использовать этот ролик...<br>В принципа, здесь уже почти все сказали, но попытаюсь немного обощить...<br><br>1. ЕСли тебе нужен ролик на движке для заставки (например, в начале игры), то тогда, конечно, лучше всего использовать названные выше программы. Я лично использую fraps, а потом при помощи radvideo можно конвертануть ролик в *.bik<br><br>2. Если ты хочешь, чтобы ролик запускался в самой игре, при наступлении какого-нибудь события (пример, движение камеры в самом начале Диккурика), то здесь все немного сложнее...<br>Для начала необходимо в Спейсере вставить эту камеру, задать кейфреймы.<br>чтобы разобраться,как это работает, зайди в спейсер, на вертикальном тулбаре нажми кнопку с камерой. В соседнем окошке появится список доступных камер, сверху кнопка INSERT. Выбираешь любую камеру, жмешь инсерт - камера вставлена в игровой мир. Чтобы посмотреть, как она работает, можно нажать кнопку PLAY.<br>теперь о кейфреймах...<br>выбери в меню veiw/../toggle cams<br>должны появиться зеленые и белые линии.<br>белые линии - траектория движения камеры<br>зеленые - траектория, на которую камера "смотрит"<br>если удалить все кейфреймы, которые составляют зеленую линию, то камера будет смотреть просто перед собой.<br><br>чтобы запустить камеру в игре, используется функция Wld_SendTrigger("");. В кавычках название камеры.<br>Например, эту функцию можно запустить через триггер или диалог.<br>Через диалог не советую, т.к. если камера находится дальше тридцати метров от ГГ, который ведет диалог - диалог автоматически пропадает.<br>Короче, главное начать, а там уже разобраться будет не так и сложно! :)<br><br>З.Ы. Сорри, если все вышенаписанное выглядит невнятно или имеет неточности... Только что пришел с работы, писал все по памяти! :)
Dagot_Ur
04.02.2005, 03:25
2finch: Я как раз и имел в виду камеру в самой игре, а не видео-ролик "через fraps". Можно ли прогон камеры создавать через скрипты, не затрагивая спейсер? А вообще спасибо, теперь все вошло в свое русло. :)
Dagot_Ur
04.02.2005, 06:48
Я тут почитал идеи регенерации с ренжачрком - это ж надо до такого додуматься. :lol: И вот что хочу спросить: где это вы откопали эту фунцию цикла в моде ManaReload? Сейчас скачал посмотреть - там точно такого нет!<br>
2Mitrich:<br>Как совершенно правильно заметил WSA, за пределами радиуса просчета происходит не выполнение ТА и всех внутренних его функций, а проверяется только точка выполнения (но не само выполнение). Т.е. если НПС за пределами радуиса просчета, а вейпойнт в ТА изменился, НПС будет мгновенно туда перенесен, но делать он там ничего не будет, пока игрок не приблизится. Проверялся спектакль зашитой в ТА функцией, которая добавляет единицу N-контрольного предмета за каждые время t выполнения ТА. Если 5 минут стоять рядом с НПС, он честно получит в инвентарь Nхt. Если от него удалиться, количество полученных предметов явно меньше.<br><br>Это же игра, а не мультизадачная система реального времени. То, что находится за зоной видимости ГГ вообще не должно волновать, как будто, да и в реальности, ничего нет, но когда объект попадает в зону видимости он должен адекватно отображаться в заданном состоянии. Если НПС заставили пилить дрова и сами ушли, то подойдя по истечении определенного времени просто должны увидеть результат (N = время * производительность). То же относится к перемещению, расстояние от НПС до точки путешествия известно, траектория задана, и через скорость получаем время прибытия НПС в конечную точку, если мы встанем где-то у него на пути, он должен прошлепать мимо.<br>Как я понимаю, для реализации всего этого не хватает одного параметра - фактического времени.<br><br>Теперь вопрос - кто-нибудь пробовал менять значение константы именно на стадии работы скриптов, а не до компиляции. Работает ли такая вещь? Или можно менять значение только у VAR переменной?
2Vam: Это же игра, а не мультизадачная система реального времени Согласен - анимацию можно не воспроизводить, но рассчитывать результаты действий НПС за пределами видимости надо (задача такая).<br><br>Как я понимаю, для реализации всего этого не хватает одного параметра - фактического времени. Именно. Не обнаружив такого элементарного инструмента, мне приходится думать о варианте честного расчета, т.е. о системе реального времени. Но не только поэтому.<br><br>Если НПС заставили пилить дрова и сами ушли, то подойдя по истечении определенного времени просто должны увидеть результат (N = время * производительность). <br>Верно. Но если НПС заставить напасть на другого НПС? Как рассчитывать результат? Фиксировать время стычки и прикидывать значения атака/защита данных НПС? Сейчас в Готике расчет стычки начинается когда игрок подойдет, а до этого момента все мирно курят.<br><br>То же относится к перемещению, расстояние от НПС до точки путешествия известно, траектория задана, и через скорость получаем время прибытия НПС в конечную точку, если мы встанем где-то у него на пути, он должен прошлепать мимо. Я думаю, надо определить какие промежуточные вейпойнты находятся на траектории и рассчитать время достижения ближайшей, т.к. по дороге (по идее) может случиться некоторое событие, которые путь прервет - драка например.<br><br> 2ZXZX: Я сейчас пробовал.Все работает, но на Athlon 2800/512/FX5200 игра подтормаживает во время захвата1024X768 в 32-битном цвете. Надо тыкаться-может проц разгружать, память.. А по диспетчеру не удалось отследить загрузку процессора и использование памяти? Третью составляющую (видеокарту) можно было бы тогда элементарно вычелить методом исключения.
2Mitrich: <br>не удалось отследить<br>Да, собственно,специально не проверял.<br>ИМХО, может с этим перейти в тему "Die Nacht des Raben 2.8 (МОД)",а то к скриптам она имеет отдаленное отношение ;)
2finch: Обобщил хорошо.<br>Интересует такая вещь: как правильно писать тригер ocTriggerChangeLevel или ocTriggerScript через событие OnTouch. У меня получилось только из zcTriggerа, да и то точечного.<br>2Mitrich: Я думаю, надо определить какие промежуточные вейпойнты находятся на траектории и рассчитать время достижения ближайшей, т.к. по дороге (по идее) может случиться некоторое событие, которые путь прервет - драка например. Я об этом тоже думал. Попробую сделать упрощенный вариант.
2Dagot_Ur: Можно ли прогон камеры создавать через скрипты, не затрагивая спейсер?<br>ИМХО, нет...<br><br>2WSA: Интересует такая вещь: как правильно писать тригер ocTriggerChangeLevel или ocTriggerScript через событие OnTouch. У меня получилось только из zcTriggerа, да и то точечного.<br>Не понял вопроса...<br>На ОнТач реагирует и ocTriggerChangeLevel, и ocTriggerScript...<br><br>да и то точечного.<br>размеры "точки" можно менять...
Сорри за два поста подряд! Больше не буду! :)<br><br>2Dagot_Ur: Я тут почитал идеи регенерации с ренжачрком - это ж надо до такого додуматься. И вот что хочу спросить: где это вы откопали эту фунцию цикла в моде ManaReload? Сейчас скачал посмотреть - там точно такого нет!<br>Там точно такое есть! ;D<br>Сама идея регенерации лежит в файле ZS_Recharger.d<br>Мне оставалось только приделать ее к амулету... С этим проблем не возникло...<br>А вообще, в этой теме я тебя уже спрашивал, как ты сделал регенерацию...<br>Если не сложно - опиши, плз, хотя бы общий принцип!
Dagot_Ur
05.02.2005, 05:45
2finch: Да чего тут описывать-то? :) ATR_REGENERATEHP и ATR_REGENERATEMANA. Думаю, что из этого все понятно. Только есть одна проблемка - при регенерации одной жизни - мана моментально восстанавливается. Лечится добавлением Npc_ChangeAttribute(self,ATR_REGENERATEMANA,9999); .<br>Делал также через цикл - через любой готовый LOOP, например, MagicSleep. Но с этим мороки больше, да и ни к чему это... :)<br><br>2Mitrich: Точное время получить, наверное, нельзя. Можно оперировать лишь функцией Wld_IsTime(хх,хх,хх,хх);. Если вставить ее в цикл и проверять значение меняющихся переменных хх, то возможно это сделать. Или без цикла, но с проверкой каждой минуты часа, но тогда слишком громоздко получится. Пока мне надобности в этом не возникало, поэтому большего сказать не могу. Вообще-то этим ядро занимается, а доступа к нему у нас, к сожелению - нет. :)
2finch: Уточняю вопрос.<br>Ни один из тригеров не работает после того как я меняю размеры "точки". Точка работает, прямоугольник нет.<br>
2WSA: Ни один из тригеров не работает после того как я меняю размеры "точки". Точка работает, прямоугольник нет.<br>Хм.. Странно...<br>У меня все работает... Я использую для запуска камеры ocTriggerScript и функцию, в которой прописываю Wld_SendTrigger("");... ну, и другие необходимые мне вещи...
2All:<br>Вот пытаюсь разобраться в скиптах, как, что, к чему...<br>Как я понял, все скрипты заложены в файлах Ou.bin, Gothic.dat и т.д. Меня интересует вот что: как в простейшем виде вставить NPC в игру. Вот к примеру, чтобы я начал новую игру(Gothic I) и меня встречал не только Диего, а + еще какой-то стражник стоял рядом с ним. Я так понимаю, это надо создать некий "файл.d", в котором будет описан этот самый стражник. А дальше что делать с этим файлом? Или я вообще не так все понял?<br><br>P.S. Вы только поймите меня правильно, я пытаюсь разобраться что к чему. Поэтому если я что-то не так сказал, то вы уж не смейтесь ;)
2Vahaber: Почитай эту (http://forums.gothic.ag/showthread.php?&s=25&t=1078004330), эту (http://forums.gothic.ag/showthread.php?&s=0&t=1098161614) и, собственно говря, вот эту (http://forums.gothic.ag/showthread.php?&s=0&t=1105030050) темы... А лучше сохрани у себя на винте!<br>Многие вопросы сразу отпадут! ;)
2finch:<br>Почитай *эту, эту и, собственно говря, вот эту темы... А лучше сохрани у себя на винте!<br>Многие вопросы сразу отпадут! <br><hr class="hr_agfc"><br>Что касается вот этой (http://forums.gothic.ag/showthread.php?&s=0&t=109816<br>1614) и этой (http://forums.gothic.ag/showthread.php?&s=0&t=110503<br>0050) тем, то они давно уже прочитаны и сохранены. В них я конкрентого ответа на свой вопрос не нашел. А вот что касается этой (http://forums.gothic.ag/showthread.php?&s=25&t=10780<br>04330) темы - ее я раньше читал, но особо не вникал. А теперь еще раз перечитал, и таки нашел ответы на свои вопросы.<br>Спасибо.
Ответ-то я нашел, стал пробовать что-то сделать. Вышло, но не совсем. Итак, что я делал.<br><br>1. Расспаковал файл world.vdf при помощи GothicVDFS в \Gothic\_work\data\worlds<br><br>2. Запустил Spacer и создал возле входа в СЛ вайпоинт с именем "my0" и соедини его с вайпоинтами, которые были рядом. Вайпоинт создавал так: F3, нажал на горизонтальной панельке на кнопку с изображением ноги, на том месте,где я хотел создать вайпоинт клацнул правой кнопкой мыши - insert(...waypoint), зажал Shift, клачнул левой кнопкой мыши на рядом "стоЯщий" вайпоинт("OC1"), на горизонтально панельке нажал на кнопку, которая отвечает за соединение вайпоинтов. Далее, этот же вайпоинт("my0") соединил таким же образом с еще одним. Сохранил world.zen.<br><br>3. В \Gothic\_work\data\scripts\content\story\NPC создал файл NONE_3131_TIV.d Вот содержимое файла:<br><br>instance NONE_3131_Tiv (NPC_DEFAULT)<br>{<br><br> * name = * * * * * * * * * * *"Tiv";<br> * npctype = * * * * * * * * * npctype_main;<br> * guild = * * * * * * * * * * *GIL_NONE;<br> * level = * * * * * * * * * * *0;<br> * voice = * * * * * * * * * * *8;<br> * id = * * * * * * * * * * * * * *3131;<br><br> * attribute[ATR_STRENGTH] = * * * 200;<br> * attribute[ATR_DEXTERITY] = * * * 200;<br> * attribute[ATR_MANA_MAX] = * * * 100;<br> * attribute[ATR_MANA] = * * * * *100;<br> * attribute[ATR_HITPOINTS_MAX] = * *900;<br> * attribute[ATR_HITPOINTS] = * * * 900;<br><br> * Mdl_SetVisual * * * (self,"HUMANS.MDS");<br> * Mdl_ApplyOverlayMds * *(self,"Humans_Tired.mds");<br> * Mdl_SetVisualBody (self,"hum_body_Naked0",3,1,"Hum_Head_Bald", 72, *4, GRD_ARMOR_H);<br><br> * B_Scale (self);<br> * Mdl_SetModelFatness (self, 0);<br><br> * self.aivar[AIV_IMPORTANT] = TRUE;<br><br> * fight_tactic * *= * *FAI_HUMAN_MASTER;<br><br><br> * Npc_SetTalentSkill (self, NPC_TALENT_1H,1);<br><br> * EquipItem (self, ItMw_2H_Sword_Heavy_03);<br> * CreateInvItem (self, ItMwPickaxe);<br> * CreateInvItem (self, ItFoLoaf);<br> * CreateInvItem (self, ItFoBeer);<br> * CreateInvItem (self, ItLsTorch);<br><br> * daily_routine = Rtn_Start_3131;<br>};<br> * func void Rtn_Start_3131 ()<br>{<br> *TA_Guard(09,00,24,00,"my0");<br> *TA_Guard(24,00,09,00,"my0");<br>};<br><br>4. В файле \Gothic\_work\data\scripts\content\story\Startup.d после строчки "Wld_InsertNpc * * * * * *(Grd_217_Torwache,"OC1");//Sьdtor" прописал свою строчку:<br>Wld_InsertNpc * * * * * * * * * * *(NONE_3131_Tiv,"my0");<br><br>5. Запустил Spacer, далее World -> Reparse Script и укзал путь к \Gothic\_work\data\scripts\content\Gothic.src Ошибок Spacer не выдавал.<br><br>6. При помощи GothicVDFS запаковал world.zen в worlds.mod в папку \Gothic\data\ После этого удалил в этой же папке *файл WORLDS.VDF *и поменял расширение у файла worlds.mod на worlds.vdf<br><br>7. Запускаю GOTHIC.EXE -> New Game -> бегу к воротам СЛ - моего NPC там нет. Вот так.<br><br>P.S.<br>1. Командой insert NONE_3131_Tiv получилось вставить этого NPC.<br>2. Непонятным для меня осталось следующее:<br>Mdl_SetVisual * * * (self,"HUMANS.MDS");<br>Mdl_ApplyOverlayMds * *(self,"Humans_Tired.mds");<br>B_Scale (self);<br>self.aivar[AIV_IMPORTANT] = TRUE;<br><br>Внимание вопрос: :)<br>Что же не так? Почему мой NPC не появляется?<br>И в каком файле можно посмотреть Все различные занятия для неписи?
2Vahaber: В строковых названиях вейпойнтов нужно различать регистр. Попробуй написать везде "MY0".
2Vahaber: И в каком файле можно посмотреть Все различные занятия для неписи?<br>Задай в поиске по папке _work "ТА.d"
francisc
07.02.2005, 16:35
Попробуй его вставить при помоши марвина.Если не появится,то значит его нет в датнике.Если появится,то игра почему то не замечает твой вуапоинт,почему я не знаю,тк сам в этом не разобрался.
2Vahaber: Внимание вопрос: <br>Что же не так? Почему мой NPC не появляется?<br>Весьма часто НПС не встает пока не создашь для него миссию и не пропишешь ее как надо.
Так-с, наконец-то получилось. Обо всем по-порядку.<br><br>2WSA:<br>В строковых названиях вейпойнтов нужно различать регистр. Попробуй написать везде "MY0".<br><hr class="hr_agfc"><br>Поменял в файлах NONE_3131_TIV.d и Startup.d "my0" на "MY0" и все заработало!!! Стоит NPC там где надо. Спасибо тебе.<br><br>2Mitrich:<br>Задай в поиске по папке _work "ТА.d"<br><hr class="hr_agfc"><br>Я так и предполагал, что это он, решил переспросить. Спасибо.<br><br>Весьма часто НПС не встает пока не создашь для него миссию и не пропишешь ее как надо.<br><hr class="hr_agfc"><br>И все-таки появился. ;)<br><br>2francisc:<br>Попробуй его вставить при помоши марвина.<br><hr class="hr_agfc"><br>Я это уже попробовал. В предыдущем моем посте*- Командой insert NONE_3131_Tiv получилось вставить этого NPC. ;)<br>И тебе тоже спасибо.<br><br>Вопрос, который остался в силе: за что отвечают вот эти строчки?<br>Mdl_SetVisual * *(self,"HUMANS.MDS");<br>Mdl_ApplyOverlayMds * (self,"Humans_Tired.mds");<br>B_Scale (self);<br>self.aivar[AIV_IMPORTANT] = TRUE;
Господа скриптологи, помогите разобраться:<br>Вот строка из musicInst.d *<br><br>INSTANCE KHO_Day_Std *(C_MUSICTHEME_STANDARD) { file= "kh_daystd.sgt"; };<br><br>Я понял так: при нахождении в Хоринисе(без драки) воспроизводится файл kh_daystd.sgt.<br>Т.е.,если заменить этот файл на самодельный kh_daystd.sgt, он должен воспроизводится в игре.<br>И все...Или есть еще какие-нибудь условия?<br> *<br><br>
2Vahaber:<br>Вопрос, который остался в силе: за что отвечают вот эти строчки?<br>Mdl_SetVisual(self,"HUMANS.MDS");<br>Mdl_ApplyOverlayMds(self,"Humans_Tired.mds");<br><br>Эти две функции и другие описаны в "Уроках скриптологии"<br>void Mdl_SetVisual(c_npc self,string fileMds); - установить для npc self файл изображения с именем fileMds (формат MDS).<br>void Mdl_ApplyOverlayMds(c_npc n0,string s1); - запустить файл анимации s1 с расширением mds для npc n0.<br><br>Остальное относится только к Готике 1.<br>B_Scale(self);<br>Задает масштаб изображения НПС, чем сильнее, тем объемнее он выглядит.<br><br>self.aivar[AIV_IMPORTANT] = TRUE;<br>НПС имеет важную информацию для разговора.<br><br>2ZXZX:<br>INSTANCE KHO_Day_Std *(C_MUSICTHEME_STANDARD) { file= "kh_daystd.sgt"; };<br>Я понял так: при нахождении в Хоринисе(без драки) воспроизводится файл kh_daystd.sgt.<br>Т.е.,если заменить этот файл на самодельный kh_daystd.sgt, он должен воспроизводится в игре.<br>И все...Или есть еще какие-нибудь условия?<br>Да, все, других условий нет (файл только должен быть нужного формата ;D ).
francisc
07.02.2005, 23:20
Mdl_SetVisual (self,"HUMANS.MDS");<br>Mdl_ApplyOverlayMds (self,"Humans_Tired.mds");<br>Так перый отвечает скорее всего за анимацию ,из названия видно,что это человек.<br>Так во второй стоочке это то как будет ходить нпс.Сушествуют такие типы Tired,Militia,Mage,Arrogance,Relaxed.<br><br>
2Vam:<br>Спасибо.<br>файл только должен быть нужного формата *<br>Работаем...http://smilies.ru-board.com/sm/1054.gif
basilio58
08.02.2005, 03:33
<br>2ZXZX: <br>Да какое уж тут "сорри", спасибо, что вмешиваешься. :) <br><br><br>Тут не много крутых перцев из мира аудио/видеозахвата, поэтому будет крайне удачно, если ты поделишься своим опытом в более доступной и развернутой форме. Наложить звук потом можно, но в том то и вся прелесть, чтобы использовать не только видео, но и звук, создаваемый движком. Для этого, как я понимаю, было бы идеальным вариантом снимать не только картинку с экрана (зачем нам вообще плеер?), но и звук с выхода. А уж как потом все это вместе сводить, AdobePremier сам разберется. :)<br><br><br>Звук (любой звук, который воспроизводит зв карта) можно захватить Sound Forge. Там есть такой режим записи, когда основное окно проги скрывается, и пишутся все звуки, воспроизводимые картой. Только надо входы-выходы настроить правильно.
Может кто-нибудь подсказать, существует ли где-нибудь описание имен вайпоинтов по Готике2 + аддон?<br>Например, что за точка "NW_MONASTERY_PLACE_04"?<br>Очень нужно для "Уроков скриптологии". :)<br>
2Vam: Может кто-нибудь подсказать, существует ли где-нибудь описание имен вайпоинтов по Готике2 + аддон?<br>Насколько я понимаю, отдельного описания нет. Я пользуюсь списком Output/Input. Открываешь Спейсер, open zen>NewWorld (или любой другой нужный), в списке Output/Input, проранджированном (к счатью) по алфвиту, ищешь, пролистывая вниз, нужную тебе точку и щелкаешь на нее дважды мышкой. В окне Спейсера тебе покажут ее положение, а в свитке Objekts можно посмотреть что она из себя представляет.<br><br>P.S. Да, ответить то забыл. :) NW_MONASTERY_PLACE_04 это вейпойнт, находящийся прямо перед входом в храм монастыря, где трое главных начальников магов огня высседают. Судя по свойствам, ничего военного, но лучше посмотри сам.
--fitil--
09.02.2005, 18:37
Друзья обьясните чайнику как заменить скрипт Npc в Г2а?<br>Зделал вроде в программе NPC скриптер. а вот как его туды засовать... незнаю, в каком ф находятся эти самые скрипты?<br>Кто может помочь. пожайлуста помогите!!!<br> <br>
2Vam: <br>Может кто-нибудь подсказать, существует ли где-нибудь описание имен вайпоинтов по Готике2 + аддон?<br>Насколько я знаю, нет ::)
francisc
09.02.2005, 19:32
2--fitil--: <br>А что именно не понятно?Опиши ситуацию.
--fitil--
09.02.2005, 20:01
Мне непонятно куда вставлять скрипт Npc и где находятся эти скрипты?<br><br>Подскажите как мне редактировать скрипты Npc...<br><br>Мне нужно знать путь к файлу в котором находятся эти самые скрипты и какое у этого файла расширение, и чем его можно открыть? Ведь рас Npс Скриптер придумали значит можно эти скрипты вставлять в игру...<br><br>Программа Npc скриптер сохраняет скрипт в файл с расширением *D, ну открываю я этот скрипт программой Gothic File Editor например и вижу этот скрипт, теперь я бы хотел открыть файл со скриптами в игре и заменить своим созданным в программе Npc скриптер скрипт.<br><br>Или не такто всё просто???<br><br>Поясните чайнику Суть дела! <br><br>вож какая нить инфа подробная про это есть?<br>то поделитесь плиз!!!!
--fitil--
09.02.2005, 20:48
Господа, где взять прогу для раскомпиляции файла Gothic.dat ?<br>и наоборот<br>и если существует Help какой нить...
2--fitil--: <br>Скрипты лежат в папке игры _work/data/scripts/content<br>Представляют они из себя кучу файлов с расширением *.d, скрипты всех НПС находятся в папке _work/data/scripts/content/story/NPC<br>Но сами скрипты игрой не используются - используется полученный из них компиляцией в Спейсере файл GOTHIC.DAT (он лежит в папке _work/data/scripts/_compiled<br>То есть тебе нужно добавить скрипт твоего НПС в папку /story/NPC, а затем скомпилировать скрипты в Спейсере ::)
2--fitil--: <br>Господа, где взять прогу для раскомпиляции файла Gothic.dat ?<br>http://killer-xxx.nm.ru<br>Самая первая прога ::)
--fitil--
09.02.2005, 21:43
<br>2--fitil--: <br>http://killer-xxx.nm.ru<br>Самая первая прога ::)<br>Ссылка которую вы даёте неработает.<br>не моглибы дать прямую на какую нить программу для раскомпиляции *dat файла?
2--fitil--: <br>Декомпилятор существует всего один, его автор - камрад Vam ::)<br>А ссылка не работает, потому что nm.ru сейчас в дауне...<br>Вот ссылка на не самую свежую версию декомпилятора: http://gothic3.allgothic.ru/filezzz/GothicToolsV1_6.rar
--fitil--
09.02.2005, 22:11
<br>2--fitil--: <br>Декомпилятор существует всего один, его автор - камрад Vam ::)<br>А ссылка не работает, потому что nm.ru сейчас в дауне...<br>Вот ссылка на не самую свежую версию декомпилятора: http://gothic3.allgothic.ru/filezzz/GothicToolsV1_6.rar<br>Вот спасибки!!!
--fitil--
09.02.2005, 22:17
<br>2--fitil--: <br>Декомпилятор существует всего один, его автор - камрад Vam ::)<br>А ссылка не работает, потому что nm.ru сейчас в дауне...<br>Вот ссылка на не самую свежую версию декомпилятора: http://gothic3.allgothic.ru/filezzz/GothicToolsV1_6.rar<br>Вот на сайте http://diccuric2.narod.ru/MAIN.html есть графическая оболочка. а нескачивается чёто...<br>Извините за назойливость, наверно я вам надоел, но мнебы узнать как им пользоваться этим GothicToolsV1_6 ???
francisc
09.02.2005, 22:21
Как сказал 2TycoooN: <br>в _work/data/scripts/content/story/NPC надо создать скрипт нпс.<br>В файле Startup.d не забудь его прописать что бы он появился в игре.
2--fitil--:<br>Извините за назойливость, наверно я вам надоел, но мнебы узнать как им пользоваться этим GothicToolsV1_6 ???<br>Сначала за всеми ответами по декомпилятору сюда (http://forums.gothic.ag/showthread.php?&s=25&t=10952<br>41429) (там же можно найти и последнюю версию, лучше юзать только её), а если что-то будет глючить, то ко мне. *;)
Pindleskin
10.02.2005, 00:37
А вы можете мне помочь в создании скрипта. Как сделать скрипт чтобы я автоматически присоеденился к лагерю Наёмников (я уже вор(наверное это неважно(Ли не берёт(А стражники квест дали(Я убил матку ползунов))))). Напишите скрипт пожалуйста.
--fitil--
10.02.2005, 01:01
<br>2--fitil--:<br>Сначала за всеми ответами по декомпилятору сюда (http://forums.gothic.ag/showthread.php?&s=25&t=10952<br>41429) (там же можно найти и последнюю версию, лучше юзать только её), а если что-то будет глючить, то ко мне. *;)<br>v1.6 я тока Декомпилировал датник из Г1, а мне надо из Г2а, уж очень надо!!!<br>Да и вот последней версии я там к сожалению не нашёл. :'(Киньте плиз ссылочку на последнюю версию GothicTools Уж ООООООООООчень надо!!! :)
--fitil--
10.02.2005, 05:42
Уф разобрался наконец то!<br>Скачал последнюю версию GothicToolsV1_8<br>Декомпилировал и компилировал, всё получилось!<br>Прога просто рулез!!!<br>Спасибо Vam !
2Pindleskin: <br>Ты о какой Готике вообще? В первой разве можно было стать вором? ::)
Dagot_Ur
10.02.2005, 10:32
2TycoooN: Ты о какой Готике вообще? Разве во второй была матка ползунов? :)
--fitil--
10.02.2005, 18:27
Господа, помогите исправить ошибку!!!<br><br>[F] 00:18 Fatal:-1 U: PAR: STORY\DIALOGE\DIA_SLD_810_DAR.D: Unknown identifier : TRUESELF.AIVAR ( line 245 ) .... <zParser.cpp,#599><br><br><br>Вот...<br><br>func int DIA_Dar_Kameradenschwein_Condition()<br>{<br> if(Dar_LostAgainstCipher == TRUE)<br> {<br> TRUEself.aivar[AIV_LastFightComment] == FALSE;<br> };<br>};
2--fitil--:<br>Ответ ты уже получил, зачем писать в разные темы одно и тоже. Безобразие! ;D
--fitil--
10.02.2005, 20:50
<br>2--fitil--:<br>Ответ ты уже получил, зачем писать в разные темы одно и тоже. Безобразие! *;D<br>Прошу меня извинить я новичёк, но быстро учусь!!! ::)
--fitil--
11.02.2005, 18:58
Господа, ответте мне пожайлуста на такой вопрос:<br>Когда я декомпилирую Gothic.dat ,изменяю атрибуты имя и всё такое у Npc потом компилирую обратно,<br>вставляю в игру т.е заменяю оригинальный датник, запускаю игру, но Npc остаётся таким как и был прежде. как будто готика читает скрипты из другово файла. Подчёркиваю я изменяю скрипт, а не добавляю! Это про Г2а. А в первой готике всё получается!<br><br>Помогите разобраться с проблемой!!!
2--fitil--: <br>Каким образом запускаешь? Через GothicStarter? У тебя MDK установлен? ::)
--fitil--
11.02.2005, 19:56
Да установлен. но какую роль он здесь играет?
francisc
11.02.2005, 20:14
У тебя после VDF= в файле gothicgame ничего не написанно?<br>Если написанно,то удали.<br>
--fitil--
11.02.2005, 20:24
Ага... а откуда тогда игра оригинальный скрипт читает если я датник заменил с изменённым скриптом??? <br><br>Прям "полтергейст" какой то!!!
2--fitil--:<br> Ага... а откуда тогда игра оригинальный скрипт читает если я датник заменил с изменённым скриптом??? <br><br>Прям "полтергейст" какой то!!! <br>До полтергейста тут далеко, Готика2 + аддон, если ей чего-то не нравится в дат файлах запускает систему воостановления оригинальных файлов из архива, то есть виртуального диска, с которого она была установлена. Я делал так, запускал аддон без всякого МДК, после загрузки игры сразу выходил, менял датник и оушник, и запускал снова. Загрузка проходила быстро, без воостановления, и все работало. ;)
2--fitil--: <br>Ага... а откуда тогда игра оригинальный скрипт читает если я датник заменил с изменённым скриптом??? <br><br>Прям "полтергейст" какой то!!!<br>Возможно, из GothicGame.mod ::)<br>Удали его из папки data/modvdf
--fitil--
11.02.2005, 23:13
<br>Господа, ответте мне пожайлуста на такой вопрос:<br>Когда я декомпилирую Gothic.dat ,изменяю атрибуты имя и всё такое у Npc потом компилирую обратно,<br>вставляю в игру т.е заменяю оригинальный датник, запускаю игру, но Npc остаётся таким как и был прежде. как будто готика читает скрипты из другово файла. Подчёркиваю я изменяю скрипт, а не добавляю! Это про Г2а. А в первой готике всё получается!<br>Вощем я понял если запустить через GothicStarter то игра запустится с оригинальными скриптами! А если просто запустить, то запустится с изменёнными. Но я же датник то заменил и старого то там как бы и нет... откуда ж тогда при запуске через GothicStarter оригинальные скрипты читаются??? Странно както получается...<br>мож и в правду из GothicGame.mod хотя мне кажется что нет! <br><br><br>Помогите разобраться с проблемой!!!<br>
francisc
11.02.2005, 23:21
Вощем я понял если запустить через GothicStarter то игра запустится с оригинальными скриптами! А если просто запустить, то запустится с изменёнными.<br>Я лично не вижу связи.<br>а gothicgame.mod лучше удалить,а то ты никогда не сможешь <br>увидеть свои скрипты в действии.
Господа, постараюсь помочь<br><br>Порядок загрузки через GothicStarter такой:<br>самым высоким приоритетом при загрузке обладают файлы mod, т.е. те, которые прописаны в строке vdf=, причем у последнего файла в этой строке приоритет наивысший. <br>Потом подключаются виртуальные диски в папке data, а только потом файлы _work.<br>Но для того, чтобы изменить порядок загрузки, ничего удалять не нужно, просто убираем мод-пакет, т.е. оставляем vdf= *. Откройте mod пакет GothicGame и вы увидите, что там кроме откомпилированных скриптов ничего нету - то же + исходники при установке G2MDK будет лежать в _work.<br>Виртуальный диск отключается добавлением к нему типа *.disabled, но в этом случае его содержимое должно лежать в папке _work.<br>Файлы видео и скриптов не хранятся на виртуальных дисках.<br>Для экзешника отправным является файл GothicGame.ini, поэтому теоретически изменять скрипты Готики можно вообще без G2MDK, если использовать компилятор/декомпилятор Vamа.<br>Но через GothicStarter удобнее компилировать скрипты, можно выбирать ini-файл, с которого пойдет загрузка. Например в ini-файле MyLevel.ini можно написать World=MyLevel.zen и игра начнется в другой локации. А можно это написать и в GothicGame.ini. Не спорю.<br>
--fitil--
12.02.2005, 13:15
WSA, да, да так оно иесть! Спасибо за помощ!
Люди Помогите ктонить Дайте Рабочую ссылку На MDK
2Lokcy:<br>Люди Помогите ктонить Дайте Рабочую ссылку На MDK<br>MDK можно скачать здес<br>ь (http://www.worldofgothic.de/dl/index.php?go=downloads&ordner_id=17).
<br>2Lokcy:<br>MDK можно скачать здес<br>ь (http://www.worldofgothic.de/dl/index.php?go=downloads&ordner_id=17).<br><br>У Меня Почему то не качает.
2All:<br>Такой вот вопрос.<br>1. Создал я к примеру новый скрипт ГГ и какой-то скрипт NPC. NPC прописал в Startup.d<br>2. В Spacer открыл карту Старого Лагеря, создал StarPoint для ГГ, а также WayPoint для NPC. Карту сохранил с именем MY.zen<br>3. Также в Sparec`e сделал World -> Reparse Script<br>4. При помощи GothicVDFS сделал МОД-файл MY.mod, в который "зашил" GOTHIC.DAT, OUINFO.INF и MY.zen Пути к файлам указаны правильно в моде(т.е. к примеру _work\data\scripts\_compiled для GOTHIC.DAT и OUINFO.INF; _work\data\worlds для MY.zen).<br>5. Создал файл My.ini в котором, кроме всего прочего, также*указал world=My.zen<br>6. Запускаю свой мод - ГГ появляется там где надо, NPC не появляется. При помощи команды insert - появляется и идет к нужному WP.<br><br>Вопрос: почему не появляется NPC.<br><br>P.S. Если Старый Лагерь сохранить не с именем MY.zen, а с именем world.zen(тем самым заменив оригинальный world.zen), а также в My.ini прописать world=world.zen и проделать те же операции, то NPC появляется сразу.
2Vahaber:<br>Вопрос: почему не появляется NPC.<br><br>P.S. Если Старый Лагерь сохранить не с именем MY.zen, а с именем world.zen(тем самым заменив оригинальный world.zen), а также в My.ini прописать world=world.zen и проделать те же операции, то NPC появляется сразу.<br><br>Необходимо в startup.d прописать функции инициализации твоего мира: STARTUP_ххх и INIT_ххх, где ххх - имя вновь созданного мира. Эти функции автоматически вызываются ядром системы.<br><br>
2Vam: Так оно и есть<br>2Vahaber: Вот образец:<br>func void startup_my ()<br>{<br>Wld_InsertNpc (npcInstance, "WAYPOINT");<br>};<br>func void init_my ()<br>{<br>B_InitMonsterAttitudes ();<br>B_InitGuildAttitudes();<br>B_InitNpcGlobals ();<br>};
OverGothic
18.02.2005, 17:18
Народ хелп =)!<br>есть в скриптах доспехов и шлемов такая строчка<br>wear = WEAR_TORSO;(доспех)-ASC модель<br>wear = WEAR_HEAD;(Шлем)-3ds модель<br>А как насчет шитов?<br>wear = WEAR_??????;(Щит)-3ds модель(вроде)<br><br>И еще <br>mainflag = ITEM_KAT_ARMOR; что это обозначает? =)
2OverGothic:<br>mainflag = ITEM_KAT_ARMOR; что это обозначает?<br>Это флаг категории предмета (броня), указывает в каком месте инвентаря будет лежать этот предмет.<br><br>wear = WEAR_TORSO;(доспех)-ASC модель<br>wear = WEAR_HEAD;(Шлем)-3ds модель<br>А как насчет шитов?<br>wear = WEAR_??????;(Щит)-3ds модель(вроде)<br><br>Это флаги части тела, на которой носится (одевается) предмет, модели конкретно к флагам отношения не имеют, щитов в Готике вообще нет, да и шлемов (отдельных) тоже нет, хотя флаг остался. :)<br>
2OverGothic: mainflag = ITEM_KAT_ARMOR; что это обозначает? Это означает, что предмет будет выводиься в инвентаре в категорию ARMOR, а сама категория управляется из ini-файла путем перестановки последовательности. По умолчанию первым в инвентаре показывается оружие, потом доспех и т.д.<br><br>А как насчет шитов? Никак. Пираньи от них отказались, как и от шлемов.
OverGothic
18.02.2005, 17:38
Шлемы отдельно, сделать реально. А вот на счет щитов, пока не знаю...<br>wear = WEAR_leftarm - должно быть по идее ,но не идет =)<br>Для щитов вроде и анимация не нужна(я не имею ввиду анимацию блокировак и тд), щит просто крепиться к кости Bip01 L Forearm и весит там, также как и оружие(Bip01 R Hand). Следовательно щит должен быть статичен(3ds).
Всем, кто читает тему Уроки скриптологии:<br><br>Просьба после каждого моего поста в теме "Уроки скриптологии" оставлять какой-нибудь один свой пост, в противном случае я буду вынужден прекратить уроки по причине невозможности редактирования каждого нового своего поста. *:( *>:( *:(
vBulletin® v3.8.7, Copyright ©2000-2024, vBulletin Solutions, Inc. Перевод: zCarot