ColR_iT 171 Опубликовано 14 Апреля 2012 Roman82, только что проверил - всё работает! Вот содержимое моего файла: function have_n_items(section,number) if number == nil then number = 1 end local actor = db.actor if actor then local cnt=0 actor:iterate_inventory(function (dummy, item) if item:section()==section then cnt=cnt+1 end end, nil) return cnt>=number end return false end function have_1_medkit() if have_n_items("medkit_army",1) then log1("--Have medkit") else log1("!!Not have medkit") end end function have_2_tushenka() if have_n_items("conserva",2) then log1("--Have two conserva") else log1("!!Not have conserva") end end function have_2_bread() if have_n_items("bread",2) then log1("--Have two bread") else log1("!!Not have bread") end end function have_ammo() if have_n_items("ammo_5.45x39_ap",2) then log1("--Have two ammo") else log1("!!Not have ammo") end end function have_grenade() if have_n_items("grenade_rgd5",2) then log1("--Have two grenade") else log1("!!Not have grenade") end end function check_all () have_1_medkit() have_2_tushenka() have_2_bread() have_ammo() have_grenade() end Функция log1 выводит в консоль текст в скобках и при вызове функции check_all из диалога, я в консоли увидел пять строк: Have medkit Have two conserva Have two bread Have two ammo Have two grenade Так что делай выводы. Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 26 Апреля 2012 (изменено) Вампир35, использую для активной схемы твоего НПС параметр combat_ignore_cond и укажи его значение как always. Вот готовый пример, но я бы рекомендовал тебе посмотреть его, чтобы сравнить, правильно ли сделал ты: [logic] active = walker@phlegmatic_person [walker@phlegmatic_person] path_walk = phlegmatic_person_walk path_look = phlegmatic_person_look combat_ignore_cond = always Предполагается, что схема walker@phlegmatic_person является активной. Изменено 26 Апреля 2012 пользователем ColR_iT Поправил... Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 27 Апреля 2012 (изменено) xxx5, всё очень просто. Мужик этот это НПС с именем в all.spawn bar_bar_visitors_2_1. У него своя логика, она не большая: [smart_terrains] none = true [logic] active = walker [walker] path_walk = bar_bar_square_2_place_1_walk path_look = bar_bar_square_2_place_1_look soundgroup = bar_visitors1 meet = meet danger = danger_ignore [danger_ignore] ignore_distance = 0 [meet] use = true use_wpn = true meet_talk_enabled = true [spawner] cond = {+bar_bar_square_2_state_1} Так вот ключевым элементом для твоего вопроса является секция spawner. Как видишь в ней стоит условие на спавн, а именно наличие инфопорции bar_bar_square_2_state_1, выдаётся этот инфопоршень при входе в рестриктор с именем bar_bar_entry_zone по всей видимости с вероятностью 33% (логика этого рестриктора вынесена в файл bar_entry_zone.ltx). Если НПС уже заспавнен, но условие спавна не не выполнилось, т.е. у игрока отсутствует данная инфопорциял, то НПС будет переведёт в оффлайн. Собственно подобным образом можно делать с любым НПС. Изменено 27 Апреля 2012 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 27 Апреля 2012 xxx5, а к чему вообще расстояние тут!? Где тебе удобно там и ставь. Дописываешь Сидору секцию. Если сделаешь всё правильно - получишь желаемый результат. Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 27 Апреля 2012 Serafim666, в игре, гильзы - это партикл, собственно время жизни партикла и ограничивает время видимости гильзы. Если нужно изменить, то это в SDK, Particle Editor. Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 27 Апреля 2012 FANAT, тоже ничего сложного. Ставишь НПС лицом к стойке, приблизительно на расстояние в 0.25 м от неё и используешь анимации из серии: bar_fas, bar_left, bar_head, bar_sleep, bar_right. Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 28 Апреля 2012 (изменено) Вампир35, кладёшь твой .ogg файл в папку sounds\characters_voice\dialogs и называешь его так же, как называется текст твоей фразы в диалоге (тег <text>). Т.е. если у тебя в диалоге есть фраза, вида:<phrase id="1"> <text>my_text_dialog</text> <next>2</next> </phrase> то твою озвучку нужно "обозвать" как my_text_dialog.ogg. Изменено 28 Апреля 2012 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 28 Апреля 2012 SkyLoader, это так, но за окном диалога этого всё равно практически не видно. FANAT, главное, чтобы он лежал по этому пути и назывался также как текст фразы. Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 28 Апреля 2012 (изменено) Starter, вряд ли возможно. Диалог (тот который инициирует игрок, либо сам НПС, т.е. оконный) никак не связан с анимациями. Можно попытаться использовать схему remark и запускать анимацию и звук через неё, саму схему же можно активировать благодаря инфопорции, который можно выдать при начале разговора или конкретной фразы. Изменено 28 Апреля 2012 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 7 Мая 2012 (изменено) S@n 1. В лагере новичков, визуал могут повторяться, поскольку для НПС используется всего 10 профилей esc_stalker_novice_default<1-10>, но все находятся под одним классом esc_stalker_novice, а игра выбирает профиль как раз благодаря этому классу, и если профилей несколько выбор падёт случайным образом. Об этом подробно написано здесь: "Система профилей и алгоритм генерации имён". 2. Для того, чтобы добавить ещё НПС в лагерь необходимо либо править гулаг, либо добавлять "самостоятельных" НПС с их логикой сидения у костра. Об обоих случаях можно почитать здесь: "Настройки логики", там в четырёх частях, читать много, но расписано достаточно подробно. Добавлено через 47 мин.: Daemonion, покажи как ты добавлял новую звуковую тему в файл sound_theme.script. Хотя на самом деле ничего не понятно из того, что ты спросил... На сколько сильно перекрывают, и перекрывают ли вообще, друг друга зоны с именами esc_sr_a1, esc_sr_a9, esc_sr_a10 вместе с зоной в которой прописана указанная логика? Изменено 7 Мая 2012 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 11 Мая 2012 (изменено) Zander_driver, так сложилось, что технически телепорты практически не относятся к аномалиям. Сейчас объясню... Телепорт состоит из двух частей: это непосредственно zone_teleport и space_restrictor. Так вот zone_teleport отвечает лишь за визуальную часть и только, а вот как раз таки рестриктор и телепортирует игрока в пределах уровня, используя схему sr_teleport. А для рестрикторов можно задавать не один шейп и как ты их поставишь, там и будет реакция на ГГ. И кстати телепортацию можно сделать не в одно место. Схема поддерживает до десяти точек конечного направления. Изменено 11 Мая 2012 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 11 Мая 2012 FANAT Немного с запаздыванием, но всё же... В ТЧ есть схема zoneguard. Это схема как раз и реализует возможность "потыкать" оружием в актора, если тот зайдёт на определённую зону. Можешь почитать об этом здесь: "Настройки логики". Хотя по большому счёту, реализовать некий гоп-стоп можно и при помощи других схем. Что касается появления Толика, то в онлайн он выводится, как только актор получит инфопорцию tutorial_wounded_start, по которой переключается его работа в гулаге esc_corps. Для данного гулага два состояния, и две одинаковые работы, с небольшой разницей - в первой, для параметра online, стоит значение false, во второй же true. Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 18 Мая 2012 (изменено) AndreySol, для метки, а именно функции map_add_object_spot_ser, которая ставит метку на серверный объект необходим не сюжетный идентификатор (story_id), а его id. Определить id заспавненого НПС можно как раз при его спавне: --# Здесь будем хранить local id_npc = nil function spawn_npc_test() --# определяем серверный объект заспавненного НПС local s_obj = alife():create("agr_stalker_regular",vector():set(-125.603,-3.734,-87.740),127146,72) --# Для валидности if s_obj then --# Запоминаем id_npc = s_obj.id end end Ну а потом уже и используем её для того, чтобы поставить метку на этого НПС. green_location и blue_location - это название метки зарегистрированное в файле config\ui\map_spots.xml. Атаман, есть несколько способов. Вероятно, самым простым для тебя, будет отредактировать секцию актора в all.spawn, дописав ему в секцию [spawn] нужные предметы. Изменено 18 Мая 2012 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 19 Мая 2012 AndreySol, да вопрос я как раз таки понял, вот только упустил момент, что метка ставится через менеджер заданий. Теперь по существу... Очень похоже, что менеджер заданий просто не может правильно связать story_id, зарегистрированный в game_story_ids.ltx, с конкретным НПСом.А как по твоему они (story_id и конкретный НПС) должны "связаться"? Посредством ментальной связи? Естественно твоему НПС необходимо присвоить story_id со значением 93, в твоём случае. Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 21 Мая 2012 Artos, позволь не согласится. по поводу "сорности" параметра path_walk. Задание этого значения позволит НПС, после приёма на работу и первом её выполнении, придти именно в эту точку. Это очень полезно для этой схемы, поскольку позволяет избежать ситуации, когда НПС приходит на точку center_point установленной в центре костра. Убедится в этом можно заглянув в файл xr_gulag.script в метод get_job_path_name (248-256 строки оригинального файла). Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 22 Мая 2012 (изменено) Artos, всё же прописанную логику непосредственно в custom_data, тоже можно считать работой. И, к примеру, если в логике есть переход на схему kamp, на которую НПС уйдёт и окажется в оффлайне, то он придёт как раз в точку center_point, а если это костёр, то исход очевиден. Поэтому указание параметра path_walk позволит избежать таковой ситуации. И кроме как в схеме kamp сочетание использования этих двух параметров является бесполезным. gruber, это почему же схема kamp относится только к гулагам, да ещё и универсальным? Ничего подобного! Это такая эе самостоятельная схема, как и walker, и camper, и другие. Она и в modules.script прописана. А то, что она в игре не используется в качестве самостоятельной (в не гулага), так это ничего и не значит. К тому же это оказывается не так. Вот пример со Складов, где схема kamp используется в custom_data НПС: [4972] ; cse_abstract properties section_name = stalker name = mil_freedom_member0001 position = -178.503997802734,-16.9659557342529,352.31005859375 direction = 0,0,0 ; cse_alife_trader_abstract properties money = 5000 character_profile = mil_Svoboda_stukach ; cse_alife_object properties game_vertex_id = 1828 distance = 24.5 level_vertex_id = 144846 object_flags = 0xfffff7ff custom_data = <<END [logic] active = walker0 on_death = death combat_ignore = combat_ignore [walker0] path_walk = mil_freedom_courier_wait_path path_look = mil_freedom_courier_wait_look on_actor_dist_le = 12 | %=killactor% on_info = {+mil_actor_in_khutor_zone} walker1 [walker1] path_walk = mil_freedom_stukach_walk4 path_look = mil_freedom_stukach_look4 on_actor_dist_le_nvis = 12 | %=killactor% on_signal = arrive | remark1 combat_ignore_cond = {=check_fighting(712:713:714:719)} false [remark1] no_rotate = true no_move = true anim = wait_rac snd = mil_pavlik_to_ara on_signal = sound_end | %+mil_courier_call% remark2 on_actor_dist_le_nvis = 12 | %=killactor% target = mil_courier_look_point, 0 combat_ignore_cond = {=check_fighting(712:713:714:719)} false [remark2] anim = guard on_info = {+mil_ara_end} kamp1 on_actor_dist_le_nvis = 12 | %=killactor% target = mil_courier_look_point, 0 combat_ignore_cond = {=check_fighting(712:713:714:719)} false [kamp1] center_point = mil_freedom_khutor_center meet_enable = true meet_dialog = mil_dolg_relax_dialog danger = danger path_walk = mil_freedom_khutor_center_task radius = 3 on_actor_dist_le_nvis = 12 | %=killactor% combat_ignore_cond = {=check_fighting(712:713:714:719)} false [death] on_info = %+mil_courier_dead =mil_paul_frost_dead +sar2_death_33% [danger] ignore_distance = 0 [smart_terrains] none = true [spawn] conserva = 2 medkit = 2 hand_radio [spawner] cond = {+mil_leader_quest2_start} END story_id = 710 ; cse_visual properties visual_name = actors\svoboda\stalker_sv_rukzak_1 ; cse_alife_creature_abstract properties g_team = 11 g_squad = 9 g_group = 0 health = 2 dynamic_out_restrictions = dynamic_in_restrictions = upd:health = 2 upd:timestamp = 0 upd:creature_flags = 0 upd:position = -178.503997802734,-16.9659557342529,352.31005859375 upd:o_model = 0 upd:o_torso = 0,0,0 upd:g_team = 11 upd:g_squad = 9 upd:g_group = 0 ; cse_alife_monster_abstract properties base_out_restrictors = mil_bandit_restrictor base_in_restrictors = mil_mines_restrictor,mil_freedom_wall_restrictor 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 = 2,0,2,2,0 predicate4 = 1,0,1,2 ; cse_ph_skeleton properties upd:start_dialog = ; se_stalker properties Изменено 22 Мая 2012 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 24 Мая 2012 (изменено) AndreySol Я пробовал все "точки", которые есть в описании гулагов для локации КордонА не надо "все", предостаточно одной, причём эту точку необходимо самому поставить на локации, прописав её в файле путей, распакованного all.spawn, а не брать из какого-то файла. P.S. И с чего ты взял, что написанное на "инсайде" применимо только для гулагов. Там описан общий механизм работы, а где он будет применён, в качестве работы в гулаге или же в custom_data твоего НПС, это уже решать тебе. Изменено 24 Мая 2012 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 25 Мая 2012 Sync, а часто ты видишь ГГ в оффлайне? Речь то идёт о изменении местоположения ГГ. Если же отнести эти параметры к НПС, то вероятно так и есть, по правде говоря, я недопонимаю назначение параметров upd:***, было бы не плохо, если бы кто разъяснил... Street-you, а что тебя смутило в этом и что ты понимаешь под словом "приемлемо"? Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 26 Мая 2012 Wookie, вот секция этого рестриктора: Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 26 Мая 2012 AndreySol 1. Благодаря параметру name весь путь парсится (разбивается) на точки. То, что для разных путей название точек повторяется это не критично, главное, чтобы в одном пути имена разных точек не совпали. Если есть желание, имена для точек можешь давать более информативные. 2. Во всех домах в деревне, за исключение разрушенного, отсутствует АИ сетка, а как известно, НПС ходят исключительно по ней. Поделиться этим сообщением Ссылка на сообщение