Silver Raven 197 Опубликовано 18 Августа 2014 (изменено) Перевел две группы НПС на созданные гулаги, но где-то накосячил, т.к. все они просто стоят на месте. Кто разбирается, посмотрите, может я чего и не увидел (мобы из гулагов временно вырезаны, работают нормально): local t = {} function load_job(sj, gname, type, squad, groups)-- Группа Алексаif type == "generators_alex_squad" thent = { section = "logic@generators_alex_squad_alex",idle = 0,prior = 1, state = {0},squad = squad,online = true,in_rest = "", out_rest = "",redicate = function(obj_info)return obj_info.name == "generators_alex"end}table.insert(sj, t)t = { section = "logic@generators_alex_squad_werewolf",idle = 0,prior = 1, state = {0},squad = squad,online = true,in_rest = "", out_rest = "",redicate = function(obj_info)return obj_info.name == "generators_werewolf"end}table.insert(sj, t)t = { section = "logic@generators_alex_squad_taurus",idle = 0,prior = 2, state = {0},squad = squad,online = true,in_rest = "", out_rest = "generators_monolith_base",redicate = function(obj_info)return obj_info.name == "generators_taurus"end}table.insert(sj, t)end-- База "Монолита"if type == "generators_monolith_base" thent = { section = "logic@generators_monolith_base_commander",idle = 0,prior = 1, state = {0},online = true,in_rest = "", out_rest = "",redicate = function(obj_info)return obj_info.name == "generators_monolith_base_commander"end}table.insert(sj, t)t = { section = "logic@generators_monolith_base_door_guard",idle = 0,prior = 1, state = {0},online = true,in_rest = "", out_rest = "",redicate = function(obj_info)return obj_info.name == "generators_monolith_base_door_guard"end}table.insert(sj, t)t = { section = "logic@generators_monolith_base_barrikada_guard_1",idle = 0,prior = 1, state = {0},online = true,in_rest = "", out_rest = "",redicate = function(obj_info)return obj_info.name == "generators_monolith_base_barrikada_guard_1"end}table.insert(sj, t)t = { section = "logic@generators_monolith_base_barrikada_guard_2",idle = 0,prior = 1, state = {0},online = true,in_rest = "", out_rest = "",redicate = function(obj_info)return obj_info.name == "generators_monolith_base_barrikada_guard_2"end}table.insert(sj, t)t = { section = "logic@generators_monolith_base_perimetr_guard_1",idle = 0,prior = 1, state = {0},online = true,in_rest = "", out_rest = "",redicate = function(obj_info)return obj_info.name == "generators_monolith_base_perimetr_guard_1"end}table.insert(sj, t)t = { section = "logic@generators_monolith_base_perimetr_guard_2",idle = 0,prior = 1, state = {0},online = true,in_rest = "", out_rest = "",redicate = function(obj_info)return obj_info.name == "generators_monolith_base_perimetr_guard_2"end}table.insert(sj, t)t = { section = "logic@generators_monolith_base_prisoner_guard",idle = 0,prior = 1, state = {0},online = true,in_rest = "", out_rest = "",redicate = function(obj_info)return obj_info.name == "generators_monolith_base_prisoner_guard"end}table.insert(sj, t)t = { section = "logic@generators_monolith_base_sniper_1",idle = 0,prior = 1, state = {0},online = true,in_rest = "", out_rest = "",redicate = function(obj_info)return obj_info.name == "generators_monolith_base_sniper_1"end}table.insert(sj, t)t = { section = "logic@generators_monolith_base_sniper_2",idle = 0,prior = 1, state = {0},online = true,in_rest = "", out_rest = "",redicate = function(obj_info)return obj_info.name == "generators_monolith_base_sniper_2"end}table.insert(sj, t)t = { section = "logic@generators_monolith_base_sniper_3",idle = 0,prior = 1, state = {0},online = true,in_rest = "", out_rest = "",redicate = function(obj_info)return obj_info.name == "generators_monolith_base_sniper_3"end}table.insert(sj, t)endendfunction load_states(gname, type)if type == "generators_alex_squad" thenreturn function(gulag)if has_alife_info("back_to_alex_squad") thenreturn 0endendendif type == "generators_monolith_base" thenreturn function(gulag)return 0endendend---------------------------------------------------------------------------- Dynamic ltx--------------------------------------------------------------------------function load_ltx(gname, type)return nilendfunction checkStalker(npc_community, gulag_type, npc_rank, se_obj)if gulag_type == "generators_alex_squad" thenreturn npc_community == "stalker"endif gulag_type == "generators_monolith_base" thenreturn npc_community == "monolith"endreturn falseendfunction checkMonster(npc_community, gulag_type)return falseend [spoiler='gualg.ltx ;-- Группа Алекса: ; Алекс[logic@generators_alex_squad_alex]active = walker@alex_wait_actoron_death = alex_squad_death [walker@alex_wait_actor]path_walk = generators_alex_squad_alex_walk_1path_look = generators_alex_squad_alex_look_1invulnerable = truemeet = meet@alex_meet_1danger = danger_condition@alexon_info = {+save_taurus} walker@alex_after_start_taskon_info2 = {+save_taurus_alternative} walker@alex_after_start_alternative_taskon_info3 = {+taurus_dead} walker@alex_after_taurus_dead [meet@alex_meet_1]meet_state = 30| hello@talk_hello| 8| wait@wait| 3| ward@waitmeet_state_wpn = 30| hello@talk_hello| 8| wait@wait| 3| ward@waitvictim = 30| actorvictim_wpn = 30| actoruse = trueuse_wpn = truemeet_dialog = {-save_taurus} gen_alex_start_dialog [walker@alex_after_start_task]path_walk = generators_alex_squad_alex_walk_1path_look = generators_alex_squad_alex_look_2invulnerable = truemeet = meet@alex_meet_2danger = danger_condition@alexon_info = {+back_to_alex_squad_complite} walker@alex_after_complite_taskon_info2 = {+taurus_dead} walker@alex_after_fail_task [meet@alex_meet_2]meet_state = 10| wait@wait| 3| ward@waitmeet_state_wpn = 10| wait@wait| 3| ward@waitvictim = 10| actorvictim_wpn = 10| actoruse = trueuse_wpn = truemeet_dialog = {+save_taurus -back_to_alex_squad_complite} gen_alex_taurus_save_in_progress_dialog [walker@alex_after_start_alternative_task]path_walk = generators_alex_squad_alex_walk_1path_look = generators_alex_squad_alex_look_1invulnerable = truemeet = meet@alex_meet_3danger = danger_condition@alexon_info = {+back_to_alex_squad_complite} walker@alex_after_complite_task [meet@alex_meet_3]meet_state = 10| wait@wait| 3| ward@waitmeet_state_wpn = 10| wait@wait| 3| ward@waitvictim = 10| actorvictim_wpn = 10| actoruse = trueuse_wpn = truemeet_dialog = {+save_taurus_alternative -back_to_alex_squad_complite} gen_alex_taurus_dead_hello_dialog [walker@alex_after_complite_task]path_walk = generators_alex_squad_alex_walk_1path_look = generators_alex_squad_alex_look_2invulnerable = truemeet = meet@alex_meet_4danger = danger_condition@alex [meet@alex_meet_4]meet_state = 10| wait@wait| 3| ward@waitmeet_state_wpn = 10| wait@wait| 3| ward@waitvictim = 10| actorvictim_wpn = 10| actoruse = trueuse_wpn = truemeet_dialog = {+back_to_alex_squad_complite -save_taurus_task_talk_to_alex_complite} gen_alex_taurus_safety_dialog, {+save_taurus_task_talk_to_alex_complite} gen_alex_hello_dialog [walker@alex_after_fail_task]path_walk = generators_alex_squad_alex_walk_1path_look = generators_alex_squad_alex_look_2invulnerable = truemeet = meet@alex_meet_5danger = danger_condition@alex [meet@alex_meet_5]meet_state = 10| wait@wait| 3| ward@waitmeet_state_wpn = 10| wait@wait| 3| ward@waitvictim = 10| actorvictim_wpn = 10| actoruse = trueuse_wpn = truemeet_dialog = {+taurus_dead +save_taurus -taurus_dead_talk_to_alex_complite} gen_alex_taurus_dead_dialog, {+taurus_dead_talk_to_alex_complite} gen_alex_taurus_dead_hello_dialog [walker@alex_after_taurus_dead]path_walk = generators_alex_squad_alex_walk_1path_look = generators_alex_squad_alex_look_1invulnerable = truemeet = meet@alex_meet_6danger = danger_condition@alex [meet@alex_meet_6]meet_state = 10| wait@wait| 3| ward@waitmeet_state_wpn = 10| wait@wait| 3| ward@waitvictim = 10| actorvictim_wpn = 10| actoruse = trueuse_wpn = truemeet_dialog = {+taurus_dead -save_taurus -taurus_dead_talk_to_alex_alternative_complite} gen_alex_taurus_dead_alternative_dialog, {+taurus_dead_talk_to_alex_alternative_complite} gen_alex_taurus_dead_hello_dialog [danger_condition@alex]ignore_distance = 30ignore_distance_grenade = 30ignore_distance_corpse = 0ignore_distance_sound = 30danger_inertion_time_hit = 1 ; Вервольф[logic@generators_alex_squad_werewolf]active = remark@werewolf_woundedcombat_ignore = combat_ignore@alex_squaddanger = danger_condition@werewolfon_death = alex_squad_death [remark@werewolf_wounded]anim = wounded_heavycombat_ignore_cond = alwaysmeet = no_meet [danger_condition@werewolf]ignore_distance = 30ignore_distance_grenade = 30ignore_distance_corpse = 0ignore_distance_sound = 30danger_inertion_time_hit = 1 ; Таурус (пленный)[logic@generators_alex_squad_taurus]active = walker@monolith_base_taurus_prisoneron_death = taurus_deathcombat_ignore = combat_ignore@alex_squad [walker@monolith_base_taurus_prisoner]path_walk = generators_alex_squad_taurus_prisoner_walkpath_look = generators_alex_squad_taurus_prisoner_lookinvulnerable = truecombat_ignore_cond = alwaysmeet = no_meeton_info = {+monolith_base_destroy} walker@monolith_base_taurus_need_help [walker@monolith_base_taurus_need_help]path_walk = generators_alex_squad_taurus_walk_1path_look = generators_alex_squad_taurus_look_1combat_ignore_cond = {!actor_enemy !fighting_actor}meet = meet@taurus_meet_1on_info = {+back_to_alex_squad} walker@taurus_back_to_alex_squad [meet@taurus_meet_1]meet_state = 10| hello@talk_hello| 8|waitmeet_state_wpn = 10| hello@talk_hello| 8|waitvictim = 10| actorvictim_wpn = 10| actoruse = trueuse_wpn = truemeet_dialog = {+save_taurus} gen_taurus_save_dialog, {-save_taurus} gen_taurus_save_alternative_dialog [walker@taurus_back_to_alex_squad]path_walk = generators_alex_squad_taurus_walk_2path_look = generators_alex_squad_taurus_look_2combat_ignore_cond = {!actor_enemy !fighting_actor}meet = no_meeton_signal = arrive | walker@alex_squad_taurus_after_safety [walker@alex_squad_taurus_after_safety]path_walk = generators_alex_squad_taurus_walk_3path_look = generators_alex_squad_taurus_look_2meet = meet@taurus_meet_2on_info = {+save_taurus_task_talk_to_taurus_complite} walker@alex_squad_taurus_after_complite_task [meet@taurus_meet_2]use = trueuse_wpn = truemeet_dialog = {+back_to_alex_squad_complite +save_taurus} gen_taurus_after_save_dialog, {+back_to_alex_squad_complite +save_taurus_alternative} gen_taurus_after_save_alternative_dialog [walker@alex_squad_taurus_after_complite_task]path_walk = generators_alex_squad_taurus_walk_3path_look = generators_alex_squad_taurus_look_2meet = meet@taurus_meet_3 [meet@taurus_meet_3]use = trueuse_wpn = truemeet_dialog = {+save_taurus_task_talk_to_taurus_complite} gen_taurus_hello_dialog [taurus_death]on_info = %+taurus_dead +take_taurus_pda% ;--------------------------------------------[combat_ignore@alex_squad] [alex_squad_death]on_info = %+alex_squad_dead%;-------------------------------------------- ;-- База "Монолита": ;-- Командир базы[logic@generators_monolith_base_commander]active = walker@generators_monolith_base_commaderon_death = death@generators_monolith_base_commadercombat_ignore = combat_ignore@generators_monolith_base [walker@generators_monolith_base_commader]path_walk = generators_monolith_base_commander_walkpath_look = generators_monolith_base_commander_lookno_retreat = true [death@generators_monolith_base_commader]on_info = %+monolith_base_commander_dead% ;-- Охранник у двери в лабораторию Х-8[logic@generators_monolith_base_door_guard]active = walker@generators_monolith_base_door_guardon_death = death@generators_monolith_base_door_guardcombat_ignore = combat_ignore@generators_monolith_base [walker@generators_monolith_base_door_guard]path_walk = generators_monolith_base_door_guard_walkpath_look = generators_monolith_base_door_guard_look [death@generators_monolith_base_door_guard]on_info = %+monolith_base_door_guard_dead% ;-- Снайпер-1[logic@generators_monolith_base_sniper_1]active = camper@generators_monolith_base_sniper_1on_combat = combat@generators_monolith_base_sniperson_death = death@generators_monolith_base_sniper_1combat_ignore = combat_ignore@generators_monolith_base [camper@generators_monolith_base_sniper_1]path_walk = generators_monolith_base_sniper_1_walkpath_look = generators_monolith_base_sniper_1_looksniper = true danger = danger_condition@generators_monolith_base_snipers [death@generators_monolith_base_sniper_1]on_info = %+monolith_base_sniper_1_dead% ;-- Снайпер-2[logic@generators_monolith_base_sniper_2]active = camper@generators_monolith_base_sniper_2on_combat = combat@generators_monolith_base_sniperson_death = death@generators_monolith_base_sniper_2combat_ignore = combat_ignore@generators_monolith_base [camper@generators_monolith_base_sniper_2]path_walk = generators_monolith_base_sniper_2_walkpath_look = generators_monolith_base_sniper_2_looksniper = truedanger = danger_condition@generators_monolith_base_snipers [death@generators_monolith_base_sniper_2]on_info = %+monolith_base_sniper_2_dead% ;-- Снайпер-3[logic@generators_monolith_base_sniper_3]active = camper@generators_monolith_base_sniper_3on_combat = combat@generators_monolith_base_sniperson_death = death@generators_monolith_base_sniper_3combat_ignore = combat_ignore@generators_monolith_base [camper@generators_monolith_base_sniper_3]path_walk = generators_monolith_base_sniper_3_walkpath_look = generators_monolith_base_sniper_3_looksniper = truedanger = danger_condition@generators_monolith_base_snipers [death@generators_monolith_base_sniper_3]on_info = %+monolith_base_sniper_3_dead% ;-- Охранник-1 у баррикад[logic@generators_monolith_base_barrikada_guard_1]active = walker@generators_monolith_base_barrikada_guard_1on_death = death@generators_monolith_base_barrikada_guard_1combat_ignore = combat_ignore@generators_monolith_base [walker@generators_monolith_base_barrikada_guard_1]path_walk = generators_monolith_base_barrikada_guard_1_walkpath_look = generators_monolith_base_barrikada_guard_1_look [death@generators_monolith_base_barrikada_guard_1]on_info = %+monolith_base_barrikada_guard_1_dead% ;-- Охранник-2 у баррикад[logic@generators_monolith_base_barrikada_guard_2]active = walker@generators_monolith_base_barrikada_guard_2on_death = death@generators_monolith_base_barrikada_guard_2combat_ignore = combat_ignore@generators_monolith_base [walker@generators_monolith_base_barrikada_guard_2]path_walk = generators_monolith_base_barrikada_guard_2_walkpath_look = generators_monolith_base_barrikada_guard_2_look [death@generators_monolith_base_barrikada_guard_2]on_info = %+monolith_base_barrikada_guard_2_dead% ;-- Охранник-1 внутреннего периметра базы[logic@generators_monolith_base_perimetr_guard_1]active = walker@generators_monolith_base_perimetr_guard_1on_death = death@generators_monolith_base_perimetr_guard_1combat_ignore = combat_ignore@generators_monolith_base [walker@generators_monolith_base_perimetr_guard_1]path_walk = generators_monolith_base_perimetr_guard_1_walkpath_look = generators_monolith_base_perimetr_guard_1_look [death@generators_monolith_base_perimetr_guard_1]on_info = %+monolith_base_perimetr_guard_1_dead% ;-- Охранник-2 внутреннего периметра базы[logic@generators_monolith_base_perimetr_guard_2]active = walker@generators_monolith_base_perimetr_guard_2on_death = death@generators_monolith_base_perimetr_guard_2combat_ignore = combat_ignore@generators_monolith_base [walker@generators_monolith_base_perimetr_guard_2]path_walk = generators_monolith_base_perimetr_guard_2_walkpath_look = generators_monolith_base_perimetr_guard_2_look [death@generators_monolith_base_perimetr_guard_2]on_info = %+monolith_base_perimetr_guard_2_dead% ;-- Охранник пленника[logic@generators_monolith_base_prisoner_guard]active = walker@generators_monolith_base_prisoner_guardon_death = death@generators_monolith_base_prisoner_guardcombat_ignore = combat_ignore@generators_monolith_base [walker@generators_monolith_base_prisoner_guard]path_walk = generators_monolith_base_prisoner_guard_walkpath_look = generators_monolith_base_prisoner_guard_look [death@generators_monolith_base_prisoner_guard]on_info = %+monolith_base_prisoner_guard_dead% ;--------------------------------------------[combat@generators_monolith_base_snipers]combat_type = monolith [danger_condition@generators_monolith_base_snipers]danger_expiration_time = 60000danger_inertion_time = 90000 [combat_ignore@generators_monolith_base]combat_ignore_cond = {=check_fighting(10010)} ;-------------------------------------------- З.Ы. Если 1 НПС относящийся к одному гулагу принудительно должен находиться некоторое время на территории другого (играет роль пленного), ему нужно создавать отдельное место в этом гулаге, или он никуда не уйдет? При необходимости добавлю секции из all.spawn. Изменено 18 Августа 2014 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 19 Сентября 2014 Нужно вывести стандартное текстовое сообщение, конструкции вида: function message() news_manager.send_tip(db.actor, "%c[255,255,128,128]Автор сообщения\n%c[default]Текст сообщения", 0, "wolf", 17000) end или local text = "текст" function test() news_manager.send_tip(db.actor, text, 0, "trader", 20000) end не подходят, т.к. не имеется возможности настроить отображаемую иконку отправителя. Попробовал так (вызывается из спейс-рестриктора, предварительно пройдя через xr_conditions.script): function restrictor_alex_squad_send_sos_signal() local alex_squad_send_sos_signal = alex_mod_tasks.alex_squad_send_sos_signal() == true end function alex_squad_send_sos_signal() local alex_squad_sos_signal_text = "Мужики, выручайте! На мою группу напал отряд 'монолитовцев', мы на Генераторах - тут нет излучения! Координаты прилагаю." db.actor:give_game_news(alex_squad_sos_signal_text, "ui\\ui_iconsTotal",Frect():set(498,282,83,47), 0, 7000) end - работает криво. Дублируется раз 10 и вместо текста вываливаются "кракозябры", да и иконка отображается дефолтная. aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 11 Октября 2014 (изменено) Кто-нибудь знает, из-за чего эта байда: Открытие потока... * phase time: 4 ms * phase cmem: 214575 K Загрузка формы объектов... * phase time: 233 ms * phase cmem: 224784 K Загрузка шейдеров... stack trace: 0023:0049FF36 XR_3DA.exe, CEffect_Rain::Render() 0023:00493DD0 XR_3DA.exe, CKinematicsAnimated::BoneChain_Calculate() Происходит после добавления новой локации в игру. Спавн ГГ на ней же. Может ли быть подобное как-то связано с не добавленной частью статичной модели к сектору, в котором та находится? Изменено 11 Октября 2014 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 8 Ноября 2014 Народ, заметил у себя такую занятную "проблемку": заспавненные через СДК мобы, привязанные к своим гулагам (созданным также через СДК) на локации не уходят в оффлайн (на дистанции свыше 150м от ГГ, если я не ошибаюсь). Есть идеи, как подобное исправить? aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 8 Ноября 2014 @AndreySol, Отбой. В СДК ничего править не нужно было. Просто в скрипте гулагов был принудительно включен онлайн. aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 20 Марта 2015 Существует ли возможность задать условие спавна физического объекта и желательно, его уничтожения через all.spawn по аналогии с НПС и мобами? Если нет, то каким образом в заспавненном через скрипт объекте указать и логику и список костей которыми объект будет прекреплен (аналог fixed_bones из all.spawna). aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 20 Марта 2015 @Сталкер-Стрелок, по возможности, хотелось бы иметь перед глазами пример такого использования классов. Или хотя-бы любую модификацию, где использовали подобный "трюк". Ибо скриптописание не моя стизя. З.Ы. А касательно правок схемы для all.spawna, я не совсем понял. Что необходимо править? И связаны ли правки с ковырянием движка игры? Если да - такая задача мне явно не по силам. Во-всяком случае пока-что... aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 20 Марта 2015 (изменено) Я конечно в скриптах полное днище, но почему не происходит спавна объекта понять не могу (на другой функции проверил - работает): Сам спавн вызывается из логики выключателя: [logic] active = ph_button@air_conditioning_system_off [ph_button@air_conditioning_system_off] on_info = {+lab_x7_air_conditioning_system_turned_on} ph_idle@nil anim = lab_primary_switcher_idle tooltip = tips_lab_x7_air_conditioning_system_switcher on_press = ph_button@air_conditioning_system_on %=lab_x7_air_conditioning_system_turned_on% [ph_button@air_conditioning_system_on] anim = lab_primary_switcher_off [ph_idle@nil] Дальше, стандартная переброска вызова функции из xr_effects.script в свой скрипт: function lab_x7_air_conditioning_system_turned_on() db.actor:db.actor:give_info_portion("lab_x7_air_conditioning_system_turned_on") this.remove_all_lab_x7_static_ventilators() this.create_lab_x7_animated_ventilators() end function remove_all_lab_x7_static_ventilators() local id, obj for id=0, 65535 do obj = level.object_by_id(id) if obj ~= nil and obj:section() == "lab_x7_static_ventilators" then alife():release(alife():object(id), true) end end end function create_lab_x7_animated_ventilators() local ser_obj = alife():create("lab_x7_animated_ventilator",vector():set(-99.62,-18.25,73.64),2889,802) -- пока один, для тестов if ser_obj then local pk = m_netpk.get(ser_obj) if pk and pk:isOk() then local data = pk:get() if data and data.upd then data.fixed_bones = "link" pk:set(data) if data.custom_data:getString() == "lab_x7_animated_ventilator" then data.custom_data:setString("alex_mod\lab_x7_ventilators.ltx") end end end end end Ну и секция предметов для спавна: [lab_x7_static_ventilator]:identity_immunities GroupControlSection = spawn_group discovery_dependency = $spawn = "alex_mod\devices\lab_x7_static_ventilator" class = O_PHYS_S cform = skeleton visual = alex_mod\objects\ventilator_lab_static.ogf custom_data = scripts\alex_mod\lab_x7_ventilators.ltx script_binding = bind_physic_object.init [lab_x7_animated_ventilator]:identity_immunities GroupControlSection = spawn_group discovery_dependency = $spawn = "alex_mod\devices\lab_x7_animated_ventilator" class = O_PHYS_S cform = skeleton visual = physics\decor\ventilator_mike.ogf custom_data = scripts\alex_mod\lab_x7_ventilators.ltx script_binding = bind_physic_object.init Может чего прописал не так, или не зарегестрировал? З.Ы. Вспомнил, что помимо спавна и удаления объектов с логикой и прикрепленными костями, необходимо еще иметь возможность их разворота, аналогично all.spawn-ому. Надеюсь для этого тоже чего-нибудь придумали? Изменено 20 Марта 2015 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 21 Марта 2015 (изменено) Stalker_AleX333, непонятно, что такое "стандартная переброска". Обычная функция вида: function test() my_script.test() end db.actor:db.actor:give_info_portion Тут должно быть db.actor:give_info_portion. Описался когда последний раз правил сообщение. В скрипте данной ошибки нет. Что мешает сразу поставить вентиляторы с анимированными моделями и переключать им анимации по получению инфопоршня? Предполагаю, что требуются правки логики похожие на этот пример: [collide] ignore_static [logic] active = ph_idle@ventilator_off [ph_idle@ventilator_off] anim = idle on_info = {+lab_x7_air_conditioning_system_turned_on} ph_idle@ventilator_on [ph_idle@ventilator_on] anim = work Если кто-то знает больше - просветите, буду безмерно благодарен. Изменено 21 Марта 2015 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 21 Марта 2015 (изменено) @UnLoaded, как ни странно, но данный вариант тоже почему-то не хочет работать. Опишу по порядку, что делал (общая схема работы думаю уже ясна: дергаем выключатель - начинают "работать" вентиляторы): 1. В СДК подгрузил модельку вентилятора, изменил под себя анимации (медленное вращение - (idle) и собственно, работа (work) - быстрое вращение). Отдельно сделал копию модельки вентилятора с приставкой static, без анимаций. (для антуража, т.к. некоторые из них должны не работать) 2. Секция выключателя в all.spwne и его логика (выдаваемый им инфопоршень зарегистрировал): Секция в all.spawnе: [2247] ; cse_abstract properties section_name = physic_object name = labx7_ventilation_system_switcher position = -79.8399963378906, -9, 54.939998626709 direction = -1.95476889610291, 0, 0 id = 65535 version = 118 script_version = 7 spawn_id = 8990 ; cse_alife_object properties game_vertex_id = 2870 level_vertex_id = 974 object_flags = 0xffffff3a custom_data = <<END [collide] ignore_static [logic] cfg = scripts\alex_mod\lab_x7_ventilation_system_switcher.ltx END ; cse_visual properties visual_name = physics\keyboard\lab_primary_switcher ; cse_ph_skeleton properties skeleton_name = lab_primary_switcher_idle ; cse_alife_object_physic properties physic_type = 0x3 mass = 10 fixed_bones = link Последняя версия логики, на данный момент: [logic] active = ph_button@ventilation_system_off [ph_button@ventilation_system_off] on_info = {+lab_x7_ventilation_system_turned_on} ph_idle@nil anim = lab_primary_switcher_idle tooltip = tips_lab_x7_ventilation_system_switcher on_press = ph_button@ventilation_system_on %+lab_x7_ventilation_system_turned_on% [ph_button@ventilation_system_on] anim = lab_primary_switcher_off [ph_idle@nil] 2. Секции для вентиляторов в all.spwne и их логика: Пример секций в all.spawne для статичных и анимированных моделей: [2358] ; cse_abstract properties section_name = physic_object name = labx7_ventilator_01 position = -99.6182250976563, -14.9479446411133, 73.6351470947266 direction = 0, -1.57079637050629, 0 id = 65535 version = 118 script_version = 7 spawn_id = 8959 ; cse_alife_object properties game_vertex_id = 2870 level_vertex_id = 974 object_flags = 0xffffff3a custom_data = <<END [collide] ignore_static [logic] cfg = scripts\alex_mod\lab_x7_ventilators.ltx END ; cse_visual properties visual_name = alex_mod\objects\lab_x7_ventilator ; cse_ph_skeleton properties skeleton_name = idle ; cse_alife_object_physic properties physic_type = 0x3 mass = 10 fixed_bones = link ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [2362] ; cse_abstract properties section_name = physic_object name = labx7_ventilator_05 position = -75.750862121582, -15.3341751098633, 55.7204208374023 direction = 0, 0, 0 id = 65535 version = 118 script_version = 7 spawn_id = 8963 ; cse_alife_object properties game_vertex_id = 2870 level_vertex_id = 974 object_flags = 0xffffff3a custom_data = <<END [collide] ignore_static END ; cse_visual properties visual_name = alex_mod\objects\lab_x7_ventilator_static ; cse_ph_skeleton properties skeleton_name = ; cse_alife_object_physic properties physic_type = 0x3 mass = 10 fixed_bones = link Логика (для анимированных моделей): [logic] active = ph_idle@ventilators_off [ph_idle@ventilators_off] on_info = {+lab_x7_ventilation_system_turned_on} ph_idle@ventilators_on anim = idle [ph_idle@ventilators_on] anim = work Собственно, вроде все, надеюсь ничего не забыл. Изменено 21 Марта 2015 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 21 Марта 2015 @UnLoaded, проверил оба файла логики - отработка нормальная, но анимки вентиляторов никак не изменяются. upd. Проблему решил. Необходимо было изменить схему работы вентиляторов во второй части, с ph_idle на ph_button. 1 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 21 Марта 2015 (изменено) @UnLoaded, без проблем (проверил сейвами - анимка запоминается): [logic] active = ph_idle@ventilators_off [ph_idle@ventilators_off] on_info = {+lab_x7_ventilation_system_turned_on} ph_button@ventilators_on [ph_button@ventilators_on] anim = work Изменено 21 Марта 2015 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 21 Марта 2015 (изменено) @Charsi, как-то не подумал об этом сразу, спасибо. Вот чего-то крашится такая конструкция: all.spawn: [2147] ; cse_abstract properties section_name = space_restrictor name = labx7_biohazard_space_restrictor position = -81.5000610351563, -7.43783712387085, 86.2225875854492 direction = 0, 0, 0 id = 65535 version = 118 script_version = 7 spawn_id = 8991 ; cse_alife_object properties game_vertex_id = 2870 level_vertex_id = 974 object_flags = 0xffffef3e custom_data = <<END [logic] cfg = scripts\alex_mod\lab_x7_biohazard.ltx END ; cse_shape properties shapes = 1 shape_0:type = box shape_0:axis_x = 80,0,0 shape_0:axis_y = 0,60,0 shape_0:axis_z = 0,0,70 shape_0:offset = 0,0,0 ; cse_alife_space_restrictor properties restrictor_type = 0 Логика: [logic] active = sr_idle@biohazard [sr_idle@biohazard] on_actor_inside = {+lab_x7_ventilation_system_turned_on} nil, {=lab_x7_biohazard_check_actor_outfit -lab_x7_actor_have_bioprotection_outfit} sr_timer@no_bioprotection_outfit, {=lab_x7_biohazard_check_actor_outfit +lab_x7_actor_have_bioprotection_outfit} sr_timer@with_bioprotection_outfit [sr_timer@no_bioprotection_outfit] type = dec start_value = 72000 on_value = 0 | nil %=aes_kill_actor% on_actor_outside = sr_idle@biohazard on_info = {+lab_x7_ventilation_system_turned_on} nil string = lab_x7_biohazard_attention [sr_timer@with_bioprotection_outfit] type = dec start_value = 144000 on_value = 0 | nil %=aes_kill_actor% on_actor_outside = sr_idle@biohazard on_info = {+lab_x7_ventilation_system_turned_on} nil string = lab_x7_biohazard_attention Скрипт: function lab_x7_biohazard_check_actor_outfit() local outfit = db.actor:item_in_slot(6) if outfit:section() == "ecolog_outfit" or outfit:section() == "protection_outfit" or outfit:section() == "seva_outfit" or outfit:section() == "medic_seva_outfit" or outfit:section() == "svoboda_scientific_outfit" or outfit:section() == "dolg_scientific_outfit" then db.actor:give_info_portion("lab_x7_actor_have_bioprotection_outfit") else return false end end Изменено 21 Марта 2015 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 23 Марта 2015 Нужно как-то подправить данную схему, последняя часть явно не выполняется: [logic] active = ph_button@ventilation_system_off [ph_button@ventilation_system_off] anim_blend = false anim = button_false tooltip = lab_x7_ventilation_system_switcher on_press = ph_button@ventilation_system_on %=play_snd_from_obj(10015:ambient\switch_1) +lab_x7_ventilation_system_turned_on% [ph_button@ventilation_system_on] anim_blend = false anim = button_true on_info = {+lab_x7_ventilation_system_turned_on} sr_idle@ventilators_timer [sr_idle@ventilators_timer] on_timer = 15000 | %+lab_x7_ventilation_system_turned_on_play_snd% | 0 | nil %+lab_x7_ventilation_system_worked% Пробовал как вариант: [sr_idle@ventilators_timer] type = dec start_value = 15000 on_value = 13000 | %+lab_x7_ventilation_system_turned_on_play_snd% | 0 | nil %+lab_x7_ventilation_system_worked% Но он по-ходу тоже не пашет, к тому же перебивает уже действующий таймер выводимый на худ. aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 23 Марта 2015 (изменено) @Nazgool, постараюсь изложить всю схему кратко: ГГ находясь внутри рестриктора "получает" таймер, по истечении которого - собственно погибает. Если до окончания отсчета жмет определенную кнопку, проигрывается "привязанный" к ней звук, передается инфа для смены анимации на моделях вентиляторов. Запускается второй, скрытый таймер. Он дает два инфопоршня 1-ый - на проигрывание зацикленного звука на вентиляторах, 2-ой, отключает таймер (т.к. нужна некоторая задержка). Остальные схемы (на всякий случай): [logic] active = sr_idle@biohazard [sr_idle@biohazard] on_actor_inside = {+lab_x7_ventilation_system_worked} nil, %=lab_x7_biohazard_check_actor_outfit% {-lab_x7_actor_have_bioprotection_outfit} sr_timer@no_bioprotection_outfit, %=lab_x7_biohazard_check_actor_outfit% {+lab_x7_actor_have_bioprotection_outfit} sr_timer@with_bioprotection_outfit [sr_timer@no_bioprotection_outfit] type = dec start_value = 120000 on_value = 5 | %=play_snd(heart\2)% | 0 | nil %=aes_kill_actor% on_actor_outside = sr_idle@biohazard on_info = {+lab_x7_ventilation_system_worked} nil string = lab_x7_biohazard_attention [sr_timer@with_bioprotection_outfit] type = dec start_value = 155000 on_value = 5 | %=play_snd(heart\2)% | 0 | nil %=aes_kill_actor% on_actor_outside = sr_idle@biohazard on_info = {+lab_x7_ventilation_system_worked} nil string = lab_x7_biohazard_attention [logic] active = ph_idle@ventilators_off [ph_idle@ventilators_off] on_info = {+lab_x7_ventilation_system_turned_on} ph_button@ventilators_on_anim [ph_button@ventilators_on_anim] on_info = {+lab_x7_ventilation_system_turned_on_play_snd} ph_sound@ventilators_on_snd anim = work [ph_sound@ventilators_on_snd] snd = lab_x7_ventilations_run looped = true Изменено 23 Марта 2015 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 23 Марта 2015 (изменено) @Charsi, не стал пихать on_timer в схему ph_button т.к. думал, что она ее не поддерживает. @Nazgool, подправил. Без изменений. Похоже инфопоршни вообще не выдаются. А что по поводу это схемы: [logic] active = ph_idle@ventilators_off [ph_idle@ventilators_off] on_info = {+lab_x7_ventilation_system_turned_on} ph_button@ventilators_on_anim [ph_button@ventilators_on_anim] anim = work on_info = {+lab_x7_ventilation_system_turned_on_play_snd} ph_sound@ventilators_on_snd [ph_sound@ventilators_on_snd] snd = lab_x7_ventilations_run looped = true Звук будет проигрываться? Или нужно юзать play_snd_from_obj? Но она вроде как завязана на id-шник объекта. А эта логика используется на многих объектах одновременно. Изменено 23 Марта 2015 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 23 Марта 2015 (изменено) @Nazgool, оказывается в данной схеме нельзя использовать числовые приставки после on_timer. Значит придется разбивать на две схемы. @Charsi, а как бы обойтись без указания айдишника? Или их можно перечислить подряд. Изменено 23 Марта 2015 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 24 Марта 2015 (изменено) @UnLoaded, именно так все и планировалось. И главная проблема даже не в том, как выдать тот или иной инфопоршень, а как зацикленно проигрывать звук на вентиляторах, учитывая то, что их много, а логика на всех одна. И, кстати, кнопка никак не "гудела" бы, у нее один айдишник, а у вентиляторов другие. Короче, попробую-ка я замутить все это дело через рестрикторы "подвешанные" к вентиляторам. Разрабы так вроде делали. upd. C рестрикторами тоже вышел облом. Звук не в какую не хочет проигрываться, хотя схема явно работает. Более того, я спокойно "подвесил" аналогичную на матюгальник - исполняющий роль сирены. В общем, выложу все, что написал. Тут люди куда умнее меня в этих вопросах заглядывают, может увидят то, что я упустил: Схема "биозагрязнения" (рестриктор): [logic] active = sr_idle@biohazard_start_timer ;Делаем небольшую задержку перед запуском всей схемы [sr_idle@biohazard_start_timer] on_timer = 4000 | sr_idle@biohazard_start ;Проверяем включена ли сис. вентиляции, какой на ГГ надет костюм [sr_idle@biohazard_start] on_actor_inside = {+lab_x7_ventilation_system_worked} nil, %=lab_x7_biohazard_check_actor_outfit% {-lab_x7_actor_have_bioprotection_outfit} sr_timer@no_bioprotection_outfit, %=lab_x7_biohazard_check_actor_outfit% {+lab_x7_actor_have_bioprotection_outfit} sr_timer@with_bioprotection_outfit ;Таймер - запускаемый при отключенной сис. вентиляции и отсутствии у ГГ костюма высокой степени биозащиты [sr_timer@no_bioprotection_outfit] type = dec start_value = 120000 on_value = 5 | %=play_snd(heart\2)% | 0 | nil %=aes_kill_actor% on_actor_outside = sr_idle@biohazard_start ;Сис. вентиляции включена - отключаем таймер on_info = {+lab_x7_ventilation_system_worked} nil string = lab_x7_biohazard_attention ;Таймер - запускаемый при отключенной сис. вентиляции и наличии у ГГ костюма высокой степени биозащиты [sr_timer@with_bioprotection_outfit] type = dec start_value = 155000 on_value = 5 | %=play_snd(heart\2)% | 0 | nil %=aes_kill_actor% on_actor_outside = sr_idle@biohazard_start ;Сис. вентиляции включена - отключаем таймер on_info = {+lab_x7_ventilation_system_worked} nil string = lab_x7_biohazard_attention Выключатель (система аварийной продувки): [logic] active = ph_button@ventilation_system_off ;Система вентиляции отключена [ph_button@ventilation_system_off] anim_blend = false anim = button_false tooltip = lab_x7_ventilation_system_switcher ; При юзании, отыгрываем звук кнопки, выдаем инфопоршень о включении системы вентиляции и отыгрывания звука на вентиляторах on_press = ph_button@ventilation_system_on %=play_snd_from_obj(10015:ambient\switch_1) +lab_x7_ventilation_system_turned_on% ;Система вентиляции включена. Кнопка более не юзабельна [ph_button@ventilation_system_on] anim_blend = false anim = button_true ;Запускаем внутренний таймер на 15 сек., (нужна задержка) по окончании выдаем инфопоршень о том, что сис. вентиляции работает on_timer = 15000 | nil %+lab_x7_ventilation_system_worked% Собственно сами проблемные вентиляторы: 1. Схема смены анимации: [logic] active = ph_idle@ventilators_off ;Вентиляторы отключены. Отыгрывается анимация из all.spawnа. Ожидается запускающий инфопоршень [ph_idle@ventilators_off] on_info = {+lab_x7_ventilation_system_turned_on} ph_button@ventilators_on_anim ;Вентиляторы включены. Заменяем анимацию [ph_button@ventilators_on_anim] anim = work 2. Схема для рестрикторов подвешанных к каждому вентилятору (по аналогии используеой разрабами в бункере под Радаром): Спавн секция (образец): [2370] ; cse_abstract properties section_name = space_restrictor name = labx7_ventilators_sound_space_restrictor position = -99.5400009155273, -14.9499998092651, 73.620002746582 direction = 0, 0, 0 id = 65535 version = 118 script_version = 7 spawn_id = 8994 ; cse_alife_object properties game_vertex_id = 2870 level_vertex_id = 987 object_flags = 0xffffff3e custom_data = <<END [logic] cfg = scripts\alex_mod\lab_x7_ventilators_sound.ltx END ; cse_shape properties shapes = 1 shape_0:type = sphere shape_0:offset = 0,0,0 shape_0:radius = 1 ; cse_alife_space_restrictor properties restrictor_type = 3 Логика: [logic] active = sr_idle@ventilators_off ;Вентиляторы отключены. Ожидается запускающий инфопоршень [sr_idle@ventilators_off] on_info = {+lab_x7_ventilation_system_turned_on} ph_sound@ventilators_on ;Устанавливаем зацикленный звук для вентиляторов [ph_sound@ventilators_on] snd = lab_x7_ventilators_run looped = true Матюгальник - сирена: [logic] active = ph_sound@biohazard_alarm_on ;Система вентиляции отключена. Сирена активна [ph_sound@biohazard_alarm_on] snd = lab_x7_biohazard_alarm looped = true on_info = {+lab_x7_ventilation_system_turned_on} ph_sound@biohazard_alarm_off ;Система вентиляции включена. Отключаем сирену [ph_sound@biohazard_alarm_off] snd = lab_x7_biohazard_alarm looped = false on_signal = sound_end| nil Все инфопоршни зареганы, звуки прописаны в sound_sheme.script. Изменено 24 Марта 2015 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 24 Марта 2015 (изменено) @Nazgool, подсунул заведомо рабочий звук - из пяти рестрикторов с одинаковой логикой и настройками, он проигрывается только на одном. Свой звук, на всякий случай, снова прогнал через СДК - он вообще не работает. Ничего не понимаю. Изменено 24 Марта 2015 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение
Silver Raven 197 Опубликовано 24 Марта 2015 @Charsi, что-то я не совсем понял, что значит "скриптом создавать свой звуковой объект", это как? aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Поделиться этим сообщением Ссылка на сообщение