Уважаемые гости и новички, приветствуем Вас на нашем форуме
Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».
Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
Удачи!
Друзья, доброго времени суток! Спешите принять участие в конкурсе квент 2025!
Ждем именно вас!
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Вот тебе небольшой примерчик в качестве подсказки:
func void rename_Gorn()
{
//если ГГ познакомился с текущим персонажем, узнав его имя в одной из реплик диалога, то
if (Npc_KnowsInfo(hero, DIA_Gorn_First) == TRUE)
{
//присваиваем НПС оригинальное имя
self.name[0] =...
Ну здесь же нет ни одной AI-команды.:confused:
Всё равно не правильно работает.
Я выяснил, что RefuseTalk устанавливается в "1" после "загрузки игры" не зависимо от того, что мы пишем команду на ожидание "Npc_SetRefuseTalk(hero,1);" внутри функции "B_SetCurrentLevel()".
Скорей всего отказ от...
Я пробовал сделать так. В итоге вместо перехода пишет: "Загрузка", а вместо загрузки, наоборот, пишет: "Переход". Сейчас ещё раз попробую.
Не, не правильно работает. После загрузки игры RefuseTalk висит в "1"(в единице), поэтому и не даёт пройти условию:
else if((CurrentLevel == NewLevel) &&...
Так и есть. Но вот хотелось бы уточнить, в каком именно месте Вы хотели вызвать счётчик отказа от диалога?
Т.е. функцию Npc_SetRefuseTalk(hero,1);
Кстати, тоже интересный подход, потому что из той же оперы, что и "hero.name". :)
Я решил подвести небольшой итог, собрав всё воедино, но с...
НастасьСанна, вот смотрите. У вас при переходе на другую локацию выполнятся оба условия в теле функции "B_SetCurrentLevel" - это и условие загрузки и условие перехода. Если хотите, - можете проверить.
PS: Спасибо программистам Пираний за их "сюрпризы".*thumbs up*
НастасьСанна, я конечно понимаю, что написано "в торопях", но всё же, уточните пожалуйста.
У Вас не написано где присваиваются значения переменной "CurrentLevel". Остаётся принять её во внимание из оригинальных скриптов.
К тому же названия функций разнятся: "B_SetWordl" и "B_SetCurrentLevel"...
Ну хорошо, а вы можете привести код для нескольких локаций? Ну, чтобы не быть голословным.
Для примера можно взять: WORLD1, WORLD2, WORLD3, WORLD4, WORLD5.
Стартовый - WORLD1. Переходить можно с любого на любой.
Потому что на словах одно, а на деле может быть сооовсем другое.;)
За ранее благодарен!
Это хорошо.:)
Ну допустим. Дело то это не меняет.
Например, ГГ перешёл из OLDWORLD.ZEN на NEWWORLD.ZEN. После перехода, сразу же сохранился. Загрузился. ElderGamer, Ваши предположения?
Переменная как переменная. Вижу только что в функции "B_ValidateOther()" ей присваиваются значения TRUE и FALSE в определённых случаях, а в остальных функциях идёт только использование этой переменной. Dimus, Вы мне конкретный пример приведите, раз уверены, что этот aivar[AIV_LOADGAME] работает...
Забавно-то забавно, но как вы определите такой момент. Срабатывает INIT-функция. Игрок находится в месте появления на определённой локации.
Какими будут ваши предположения?
а) игрок только что перешёл на новую локацию.
б) он просто сохранился в месте появления на этой новой локации и вот сейчас...
У меня тогда срабатывало в двух случаях:
1) После загрузки из уже загруженной локации.
2) После "начала новой игры", также, из уже загруженной локации.
Ну вообщем-то это не самый надёжный способ, как показывает практика.
Я попробую рассказать про другой - более интересный и надёжный способ. Он...
alexel, попробуй написать условия внутри тела инстанции "PC_Hero". Она ведь тоже загружается при каждой загрузке ваших сохранений. Можешь протестировать её ещё после перехода на новый ZEN-уровень.
Попробуй сначала c простейшей функцией вывода текста на экран, т.е. примерно так:
Для точного расчёта времени.
А что, если точка отсчёта начнётся в 23:50 условно-первого дня? НПС скажет, приходи не раньше, чем через день. А условно-второй день наступит через 10 минут.
Если в этом случае использовать функцию Wld_GetDay(), то день для НПС пролетит за 10 минут.
А если перевести...
Тогда в условие, кроме проверки на время нужно добавить ещё и проверку на полученную информацию.
А функция Npc_KnowsInfo(c_npc self, int infoInstance) как раз и поможет в этом деле.
В ней infoInstance - это тот блок информации, где задаётся точка начала отсчёта для данного случая, миссии или...
Товарищ Dimmel, не придирайтесь к словам kraw. Ведь сами прекрасно знаете, что в дальнейшем расчёт идёт относительно значения переменной, а не относительно конкретного числа. И не важно сколько там будет - 0, 1, 2 или 102.
Думаю, не получится. Можно сделать "гляделку в прицел", а выбор целей осуществлять через подсветку врага или с помощью вывода партикль-частиц над головой цели. Но согласитесь, это же смешно выглядит.:)
На данном сайте используются файлы cookie, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших файлов cookie.