AKKK1 6 Опубликовано 9 Июля 2009 Уважаемые корифеи рассуждая о системе A-Live и AI НПС игры S.T.A.L.K.E.R я пришел к следуюшим выводам поправте если неправ. Моды разблокирующие A-Live не решают проблему хотя и вносят разнообразие в игровой процес.Первой мыслью было было то что не гулаги должны выбирать подходяшего НПС а нпс гулаг примерно вот так лагерь новичков новички сидят у костра часов в 6 встают и покидают лагерь (гулаг) отправляясь охотится и.т.д тойсть переходят под дефолтную либо свою логику а нагулявшись возврашаются назад к костру если место в гулаге свободно либо в любой другой гулаг kamp Но выяснилось что это невозможно без роспуска гулага .Спасибо Wawka и другим ответившим на мои дилетанские вопросы Wawka еше раз спасибо подсказал решение а именно использовать вот эту функцию из фаила xr_conditions -- ---------------------------------------------------------------------------------------------------- -- amk function -- ---------------------------------------------------------------------------------------------------- function time_hours() if level.get_time_hours() >= 5 and level.get_time_hours() <= 22 then return true -- день else return false -- ночь end end переделав ее в function time_testow() if level.get_time_hours() >= 6 and level.get_time_hours() < 8 then return true -- отдых else return false -- end end создав НПС в ал спавне [1] ; cse_abstract properties section_name = stalker name = testow position = -209.755249,-20.444433,-153.096436 direction = 0.062321275472641,0.00316426996141672,0.0140644172206521 ; cse_alife_trader_abstract properties money = 5000 character_profile = amk_test_testow ; cse_alife_object properties game_vertex_id = 8 distance = 2.79999995231628 level_vertex_id = 8190 object_flags = 0xffffffbf custom_data = <<END [logic] cfg = scripts\testow.ltx [smart_terrains] none = true [spawn] wpn_toz34 ammo_12x76_zhekan = 4 medkit = 3 kolbasa END ; cse_visual properties visual_name = actors\soldier\soldier_bandana_3 ; cse_alife_creature_abstract properties g_team = 0 g_squad = 1 g_group = 5 health = 1 dynamic_out_restrictions = dynamic_in_restrictions = upd:health = 1 upd:timestamp = 0x660a0d30 upd:creature_flags = 0x69 upd:position = -209.25016784668,-20.0724010467529,-141.015487670898 upd:o_model = 0 upd:o_torso = 0.00316426996141672,0.062321275472641,0 upd:g_team = 0 upd:g_squad = 1 upd:g_group = 5 ; cse_alife_monster_abstract properties upd:next_game_vertex_id = 65535 upd:prev_game_vertex_id = 65535 upd:distance_from_point = 0 upd:distance_to_point = 0 ; cse_alife_human_abstract properties predicate5 = 0,0,0,0,1 predicate4 = 1,1,2,1 ; cse_ph_skeleton properties upd:start_dialog = ; se_stalker properties прописав точки пути [testow_walk] points = p0,p1,p2,p3 p0:name = wp00 p0:flags = 0x4 p0:position = -209.755249,-20.444433,-153.096436 p0:game_vertex_id = 61 p0:level_vertex_id = 43262 p0:links = p1(1) p1:name = wp01 p1:flags = 0x2 p1:position = -206.181992,-20.517683,-148.460022 p1:game_vertex_id = 61 p1:level_vertex_id = 46562 p1:links = p2(1) p2:name = wp02 p2:flags = 0x1 p2:position = -191.232422,-20.038328,-148.739609 p2:game_vertex_id = 46 p2:level_vertex_id = 60449 p2:links = p3(1) p3:name = wp03 p3:flags = 0x1 p3:position = -182.478073,-20.137499,-143.810410 p3:game_vertex_id = 46 p3:level_vertex_id = 68212 p3:links = p0(1) прописав в scripts\testow.ltx [logic] active = kamp [kamp] on_info = {=time_testow} walker center_point = esc_lager_camp_center path_walk = esc_lager_camp_center_task soundgroup = esc_lager meet = meet@lager active = walker [walker] on_info = {!time_testow} kamp path_walk = testow_walk точки esc_lager_camp_center и esc_lager_camp_center_task тупо взяты из путей гулага esc_lager в итоге наш НПС test_testow с начала игры сидит у костра с новичками а в 6 часов отправляется патрулировать (проверенно) теперь хочу заставить его свинюшек вынести ( на которых волк квест дает ) нечего меченому ерундой заниматся ну и ночью пускай спит в подвале к чему я все это понаписал ? просто как мне кажется на базе всего этого можно много чего сделать для улучшения S.T.A.L.K.E.R Так как я не разбираюсь в скриптах может стоит создать отдельную тему в которой создав с нуля общего НПС тамогочи эдакого при помощи знающих товарищей и их и наших идей попытатся написать ему достаточно сложную логику-расписание хотябы для кордона ? спасибо за внимание с уважением АККК1 Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 9 Июля 2009 Vano_Santuri Если я правильно понимаю то создав некую универсальную логику допустим с 23 до 5 сплю потом у костра завтракую потом делами занимаюсь наверно можно например здесь [logic] active = kamp [kamp] on_info = {=time_testow} walker вместо walker была какая нибудь переменная или функция заставляюшая нпс рандомно выбрать какуюто схему из нескольких ? center_point = esc_lager_camp_center path_walk = esc_lager_camp_center_task soundgroup = esc_lager meet = meet@lager active = walker [walker] on_info = {!time_testow} kamp path_walk = testow_walk и прикрутив ее к уже имеюшимся НПС допустим новичкам в лагере они и респаунится будут с ней ? И еше наличее в игре таких персонажей как отец диодор наталкивает на мысль что изначально они должны были находится под своей достаточно сложной эксклюзивной логикой (худ,диалоги и т.д) и им респаун не нужен но почемуто это не сделали Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 26 Августа 2009 1. нафиг не нужно вернее ни на что не влияет лиш бы была цифра отличная от нуля например 0.00000001 2. Настройка логики 3ч cond = список условий, которые необходимы для создания гулага {+info –info =func !func} – если условие не выполняется, то гулаг распускается, а все его подопечные начинают управляться прописанной в custom_data логикой. Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 26 Августа 2009 cond = Нужно только если гулаг должен образоватся после неких действий или событий В остальных случаях можно без него Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 4 Ноября 2009 Мне кажется что смена смарта гулага у волка прописанна в алл спавне а не в логике гулага. Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 5 Ноября 2009 (изменено) GrozoMurr А что он по твоему должен был делать ? arkawa Если НПС принадлежит гулагу то в логике загрузки работ этого гулага для этого нпс нужно добавить секцию (схему поведения) с нужными координатами (не важно на какой локации) и условия переключения на эту схему Если НПС использует собственную логику тоже самое только для его логики Это если без редактирования алл спавн Хотя вру точки путей всеравно в алл спавн править Изменено 5 Ноября 2009 пользователем AKKK1 Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 8 Ноября 2009 arkawa Помешай своего НПС в алл спавн следуюшим номером после последнего и не парься Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 9 Ноября 2009 arkawa У меня при разборке алл спавн появляется несколько файлов вида alive_101_escape.ltx alive_102_garbage.ltx ..... way_101_escape.ltx way_102_garbage.ltx и т.д открываем нужный например alive_101_escape.ltx и в конец вставляем свою секцию [912] ; cse_abstract properties section_name = boar_weak name = esc_boar_weak position = -93.2209701538086,-8.91001605987549,5.93973970413208 direction = -0.0755249038338661,-0.00769974943250418,-0.101696774363518 ; cse_alife_object properties game_vertex_id = 73 distance = 20.2999992370605 level_vertex_id = 170160 object_flags = 0xffffffbf custom_data = <<END [smart_terrains] esc_small_home2 = true END ; cse_visual properties visual_name = monsters\mutant_boar\mutant_boar ; cse_alife_creature_abstract properties g_team = 0 g_squad = 0 g_group = 0 health = 1 dynamic_out_restrictions = dynamic_in_restrictions = upd:health = 1 upd:timestamp = 0 upd:creature_flags = 0 upd:position = -93.2209701538086,-8.91001605987549,5.93973970413208 upd:o_model = 0 upd:o_torso = -0.00769974943250418,-0.0755249038338661,0 upd:g_team = 0 upd:g_squad = 0 upd:g_group = 0 ; cse_alife_monster_abstract properties upd:next_game_vertex_id = 65535 upd:prev_game_vertex_id = 65535 upd:distance_from_point = 0 upd:distance_to_point = 0 ; cse_ph_skeleton properties ; cse_alife_monster_base properties ; se_monster properties [913] номер последней секции ; cse_abstract properties section_name = boar_weak name = esc_boar_weak_0003 position = -94.6008682250977,-8.94169330596924,7.42665243148804 direction = 0.100122138857841,0.000937749689910561,-0.00938144978135824 ; cse_alife_object properties game_vertex_id = 73 distance = 21 level_vertex_id = 168210 object_flags = 0xffffffbf custom_data = <<END [smart_terrains] esc_small_home2 = true END ; cse_visual properties visual_name = monsters\mutant_boar\mutant_boar ; cse_alife_creature_abstract properties g_team = 0 g_squad = 0 g_group = 0 health = 1 dynamic_out_restrictions = dynamic_in_restrictions = upd:health = 1 upd:timestamp = 0 upd:creature_flags = 0 upd:position = -94.6008682250977,-8.94169330596924,7.42665243148804 upd:o_model = 0 upd:o_torso = 0.000937749689910561,0.100122138857841,0 upd:g_team = 0 upd:g_squad = 0 upd:g_group = 0 ; cse_alife_monster_abstract properties upd:next_game_vertex_id = 65535 upd:prev_game_vertex_id = 65535 upd:distance_from_point = 0 upd:distance_to_point = 0 ; cse_ph_skeleton properties ; cse_alife_monster_base properties ; se_monster properties [914] моя секция ; cse_abstract properties section_name = smart_terrain name = esc_umnik position = -254.902908325195,-18.070499420166,-116.293899536133 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 8 distance = 15 level_vertex_id = 8190 object_flags = 0xffffffbe custom_data = <<END [smart_terrain] type = esc_umnik capacity = 1 groups = 0,5 END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 9.99999974737875e-005 ; cse_alife_space_restrictor properties restrictor_type = 3 ; se_smart_terrain properties Да и может у тебя АС\ДС неправильный я пользуюсь этим http://letitbit.net/download/1357.dfb1544a...cdc_x1.rar.html Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 9 Ноября 2009 Что то я не понимаю чего вы хотите объяснить ? Волк персонаж гулага и использует предназначеную ему работу а так же логику соответствующую этой работе Если персонаж не должен входить в гулаге ему пишется личная логика хоть в алл спавне хоть в отдельном файле(что значительно удобней) Да и кто такой Халецкий ? Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 20 Марта 2010 Таак... С назначением и содержимым файла npc_profile.xml худо-бедно я разобрался. Но вот файл spawn_sections.ltx для меня пока - темный лес. Судя по моим тестам, он нужен только при спавне скриптом, ибо через алл спавн все спавнится отлично и без него. Прав ли я? :ny_mellow: Уточню файл spawn_sections.ltx используется респаунами из алл спавна [2130] ; cse_abstract properties section_name = respawn name = gar_bandit_respawn_1 position = -255.842391967773,0.402019500732422,-16.2054500579834 direction = -0.020167512819171,3.69857480109204e-005,0.00183404912240803 ; cse_alife_object properties game_vertex_id = 309 distance = 9.09999942779541 level_vertex_id = 7422 object_flags = 0xffffff3e custom_data = <<END [respawn] conditions = 0 respawn_section = gar_bandit_respawn_1,3,gar_bandit_respawn_2,2 имена секций из файла spawn_sections.ltx ;max_count = 12 ;min_count = 5 max_spawn = 2 idle_spawn = medium END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 1 ; cse_alife_space_restrictor properties restrictor_type = 0 ; se_respawn properties Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 12 Апреля 2010 level_prefix_lights_hanging_lamp Может должен быть какой то дополнительный параметр типа level_prefix_physic_object0023 ну и по анологии level_prefix_lights_hanging_lampномер ? Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 12 Апреля 2010 может не по счету а по номеру ? иначе как опредилить конкретный обьект вот секция алл спавн [3441] ; cse_abstract properties section_name = inventory_box name = level_prefix_inventory_box position = 36.921272277832,-2.95341014862061e-005,130.78678894043 direction = 1.84774387435027e-006,1.76154971122742,7.45058628126571e-008 ; cse_alife_object properties game_vertex_id = 1308 distance = 0 level_vertex_id = 67569 object_flags = 0xffffff3b custom_data = <<END [logic] cfg = scripts\treasure_inventory_box.ltx END story_id = 5455 ; cse_visual properties visual_name = physics\equipment_cache\equipment_rucksack_01_case [3442] ; cse_abstract properties section_name = inventory_box name = level_prefix_inventory_box_0000 position = 10.4646062850952,-0.00433962652459741,147.542205810547 direction = 0.160875856876373,0,0 ; cse_alife_object properties game_vertex_id = 1308 distance = 0 level_vertex_id = 67569 object_flags = 0xffffff3b custom_data = <<END [logic] cfg = scripts\treasure_inventory_box.ltx END story_id = 5456 ; cse_visual properties visual_name = physics\equipment_cache\equipment_cross_2_case [3443] ; cse_abstract properties section_name = inventory_box name = level_prefix_inventory_box_0001 position = 11.5783624649048,0.215898931026459,144.25813293457 direction = -0.0601445436477661,-1.88714861869812,0.0161435827612877 ; cse_alife_object properties game_vertex_id = 1308 distance = 0 level_vertex_id = 67569 object_flags = 0xffffff3b ; cse_visual properties visual_name = physics\equipment_cache\equipment_instrument_case_01_case [3444] ; cse_abstract properties section_name = inventory_box name = level_prefix_inventory_box_0002 position = -84.5407104492188,0.158000752329826,160.422470092773 direction = 0.000516280590090901,-1.74563145637512,-0.00292284996248782 ; cse_alife_object properties game_vertex_id = 1308 distance = 0 level_vertex_id = 67569 object_flags = 0xffffff3b custom_data = <<END [logic] cfg = scripts\treasure_inventory_box.ltx END story_id = 5457 ; cse_visual properties visual_name = physics\equipment_cache\equipment_box_02_case Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 15 Апреля 2010 (изменено) Как то так наверно можно function имя_имя() local tbl = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 (или 0 незнаю как правильно)} for k,v in ipairs( tbl ) do if level.get_time_hours() == v then return true end end return false end Изменено 15 Апреля 2010 пользователем AKKK1 Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 4 Мая 2010 А combat_ignore = combat_ignore Непомагает ? 3.3.6. Секция combat_ignore Если NPC в этой схеме то он, не переходит в боевой режим. В любой другой схеме: [walker] combat_ignore_cond = {+info –info =func !func} – условия для игнорирования боя (если написать always, то в данной схеме игрок будет игнорировать бой всегда, пока не перейдет в схему, где бой не игнорируется). как пример часть логики Шустрого ;Шустрый [logic@esc_lager_shustryi] active = camper@esc_lager_prisoner combat_ignore = combat_ignore [camper@esc_lager_prisoner] path_walk = prisoner_walk path_look = prisoner_look combat_ignore_cond = always def_state_campering = prisoner on_info = {=esc_bandits_die} remark@esc_lager_help on_info2 = {+tutorial_wounded_give_info} sleeper4@esc_lager meet = no_meet danger = danger_condition@shustryi Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 4 Мая 2010 как-то так свободовец на вышке [camper1@mil_freedom_sniper3] path_walk = camp_walk10 path_look = camp_look10 radius = 20 on_info = {-mil_freedom_under_attack} walker1@mil_freedom_sniper3 sniper = true wounded = wounded_ignore@mil_sniper [danger_condition@mil_freedom_sniper3] ignore_distance = 0 ignore_types = corpse Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 9 Мая 2010 Arhara да действительно так кто нибуть знает что означает выделенная секция [2212] ; cse_abstract properties section_name = smart_terrain name = val_smart_bandit_3 position = -157.100021362305,1.30701446533203,-187.956161499023 direction = -0.0479185096919537,0.00413977820426226,0.0862113907933235 ; cse_alife_object properties game_vertex_id = 862 distance = 9.09999942779541 level_vertex_id = 8628 object_flags = 0xffffff3e custom_data = <<END [smart_terrain] type = general_lager capacity = 5 communities = dolg cond = {+bar_darklab_document_done} stay = medium [random_task] defend_target = 3001 END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 1 ; cse_alife_space_restrictor properties restrictor_type = 0 ; se_smart_terrain properties Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 10 Мая 2010 (изменено) Сталкер@Гашетка Файлы character_desc_general character_desc_zaton character_desc_jupiter character_desc_pripyat character_desc_underpass папка gamedata\configs\gameplay возможно что то в алл спавне напрямую прописанно Изменено 10 Мая 2010 пользователем AKKK1 Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 14 Мая 2010 Возможно он стоит там где нет аи сетки хотя не факт Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 23 Мая 2010 Мне кажется все из за волка 1 в алл спавне задается его стори ид 2 в алл спавне условия нахождения его в лагере впрочем легко проверить попробуй подключать свои скрипты по одному Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 1 Июля 2010 Такой способ может иметь неприятные последствия дело в то если петруха сразу после убийства бандитов переключится на новый смарт он может не успеть сообшить волку о уничтожении бандитов (сообщает при уничтожении и растоянии до гг 10м вроде) Наверно легче просто в алл спавн изменить координаты его работы для 4 состояния гулага } table.insert(sj, t) t = { section = "logic@esc_assault_kamp", логика idle = 0, prior = 10, state = {4}, online = true, in_rest = "", out_rest = "", predicate = function(obj_info) return obj_info.name == "esc_novice_attacker1" end } table.insert(sj, t) end [logic@esc_assault_kamp] active = kamp@esc_assault_kamp [kamp@esc_assault_kamp] center_point = kamp_center1 meet = meet@friend нужно найти в файле вай ескейп точку esc_assault_kamp_center1 и поменять координаты на координаты лагеря Поделиться этим сообщением Ссылка на сообщение