losiara 13 Опубликовано 16 Декабря 2011 (изменено) Лёха_тц А что разве БТР и вертолеты кроме военных еще кому - нибудь принадлежат??? И то военным сказать УСЛОВНО, по сюжету. А заспавнить их несложно, через скрипт или all.spawn создавая соот секцию. Пример из оригинала с логикой, у тебя она конечно должна быть своя... [7095] ; cse_abstract properties section_name = helicopter name = aes_helicopter position = 902.859313964844,-3.61789155006409,-757.310485839844 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 2273 distance = 0 level_vertex_id = 405033 object_flags = 0xffffffb2 custom_data = <<END [logic] active = heli_move1 on_hit = hit [heli_move1] path_move = aes_heli_attack_desant_walk_begin2 on_info = {+aes_desant_go} heli_move2 engine_sound = false combat_safe_altitude = -100 [heli_move2] path_move = aes_heli_attack_desant_walk2 path_look = aes_heli_attack_desant_look2 invulnerable = true immortal = true on_signal = final | %+aes_desant_wave2% heli_move3 combat_ignore = true mute = true combat_safe_altitude = -100 [heli_move3] path_move = aes_heli_attack_desant_walk2_2 path_look = aes_heli_attack_desant_look2_2 on_actor_in_zone = aes_actor_heli | %=heli_set_enemy_actor% mute = true combat_safe_altitude = -100 on_info = {=heli_health_le(0.3)} heli_move@death [heli_move@death] path_move = heli_death_way invulnerable = true on_signal = arrived | heli_move@silent combat_ignore = true [heli_move@silent] path_move = heli_death_way invulnerable = true engine_sound = false combat_ignore = true [hit] on_info = {+aes_desant_wave2} %+aes_choper_crush_sound =heli_start_flame% END ; cse_visual properties visual_name = physics\vehicles\mi24\veh_mi24_u_01 ; cse_motion properties ; cse_ph_skeleton properties skeleton_name = idle ; cse_alife_helicopter properties cse_alife_helicopter__unk1_sz = idle engine_sound = alexmx\helicopter Изменено 17 Декабря 2011 пользователем ColR_iT Не нужно полностью цитировать предыдущий пост! Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 17 Декабря 2011 (изменено) Вампир35 А зачем строить логику снайпера на Ремарке??? из тутора: Схема sniper Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек. NB! Ставить снайперу только 2 точки look В кастом дате кемпера прописать: sniper = true Пример: [smart_terrains] none = true ;нужно для того что бы НПС не брался гулагом!!! [logic] active = camper [camper] path_walk = patrol_walk path_look = patrol_look sniper = true radius = 50 ;def_state_campering = assault Примерно так... Изменено 17 Декабря 2011 пользователем losiara Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 19 Декабря 2011 (изменено) Добрый день! Прошу помощи относительно работы скрипта. function prov_npc() if db.actor then local armor = db.actor:item_in_slot(6) if (armor ~= nil and armor:section()== "bandit_outfit") then db.actor:set_character_community("bandit", 0, 0) elseif (armor ~= nil and armor:section()== "specops_outfit") then db.actor:set_character_community("military", 0, 0) elseif (armor ~= nil and armor:section()== "dolg_outfit") then db.actor:set_character_community("dolg", 0, 0) else db.actor:set_character_community("actor", 0, 0) end end end function prov_npc() local actor = db.actor local armor = db.actor:item_in_slot(6) if actor:alive() == true and armor and (armor:section() == "bandit_outfit" or armor:section() == "bandit_master_outfit" or armor:section() == "bandit_veteran_outfit" or armor:section() == "bandit_antigas_outfit_m1") then db.actor:set_character_community("bandit", 0, 0) elseif (armor ~= nil and armor:section() == "specops_outfit") then db.actor:set_character_community("military", 0, 0) elseif (armor ~= nil and armor:section() == "dolg_outfit") then db.actor:set_character_community("dolg", 0, 0) else db.actor:set_character_community("actor", 0, 0) end end Предпологается изменение отношения НПС к ГГ при переодевании в соот. броню. Однако, скрипт не работает, ни в первом ни во втором варианте, вопрос почему??? Изменено 19 Декабря 2011 пользователем ColR_iT Не забываем про теги! Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 19 Декабря 2011 Artos Благодарю за подсказку, поскольку опыт работы недостаточный, скрипты также выходят неоптимальные. Ну пока учимся. Да, использоваться будет на ТЧ, поэтому номер слота правильный. Попробую ваш вариант! Ваш вариант работает. Но я перепроверю и первый, наверняка где то что то упустил, хотя синтаксис и правильный. Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 23 Декабря 2011 (изменено) Wik По второму вопросу смотря что тебя интересует, можно через логику в ремарковской схеме: target = Куда смотрит сталкер. Есть следующие варианты story_id – числовое значение actor – без комментариев nil – позиция вычисленная АИ автоматически <имя работы>,<имя гулага> смотреть на сталкера который находится на определенной работе под гулагом (второй параметр необязателен. В этом случае берется гулаг сталкера, для которого задана данная секция ремарка). Пример: target = logic@cit_killers_base_guard, cit_killers <path_name>, <point_number> - можно указывать смотреть в вершину патрульного пути (<имя пути>, <имя точки>). Например: [smart_terrains] none = true [logic] active = remark1 danger = danger_ignore [danger_ignore] ignore_distance = 5 [remark1] no_move = true target = actor; или что тебе необходимо по примеру выше! Изменено 23 Декабря 2011 пользователем losiara Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 27 Декабря 2011 (изменено) Прошу прощения, что бы у товарища не возникало вопросов, самую малость дополню ответ куратора Artos Wik Схема ремарк не используется для постоянной работы НПС, как правило она является переходным этапом от одной к другой схеме. Вот логика, а точнее ее часть "заезженного бедного Волка" на локации Кордон! [logic@esc_lager_volk] active = walker@esc_lager_volk_walker1 ;активная в данный момент схема on_death = death@wolf ;что будет с неписем после его смерт [walker@esc_lager_volk_walker1] path_walk = wolf_walk ;путь где или куда ходит path_look = wolf_look ;куда смотрит - если прописывать валкера с несколькими точками, то это поле задавать необязательно! meet = meet@wolf ;поле для общения, диалога on_actor_dist_le = 23| {+tutorial_wounded_start -esc_kill_bandits_quest_kill} remark@esc_lager_volk1 ;условия для перехода в другую схему, в данном случае в ремарковскую при приблежении ГГ на расстояние 23 метра и выполнения (невыполнения) "+", ;"-" соответствующих инфопоршней on_actor_dist_le_nvis = 5| walker@esc_lager_volk_walker2 ;то же самое, только в схему валкера danger = danger_condition@shustryi ;поведение НПС в опасности (денжере) [remark@esc_lager_volk1] anim = hello_wpn ;анимация snd = esc_wolf_say_thanks ;проигрывающиеся звуковые файлы, конкретно это разговор Волка target = actor ;напрвление взгляда НПС on_signal = sound_end| walker@esc_lager_volk_walker2 ;поле для перехода НПС в другую схему по получению сигнала в данном случае окончание проигрывания музыкального (звукового) файла on_actor_dist_le_nvis = 5| walker@esc_lager_volk_walker2 ;уже объяснялось выше... danger = danger_condition@shustryi ;объяснялось... [walker@esc_lager_volk_walker2] path_walk = wolf_walk path_look = wolf_look meet = meet@wolf on_info = {+esc_kill_bandits_quest_have} remark@esc_lager_volk2 ;поле для перехода в следующую схему ремарк при получении НПС соот. инфопоршня +esc_kill_bandits_quest_have danger = danger_condition@shustryi Делай по анологии. Если тебе необходимо что бы НПС стоял на месте своего спавна, то пропиши ему одну точку path_walk = твое название, тогда даже в случае получения хита, он все равно вернется на свое место!!! Пути прописываются в all.spawn, way...название локации! Изменено 27 Декабря 2011 пользователем losiara Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 27 Декабря 2011 (изменено) Добрый день!!! Возник вопрос относительно логики рестрикторов. По задумке, при входе в рестриктор, проигрывается музыкальная композиция, а через 5 сек. начинается спавн монстров. Вот логика: [logic] active = sr_idle [sr_idle] on_actor_inside = {+new_restriktor} sr_sound %=spawn_zombie_x18% --функция спавна в xr.effects.scripts [sr_sound] snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant idle = 5 delay = 1 Инфопоршень также активирует работу рестриктора. Все бы ничего, но вначале появляются монстры, а потом проигрывается композиция, что не совсем то что мне нужно. Пробовал менять на следующее: [logic] active = sr_idle [sr_idle] on_actor_inside = {+new_restriktor} sr_sound [sr_sound] snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant idle = 5 delay = 1 on_timer = 10000 | sr_sound2 nil %=spawn_zombie_x18% [sr_sound2] snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant idle = 5 delay = 1 on_timer = 10000 | sr_sound3 [sr_sound3] snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant idle = 5 delay = 1 on_timer = 10000 | sr_sound2 Вылет с ссылкой на 20 строку g_скрипта, видимо связанный с nil значением в логике, поскольку происходит именно после первого звука в игре на переключении секций... Я так думаю. Еще вариант: [logic] active = sr_idle [sr_idle] on_actor_inside = {+new_restriktor} sr_sound on_timer = 10000 nil %=spawn_zombie_x18% [sr_sound] snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant idle = 5 delay = 1 Спавн происходит, а звуковая схема не срабатывает... :ny_ph34r_1: Были еще несколько вариантов, но все либо нерабочие, либо наполовину,активируют или звуковую схему или спавн. Подскажите где исправить??? Заранее благодарен! Изменено 27 Декабря 2011 пользователем losiara Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 27 Декабря 2011 Artos Всегда не хватает малости - подсказки!!! Иной раз и коды\описания в подробностях не нужны, а только направить человека в русло... [logic] active = sr_idle [sr_idle] on_actor_inside = {+new_restriktor} sr_sound [sr_sound] snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant idle = 5 delay = 1 on_signal = sound_end | sr_idle@odin ;переключение схемы... [sr_idle@odin] on_timer = 1500 | sr_sound2 %=spawn_zombie_x18% ;спавн... Ок! [sr_sound2] snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant idle = 5 delay = 1 Не совсем оптимально, но именно то что и требовалось. Вошел в рестриктор, проигрался звук, в данном случае устрашающий, через 1,5сек. по окончании звука - спавн зомби. При повторном входе в рестриктор, звуковая схема отрабатывает, но уже без спавна. Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 1 Января 2012 TASTAN Расскажи поподробнее, что ты имеешь ввиду "в диалоге проверить"??? Суть задумки в чем? Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 1 Января 2012 (изменено) Добрый вечер! Возник вопрос относительно скрипта logic переключение схем! В файле xr_conditions есть 2 функции: -- проверка того что дистанция до обьекта <= заданной -- параметры: [sid,dist] function distance_to_obj_le(actor, npc, p) local npc1 = level_object_by_sid(p[1]) if npc1 then local res = npc:position():distance_to_sqr(npc1:position()) <= p[2]*p[2] --printf("xr_cond<distance_to_obj_le>: %s", if_then_else(res, "TRUE", "FALSE")) return res end return false end -- проверка того что дистанция до обьекта >= заданной -- параметры: [sid,dist] function distance_to_obj_ge(actor, npc, p) local npc1 = level_object_by_sid(p[1]) if npc1 then local res = npc:position():distance_to_sqr(npc1:position()) >= p[2]*p[2] --printf("xr_cond<distance_to_obj_ge>: %s", if_then_else(res, "TRUE", "FALSE")) return res end return false end Возможно ли использовать при переключении схем в логике НПС данные функции??? Пример: [smart_terrains] none = true [logic] active=walker danger = danger_ignore [walker] path_walk = yan_stalker_walk_8 path_look = yan_stalker_look_8 on_actor_dist_le_nvis = 10 | walker1;--переключение по сигналу проверки нахождения ГГ на определенном расстоянии... [walker1] path_walk = yan_stalker_walk_88 path_look = yan_stalker_look_88 ????? = 10 | walker2;--переключение при приближении НПС с определенным sidом к другому НПС с этой схемой... ..... [danger_ignore] ignore_distance = 0 Просьба использовать тэги [соde] при публикации кодов в сообщении, дабы и форматирование сохранить и избежать искажений спец.символов парсингом форума. --/Artos Изменено 2 Января 2012 пользователем Artos Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 3 Января 2012 (изменено) TASTAN can_select_items = off can_select_items = on помойму так, тогда не будет выкидывать. И в файле m_stalker, также прописываем: use_single_item_rule = off can_select_items = on что бы НПС не выбрасывали купленное оружие!!! Изменено 3 Января 2012 пользователем losiara Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 3 Января 2012 S.T.A.L.K.E.R-DOLG Никаких проблем!!! Схема kamp Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке. Вариантов много, например: [smart_terrains] none = true [logic] active = kamp [kamp] center_point = kamp_center ;имя точки вокруг которой NPC будет усаживаться. radius = 2;насколько далеко сталкер будет сидеть от центра лагеря, 2- по умолчанию def_state_moving = run ;дефолтное состояние, в котором сталкер будет идети к точке кампа Обычно прописывают под гулагом... Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 4 Января 2012 HellStalkerDog Отчасти ты и сам ответил на свой вопрос!!! Либо координаты неправильно снял, либо в функцию вставил неверно... function esc_bandit () alife():create("esc_bandit_1",vector():set(89.167,-7.47,-26.069),385326,114) end Первые три цифры означают X,Y,Z, четвертая за скобкой - (l.vertex) левел_вертекс и пятая (g.vertex)гаме_вертекс. Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 4 Января 2012 ColR_iT Даже и не думал сбивать с толку! Ведь он попросил ЛОГИКУ, я ее и описал, это kamp. НПС созданный скриптом или через all.spawn, без разницы будет при любой логике кроме ремарка иметь точку(точки) прописанные через all.spawn, way...название локации, как вы и показали в своем "код". Саму же логику мы как обычно пропишем в gamedata\config\scripts, -- файл логики название любое.ltx. Я сомневаюсь, что S.T.A.L.K.E.R-DOLG будет задавать логику через функцию\скрипт... хотя кто знает... Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 4 Января 2012 (изменено) S.T.A.L.K.E.R-DOLG Не морочь голову, скачай программу ACDC menu2.2 для ТЧ и работай без батников и всего остального, проще будет, там менюшка есть ничего сложного... Предвижу появление у тебя еще кучи вопросов, поэтому заранее скажу, схема ремарк не используется полноценно в игре во время боевых сценок например или нападения мутантов, и т. д. по сути она является переходным этапом между др. схемами например в квестах!!! Ну торговца можно на ее основе создать, не более того. Сама схема нужная и необходимая, но не основная!!! Чаще других используется walker и надо сказать оправданно. walker ... remark -- подошел ГГ поговорил послушал чего нибудь... ... camper ... и т. д. Не стоит рассматривать туторы как руководство к действию, раз уж ты захотел что то замутить, то почитай внимательно о том что ты хочешь сделать, например о тех же файлах логики!!! Добавлено через 18 мин.: Wik А через рестриктор не подойдет??? [logic] active = sr_idle [sr_idle] on_actor_inside = {+new_restriktor} sr_idle@gigi %=play_snd(characters_voice\путь к звуковому файлу)% [sr_idle@gigi] on_timer = 5000 | nil %=название_файла% В данном случае, при входе актора в рестриктор, и наличии инфопоршня "new_restriktor" что в принципе необязательно, включается проигрыш музыкального фрагмента, а через 5 сек. происходит спавн кого тебе надо. Единственное замечание, функция спавна должна находиться в файле xr.effects.scripts. После всего этого рестриктор отключается, т. е. срабатывает одноразово!!! Можно и другое что нибудь придумать, например переключать секции по другим событиям, по необходимости... Если совсем просто, то выглядеть будет так: [logic] active = sr_idle [sr_idle] on_actor_inside = nil %=название функции% В этом случае, при входе в рестриктор сработает функция %=...%, а затем рестриктор отключится. Изменено 4 Января 2012 пользователем ColR_iT Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 5 Января 2012 (изменено) Всем добрый вечер! Возник вопрос относительно логики гулагов Также в описании работы может быть указаны дополнительные условия, при которых сталкер может занять данную работу. Например: predicate = function(obj) return obj:profile_name() == "soldier_commander” end то есть данную работу сможет выполнять лишь персонаж с профилем soldier_commander. Куда конкретно надо вставить данную функцию. Файл gulag_название_локации.scripts -... А в самом файле в какое место??? Заранее благодарю!!! Изменено 5 Января 2012 пользователем losiara Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 5 Января 2012 Artos Отрывок кода\функции из методички похоже что самих разработчиков, (обложку не сфотографировали). Имею ее в электронном варианте потому и привел в неизменном виде! Но суть в общем то стала понятна. Спасибо! Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 6 Января 2012 Добрый вечер! Вопрос относительно настройки логики рестриктора! [logic] active = sr_idle [sr_idle] on_actor_inside = {+new_restriktor} sr_sound [sr_sound] snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant idle = 5 delay = 1 on_signal = sound_end | sr_idle@odin [sr_idle@odin] on_timer = 1500 | sr_sound2 %=spawn_zombie_x18% [sr_sound2] snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant idle = 5 delay = 1 В данном виде, при входе в рестриктор, проигрывается одна из композиций, а через 1,5 сек происходит спавн монстров. В дальнейшем, при входе в этот рестриктор проигрываются только звуки. Вопрос: как правильно настроить, что бы проигрывались ВСЕ звуковые файлы при входе в рестриктор, последовательно или рандомно не имеет значения, но один за другим, с задержкой 1-2сек. Ломаю голову, ничего не получается!!! Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 6 Января 2012 (изменено) Старлей Можно конечно и зациклить, но суть не в этом, тогда и спавн повторяться будет, можно конечно и его обойти, но звук при этом только из одного файла воспроизводиться будет, вот в чем проблема, а надо что бы все поочередно или рандомно без разницы с задержкой 1-3 сек. одна от другой!!! characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant Artos Хочешь рандомно и весь список - тут как раз своя функция сгодится, выбирая из списка и отсеживая его окончание ... Именно так и хочу, однако штатных функций не обнаружил. Изменено 6 Января 2012 пользователем losiara Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 7 Января 2012 (изменено) NaslednikTutti Так ты все таки для ЗП или ТЧ делаешь??? Если непись под гулагом, это одно, если он со своей логикой, то необходимо в файле с логикой дописать: [smart_terrains] none = true; что бы не брался смартом [logic] active = walker [walker] path_walk = esc_blokpost_sniper1; путь НПС Относительно путей в all.spawn, это зачем у тебя? На что они стоят??? p0:flags = 0x1 p1:flags = 0x2 Ты полем look пользуешься, исходя из представленной логики нет, тогда к чему флаги, на что они указывают? А вообще поскольку НПС через all.spawn рожден, то и логику можно там же и прописать, прямо в секции НПС тобою созданного! Изменено 7 Января 2012 пользователем losiara Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение