AKKK1 6 Опубликовано 24 Июня 2016 (изменено) Вроде тема подходит. Использование функций времени ДЛЯ усложнения и разнообразия поведения НПС как в гулагах так и находящихся под собственной логикой.Рабочий функции выглядят примерно так.. function time_test() Название функцииif level.get_time_hours() == 7 then если время равно 7 часамreturn true функция возврашает trueelsereturn false в любое другое время возврашает falseendendДля использования в схемах поведения НПС(логике) функция должна быть помешенна в файл S.T.A.L.K.E.R gamedata scripts xr_conditionsпри использовании функции в логике НПС[logic@наименование_секции_логики]active(активация секции) = kamp(имя схемы)@имя_секции[kamp(имя схемы)@имя_секции]on_info = {=time_test} [sleeper(имя схемы)@имя_секции] при условии что игровое время равно 7 часов ровно переключение на секцию [sleeper(имя схемы)@имя_секции]center_point = camp_centerpath_walk = camp_center_tasksoundgroup = esc_lagermeet = meet@lager[sleeper(имя схемы)@имя_секции] В этой секции можно использовать все что угодно sleeper может быть kamp, walker и т.д (с разными путями прописанными в алл спавн). Важно переключения происходят когда функция вазвращает true переключения не срабатывают если объект находится в офлайне. Выше приведенный пример переключение с одной схемы на другую сработает только если объект к которому применен этот метод находится в онлайне. Из этого следует что нам нужно создать такие условия при которых объект в любой момент времени сможет находится только в одной (конкретной)схеме поведения. Спасибо IG-2007 за объяснение принципов. C помощью этих функций (поместив их в xr_conditions.script). - шаг первый ------function time_testoww()if level.get_time_hours() >= 6 and level.get_time_hours() <= 24 thenreturn trueelsereturn falseendendfunction time2_testoww()if level.get_time_hours() <= 3 and level.get_time_hours() >= 0 thenreturn trueelsereturn falseendend-- второйfunction time_testoww1()if level.get_time_hours() >= 8 and level.get_time_hours() <= 24 thenreturn trueelsereturn falseendendfunction time2_testoww1()if level.get_time_hours() <= 5 and level.get_time_hours() >= 0 thenreturn trueelsereturn falseendend-- третийfunction time_testoww2()if level.get_time_hours() >= 10 and level.get_time_hours() <= 24 thenreturn trueelsereturn falseendendfunction time2_testoww2()if level.get_time_hours() <= 7 and level.get_time_hours() >= 0 thenreturn trueelsereturn falseendend-- четвертыйfunction time_testoww3()if level.get_time_hours() >= 12 and level.get_time_hours() <= 24 thenreturn trueelsereturn falseendendfunction time2_testoww3()if level.get_time_hours() <= 9 and level.get_time_hours() >= 0 thenreturn trueelsereturn falseendend-- пятыйfunction time_testoww4()if level.get_time_hours() >= 14 and level.get_time_hours() <= 24 thenreturn trueelsereturn falseendendfunction time2_testoww4()if level.get_time_hours() <= 11 and level.get_time_hours() >= 0 thenreturn trueelsereturn falseendend-- шестойfunction time_testoww5()if level.get_time_hours() >= 16 and level.get_time_hours() <= 24 thenreturn trueelsereturn falseendendfunction time2_testoww5()if level.get_time_hours() <= 13 and level.get_time_hours() >= 0 thenreturn trueelsereturn falseendend-- седьмойfunction time_testoww6()if level.get_time_hours() >= 18 and level.get_time_hours() <= 24 thenreturn trueelsereturn falseendendfunction time2_testoww6()if level.get_time_hours() <= 15 and level.get_time_hours() >= 0 thenreturn trueelsereturn falseendend-- восьмойfunction time_testoww7()if level.get_time_hours() >= 20 and level.get_time_hours() <= 24 thenreturn trueelsereturn falseendendfunction time2_testoww7()if level.get_time_hours() <= 17 and level.get_time_hours() >= 0 thenreturn trueelsereturn falseendend-- девятыйfunction time_testoww8()if level.get_time_hours() >= 22 and level.get_time_hours() <= 24 thenreturn trueelsereturn falseendendfunction time2_testoww8()if level.get_time_hours() <= 19 and level.get_time_hours() >= 0 thenreturn trueelsereturn falseendend--десятыйfunction time_testoww9()if level.get_time_hours() >= 0 and level.get_time_hours() <= 21 thenreturn trueelsereturn falseendend-- одиннадцатыйfunction time_testoww10()if level.get_time_hours() >= 2 and level.get_time_hours() <= 23 thenreturn trueelsereturn falseendend-- двенадцатыйfunction time_testoww11()if level.get_time_hours() >= 4 and level.get_time_hours() <= 24 thenreturn trueelsereturn falseendendfunction time2_testoww11()if level.get_time_hours() <= 1 and level.get_time_hours() >= 0 thenreturn trueelsereturn falseendend--========================== Логика охранника Охраняет, ходит, спит, сидит у костра. Смена схем каждые 2 часа. ;охранник[logic@esc_lager_zoneguard1]active = walker@esc_lager_zoneguard1[walker@esc_lager_zoneguard1]on_info = {=time_testoww} walker5@esc_lager охраняетon_info2 = {=time2_testoww} walker5@esc_lagerpath_walk = guard_walk1path_look = guard_look1meet = meet@zoneguard_novice_lager1[meet@zoneguard_novice_lager1]meet_state = 10| wait@talk_hellomeet_state_wpn = 10| threat@threat_weapvictim = 10| actorvictim_wpn = 10| actoruse = trueuse_wpn = truemeet_dialog = escape_lager_guard_start_dialog[walker5@esc_lager]on_info = {=time_testoww1} sleeper10@esc_lageron_info2 = {=time2_testoww1} sleeper10@esc_lager ходитpath_walk = guard_walk4meet = meet@lager[sleeper10@esc_lager]on_info = {=time_testoww2} kamp5@esc_lager спитon_info2 = {=time2_testoww2} kamp5@esc_lagerpath_main = mod6meet = meet@lager[kamp5@esc_lager]on_info = {=time_testoww3} walker1@esc_lager_zoneguard1 сидит у костраon_info2 = {=time2_testoww3} walker1@esc_lager_zoneguard1center_point = camp_centerpath_walk = camp_center_tasksoundgroup = esc_lagermeet = meet@lager[walker1@esc_lager_zoneguard1]on_info = {=time_testoww4} walker6@esc_lager снова охраняет и т.дon_info2 = {=time2_testoww4} walker6@esc_lagerpath_walk = guard_walk1path_look = guard_look1meet = meet1@zoneguard_novice_lager1[meet1@zoneguard_novice_lager1]meet_state = 10| wait@talk_hellomeet_state_wpn = 10| threat@threat_weapvictim = 10| actorvictim_wpn = 10| actoruse = trueuse_wpn = truemeet_dialog = escape_lager_guard_start_dialog[walker6@esc_lager]on_info = {=time_testoww5} sleeper11@esc_lageron_info2 = {=time2_testoww5} sleeper11@esc_lagerpath_walk = guard_walk4meet = meet@lager[sleeper11@esc_lager]on_info = {=time_testoww6} kamp6@esc_lageron_info2 = {=time2_testoww6} kamp6@esc_lagerpath_main = mod6meet = meet@lager[kamp6@esc_lager]on_info = {=time_testoww7} walker2@esc_lager_zoneguard1on_info2 = {=time2_testoww7} walker2@esc_lager_zoneguard1center_point = camp_centerpath_walk = camp_center_tasksoundgroup = esc_lagermeet = meet@lager[walker2@esc_lager_zoneguard1]on_info = {=time_testoww8} walker7@esc_lageron_info2 = {=time2_testoww8} walker7@esc_lagerpath_walk = guard_walk1path_look = guard_look1meet = meet2@zoneguard_novice_lager1[meet2@zoneguard_novice_lager1]meet_state = 10| wait@talk_hellomeet_state_wpn = 10| threat@threat_weapvictim = 10| actorvictim_wpn = 10| actoruse = trueuse_wpn = truemeet_dialog = escape_lager_guard_start_dialog[walker7@esc_lager]on_info = {=time_testoww9} sleeper12@esc_lagerpath_walk = guard_walk4meet = meet@lager[sleeper12@esc_lager]on_info = {=time_testoww10} kamp7@esc_lagerpath_main = mod6meet = meet@lager[kamp7@esc_lager]on_info = {=time_testoww11} walker@esc_lager_zoneguard1 возврат в началоon_info2 = {=time2_testoww11} walker@esc_lager_zoneguard1center_point = camp_centerpath_walk = camp_center_tasksoundgroup = esc_lagermeet = meet@lager Для каждого из 12 секций могут быть прописанны свои диологи и квесты. И это всего 1 состояние гулага а может быть несколько. При выходе в он лайн НПС окажеться именно в той секции которая соответствует времени выхода. Добавлю в оригинале только 3 работы гулага охраняют, ходят, сидят у костра. При попытках использования потребуеться добавить sleeper в работы гулага и точку сна mod6 в аллспавн. Изменено 24 Июня 2016 пользователем BFG Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 25 Июня 2016 (изменено) @Dennis_Chikin, стоит доработать xr_logic.script по аналогии с выполнением функций xr_effects по-умолчанию либо из явно заданного модуля. Просто перенести 1:1. Честно не понимаю чем не устраивает xr_conditions.script или вы(ты) хочешь чтоб все функции вызываемые из схем логики располагались в одном файле ? И привести использование этих функций к одному стандарту ? Если так то я только за. А вот что касается размножения time_test7, ...8, 9.6.6.666 и т.д. - аргументы прекрасно передаются, так что вполне достаточно одну time_test(), поскольку parse_infop() совершенно все равно, что разбирать. Dennis_Chikin я в скриптах ноль нулевой )) и ни когда этого не скрывал . Но попытаюсь все таки скубатурить то что понял из твоего(вашего) поста. Предлагается заменить все функции типа function time_testoww9() одной с передачей аргументов. Вот так это видеться мне ... Пишиться одна функция function имя_имя() в которой все нужные условия учтены. Тоисть все 12 функций сведены в одну которые для каждой из 12 передают нужные аргументы, а именно..... Аргумент допустим 1time если время то TRUE Аргумент допустим 2time если время то TRUE Аргумент допустим 3time если время то TRUE Тогда при использовании в секциях логики function time_test() тут нужный аргумент ? [logic@esc_lager_zoneguard1]active = walker@esc_lager_zoneguard1[walker@esc_lager_zoneguard1]on_info = {=time_test} walker5@esc_lager охраняетon_info2 = {=time_test КУДА ВСТАВЛЯТЬ АРГУМЕНТ ДЛЯ } walker5@esc_lagerpath_walk = guard_walk1path_look = guard_look1meet = meet@zoneguard_novice_lager1 Денис если вы сможете написать такую функцию то многие спасибо скажут когда поймут что это дает . Как ни странно я не закончил . Но продолжу чуть погодя )). Извиняюсь за цитирование предыдущего поста но я пост писал часа 2 ))). Вот новое хотя фиг знает но 5 лет назад этого в статьях про логику не было. Причем если мы указываем имя, то использовать функцию можно только, когда гулаг находится в онлайне, а если мы вешаем на самрттеррейн story_id, то можем обращаться к гулагу и в оффлайне. Где то тут я видел попытки узнать население гулага. НУ и вызов любой функции при юзе объекта. on_use = {+info -info =func !func ~number} %+info -info =func% <название_схемы> - определяет, что произойдёт, если актор взаимодействует с объектом. Изменено 25 Июня 2016 пользователем AKKK1 Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 28 Июня 2016 @Dennis_Chikin, Честно не понял как мне 12 функций времени свести в одну вызываемую из логики функцию c определенными значениями для каждой из 12 значения true и false . Поделиться этим сообщением Ссылка на сообщение