• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток! Спешите принять участие в оценке работ на конкурсе "Таинственные миры" 2024!
    Ждем именно вас!

    Ссылка на конкурсную тему - тык
    Ссылка на тему с работами участников- тык

Не стесняюсь спросить....

Торрез

Участник форума
Регистрация
2 Авг 2009
Сообщения
102
Благодарности
0
Баллы
165
Хочу заменить Ин экстремо в г1 на другую группу как это сделать, что бы нормально реализовывалось на 2-х версиях игры?
 

HeDeDe

Участник форума
Регистрация
17 Авг 2009
Сообщения
203
Благодарности
79
Баллы
180
Торрез, что ты имеешь в виду под «заменить на другую группу»? И что значит «на двух версиях игры»?
 

Торрез

Участник форума
Регистрация
2 Авг 2009
Сообщения
102
Благодарности
0
Баллы
165
Торрез, что ты имеешь в виду под «заменить на другую группу»?
В готике 1 выступает ин экстремо, на группу Сколот с заменой лиц одежды и музыки, а лучше вставить туда новых персонажей.
И что значит «на двух версиях игры»?
Если в версии снежков просто вставить туда(на сцену) людей, то на этой версии все будет нормально, а вот (наверно я не уверен) на версии русоубита там уже будет 2 группы ин экстремо и та которую я вставлю
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Торрез,
в Соурсере ищешь инстанции музыкантов, смотришь какие текстуры и одежда используются, меняешь, если музыка в wav - ищешь звуковой файл (или в звуковых по аналогии названия, или в скриптах, напирмер по InExtremo) и меняешь на свое.
там уже будет 2 группы ин экстремо и та которую я вставлю
Зачем тебе "вставлять" если можно поменять старые текстуры и музыку на новые?
ЗЫ. С инструментами посложнее будет - или использовать те, что есть, или делать новые анимашки и модели. Хотя лютню можно итак заменить и на электрогитару. :D
 

HeDeDe

Участник форума
Регистрация
17 Авг 2009
Сообщения
203
Благодарности
79
Баллы
180
Если в версии снежков просто вставить туда(на сцену) людей, то на этой версии все будет нормально, а вот (наверно я не уверен) на версии русоубита там уже будет 2 группы ин экстремо и та которую я вставлю
Вообще-то скрипты заменяются сразу целиком, так что конфликта быть не может.
 

Торрез

Участник форума
Регистрация
2 Авг 2009
Сообщения
102
Благодарности
0
Баллы
165
ЗЫ. С инструментами посложнее будет -
Инструменты одинаковы)
Соурс один и тот же подойдет, если не ошибаюсь
 

multivoin

Участник форума
Регистрация
5 Сен 2009
Сообщения
302
Благодарности
9
Баллы
185
Хочу заменить Ин экстремо в г1 на другую группу как это сделать, что бы нормально реализовывалось на 2-х версиях игры?

реализуется нормально на всех версиях, просто в их там из одной версии тупо из скриптов вырезали! Готик соурсер подойдет для обоих Готик, желательно последней версии! И желательно скрипты ищи без ошибок, а то их там много в лицензии! :)
 

HeDeDe

Участник форума
Регистрация
17 Авг 2009
Сообщения
203
Благодарности
79
Баллы
180
Кстати говоря, если новых диалогов нет, можно заменить только gothic.dat и не трогать ou.bin (не будет конфликта озвучки и субтитров, по крайней мере, не должно быть).
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.803
Баллы
995
HeDeDe, Нельзя. Датник и Оушник компилятся в одном распараллеленом процессе.
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.562
Благодарности
4.154
Баллы
915
Сейчас я работаю над дальнейшим развитием патча, исправляющего различные ошибки Г2 НВ версии 2.6. Очень хочется исправить в нём следующие ошибки ИИ:
1. Чтобы было нельзя проскочить с вытащенным оружием или заклинанием мимо NPC, охраняющих вход в запретные для ГГ зоны. Т.е. если ГГ сделает это до получения разрешения пройти, то немедленно подвергнется атаке стражи.
2. Чтобы NPC считали дракой безответное избиение замороженного оппонента. Сейчас они реагируют только на каст заморозки и отправку в нокаут избитого перса.
3. Чтобы передвижение прыжками или боком не считалось бесшумным - т.е. чтобы неписи просыпались, если ГГ вздумает попрыгать или побегать боком в их доме. Это сделает необходимым изучение навыка подкрадывания (сейчас он бесполезен).
4. Чтобы бандиты в Яркендаре тоже реагировали на угрозу со стороны ГГ оружием или магией. Сейчас они не обращают на это внимание до тех пор, пока не получат повреждение.
Поскольку я не силён в программировании ИИ, прошу помощи модостроителей.
 

HeDeDe

Участник форума
Регистрация
17 Авг 2009
Сообщения
203
Благодарности
79
Баллы
180
HeDeDe, Нельзя. Датник и Оушник компилятся в одном распараллеленом процессе.
Можно. Только что проверил, заменив датник от акелловской версии на датник от немецкой.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.332
Баллы
315
Сейчас я работаю над дальнейшим развитием патча, исправляющего различные ошибки Г2 НВ версии 2.6. Очень хочется исправить в нём следующие ошибки ИИ:
1. Чтобы было нельзя проскочить с вытащенным оружием или заклинанием мимо NPC, охраняющих вход в запретные для ГГ зоны. Т.е. если ГГ сделает это до получения разрешения пройти, то немедленно подвергнется атаке стражи.
2. Чтобы NPC считали дракой безответное избиение замороженного оппонента. Сейчас они реагируют только на каст заморозки и отправку в нокаут избитого перса.
3. Чтобы передвижение прыжками или боком не считалось бесшумным - т.е. чтобы неписи просыпались, если ГГ вздумает попрыгать или побегать боком в их доме. Это сделает необходимым изучение навыка подкрадывания (сейчас он бесполезен).
4. Чтобы бандиты в Яркендаре тоже реагировали на угрозу со стороны ГГ оружием или магией. Сейчас они не обращают на это внимание до тех пор, пока не получат повреждение.
Поскольку я не силён в программировании ИИ, прошу помощи модостроителей.
А теперь смотри что реализуемо, а что нет из твоего списка:
1. Чтобы было нельзя проскочить с вытащенным оружием или заклинанием мимо NPC, охраняющих вход в запретные для ГГ зоны. Т.е. если ГГ сделает это до получения разрешения пройти, то немедленно подвергнется атаке стражи.
Реализуемо просто выставить ВСЕМ стражникам восприятие на то что у гг расчехлено оружие/или подготовлена магия.
2. Чтобы NPC считали дракой безответное избиение замороженного оппонента. Сейчас они реагируют только на каст заморозки и отправку в нокаут избитого перса.
Чтото не до конца понял? в смысле не считают дракой? объясни подробнее.
3. Чтобы передвижение прыжками или боком не считалось бесшумным - т.е. чтобы неписи просыпались, если ГГ вздумает попрыгать или побегать боком в их доме. Это сделает необходимым изучение навыка подкрадывания (сейчас он бесполезен).
А вот это по моему не реализуемо, тк обрабатывается движком игры -> что можно забыть об этом, хотя теоретически и возможно... но скорее всего нужно ставить тригер на каждом доме который будет "вычеслять гг"
4. Чтобы бандиты в Яркендаре тоже реагировали на угрозу со стороны ГГ оружием или магией. Сейчас они не обращают на это внимание до тех пор, пока не получат повреждение.
Аналогично первому.

зы напиши в аську мне если чтота нада, то помогу.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.803
Баллы
995
HeDeDe,
Можно. Только что проверил, заменив датник от акелловской версии на датник от немецкой.
Ок, только потом не удивляйся непонятным багам в игре. :D
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.562
Благодарности
4.154
Баллы
915
@ Saturas:
Реализуемо просто выставить ВСЕМ стражникам восприятие на то что у гг расчехлено оружие/или подготовлена магия.
Пример в спойлере не помешает.

Чтото не до конца понял? в смысле не считают дракой? объясни подробнее.
Хорошо, вот пример. ГГ - наём или ОнД. Задача - отобрать ключ у пала, охраняющего склад в замке бывшего СЛ. Если просто начать бить этого пала, то ему на помощь придут другие палы и отлупят ГГ. Вдобавок придётся платить Гаронду крупный штраф за драку. Поэтому действуем так: кастуем заморозку на жертву (палы требут прекратить колдовать), подбегаем к замороженному палу, быстро вырубаем его и забираем ключ. Окружающие палы не вмешиваются в избиение и комментируют только отправку в нокаут собрата по оружию. Через некоторое время побитый пал встаёт ("Ох, моя голова..."), но при этом не обижается на избиение. Остальные палы тоже не называют ГГ грязным вором или бандитом, следовательно, не надо платить Гаронду штраф за устроенный мордобой.:D

А вот это по моему не реализуемо, тк обрабатывается движком игры -> что можно забыть об этом, хотя теоретически и возможно... но скорее всего нужно ставить тригер на каждом доме который будет "вычеслять гг"
Вроде бы в моде "Возвращение" версии 1.1 реализована эта фича. Правда, не знаю как именно.*???*
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.236
Благодарности
2.575
Баллы
455
Dimus,
Вроде бы в моде "Возвращение" версии 1.1 реализована эта фича. Правда, не знаю как именно.
Посмотри там функцию ZS_Sleep и повешенные на нее восприятия.
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.562
Благодарности
4.154
Баллы
915
Dimus,
Посмотри там функцию ZS_Sleep и повешенные на нее восприятия.

AI\Human\TA_Human\ZS_Sleep.d:
func void ZS_GotoBed()
{
Perception_Set_Normal();
B_ResetAll(self);
AI_SetWalkMode(self,NPC_WALK);
if(Hlp_StrCmp(Npc_GetNearestWP(self),self.wp) == FALSE)
{
AI_GotoWP(self,self.wp);
};
AI_StartState(self,ZS_Sleep,0,"");
};

func void B_AssessSleepTalk()
{
if(C_BodyStateContains(self,BS_LIE))
{
AI_UseMob(self,"BEDHIGH",-1);
};
AI_StartState(self,ZS_ObservePlayer,0,"");
};

func void ZS_Sleep()
{
Npc_PercEnable(self,PERC_ASSESSQUIETSOUND,B_AssessQuietSound);
Npc_PercEnable(self,PERC_ASSESSDAMAGE,B_AssessDamage);
Npc_PercEnable(self,PERC_ASSESSTALK,B_AssessSleepTalk);
AI_SetWalkMode(self,NPC_WALK);
};

func int ZS_Sleep_Loop()
{
if(!C_BodyStateContains(self,BS_LIE))
{
if(Wld_IsMobAvailable(self,"BEDHIGH"))
{
AI_UseMob(self,"BEDHIGH",1);
}
else if((Player_GetOutOfMyBedComment == FALSE) && C_BodyStateContains(hero,BS_LIE) && (Npc_GetDistToNpc(self,hero) <= 500))
{
B_TurnToNpc(self,hero);
B_Say(self,other,"$GETOUTOFMYBED");
Player_GetOutOfMyBedComment = TRUE;
};
};
return LOOP_CONTINUE;
};

func void ZS_Sleep_End()
{
if(!Npc_IsInPlayersRoom(self))
{
B_Say(self,self,"$AWAKE");
};
AI_UseMob(self,"BEDHIGH",-1);
};

AI\Human\TA_Human\ZS_Sleep_Deep.d:
func void ZS_GotoBed_Deep()
{
Perception_Set_Normal();
B_ResetAll(self);
AI_SetWalkMode(self,NPC_WALK);
if(Hlp_StrCmp(Npc_GetNearestWP(self),self.wp) == FALSE)
{
AI_GotoWP(self,self.wp);
};
AI_StartState(self,ZS_Sleep_Deep,0,"");
};

func void ZS_Sleep_Deep()
{
Npc_PercEnable(self,PERC_ASSESSDAMAGE,B_AssessDamage);
Npc_PercEnable(self,PERC_ASSESSTALK,B_AssessSleepTalk);
AI_SetWalkMode(self,NPC_WALK);
};

func int ZS_Sleep_Deep_Loop()
{
if(!C_BodyStateContains(self,BS_LIE))
{
if(Wld_IsMobAvailable(self,"BEDHIGH"))
{
AI_UseMob(self,"BEDHIGH",1);
}
else if((Player_GetOutOfMyBedComment == FALSE) && C_BodyStateContains(hero,BS_LIE) && (Npc_GetDistToNpc(self,hero) <= 500))
{
B_TurnToNpc(self,hero);
B_Say(self,other,"$GETOUTOFMYBED");
Player_GetOutOfMyBedComment = TRUE;
};
};
return LOOP_CONTINUE;
};

func void ZS_Sleep_Deep_End()
{
if(!Npc_IsInPlayersRoom(self))
{
B_Say(self,self,"$AWAKE");
};
AI_UseMob(self,"BEDHIGH",-1);
};
Похоже, что в обычном сне неписи реагируют на тихий звук, нанесённое повреждение и разговор. В глубоком сне нет реакции на тихий звук. И что делать дальше?:-\
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
435
Благодарности
261
Баллы
230
1. Чтобы было нельзя проскочить с вытащенным оружием или заклинанием мимо NPC, охраняющих вход в запретные для ГГ зоны. Т.е. если ГГ сделает это до получения разрешения пройти, то немедленно подвергнется атаке стражи.
Пример - 2 паладина около входа в верхний квартал.
Первый кажись реагирует только на оружие ГГ(возможно и магию тоже), а второй реагирует на то, как далеко зашёл ГГ в верхний квартал(скорей всего он в цикле, в котором выполняет стойку и отслеживает расстояние от ГГ до вейпоинта, который недалеко от входа в верхний квартал.

2. Чтобы NPC считали дракой безответное избиение замороженного оппонента. Сейчас они реагируют только на каст заморозки и отправку в нокаут избитого перса.

Вот тут нужна более детальная переработка скриптов.
Я заметил не только отсутствие реакции на заморозку, но и то, что если поговорить с замороженным, то пропадает вся эта замороженность.

1) В этом случае нужно в начало цикла ZS_MagicFreeze поставить отказ от диалога с замороженным нпс.

func int ZS_MagicFreeze()
{
...
Npc_SetRefuseTalk (self, SPL_TIME_FREEZE)//отказ от диалога на 19 сек.
...
};

А в цикле ZS_MagicFreeze_Loop() нужно придумать что-то такое универсальное, вот только что?
Тут замороженный все свои 19 секунд пребывает. Мб реакцию на повреждение поставить или ещё как-то придумать отслеживание на избиение. Вот тут надо включать мозги...Только самое главное не намудрить лишнего и не запутаться самому.

3. Чтобы передвижение прыжками или боком не считалось бесшумным - т.е. чтобы неписи просыпались, если ГГ вздумает попрыгать или побегать боком в их доме. Это сделает необходимым изучение навыка подкрадывания (сейчас он бесполезен).

Есть реакция B_AssessEnterRoom()
Можно тут переработать её под себя. Некоторые моменты можно эмулировать просто, а также поставить ограничения в функции на то, на что не надо реагировать.

4. Чтобы бандиты в Яркендаре тоже реагировали на угрозу со стороны ГГ оружием или магией. Сейчас они не обращают на это внимание до тех пор, пока не получат повреждение.

Вот тут опять надо сравнивать НПС из этого Яркендара и НПС из города.
 

foreteller

Участник форума
Регистрация
30 Янв 2009
Сообщения
59
Благодарности
1
Баллы
155
Re: Технические вопросы

Возможно ли написать какой-нибудь скриптик, чтобы когда я нажимал на достать оружие, он после этого от этой же кнопки задействовал бы бег вперед ? то есть получается на одну кнопку повесить 2 последовательных действия ?

Diego1987Пост перенес сюда, т.к. в теме технических вопросов по Возвращению ему не место.
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
435
Благодарности
261
Баллы
230
Здесь наверное проблема не в том, можно или нет, а в том, кто за этим всем делом будет следить. Удобнее всего использовать триггер.

Вот мини подсказка:
Создаёшь на своей локации такой объект с такими свойствами:

9.jpg


firedelaysec - это интервал, через который будет происходить обращение к тригеру.
firedelaysec поставь равное 0.1 и это будет означать 10 интеграций(обращений) в секунду.

Это код для вставки в скрипты:
Код:
func void SCRFUNC_TIMER()
{
	var int MwReady;//1 или 0. Флаг для того, чтобы анимация проигрывалась 1 раз за 1 подготовку оружия.
	
	if (Npc_HasReadiedMeleeWeapon(hero) == 1)//если у ГГ в руке оружие ближнего радиуса поражения
	{
		if (MwReady == 0)//и если флаг сброшен
		{
			MwReady = 1;//ставим флаг для предотвращения зацикливания анимации
			AI_PlayAni(hero,"T_1HRUN_2_1HRUNL");//ГГ проигрывает анимацию
			AI_StandUp(hero);
		};
	}
	else
	{
		MwReady = 0;//сбрасываем флаг, чтобы проигрывание анимаций можно было использовать вновь
	};
	
	Wld_SendTrigger("TIMER_01");
};

Да, чуть не забыл...
Нужно вставить в скриптах в StartUp.d строку вызова триггера, а то кто его будет запускать то? Вот примерно так:
Код:
func void Startup_[B]OldCamp[/B]()
{
	SCRFUNC_TIMER();//вызов триггера первый раз
};
Где OldCamp - это название локации, на которой расположен действующий триггер.

Посту ниже:
У меня таймер работает даже после загрузки сохранения:). Хотя и одна локация, но всё равно на каждой локации надо ставить этот таймер. Соответственно сколько бы ни было локаций, вызов таймера в StartUp так и так осуществится. Конечно нужно будет прописывать в каждом StartUp_[название локации], чтобы данная функция работала везде.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.332
Баллы
315
Да, чуть не забыл...
Нужно вставить в скриптах в StartUp.d строку вызова триггера, а то кто его будет запускать то? Вот примерно так:
Код:
func void Startup_[B]OldCamp[/B]()
{
	SCRFUNC_TIMER();//вызов триггера первый раз
};
Где OldCamp - это название локации, на которой расположен действующий триггер.
Ошыбочко у тебя=) Не в стартапе нада прописывать(тк он вызывается ТОЛЬКО ОДИН РАЗ во время первой загрузки локации)
Нужно вписывать в Init_OldCamp(Init вызывается каждую загрузку игры в отличии от Startup.
 
Сверху Снизу