|
|
02.08.2008, 20:05
|
#2083
|
|
|
|
|
A.G.F.C.
Регистрация: 04.09.2006
Сообщений: 20
|
|
|
|
|
|
Re: М: Скриптинг в Готике
2DDEN-ON:Ппц... ты что курил??? *:o Кто тебе сказал что нужно удалять файлы виртуальной системы? Тебе сказали что нужно удалить только файл(ы) с расширением *.DMP в корне Готики. Если их удаление не помогло и изменений новых скриптов нет, то это значит что.: - не правильно написаны скрипты. - не правильно скомпилированы файлы скриптов. - удален(ы) какие либы файлы из игры(
по примеру того что ты сотворил с GothicVDFs
|
). - не правильно размещены файлыскриптов в дерикториях игры. Теперь тебе нужно будет удалить игру полностью и переустановить все заново. Также советую порыть инет на предмет русских туториалов, которых там вагоны и изучить нормально теорию модостроения для начала, и только после этого браться за опыты с игрой. Ps. Читай туториал Vam'a, + техническую документацию по работе с ГотикСоурсером(
). При удалении файла(ов)*.DMP, при запуске игры ею всегда создается новый файл *.DMP. Который включает в себя все новые изменения которые были внесены в игру/мод.
|
|
|
15.08.2008, 09:20
|
#2085
|
|
Re: М: Скриптинг в Готике
G2Mod:
Мне соусер 3.14 говорит "Ошибка: Неопределенная функция NPS_GETHEIGHTTONPC".
|
Ну и правильно говорит, т.к. такой функции движка нет, если только это не твоя самописная функция. Должно быть - NP С_GETHEIGHTTONPC, будь в дальнейшем внимателен, и не спрашивай про каждую опечатку...
|
|
|
08.10.2008, 14:31
|
#2089
|
|
Re: М: Скриптинг в Готике
Готика 1, персонаж - Чани, по расписанию находится в состоянии ZS_Babe_SitAround. Написал диалог с important = 1.
Диалог отрабатывает так, как если бы он был с important = 0. Т. е. начинается только по инициативе ГГ. Однако, если поймать Чани на переходе из одного состояния в другое (т. е. при смене функции расписания), она диалог инициирует.
Пробовал по-разному "подкрутить" ZS_Babe_SitAround. Пробовал добавлять *B_SetBabeDefaultPerceptions(), пробовал прописывать Perc_SetRange в самой функции. Пробовал завершать loop-функцию по return LOOP_END; Убирал из функции AI_UseMob.
Ничего не помогает.
Сработало только явное указание B_AssessTalk в теле функции, но, понятно, независимо от каких-либо условий (даже от фактического расстояния и расстояния восприятия) и со страшными побочными эфектами (зацикливание вхождения в диалог). Попробовал "обернуть" B_AssessTalk в if с проверкой расстояния между персонажами - диалога нет.
Куда копать и что подкрутить?
|
|
|
08.10.2008, 16:56
|
#2091
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от alex ryz link=board=gothic&t=1105030050&goto=4493039 date=10/08/08, в 15:47:35
func void B_SetBabeDefaultPerceptions() { * * *Npc_PercEnable(self,PERC_ASSESSTALK,B_Babe_Refuse Talk); * * *Npc_PercEnable(self,PERC_ASSESSDAMAGE,ZS_Babe_Fle e); * * *Npc_PercEnable(self,PERC_DRAWWEAPON,ZS_Babe_Flee) ; };
|
Верхняя строка тебе мешает. Забей условие, что это выполняется только если NPC не Чани (пример смотри в "диккурике"). Ну, или тупо включи для неё "мужские восприятия"- InitPerceptions().
|
Сейчас эта функция в следующем виде (изменена другим разработчиком):
func void B_SetBabeDefaultPerceptions() { Npc_PercEnable(self,PERC_ASSESSPLAYER,B_AssessSC) ; Npc_PercEnable(self,PERC_ASSESSTALK,B_AssessTalk) ; Npc_PercEnable(self,PERC_ASSESSDAMAGE,ZS_ReactToDa mage); Npc_PercEnable(self,PERC_DRAWWEAPON,B_AssessFight er); //Npc_PercEnable(self,PERC_ASSESSDAMAGE,ZS_Babe_Flee ); //Npc_PercEnable(self,PERC_DRAWWEAPON,ZS_Babe_Flee); };
|
Но не помогает. Пробовал ставить InitPerceptions() - не помогает. Чани начинает диалог по своей инициативе только при смене состояния. Иногда (крайне редко) вдруг у нее срабатывает и не по времени смены, но закономерности я не понял.
|
|
|
08.10.2008, 18:26
|
#2094
|
|
Re: М: Скриптинг в Готике
2kraw: Скорее всего, проблема в прикрученном "мужицком" B_AssessTalk. Что у него внутри...
func void B_AssessTalk() { var C_Npc her; var C_Npc rock; PrintDebugNpc(PD_ZS_FRAME,"B_AssessTalk"); if(Npc_IsInState(self,ZS_Smoke)) { Npc_ClearAIQueue(self); AI_StandupQuick(self); AI_StartState(self,ZS_Talk,0,""); } else if(C_BodyStateContains(self,BS_MOBINTERACT)) { return; }; her = Hlp_GetNpc(PC_Hero); rock = Hlp_GetNpc(PC_Rockefeller); if((Hlp_GetInstanceID(her) != Hlp_GetInstanceID(hero)) && (Hlp_GetInstanceID(rock) != Hlp_GetInstanceID(hero))) { B_Say(self,other,"$NOTNOW"); } else { Npc_SetPercTime(self,3); self.aivar[AIV_INVINCIBLE] = FALSE; hero.aivar[AIV_INVINCIBLE] = FALSE; hero.aivar[AIV_IMPORTANT] = FALSE; Npc_ClearAIQueue(self); Npc_SetPercTime(self,1); if(!C_BodyStateContains(self,BS_SIT) || !Npc_CanSeeNpc(self,hero)) { AI_StartState(self,ZS_Talk,1,""); } else { AI_StartState(self,ZS_Talk,0,""); }; }; };
|
if(C_BodyStateContains(self,BS_MOBINTERACT)) - вот тут явно надо обмозговать не вызывает ли работа с опахалом этого самого состояния? Ели да, то надо сделать исключение для женской гильдии GIL_BAB, чтобы не вносить изменения для мужского скрипта, либо написать свою функцию и поставть ее в женские перцепшены.
|
|
|
08.10.2008, 18:34
|
#2095
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от 360 link=board=gothic&t=1105030050&goto=4493266 date=10/08/08, в 17:26:58
2kraw: Скорее всего, проблема в прикрученном "мужицком" B_AssessTalk. Что у него внутри... if(C_BodyStateContains(self,BS_MOBINTERACT)) - вот тут явно надо обмозговать не вызывает ли работа с опахалом этого самого состояния? Ели да, то надо сделать исключение для женской гильдии GIL_BAB, чтобы не вносить изменения для мужского скрипта, либо написать свою функцию и поставть ее в женские перцепшены.
|
Это вряд ли: 1) Все равно должно пойти по одной из этих веток, либо в промежуточными состояниями, либо без них. 2) Я вставлял в ZS функцию явный вызов B_AssessTalk. Сразу начинался диалог. Т. е. B_AssessTalk для Чани работает.
|
|
|
17.10.2008, 09:15
|
#2099
|
|
|
|
|
A.G.F.C.
Регистрация: 04.09.2006
Сообщений: 20
|
|
|
|
|
|
Re: М: Скриптинг в Готике
2Magmatic: Иногда полезно сверять свои скрипты с оригинальными, которые идут вместе с GMDK2, при условии что ты их установил. *;) В оригинале часть этой функции записана так:
Код:
* * IF Npc_IsDead(TowerBandit1)&& Npc_IsDead(TowerBandit2)&&Npc_IsDead(TowerBandit3) * * { * * * * * return TRUE; * * * * * TowerBanditsDead = TRUE; * * } * * else * * { * * * * * return FALSE; * * };
Нужно заремовить (
поставить два символа // перед ней
|
), или удалить строку:
Код:
TowerBanditsDead = TRUE;
|
|
|
17.10.2008, 12:29
|
#2100
|
|
Re: М: Скриптинг в Готике
2Magmatic: У вас там не только TowerBanditsDead = TRUE; из блока условия вывалился, как заметил камрад MaGoth, но и лишняя ; вылезла за скобкой перед else. Это компилятору тоже не понравится. *;D
Пункт второй. Поделитесь инфой как присвоить предмету свойство руны.
|
Хм, ЕМНИП достаточно задать ему mainflag = ITEM_KAT_RUNE; и привязать нужный спелл на свойство spell.
|
|
|
17.10.2008, 15:53
|
#2101
|
|
Re: М: Скриптинг в Готике
2MaGoth:
Иногда полезно сверять свои скрипты с оригинальными
|
я сравнил и разницы не нашел. Это уже не первый раз. С Боспером такой же прикол был, в скрипте про шкуры троллей. За помощь спасибо, надеюсь ошибок больше не появится, не хочу людей по пустякам беспокоить. *:pivo: 2360:
достаточно задать ему mainflag = ITEM_KAT_RUNE; и привязать нужный спелл на свойство spell.
|
Благодарю, это мне очень пригодится. *:)
|
|
|
05.11.2008, 19:27
|
#2106
|
|
Re: М: Скриптинг в Готике
2360: Спасибо что сказал, правда я про Г2, а там не AIV_WASDEFEATEDBYSC (не знает компилятор этой переменной), а AIV_DefeatedByPlayer, но вроде работает.
Еще вопрос! 1) Как всетаки сделать цикл посредством скриптов (напр. постепенное убывание HITPOINTS) в Г2 а то Готик Сурсер 3.14 ругается - говорит "неизвестный идентификатор" при словах DO и WHILE, а метки вообще отказывается воспринимать:( 2) допустим, есть группа НПС, они уже вставлены в мир через Startup.d и стоят недалеко друг от друга. Что надо сделать, чтобы все вместе они нападали на ГГ, если он атакует одного из них (гильдии у них вроде одинаковые, а реагируют враждебно разве что на убийство). Проще, когда по ходу диалога НПС должен атаковать ГГ, что надо в диалоге написать, чтобы атаковал не один НПС (с которым болтает ГГ), а вся группа сразу?
|
|
|
06.11.2008, 12:24
|
#2107
|
|
Re: М: Скриптинг в Готике
2Владай:
правда я про Г2, а там не AIV_WASDEFEATEDBYSC (не знает компилятор этой переменной), а AIV_DefeatedByPlayer, но вроде работает.
|
Угу, я на базе Г1 говорил, видимо, поменяли имя константы ;D
Как всетаки сделать цикл посредством скриптов
|
ИМХО один из вариантов - сажать "невидимого жука" и в его функцциях расписания ZS_имяфунк_Loop() делать нужный цикл.
что надо в диалоге написать, чтобы атаковал не один НПС (с которым болтает ГГ), а вся группа сразу?
|
Если в базовом виде оно выглядит так:
B_Attack(self,other,AR_NONE,1);
|
То для группы где-то так:
B_Attack(self,other,AR_NONE,1); //говорящий B_Attack(comrade_1,other,AR_NONE,1); //напарник 1 B_Attack(comrade_2,other,AR_NONE,1); //напарник 2 B_Attack(comrade_n,other,AR_NONE,1); //напарник n
|
Где comrade_1,comrade_2,comrade_n переменные типа C_NPC ссылающиеся на инстанцию напарников бандитов. Т.е. в общем виде будет где-то так...
var C_Npc comrade_1; var C_Npc comrade_2; var C_Npc comrade_n; comrade_1=Hlp_GetNpc(Bdt_2_Bandit_L); comrade_2=Hlp_GetNpc(Bdt_3_Bandit_L); comrade_n=Hlp_GetNpc(Bdt_4_Bandit_L); B_Attack(self,other,AR_NONE,1); //говорящий B_Attack(comrade_1,other,AR_NONE,1); //напарник 1 B_Attack(comrade_2,other,AR_NONE,1); //напарник 2 B_Attack(comrade_n,other,AR_NONE,1); //напарник n
|
Как вариант, можно попробовать тупо вызвать функцию, указав инстанцию, -
B_Attack(self,other,AR_NONE,1); //говорящий B_Attack(Bdt_2_Bandit_L,other,AR_NONE,1); //напарник 1 B_Attack(Bdt_3_Bandit_L,other,AR_NONE,1); //напарник 2 B_Attack(Bdt_4_Bandit_L,other,AR_NONE,1); //напарник n
|
но лучше уж не экспериментировать с несоответствием типов. ;)
|
|
|
07.11.2008, 21:51
|
#2108
|
|
Re: М: Скриптинг в Готике
2360: СПС) Вроде сделал как надо было: var C_Npc comrade1; comrade1=Hlp_GetNpc(none_1000_Arks); B_Attack(self,other,AR_NONE,1); //говорящий B_Attack(comrade1,other,AR_NONE,1); //напарник 1 Да вот Сурсер говорит что SYNTAX ERROR: COMRADE1. Вместо COMRADE1 я написал просто none_1000_Arks (все работает). А все же: если нет никакого диалога, а просто стоят несколько НПС, то по идее, когда ГГ атакует одного остальные не начинают мочить ГГ. Так как же сделать, чтобы НПС атаковали все сразу, если без диалогов? (как например группа снепперов возле Хориниса)
|
|
|
16.11.2008, 01:10
|
#2109
|
|
Re: М: Скриптинг в Готике
Столкнулся с проблемой. Причем когда-то похожую проблему решал, но не могу вспомнить как. Итак - есть диалог.
func void DIA_EBR_109_Syra_f1_Info() { * * * * *AI_SetWalkMode(self,NPC_RUN); * * *AI_GotoNpc(self, other); * * *AI_Output(self,other,"DIA_EBR_109_Syra_f1_1"); //И за воротами тоже Новый лагерь? * * *AI_Output(other,self,"DIA_EBR_109_Syra_f1_2"); //И там тоже он. Это большой лагерь... * * *AI_StopProcessInfos(self); * * * * * *Npc_ExchangeRoutine (self, "follow3"); };
Но вторая фраза ГГ не появляется в субтитрах (понятно, что звуковых файлов нет). Попытки вставить после нее ai_wiat* не помогает. Ставлю после нее фразу Сиры - ее фраза есть, а фразы ГГ по прежнему нет. Менял название DIA_EBR_109_Syra_f1_2 тоже не помогает.
|
|
|
20.11.2008, 05:30
|
#2112
|
|
|
|
|
A.G.F.C.
Регистрация: 04.09.2006
Сообщений: 20
|
|
|
|
|
|
Re: М: Скриптинг в Готике
2kraw:
Еще вопрос: Иногда возникает необходимость (по сюжету) спрятать куда-нибудь на время какого-либо персонажа. Видимо должны для этого существовавть wp, куда ГГ попасть не может. В Готике 1 какие wp для этого используют?
|
На сколько я помню, эти wp всегда звались " TOT". ;)
|
|
|
20.11.2008, 16:33
|
#2114
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от Korripto link=board=gothic&t=1105030050&goto=4591156 date=11/20/08, в 15:22:12
2kraw: В Готике 2а этот вейпойнт называется TOT, а в Готике 1 - off
|
А где в Г1 он расположен (чтобы на него в спейсере взглянуть)?
|
|
|
20.11.2008, 17:08
|
#2115
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от kraw link=board=gothic&t=1105030050&goto=4591179 date=11/20/08, в 15:33:21
|
А где в Г1 он расположен (чтобы на него в спейсере взглянуть)?
|
Не знаю, знаю, что на этот вейпойнт отправляется In Extremo в третьей главе.
|
|
|
20.11.2008, 17:22
|
#2116
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от Korripto link=board=gothic&t=1105030050&goto=4591285 date=11/20/08, в 16:08:43
|
Не знаю, знаю, что на этот вейпойнт отправляется In Extremo в третьей главе.
|
Нашел. Только off называется расписание, а сам wp называется NOWHERE
|
|
|
04.12.2008, 17:31
|
#2118
|
|
Re: М: Скриптинг в Готике
2Magmatic:
Где находятся диалоги драконов с ГГ?
|
Story\B_AssignAmbientInfos\B_AssignDragonTalk_Fire .d Story\B_AssignAmbientInfos\B_AssignDragonTalk_Ice. d Story\B_AssignAmbientInfos\B_AssignDragonTalk_Main .d Story\B_AssignAmbientInfos\B_AssignDragonTalk_Rock .d Story\B_AssignAmbientInfos\B_AssignDragonTalk_Swam p.d 2Magmatic:
И можно ли подобным образом заставить говорить другие существа, допустим гоблина?
|
Да хоть мясного жука, делай по аналогии
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 15:46. Часовой пояс GMT +4.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|