AndrewMor 530 Опубликовано 24 Апреля 2016 а в характере у него какая группировка? В том-то и дело, что когда я спавню через all.spawn, я указываю группировку (например, yan_zombied_veteran). А как сие скриптом прикрутить? Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 24 Апреля 2016 можно использовать для спавна секции из файла creatures\spawn_sections.ltx Точно так, уже и сам допер . Все вышло, как надо. Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 10 Мая 2016 Хотя бы реакцию на звук пролетающей пули/топот гг, если сзади подбежать. И зрение/дальность обнаружения игрока совсем по другому работает, если правильно настроить конфиги И не только. Даже сами звуки (комменты) много на что влияют. Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 31 Мая 2016 (изменено) Камрады, прошу помощи. Спавню полтергейста. Секция спавна: [6380] ; cse_abstract propertiessection_name = m_poltergeist_strong_flamename = zaton_poltergeist_09position = 22.802154541016, 11.935946464539, -382.63479614258direction = 0, 0, 0id = 65535version = 118script_version = 6spawn_id = 5454; cse_alife_object propertiesgame_vertex_id = 3683distance = 0level_vertex_id = 990472object_flags = 0xffffffbfcustom_data = <<END[smart_terrains]none = true[logic]cfg = scripts\logic\zaton\poltergeist9.ltxEND; cse_visual propertiesvisual_name = monsters\poltergeist\poltergeist; cse_alife_creature_abstract propertiesg_team = 0g_squad = 0g_group = 0health = 1dynamic_out_restrictions =dynamic_in_restrictions =; cse_alife_monster_abstract propertiesbase_out_restrictors = zaton_polter_flame_no_out ; cse_ph_skeleton properties; cse_alife_monster_base properties; se_monster propertiesupd:health = 1upd:timestamp = 0upd:creature_flags = 0upd:position = 22.802154541016, 11.935946464539, -382.63479614258upd:o_torso = 0,0,0upd:g_squad = 0upd:g_group = 0 Логика [logic]active = mob_walker[mob_walker]path_walk = zaton_polter9_walk Путь [zaton_polter9_walk]points = p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10p0:name = wp00p0:position = 22.802154541016,11.935946464539,-382.63479614258p0:game_vertex_id = 3683p0:level_vertex_id = 990472p0:links = p1(1)p1:name = wp01p1:position = 17.889888763428,11.416372299194,-378.27621459961p1:game_vertex_id = 3683p1:level_vertex_id = 980597p1:links = p2(1)p2:name = wp02p2:position = 11.144721031189,10.823378562927,-375.94729614258p2:game_vertex_id = 3678p2:level_vertex_id = 966331p2:links = p3(1)p3:name = wp03p3:position = 5.4176321029663,10.271119117737,-379.6369934082p3:game_vertex_id = 3678p3:level_vertex_id = 954769p3:links = p4(1)p4:name = wp04p4:position = -0.38351851701736,10.072697639465,-388.4260559082p4:game_vertex_id = 3678p4:level_vertex_id = 942063p4:links = p5(1)p5:name = wp05p5:position = -3.2485153675079,10.374574661255,-398.72760009766p5:game_vertex_id = 3678p5:level_vertex_id = 936493p5:links = p6(1)p6:name = wp06p6:position = 2.3162746429443,12.313020706177,-409.98434448242p6:game_vertex_id = 3678p6:level_vertex_id = 947578p6:links = p7(1) p7:name = wp07p7:position = 12.747953414917,13.685386657715,-412.78851318359p7:game_vertex_id = 3678p7:level_vertex_id = 969065p7:links = p8(1)p8:name = wp08p8:position = 21.340915679932,13.940279006958,-407.92694091797p8:game_vertex_id = 3683p8:level_vertex_id = 986248p8:links = p9(1)p9:name = wp09p9:position = 27.657661437988,13.431468963623,-400.20962524414p9:game_vertex_id = 3683p9:level_vertex_id = 1000455p9:links = p10(1)p10:name = wp10p10:position = 26.807851791382,12.815635681152,-389.74807739258p10:game_vertex_id = 3683p10:level_vertex_id = 997594p10:links = p0(1) Полтер спавнится и летает по кругу, как в ЗП, в аномалии Цирк. Но когда я пытаюсь его отреспить - вылет по патрульному пути. Вопрос: почему (координаты и вертексы идентичны)? Код респавна: local obj = alife():create("m_poltergeist_strong_flame",vector():set(22.802154541016,11.935946464539,-382.63479614258),990472,3683)local params=amk.read_monster_params(obj)params.custom="[logic]\ncfg = scripts\\logic\\zaton\\poltergeist9.ltx"amk.write_monster_params(params,obj) Изменено 31 Мая 2016 пользователем AndrewMor Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 1 Июня 2016 Что ты пытаешся его?.. От...чего? Респавнить. То есть убиваю полтера и респавню нового по тем же координатам. Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 1 Июня 2016 ну, показывай свой респавнер тогда. И "гулаг" заодно. И лог вылета не помешал бы... Так я в посте #15458 все коды расписал. Полтер ни под каким гулагом не находится. А в логе все стандартно: any vertex patrol бла-бла-бла. У меня уйма зверья респавнится таким макаром после их убийства, и все нормально. А с этим - непонятный затык. Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 2 Июня 2016 Я бы спавнил прямо секцию из all.spawn. Для этого в секции полтергейста я бы добавил после END метку секции, например так: Я думал об этом, но если таким макаром кучу зверья респавнить, кучу стори_ид надо создавать. Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 6 Июня 2016 (изменено) я хоть и не работаю на ТЧ, но респавнер я бы сделал немного по другому. Я, сделав по твоему, почему-то словил вылет. FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : [error]Arguments : LUA error: ...l.k.e.r\gamedata\scripts\uzi_monsters_respawn.script:9131: attempt to call global 'spawn_ids_object' (a nil value) stack trace: ругань идет на строчку в скрипте: spawn_ids_object("zaton_poltergeist_09") Сама функция записана ниже в файле скрипта, если что. upd: все заработало, не туда вставил функцию респавна. Спасибо за совет. Изменено 6 Июня 2016 пользователем AndrewMor Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 12 Июня 2016 (изменено) Сталкеры, нужна помощь. Спавню скриптом предмет в рюкзак: function spawn_card() local obj = alife():object("pred_rukzak")if obj thenalife():create( "access_card", vector(), 0, 0, obj.id )endend Предмет спавнится, но если сохраниться, то состояние рюкзака не сохраняется и предмет после загрузки сейва пропадает. Пробовал делать так: function spawn_card()local obj = alife():object("pred_rukzak")if obj thenalife():create( "access_card", vector(), 0, 0, obj.id )local params = amk.get_invbox_data(obj)params.custom = "[logic]\ncfg = scripts\\treasure_inventory_box.ltx"amk.set_invbox_data(params, obj)endend Но предмет все равно пропадает. Я что-то не так делаю, или что? Изменено 12 Июня 2016 пользователем AndrewMor Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 14 Июня 2016 вот соляночная функция для спауна вещей кому угодно: Кому угодно - это очень хорошо. Но мой случай - inventory_box. Для ящика будет работать? Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 23 Июня 2016 (изменено) AndrewMor, вот соляночная функция для спауна вещей кому угодно: Чего-то не догоняю, как в твоей функции npc заменить на inventory_box, точнее, как прикрутить мою строчку local obj = alife():object("pred_rukzak") к Соляночной функции? Изменено 23 Июня 2016 пользователем AndrewMor Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 23 Июня 2016 (изменено) Для спавна во что-нибудь надо id этого самого чегo-нибудь.дальше - alife():create( "чегонадо", vector(), 0, 0, id ) Да так и делаю. Только при сейв/лоад содержимое пропадает. Спавню вот так: function spawn_card() local obj = alife():object("pred_rukzak") if obj then alife():create( "access_card", vector(), 0, 0, obj.id ) end end Для тайника надо его еще в офлайн загнать, а потом выгнать, чтобы увидеть сoдержимое. А это вот как сделать? Dennis_Chikin, и вдогонку вопрос: если спавн в тайник происходит на текущей локации, тайник всегда в онлайне, даже если далеко от ГГ, или нет? Изменено 23 Июня 2016 пользователем AndrewMor Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 23 Июня 2016 ну и где-то как-то потом выполнить обратный процесс А если сразу сей процесс выполнить? Или надо какое-то время конкретное подождать? Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 23 Июня 2016 А вообще можно - самое простое - добавить ящику custom_data в секцию, в файле которой прописать в секции spawn нужные предметы. Ессно, так проще. Но идея в том, чтобы ящик изначально был пуст, а наполнялся только в нужный момент. Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 23 Июня 2016 (изменено) Речь идет об том, чтобы работать с ящиками внешним гуем: у актора предметы удаляются/создаются, у ящика - меняются данные о предметах. Самих предметов в ящиках не должно быть вообще. Сама идея понятна, но как енто воплотить - для меня темный лес, надеюсь, пока. А почитать об ентом возможно где-нибудь, желательно с подробным разбором, а лучше на примере? Возможно, многим было бы интересно. П.С. А ведь предметы в игровых тайниках тоже спавнятся по факту выдачи инфы о тайнике, каким образом инфа о них сохраняется и не пропадает при сейв/лоаде? Хотя, это наверно не здесь пишу. Оффтоп: Pascal и Delphi сам постигал, но с Lua - беда. Неудобен факт: чтоб какую-нибудь мысль проверить, надо кучу всего городить и Сталкер полдня мучить. Компилятор бы какой иметь под рукой... Изменено 23 Июня 2016 пользователем AndrewMor Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 23 Июня 2016 (изменено) ой, точно, забыл. Привык к анонимным функциям и даже не посмотрел. Сделал так, как ты написал. function spawn_card() local obj = alife():object("pred_inventory_box") if obj then spawn_item_in_inv("access_card", obj) end end function spawn_item_in_inv(spawn_item,npc) if not npc then npc = db.actor end local item = alife():create(spawn_item, npc:position(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id()) if npc:id() ~= db.actor:id() then -- Фикс пропадания доспавненного предмета при сейв/лоаде level.client_spawn_manager():add(item.id, -1, fix_spawn_item_in_inv, npc) -- Калбек на выход item в онлайн end return item end function fix_spawn_item_in_inv(npc, id, item) npc:transfer_item(item, npc) end При вызове функции вылет: Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : Arguments : LUA error: No such operator defined Чего я сделал не так? И скрипт этот я в Закоулках правды увидал. Изменено 23 Июня 2016 пользователем AndrewMor Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 24 Июня 2016 ты в spawn_item_in_inv() серверный объект передал, как минимум. А эта функция ожидает клиентский объект в качестве npc. Вот так вот делай, тогда уж: Спасибо, попробую. Через alife():create() поначалу делал, так не сохраняются вещи после s/l. Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 28 Июня 2016 (изменено) Сталкеры, че-то затупил: как отловить момент уничтожения конкретной вертушки, чего в логике писать? Нужно выдать инфопоршень при сбитии/уничтожении. upd: насчет хита - вспомнил on_hit = hit А on_death = death будет работать? Изменено 28 Июня 2016 пользователем AndrewMor Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 7 Июля 2016 Сталкеры, а можно ли прописать вертолету не story_id-ы НПС, а скажем, конкретную группировку? Чтобы он не конкретного НПС обстреливал, а искал врагов в определенном радиусе? Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 7 Июля 2016 Советую глянуть в сторону AI вертолетов от Kirag-а, там есть подобное... Я и сам так подумал, а спросил на всякий случай. 1 Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение