Уважаемые гости и новички, приветствуем Вас на нашем форуме
Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».
Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
Удачи!
Друзья, доброго времени суток!
Стартовал новый литературный конкурс от "Ордена Хранителей" - "Пираты Миртанского моря". Каждый может принять в нём участие и снискать славу и уважение, а в случае занятия призового места ещё и получить награду. Дерзайте
Дорогие друзья, год подходит к концу, и пришло время подвести его итоги и наградить достойных
Не ленитесь, голосуйте в этой теме за тех форумчан, которые по вашему мнению больше всех проявили себя в этом году
По желанию, аргументировать свой выбор можете в теме обсуждения голосования.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Тут варианты есть разные. Можно задействовать восприятия стражника. В восприятии ГГ (PERC_ASSESSPLAYER) можно контролировать нахождение ГГ в окрестностях находящегося около сундука вейпоинта. Можно проверить режим его передвижения (крадётся или нет). Можно проверить, находится ли он в состоянии взаимодействия с сундуком. Также можно использовать восприятие взаимодействия мобом (PERC_ASSESSUSEMOB), проверяя, что ГГ вскрывает именно сундук и именно ТОТ сундук.
Вопрос в том, чтобы вся эта кухня не слишком осложнила жизнь игроку. Иначе, добывание данного "халявного" доспеха станет нерациональным, а это не верный путь, как мне кажется.
P. S. Кстати, а насколько верен пункт, что стражника нельзя усыпить. На мой взгляд, интереснее было бы, чтобы возможность усыпления существовала. Ну, может, это было бы сложнее, чем усыпление обычного непися.
Наоборот, его можно усыпить, об этом прямо говорит Ларес, когда ГГ спрашивает, как достать доспех получше. Я хочу усложнить нелегальный способ проникновения на склад, связанный с ползанием по стене или крышам домов.
Понятно. Помню, что усыпить в Г2 можно не всех. Попутал немного.
Кстати, тот факт, что стражник увидит ГГ, стоящего около сундуков или открывающего их, ничего не изменит. Алгоритм диалогов охранника прохода основан только на контроле расстояния до чекпоинта. Формально, территория там ничейная, сундуки, скорее всего, тоже ничейные. С точки зрения ИИ предъявить нечего.
Используй восприятия. Можно не перегружать стандартные функции дополнительными проверками. Создай свои функции для обработки восприятий конкретно этого непися.
Похоже, что мне придётся отказаться от усложнения задачи по нелегальному проникновению ГГ на склад за лавкой Маттео. Исследование свойств находящихся там сундуков показало, что они безымянные, ничейные и территория склада не принадлежит ни одной из городских гильдий. Поэтому когда я подводил стражника вплотную к этим сундукам и на его глазах обчищал их, тот не обращал на действия ГГ никакого внимания.
// я стражник, а ГГ лезет в сундуки Матеео
if ((slf.guild == GIL_MIL) && (Npc_GetDistToWP(oth,"NW_CITY_MERCHANT_PATH_03") < 500)) //проверить расстояние
{
return TRUE;
};
С поворотами может быть труднее. Через Икарус я делала поворот на произвольный угол, но как это реализовать стандартными средствами, не знаю. Предлагаю, чтобы он иногда заходил внутрь дворика, через правку ZS_Guard_Passage_Loop:
Код:
func int ZS_Guard_Passage_Loop()
{
// если я уже 3сек. стою
if(Npc_GetStateTime(self) >= 3)
{
// и ГГ не подошел слишком близко
if(Npc_GetDistToNpc(self,hero) > PERC_DIST_DIALOG)
{
//если я стражник, охраняющий сундуки Маттео
if (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Mil_325_Miliz))
{
var random; random = Hlp_Random(5);
if (random == 0) //в 20% случаев
{
AI_GoToWP(self,"NW_CITY_MERCHANT_PATH_03"); //WP внутри дворика
AI_PlayAni(self,"T_HGUARD_LOOKAROUND");
}
else //возвращаемся назад
{
AI_GotoWP(self,self.wp);
AI_AlignToWP(self);
};
}
else //обычное поведение
{
// подравняться
AI_AlignToWP(self);
};
// и сбросить таймер
Npc_SetStateTime(self,0);
};
};
return LOOP_CONTINUE;
};
Возможно, это создаст лазейку для обмана алогоритма диалогов по непропуску ГГ в дворик. Если на стадии перехода к чекпоинту стражник не будет видеть ГГ и не сможет, по этой причине, начать диалог, то возможен следующий трюк.
ГГ подходит к стражнику на расстояние, чуть большее, чем дистанция начала диалога. Когда стражник пойдёт внутрь дворика, ГГ бежит за ним, стараясь подбежать как можно ближе к чекпоинту. Повернувшись, стражник заметит ГГ, сделает ему предупреждение и пойдёт на свой пост. После этого ГГ останется преодолеть оставшееся расстояние и приступить к очистке сундуков.
Впрочем, если стражник научится замечать взаимодействие с сундуками, то это не так страшно, хотя и нелогично.
Кстати, а насколько логично, что стражник не пропускает к сундукам мага Огня?
Возможно, это создаст лазейку для обмана алогоритма диалогов по непропуску ГГ в дворик. Если на стадии перехода к чекпоинту стражник не будет видеть ГГ и не сможет, по этой причине, начать диалог, то возможен следующий трюк.
Какой смысл делать это, если у этого стражника просто не включается восприятие "Грабят!"? Тогда пусть он стоит на месте и хотя бы периодически осматривается.
Вот для исправления и нужно использовать особую реакцию при обработке восприятий. Например, особая реакция на ГГ может отработать следующий сценарий. ГГ прыгает вниз со стены, Стражник "слышит" звук и оборачивается. Если он видит ГГ во внутреннем пространстве дворика, то называет его вором и начинает атаковать. Если ГГ стражник не видит, тот стоит за углом здания, но "звук был достаточно сильным", поскольку ГГ экипирован тяжёлым доспехом или оружие звякнуло при падении, то стражник пойдёт внутрь дворика и обнаружит там ГГ. Если ГГ экипирован в лёгкий доспех и не имеет экипированного оружия, то стражник просто обернётся, посмотрит внутрь дворика (на стоящего за углом ГГ), подождёт немного и отвернётся, подумав, что ему показалось. После этого ГГ может, передвигаясь в режиме подкрадывания, обчистить сундуки. Выбираться назад нужно также через забор. Действия ГГ контролируюся с помощью контроля состояния тела ГГ (BS-константы), контроля видимости между ним и стражником и контроля расстояния между ГГ и чекпоинтом.
Кстати, насколько оправданы названия "Тяжёлая одежда горожанина", "Средняя одежда горожанина"... ? Может, подсократить названия до "Одежда горожанина"? Тем более, что параметры защиты у них одинаковые.
Кстати, насколько оправданы названия "Тяжёлая одежда горожанина", "Средняя одежда горожанина"... ? Может, подсократить названия до "Одежда горожанина"? Тем более, что параметры защиты у них одинаковые.
Оправданы, потому что в неофициальном обновлении одежда будет иметь разные уровни защиты от режущего/дробящего/стрел, например,
горожане и горожанки: лёгкая 10/10/10, средняя 15/15/10, тяжёлая 15/15/15;
крестьяне и крестьянки: лёгкая 15/15/10, средняя 15/15/15.
Интересно, а почему украденная со склада одежда горожан собрана в пачки (5 штук лёгкая и 3 - средняя)? Ведь когда вставляешь её кодом, тогда в инвентаре она не собирается в пачки.
Ну, тут больше речь не о защите, а о том, что подобные словосочетания режут слух. Когда говорят о доспехе, то дополнительная характеристика "лёгкий" или "тяжёлый" более-менее привычна. Но когда говорят об одежде... Лёгкая одежда у меня, например, ассоциируется с майкой и шортами а тяжёлая одежда... просто режет слух нелепостью словосочетания. В данном случае использование типовой классификации не прокатывает, нужно использовать другой подход. Например: "Одежда ремесленника", Одежда богатого горожанина" и т. д.
Интересно, а почему украденная со склада одежда горожан собрана в пачки (5 штук лёгкая и 3 - средняя)? Ведь когда вставляешь её кодом, тогда в инвентаре она не собирается в пачки.
Возможно, дело в том, что движок модифицирует предметы флагами. Например, если взять предмет, лежащий на земле изначально, и потом выбросить его назад на землю, то это будет не совсем тот же предмет. У предмета изменится значение флага. По этому признаку, кстати, в скриптах различается, украл ли ГГ что-то или поднял свою вещь, выброшенную из инвентаря.
Заметил недоработку в скриптах Г2НВ. Зомби причислены к числу монстров, поедающих свои жертвы (функция C_WantToEat). Однако нужной анимации они не имеют. Думаю, правильно будет, исключить зомби из списка охотников/падальщиков.
Есть в скриптах такая функция B_MM_DeSynchronize. Предназначена она для внесения рандомной задержки в действия монстров, чтобы их синхронные действия не слишком бросались в глаза.
Код:
func void B_MM_DeSynchronize()
{
var int msec;
msec = Hlp_Random(1000);
AI_Waitms(self,msec);
};
Однако, из-за кривой работы рандомизера движка, результат работы функции минимален. Близкие по времени выборки дают близкие результаты, поэтому для конкретной группы монстров задержки будут почти одинаковыми, и рассинхронизации, по-факту, не произойдёт. Предлагаю альтернативный вариант функции.
Заметил недоработку в скриптах Г2НВ. Зомби причислены к числу монстров, поедающих свои жертвы (функция C_WantToEat). Однако нужной анимации они не имеют. Думаю, правильно будет, исключить зомби из списка охотников/падальщиков.
Есть в скриптах такая функция B_MM_DeSynchronize. Предназначена она для внесения рандомной задержки в действия монстров, чтобы их синхронные действия не слишком бросались в глаза.
Однако, из-за кривой работы рандомизера движка, результат работы функции минимален. Близкие по времени выборки дают близкие результаты, поэтому для конкретной группы монстров задержки будут почти одинаковыми, и рассинхронизации, по-факту, не произойдёт. Предлагаю альтернативный вариант функции.
Ну, тут больше речь не о защите, а о том, что подобные словосочетания режут слух. Когда говорят о доспехе, то дополнительная характеристика "лёгкий" или "тяжёлый" более-менее привычна. Но когда говорят об одежде... Лёгкая одежда у меня, например, ассоциируется с майкой и шортами а тяжёлая одежда... просто режет слух нелепостью словосочетания. В данном случае использование типовой классификации не прокатывает, нужно использовать другой подход. Например: "Одежда ремесленника", Одежда богатого горожанина" и т. д.
Из предложенного тобой подходит только одежда богатого горожанина, потому что её обычно носят жители верхнего квартала. Мне удалось подобрать более или менее удачные названия для одежды крестьян:
, но с одеждой горожан пока ничего не выходит, например, не годится одежда ремесленника, т.к. её носят NPC, не имеющие никакого отношения к ремесленникам. Поэтому пока я оставил так:
Заметил, что среди C-функций нигде не используются всегда возвращающие значение TRUE C_BanditAttackBandit(var C_Npc slf,var C_Npc oth) и C_BanditHelpsStoryBandit(var C_Npc slf,var C_Npc oth,var C_Npc vct). Даже в G2 MDK насчёт них нет никакой дополнительной информации.
А вот такой вариант?:
Роба крестьянина(крестьянки),крепкая роба крестьянина(крестьянки)
Одежда горожанина(горожанки),цивильная одежда горожанина(горожанки),дорогая одежда горожанина(горожанки)
- для крестьянской одежды уже есть удачные названия, например, ITAR_Bau_L Лобарт называет рабочей крестьянской одеждой;
- режет слух выпадающее из сеттинга игры слово "цивильная".
Обнаружил ошибку, благодаря которой смена распорядков у монстров происходит не совсем правильно. Так, например, у падальщика должны сменять друг друга распорядки сна (ZS_MM_Rtn_Sleep) и кормёжки (ZS_MM_Rtn_EatGround). Но из-за ошибки в Г2 происходит переход на промежуточный распорядок ZS_MM_Rtn_Rest, и только после этого на нужный распорядок. В Г1 вообще происходит ступор в дефолтном распорядке. Причина в том, что для выхода из одного распорядка и вхождения в другой распорядок используется контроль промежутков времени, а в момент смены счётчик времени находится "между" этими промежутками, один промежуток закончился, а другой ещё не наступил.
Для исправления ошибки достаточно задержать выход из текущего распорядка на минуту.
Это касается только выхода из распорядка сна ZS_MM_Rtn_Sleep() или же проблема существует и для остальных распорядков монстров? Потому что в них используется такое же условие перехода из текущего распорядка в новый:
Смысл в следующем. Если ГГ в образе волка убьёт настоящего волка на виду у ещё одного волка, то волк-свидетель, как будто бы, признает в ГГ вожака и будет следовать за ним, как призванный волк. Проблема в том, что когда ГГ в образе волка попытается "завербовать" себе ещё одного спутника таким же образом, другой, не завербованный ещё волк-свидетель начинает атаковать своего собрата, а затем и ГГ. На мой взгляд, здесь имеет место ошибка. Причина, видимо, находится в функции B_MM_AssessWarn, где не предусмотрен такой вариант событий.
И, кстати, кабаны тоже по гильдии волки, поэтому возможны совсем уж глупые ситуации.
На данном сайте используются файлы cookie, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших файлов cookie.