Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Модостроение. Спавн и логика
denis2000Дата: Пн, 10.10.2011, 21:20 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Спавн и логика

Создание объектов на локации и логика поведения этих объектов

Если у вас появились вопросы по созданию динамических объектов в игре (НПС, монстры, аномалии, и т.п.) и настройке их "поведения". Задавайте их в этой теме - умные головы,
модосторители и просто разбирающиеся в программировании люди вам ответят.


Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7

Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML
[ Если у вас не открывается файл CHM(Этот текст скрыт от гостей) ]


[ Где найти лог игры после вылета ]
[ Получение более подробной информации о вылете (ХОВАН) ]



Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы,
статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки.
Помните чем подробнее вопрос, тем точнее ответ.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Вт, 19.11.2013, 00:31 | Сообщение # 691
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый вечер. Хочу вернуться к вопросу о сейфе. Переделал логику сейфа.

[ Логика сейфа ]


Функции подсчета кол-ва имеющихся у ГГ ключей.

[ xr_conditions ]

Удаление ключей из инвентаря.

[ xr_effects ]


Все работает отлично. Данную схему легко можно расширить на любое кол-во ключей.
Но есть небольшой минус. При использовании remove_item были сообщения типа "Потерян ключ 1". Тут их нет.
Можно ли их как-то вернуть?
 
denis2000Дата: Вт, 19.11.2013, 01:27 | Сообщение # 692
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500,
Код
news_manager.relocate_item(db.actor, "out", Имя секции удаляемого предмета)


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Вт, 19.11.2013, 13:26 | Сообщение # 693
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый день. Возник вопрос по этому посту. Я сделал квест для СГМ. Чтобы повысить сложность, сделал Альфе переключение на логику враждебности к ГГ, когда игрок с пленником удалятся от ВНЗ на 100 метров. Замысел был, что Альфа кинется в погоню за игроком. Они кидаются, но как-то вяло. В основном забрасывают гранатами друг друга.
Возникла мысль сделать спецотряд для преследования ГГ. Типовая логика преследователя.

[ Логика ]


Каким образом составить вторую секцию логики и переключить на нее НПС после выдачи инфопорции zat_b38_alfa_plennic_in_zone.
 
FantomICWДата: Вт, 19.11.2013, 17:40 | Сообщение # 694
Лидер «Свободы»
Свобода
Сообщений: 4438
Награды: 44
Репутация: [ 1340 ]

sergej5500, проверки по инфопорциям обычно делаем через on_info. Не забывай, что проверок on_info может быть несколько. В ТЧ максимально 8, в ЗП этот недочет исправили. Можно задать номера, хоть 2, хоть 22:
Код
on_info2 = ...
on_info22 = ...

То есть в секцию [move@logic1] добавляем:
Код
on_info2 = {+zat_b38_alfa_plennic_in_zone} переключение_на_секцию



 
sergej5500Дата: Вт, 19.11.2013, 17:47 | Сообщение # 695
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

FantomICW,
Глеб, спасибо, но это не то. Вопрос, как заставить НПС работать по этому скрипту. К примеру,
записи типа
move_state_when_center = guard
move_state_when_move = walk

означают, что НПС стоит с оружием и смотрит в определенную точку. Как поставить НПС под
управление скрипта, предложенного Дмитрием?


Сообщение отредактировал sergej5500 - Вт, 19.11.2013, 21:41
 
makdmДата: Ср, 20.11.2013, 00:28 | Сообщение # 696
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500, могу предложить следующий вариант.

[ Логика и скрипты(Этот текст скрыт от гостей) ]


Терпение......
И все получится!


Сообщение отредактировал makdm - Ср, 20.11.2013, 00:29
 
sergej5500Дата: Сб, 23.11.2013, 02:01 | Сообщение # 697
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый вечер.
Попробовал извлечь из аддона Гладиатор функцию wpn_has_silencer.
[ Текущий код функции ]


Создал для тестов 2 НПС с логикой.
[ Пример логики ]


У второго логика отличается только координатами. По замыслу, если одного НПС уничтожить из шумного оружия, то второй покраснеет. При попытке завалить тестового НПС из любого оружия получаю разнообразные логи.

[ Лог ]


Вылет связан именно с функцией wpn_has_silencer_active. В чем может быть проблема? Моя функция отличается от функции в Гладиаторе только названием. Индекс clsid в xr_conditions у меня и файле Гладиатора одинаков. Или эту функцию нельзя вызывать из обработчика смерти? Если это так, то можно ли отредактировать функцию так, чтобы она вызывалась из секции [death]? Заранее благодарен за советы.
 
NIVДата: Сб, 23.11.2013, 10:39 | Сообщение # 698
Полевой исследователь
Ученые сталкеры
Сообщений: 167
Награды: 4
Репутация: [ 180 ]

Здравствуйте, возник вопрос: в оригинале ЗП возможно нанять разные сквады (jup_b47_bunker_guard_lost_merc, jup_b47_bunker_guard_freedom, jup_b47_bunker_guard_duty, jup_b47_bunker_guard_stalker_leader) для охраны научного бункера. В логике (jup_b47_bunker_guard.ltx) написано:
Код
suitable = {=target_squad_name(jup_b47_bunker_guard)} true, {=target_squad_name(jup_b47_merc_guard_squad) =check_npc_name(jup_b47_merc_01)} true


Действительно ли =target_squad_name(jup_b47_bunker_guard) выбирает любой сквад, имя которого начинается с jup_b47_bunker_guard? И не надо указывать имя НПС, как это сделано во второй части (=check_npc_name(jup_b47_merc_01)?

Вопрос возник в связи с тем, что сначала мне удавалось заспанить сквад jup_b47_bunker_guard_lost_merc, а после каких-то изменений, не связанных с указанными файлами, возникает безлоговый вылет, похожий на ошибку в скриптах lua. Если же спанить на этом смарте сквад, для которого не прописана эксклюзивная логика, то он спанится нормально. Возникла мысль, что сквад jup_b47_bunker_guard_lost_merc вступает в конфликт с логикой.

Что можете сказать?


Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"
 
makdmДата: Сб, 23.11.2013, 12:25 | Сообщение # 699
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500, вылет связан с тем, что Вы не объявили локальные переменные.
Перед самой функцией они объявляются так
local ammo_in_magazine = 0
local ammo_now = 0
local clsid = 0

Но В Вашем случае, функция не будет работать правильно, т.к. предназначена для работы на постоянном апдейте.
У Вас же она поставлена в секцию [death]. А секция выполняется только один раз при смерти НПС.

Предлагаю Вам другую функцию для проверки на on_death

[ Функция(Этот текст скрыт от гостей) ]

Добавлено (23.11.2013, 12:25)
---------------------------------------------
NIV, функция target_squad_name(jup_b47_bunker_guard) работает так

Функция проверяет целевой смарт сквада . В секции сквада он прописан как target_smart = jup_b41.
А раз проверка идёт из работы смарта jup_b41, то устанавливается значение true и значит сквад может выполнять работу на смарте.

Отвечая на Ваш вопрос, то мало того, чтобы сквад начинался на jup_b47_bunker_guard, второе необходимое условие, чтобы в секции сквада было указано target_smart = jup_b41. И только тогда сквад начнёт выполнять работу на смарте.

А условие check_npc_name распредедяет работу на смарте уже среди членов сквада.


Терпение......
И все получится!


Сообщение отредактировал makdm - Сб, 23.11.2013, 12:00
 
sergej5500Дата: Сб, 23.11.2013, 14:50 | Сообщение # 700
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

makdm,
Предложенная Вами функция

[ Функция ]


после подстановки в xr_conditions дает вылет еще до завершения загрузки сейва.

[ Лог ]


На всякий случай функция в xr_logic, на которую ругается лог:

[ Функция ]


477 строка if not xr_conditions[infop.func] then.
 
makdmДата: Сб, 23.11.2013, 15:02 | Сообщение # 701
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500, синтаксическая ошибка в файле xr_conditions.script

Моя ошибка.

Ошибся, когда набирал функцию, вместо

obj:weapon_is_silencer(}

нужно писать

obj:weapon_is_silencer()

Теперь всё должно работать правильно.


Терпение......
И все получится!


Сообщение отредактировал makdm - Сб, 23.11.2013, 15:07
 
NIVДата: Сб, 23.11.2013, 19:12 | Сообщение # 702
Полевой исследователь
Ученые сталкеры
Сообщений: 167
Награды: 4
Репутация: [ 180 ]

Решил проблему, но всё равно ничего не понимаю...

Создал новый сквад, прописал каждому его члену работу (check_npc_name), получил вылет. Подключая НПС по одному, нашёл, что вылет происходит на работе jup_b47_bunker_guard_04. Это walker, но для него отсутствовал path_look. Распаковал спаун из оригинала, но как ни странно, он отсутствовал и там. Поскольку для волкера path_look не обязателен, закомментировал его. После этого всё заработало.

Вот чего я не пойму - как это раньше работало в оригинале???


Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"

Сообщение отредактировал NIV - Сб, 23.11.2013, 19:12
 
sergej5500Дата: Вс, 24.11.2013, 12:53 | Сообщение # 703
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый день. Возникли вопросы.
1. Будет ли функция враждебности сквадов, пример:
=set_squads_enemies(zat_b7_stalkers_raiders:zat_b7_stalkers_victims_1)
нормально работать, если один из сквадов в оффлайне? Допустим, один сквад на лесопилке, второй на ВНЗ.
2. Сквады взаимно ссорятся этой командой, или один из них будет оставаться нейтрален, пока в него не начнут стрелять?

Просто по квесту с ВНЗ, который я делал, возникли некоторые трудности. Для нормальной работы функции, предложенной denis2000, нужен онлайн-радиус 250-270 метров. При таком радиусе заметно возросла нагрузка на движок. При уменьшении дистанции часть Альфы в бою не участвует. Поэтому, прежде чем начинать работы по переделке квеста под сквады, надо определиться, делать ли один большой сквад на 30 НПС или можно сделать несколько мелких.

Добавлено (24.11.2013, 12:53)
---------------------------------------------
Еще один вопрос. Можно ли схему, описанную тут, применить для сквада НПС?
Есть ли возможность заставить сквад преследовать ГГ?


Сообщение отредактировал sergej5500 - Вс, 24.11.2013, 13:03
 
denis2000Дата: Вс, 24.11.2013, 15:36 | Сообщение # 704
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата sergej5500 ()
Будет ли функция враждебности сквадов ... нормально работать, если один из сквадов в оффлайне?

Нет, она не сможет посорить НПС которые в офлайне.

Цитата sergej5500 ()
Для нормальной работы функции, предложенной denis2000, нужен онлайн-радиус 250-270 метров.

За основу предложенной функции я как раз и взял функцию set_squads_enemies
Там либо get_story_object(***) возвращает nil или :set_relation() не работает для обектов в офлайне.

Цитата sergej5500 ()
Еще один вопрос. Можно ли схему, описанную тут, применить для сквада НПС?

Нет, для сквадов она не применима.
Для реализации скорее всего потребуется существенно переписать скрипт sim_squad_scripted.script


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Вт, 26.11.2013, 10:49 | Сообщение # 705
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Доброй ночи. Интересует такой вопрос. В логике работ смартов имеется такой код.
prior = 100

Будет ли он работать, если его добавить в логику несквадовых НПС из СГМ?

Зачем этот параметр несквадовым НПС? denis2000

Добавлено (26.11.2013, 10:49)
---------------------------------------------

Цитата sergej5500 ()
Зачем этот параметр несквадовым НПС? denis2000


Иногда на базе Рассвета, где все НПС несквадовые после квеста на защиту базы от зверья наблюдал такую картину. Мутанты уничтожены, почти все НПС разошлись по своим местам. Один или 2 остаются на огневом рубеже, оружие на изготовку и кричат "Быть наготове". "Всем осмотреться" и т.д.
 
Поиск: