Модостроение. Спавн и логика
|
|
denis2000 | Дата: Пн, 10.10.2011, 21:20 | Сообщение # 1 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Спавн и логика Создание объектов на локации и логика поведения этих объектов Если у вас появились вопросы по созданию динамических объектов в игре (НПС, монстры, аномалии, и т.п.) и настройке их "поведения". Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7
Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML [cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл: 1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R]) 2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx" 3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо) Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#" Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]
[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти? Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда. Для того чтоб найти LOG необходимо зайти вот сюда:
В Win хр лог находится:
C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs
Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.
В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs
Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка: ... $app_data_root$ = true | false| $fs_root$| users\(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx) ... $logs$ = true| false| $app_data_root$| logs\(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи) ... [/cut][cut=Получение более подробной информации о вылете (ХОВАН)] Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...) Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так: Code function abort(fmt, ...) local reason = string.format(fmt, ...) error_log(reason) end Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией
Первый: Code Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil) Второй: Code Expression : 0 Function : ErrorLog File : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp Line : 49 Description : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic' [/cut]
Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы, статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца", возможно Ваш вопрос уже рассматривался.
Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки. Помните чем подробнее вопрос, тем точнее ответ.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Аракс | Дата: Ср, 18.03.2015, 06:16 | Сообщение # 1156 |
Удаленные
| denis2000, да мне уже не надо. Я решил завязать со сталкером
|
|
|
Эти 0 пользователя(ей) поблагодарили Аракс за это полезное сообщение: |
|
|
mexiccanec | Дата: Чт, 19.03.2015, 10:11 | Сообщение # 1157 |
Гражданский
Пользователи
Сообщений: 22
| Народ а можно к примеру на локе Затон,на Скадовске убрать лишних сталков,там столько народа ненужного тусуется что у меня при подходе в зону загрузки так лагает что иногда и выкидывает или уменьшить хотя бы спавн монстров которые там после высокого ранга в тройном умножение спавнятся?
|
|
|
Эти 0 пользователя(ей) поблагодарили mexiccanec за это полезное сообщение: |
|
|
sergej5500 | Дата: Чт, 19.03.2015, 20:38 | Сообщение # 1158 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| mexiccanec,
Чтобы убрать лишних сталкеров со Скадовска, надо в файле gamedata\configs\scripts\zaton\smart\zat_stalker_base_smart менять параметр max_population. Выставьте его равным 3-4.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
mexiccanec | Дата: Пт, 20.03.2015, 12:36 | Сообщение # 1159 |
Гражданский
Пользователи
Сообщений: 22
| Поставлю 1,а там видно будет,спасибо.
|
|
|
Эти 0 пользователя(ей) поблагодарили mexiccanec за это полезное сообщение: |
|
|
sergej5500 | Дата: Вс, 22.03.2015, 13:57 | Сообщение # 1160 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый день.
Сделал на Кордоне собаку, гуляющую по Блокпосту. Наподобие собаки Ноя или Кота Тима Везунчика.
[cut=Логика][mob_walker@universal] aggressive = false actor_friendly = true combat_ignore_cond = {=target_squad_name(esc_b1_military_squad)} true, {=target_squad_name(esc_b1_commander_1_squad)} true, {=target_squad_name(esc_b1_commander_2_squad)} true, {=target_squad_name(esc_b1_plennic_squad)} true, {=target_squad_name(esc_b1_plennic_bodygard_squad)} true, {=check_enemy_name(actor)} true, {=check_enemy_profile(sim_default_)} true, {=check_enemy_profile(sim_respawn_)} true on_info = {+esc_b1_military_squad_enemy} mob_home@attack %=set_visual_memory_enabled(1)% on_info3 = {-actor_friend_esc_b1_dog} %+actor_friend_esc_b1_dog =set_visual_memory_enabled(0)%
;
[logic@esc_b1_army_dog] active = mob_walker@walker_1_1 suitable = {=check_npc_name(esc_b1_army_dog)} true prior = 175 monster_job = true on_hit = hit
[hit] on_info = {=hit_by_actor -esc_b1_military_squad_enemy} %+esc_b1_military_squad_enemy%
;
[mob_walker@walker_1_1]:mob_walker@universal path_walk = dog_1_walk path_look = dog_sit_look on_timer = 25000 | mob_walker@random_1_1
[mob_walker@random_1_1]:mob_walker@universal path_walk = dog_1_walk path_look = dog_sit_look on_info2 = {~14} mob_walker@walker_2_1, {~14} mob_walker@walker_2_2, {~14} mob_walker@walker_3_1, {~14} mob_walker@walker_3_2, {~14} mob_walker@walker_4_1, {~14} mob_walker@walker_4_2, {~14} mob_walker@walker_5_1, mob_walker@walker_5_2
[mob_walker@walker_1_2]:mob_walker@universal path_walk = dog_1_walk path_look = dog_sleep_look on_timer = 35000 | mob_walker@random_1_2
[mob_walker@random_1_2]:mob_walker@universal path_walk = dog_1_walk path_look = dog_sleep_look on_info2 = {~14} mob_walker@walker_2_1, {~14} mob_walker@walker_2_2, {~14} mob_walker@walker_3_1, {~14} mob_walker@walker_3_2, {~14} mob_walker@walker_4_1, {~14} mob_walker@walker_4_2, {~14} mob_walker@walker_5_1, mob_walker@walker_5_2
[mob_walker@walker_2_1]:mob_walker@universal path_walk = dog_2_walk path_look = dog_sit_look on_timer = 25000 | mob_walker@random_2_1
[mob_walker@random_2_1]:mob_walker@universal path_walk = dog_2_walk path_look = dog_sit_look on_info2 = {~14} mob_walker@walker_1_1, {~14} mob_walker@walker_1_2, {~14} mob_walker@walker_3_1, {~14} mob_walker@walker_3_2, {~14} mob_walker@walker_4_1, {~14} mob_walker@walker_4_2, {~14} mob_walker@walker_5_1, mob_walker@walker_5_2
[mob_walker@walker_2_2]:mob_walker@universal path_walk = dog_2_walk path_look = dog_sleep_look on_timer = 35000 | mob_walker@random_2_2
[mob_walker@random_2_2]:mob_walker@universal path_walk = dog_2_walk path_look = dog_sleep_look on_info2 = {~14} mob_walker@walker_1_1, {~14} mob_walker@walker_1_2, {~14} mob_walker@walker_3_1, {~14} mob_walker@walker_3_2, {~14} mob_walker@walker_4_1, {~14} mob_walker@walker_4_2, {~14} mob_walker@walker_5_1, mob_walker@walker_5_2
[mob_walker@walker_3_1]:mob_walker@universal path_walk = dog_3_walk path_look = dog_sit_look on_timer = 25000 | mob_walker@random_3_1
[mob_walker@random_3_1]:mob_walker@universal path_walk = dog_3_walk path_look = dog_sit_look on_info2 = {~14} mob_walker@walker_2_1, {~14} mob_walker@walker_2_2, {~14} mob_walker@walker_1_1, {~14} mob_walker@walker_1_2, {~14} mob_walker@walker_4_1, {~14} mob_walker@walker_4_2, {~14} mob_walker@walker_5_1, mob_walker@walker_5_2
[mob_walker@walker_3_2]:mob_walker@universal path_walk = dog_3_walk path_look = dog_sleep_look on_timer = 35000 | mob_walker@random_3_2
[mob_walker@random_3_2]:mob_walker@universal path_walk = dog_3_walk path_look = dog_sleep_look on_info2 = {~14} mob_walker@walker_2_1, {~14} mob_walker@walker_2_2, {~14} mob_walker@walker_1_1, {~14} mob_walker@walker_1_2, {~14} mob_walker@walker_4_1, {~14} mob_walker@walker_4_2, {~14} mob_walker@walker_5_1, mob_walker@walker_5_2
[mob_walker@walker_4_1]:mob_walker@universal path_walk = dog_4_walk path_look = dog_sit_look on_timer = 25000 | mob_walker@random_4_1
[mob_walker@random_4_1]:mob_walker@universal path_walk = dog_4_walk path_look = dog_sit_look on_info2 = {~14} mob_walker@walker_2_1, {~14} mob_walker@walker_2_2, {~14} mob_walker@walker_3_1, {~14} mob_walker@walker_3_2, {~14} mob_walker@walker_1_1, {~14} mob_walker@walker_1_2, {~14} mob_walker@walker_5_1, mob_walker@walker_5_2
[mob_walker@walker_4_2]:mob_walker@universal path_walk = dog_4_walk path_look = dog_sleep_look on_timer = 35000 | mob_walker@random_4_2
[mob_walker@random_4_2]:mob_walker@universal path_walk = dog_4_walk path_look = dog_sleep_look on_info2 = {~14} mob_walker@walker_2_1, {~14} mob_walker@walker_2_2, {~14} mob_walker@walker_3_1, {~14} mob_walker@walker_3_2, {~14} mob_walker@walker_1_1, {~14} mob_walker@walker_1_2, {~14} mob_walker@walker_5_1, mob_walker@walker_5_2
[mob_walker@walker_5_1]:mob_walker@universal path_walk = dog_5_walk path_look = dog_sit_look on_timer = 25000 | mob_walker@random_5_1
[mob_walker@random_5_1]:mob_walker@universal path_walk = dog_5_walk path_look = dog_sit_look on_info2 = {~14} mob_walker@walker_2_1, {~14} mob_walker@walker_2_2, {~14} mob_walker@walker_3_1, {~14} mob_walker@walker_3_2, {~14} mob_walker@walker_4_1, {~14} mob_walker@walker_4_2, {~14} mob_walker@walker_1_1, mob_walker@walker_1_2
[mob_walker@walker_5_2]:mob_walker@universal path_walk = dog_5_walk path_look = dog_sleep_look on_timer = 35000 | mob_walker@random_5_2
[mob_walker@random_5_2]:mob_walker@universal path_walk = dog_5_walk path_look = dog_sleep_look on_info2 = {~14} mob_walker@walker_2_1, {~14} mob_walker@walker_2_2, {~14} mob_walker@walker_3_1, {~14} mob_walker@walker_3_2, {~14} mob_walker@walker_4_1, {~14} mob_walker@walker_4_2, {~14} mob_walker@walker_1_1, mob_walker@walker_1_2
[mob_home@attack] path_home = dog_1_walk home_min_radius = 30 home_max_radius = 40 aggressive = true actor_friendly = false combat_ignore_cond = {=target_squad_name(esc_b1_military_squad)} true, {=target_squad_name(esc_b1_commander_1_squad)} true, {=target_squad_name(esc_b1_commander_2_squad)} true, {=target_squad_name(esc_b1_plennic_squad)} true, {=target_squad_name(esc_b1_plennic_bodygard_squad)} true, {=check_enemy_profile(sim_default_)} true, {=check_enemy_profile(sim_respawn_)} true[/cut]
[cut=Секции собаки][esc_b1_army_dog]:pseudodog_normal $spawn = "monsters\esc_b1_army_dog" community = pseudodog
[esc_b1_army_dog_squad]:online_offline_group faction = monster npc = esc_b1_army_dog target_smart = esc_smart_terrain_1 spawn_point = esc_b1_spawn_point story_id = esc_b1_army_dog_squad[/cut]
[cut=Пути]
[esc_smart_terrain_1_dog_1_walk] points = p0 p0:name = wp00 p0:flags = 0x1 p0:position = -140.26330566406,-30.137872695923,-374.70913696289 p0:game_vertex_id = 1615 p0:level_vertex_id = 114032
[esc_smart_terrain_1_dog_2_walk] points = p0 p0:name = wp00 p0:flags = 0x1 p0:position = -110.55009460449,-30.216100692749,-372.45928955078 p0:game_vertex_id = 1707 p0:level_vertex_id = 149127
[esc_smart_terrain_1_dog_3_walk] points = p0 p0:name = wp00 p0:flags = 0x1 p0:position = -167.67936706543,-29.878574371338,-361.71209716797 p0:game_vertex_id = 1708 p0:level_vertex_id = 81666
[esc_smart_terrain_1_dog_4_walk] points = p0 p0:name = wp00 p0:flags = 0x1 p0:position = -155.90653991699,-29.278339385986,-412.95758056641 p0:game_vertex_id = 1691 p0:level_vertex_id = 95189
[esc_smart_terrain_1_dog_5_walk] points = p0 p0:name = wp00 p0:flags = 0x1 p0:position = -129.66946411133,-30.241374969482,-397.62573242188 p0:game_vertex_id = 1615 p0:level_vertex_id = 126105
[esc_smart_terrain_1_dog_sit_look] points = p0 p0:name = wp00|a=sit_idle p0:flags = 0x1 p0:position = -136.7399597168,-30.138900756836,-373.56387329102 p0:game_vertex_id = 1615 p0:level_vertex_id = 118101
[esc_smart_terrain_1_dog_sleep_look] points = p0 p0:name = wp00|a=sleep p0:flags = 0x1 p0:position = -122.80696105957,-30.052211761475,-376.32962036133 p0:game_vertex_id = 1692 p0:level_vertex_id = 134364
[/cut]
После спавна собаки происходит вылет.
[cut=Лог]intro_delete ::update_game_intro stack trace:
0023:0532B7D0 lua.JIT.1.1.4.dll, lua_yield()[/cut]
Неписям на смарте прописан запрет на собаку.
combat_ignore_cond = {=check_enemy_name(esc_b1_army_dog)} true
Если собаки нет, то вылета тоже нет. Чем движку не приглянулась псина?
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
Zrazil | Дата: Вс, 22.03.2015, 14:30 | Сообщение # 1161 |
Удаленные
| Всем доброго времени суток! Кто-нибудь когда-то сталкивался с таким вылетом? Что может быть причиной?
[cut=Лог]Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ...Ioou a I?eiyou\gamedata\scripts\smart_terrain.script:1261: attempt to compare nil with number [/cut]
Все замечательно работало, спавнилось как надо и тут после компиляции свежего спавна через сдк выдает такое.
Сообщение отредактировал Zrazil - Вс, 22.03.2015, 14:31 |
|
|
Эти 0 пользователя(ей) поблагодарили Zrazil за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 22.03.2015, 21:47 | Сообщение # 1162 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Попробуйте для начала спавн сквада собаки без эксклюзивной логики. Не вижу пока ничего очевидного, поэтому предлагаю идти по шагам с каждым шагом усложняя настройки.
Zrazil, Что в 1261 строке скрипта smart_terrain.script?
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Zrazil | Дата: Пн, 23.03.2015, 00:44 | Сообщение # 1163 |
Удаленные
| denis2000, [cut=1261] if squad_count ~= nil and (self.max_population <= squad_count) then --printf("smart terrain [%s] precondition returns false for squad [%s]", self:name(), squad:name()) -- if tonumber(self.props["surge"]) > 0 and xr_conditions.surge_started() then -- printf("SURGE_SMART_STATS : smart [%s]\n max_population = %d \ squad_count = %d", self:name(), self.max_population, squad_count) -- end return false end[/cut]
|
|
|
Эти 0 пользователя(ей) поблагодарили Zrazil за это полезное сообщение: |
|
|
denis2000 | Дата: Пн, 23.03.2015, 08:45 | Сообщение # 1164 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Zrazil, max_population = nil? Проверяйте настройки смартов, везде ли корректно установлен данный параметр.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Вт, 24.03.2015, 00:03 | Сообщение # 1165 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Цитата denis2000 ( ) Попробуйте для начала спавн сквада собаки без эксклюзивной логики. Не вижу пока ничего очевидного, поэтому предлагаю идти по шагам с каждым шагом усложняя настройки.
Попробовал разные варианты. Выяснил, что игра не любит строку
combat_ignore_cond = {=target_squad_name(esc_b1_military_squad)} true, {=target_squad_name(esc_b1_commander_1_squad)} true, {=target_squad_name(esc_b1_commander_2_squad)} true, {=target_squad_name(esc_b1_plennic_squad)} true, {=target_squad_name(esc_b1_plennic_bodygard_squad)} true, {=check_enemy_profile(sim_default_)} true, {=check_enemy_profile(sim_respawn_)} true, {=check_enemy_name(actor)} true
точнее её часть
{=target_squad_name(esc_b1_military_squad)} true, {=target_squad_name(esc_b1_commander_1_squad)} true, {=target_squad_name(esc_b1_commander_2_squad)} true, {=target_squad_name(esc_b1_plennic_squad)} true, {=target_squad_name(esc_b1_plennic_bodygard_squad)} true,
[cut=Функция]function target_squad_name(actor, obj, p) if p[1] == nil then abort("Wrong parameters") end if not(obj) then return false end --callstack() if IsStalker(obj) or IsMonster(obj) then if alife():object(obj.group_id) == nil then return false end if string.find( alife():object(obj.group_id):section_name(), p[1] ) ~= nil then return true end --return alife():object(obj.group_id):section_name() == p[1] end return obj:section_name() == p[1] end[/cut]
[cut=Сквады] [esc_b1_military_squad]:online_offline_group faction = army npc = sim_respawn_military_0, sim_respawn_military_1, sim_respawn_military_2, sim_respawn_military_0, sim_respawn_military_1, sim_respawn_military_2, sim_respawn_military_0, sim_respawn_military_1, sim_respawn_military_2 target_smart = esc_smart_terrain_1 spawn_point = esc_b1_spawn_point story_id = esc_b1_military_squad
[esc_b1_commander_1_squad]:online_offline_group faction = army_alies npc = esc_b1_commander_1 target_smart = esc_smart_terrain_1 spawn_point = esc_b1_commander_1_spawn_point story_id = esc_b1_commander_1_squad
[esc_b1_commander_2_squad]:online_offline_group faction = army_alies npc = esc_b1_commander_2 target_smart = esc_smart_terrain_1 spawn_point = esc_b1_commander_2_spawn_point story_id = esc_b1_commander_2_squad
[esc_b1_plennic_squad]:online_offline_group faction = stalker_alies npc = esc_b1_plennic target_smart = esc_smart_terrain_1 spawn_point = esc_b1_spawn_point story_id = esc_b1_plennic_squad
[esc_b1_plennic_bodygard_squad]:online_offline_group faction = army_alies npc = esc_b1_plennic_bodygard target_smart = esc_smart_terrain_1 spawn_point = esc_b1_spawn_point story_id = esc_b1_plennic_bodygard_squad[/cut]
Вопрос, можно ли использовать функцию target_squad_name в логике собаки?
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
denis2000 | Дата: Вт, 24.03.2015, 08:26 | Сообщение # 1166 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Ну вот где собака порылась: 1. Сквад не может быть целью одиночного НПС, только другой НПС. 2. Функция target_squad_name проверяет входит ли НПС из логики которого вызвана функция в указанный сквад, тоесть совсем не то что кажеться из названия.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
makdm | Дата: Вт, 24.03.2015, 09:42 | Сообщение # 1167 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| sergej5500, можно сделать всё гораздо проще, если тебе нужно, чтобы собака не реагировала на Сталкеров.
Для этого в файл xr_conditions.script добавишь функцию
Код function check_enemy_stalker( actor , npc ) local enemy_id = db.storage[ npc:id() ].enemy_id local enemy = db.storage[ enemy_id ] and db.storage[ enemy_id ].object if enemy and enemy:alive() and IsStalker( enemy ) then return true end return false end
Ну и проверка в логике:
combat_ignore_cond = {=check_enemy_stalker} true, false
Все сталкеры и ГГ будут игнорироваться, как враги.
Терпение...... И все получится!
Сообщение отредактировал makdm - Вт, 24.03.2015, 09:43 |
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
sergej5500 | Дата: Вт, 24.03.2015, 19:41 | Сообщение # 1168 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| makdm,
С функцией check_enemy_stalker все понятно. А как написать условие игнорирования всех сталкеров, кроме игрока?Добавлено (24.03.2015, 19:41) --------------------------------------------- И еще один вопрос. В логике собаки Ноя используется функция =set_visual_memory_enabled(0). Видимо, чтобы не реагировал индикатор видимости игрока противником.
Для сквадов неписей иногда применяется параметр relationship = enemy, = neutral, = friend. Для сквадов монстров он будет работать?
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
makdm | Дата: Вт, 24.03.2015, 20:34 | Сообщение # 1169 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата sergej5500 ( ) А как написать условие игнорирования всех сталкеров, кроме игрока? Честно говоря не понял "юмора". Ты же сам пишешь в своих проверках Цитата sergej5500 ( ) {=check_enemy_name(actor)} true
А теперь вдруг игрок должен стать врагом для собаки.
Ну так добавить проверку на игрока и поставить её первой.
combat_ignore_cond = {=check_enemy_name(actor)} false, {=check_enemy_stalker} true, false
Цитата sergej5500 ( ) Для сквадов монстров он будет работать? Проверь и сразу будет понятно. Только, раз уж разрабы Сталкера добавили функцию set_visual_memory_enabled в игру, то, наверное, это было сделано не просто так?
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
sergej5500 | Дата: Сб, 02.05.2015, 01:05 | Сообщение # 1170 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Цитата makdm ( ) Честно говоря не понял "юмора".
Это нужно для конечной секции логики собаки. Если игрок атаковал смарт, то вояки и собака становятся ему врагами. У собаки указано combat_ignore_cond = {=check_enemy_stalker} true. В том числе и актор. Если эту функцию убрать, то псина кинется на первого подвернувшегося солдата. А если не убирать, то под условие попадает и актор.
combat_ignore_cond = {=check_enemy_name(actor)} false, {=check_enemy_stalker} true, falseДобавлено (08.04.2015, 00:03) --------------------------------------------- Добрый вечер.
Столкнулся с такой проблемой. При выполнении квеста в лесничестве из оригинала Зова Припяти Спартак не хочет говорить с ГГ.
При получении задания у Бороды спавнится сквад из 4-х сталкеров. Затем к ним 5-м доспавнивают Спартака. 4 сталкера без проблем выполняют свою работу. Спартак не хочет занимать свое место. Не хочет говорить. Квест виснет.
Помогает запись сейва. Причем сейв надо делать далеко от сквада. После загрузки сейва Спартак выполняет квестовые обязанности.
Радиус загрузки локации в сборке - 225 метров.
Единственное, что приходит в голову - спавн Спартака отдельным сквадом. С соответствующими переделками рестрикторов и конфигов.
Вопрос такой. Поможет ли вот эта наработка? Если сквад после спавна Спартака перевести в оффлайн, затем в онлайн, то логика неписей перезагрузится? Добавлено (02.05.2015, 01:05) --------------------------------------------- Добрый вечер.
Для своего мода сделал Сидоровича. Прописал ему его озвучку из ТЧ.
[cut=Логика][logic@esc_b2_trader_1] active = remark@esc_b2_trader_1 suitable = {=check_npc_name(esc_b2_trader)} true prior = 300 level_spot = trader post_combat_time = 0,0 can_select_weapon = false trade = misc\trade\order_traders\esc_b2_trader.ltx
[remark@esc_b2_trader_1] gather_items_enabled = false help_wounded_enabled = false corpse_detection_enabled = false combat_ignore_cond = true combat_ignore_keep_when_attacked = true anim = ward_noweap meet = meet@trader_1 invulnerable = {-esc_b2_stalker_squad_enemy} true, false target = story | actor on_info = %=control_npc_position(esc_b2_trader_control_spawn_point:1)%
[meet@trader_1] close_snd_hello = esc_b2_sidor_hello close_snd_bye = esc_b2_sidor_exit use = {!actor_enemy !actor_has_weapon !has_enemy} true, false allow_break = false trade_enable = true[/cut]
Все нормально работало.
Далее решил несколько квестовых персонажей: торговец, медик, сберегатель, банкир объединить в один сквад. До этого все эти персы спавнились каждый отдельным сквадом. Сидорович попал в этот сквад. Рядовым бойцом.
И перестал приветствовать. Строки
close_snd_hello = esc_b2_sidor_hello close_snd_bye = esc_b2_sidor_exit
перестали работать.
Можно ли исправить ситуацию? Спавн Сидора отдельным сквадом нежелателен.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
|