Bak 755 Опубликовано 28 Января 2017 Поделиться Опубликовано 28 Января 2017 @Dennis_Chikin,В ЧН присутствует похожая проблема. После возвращения на пути своя непись втыкает не на точку, в которую следовал, а на следующую (continue), пропуская таким образом сигналы для ВГ. Да, в некоторых квестологиках, теоретически, точки могут оказаться обязательными к посещению, что не стоит упускать из внимания. Интересно что тут с этим не так. Ну и после загрузки сохранения по любому срывается на ближайшую. Ссылка на комментарий
AndrewMor 527 Опубликовано 28 Января 2017 Поделиться Опубликовано 28 Января 2017 self.se_respawn:update_online() похоже работает только для некоторых сторилайновых квестов. Я вообще собираюсь вырезать сюжет и пилить свой, новый. Собсно, почему и вопрос задавал. А за ответ - благодарю. Вроде, как непись возвращается в предыдущую точку пути, с которого его сдернуло из схемы. Если путь длинный, а точек мало - выглядит не красиво... Именно так. Потому при сейв-лоаде и выглядит некрасиво. Чем больше точек пути - тем красивее выглядит. Да и по уму логичнее получается. А теперь пусть себе идет, куда шел. За кровососами - значит, за кровососами. Тут тоже косяк кроется. Если путь дальний, а точек мало, он может по АИ-сетке как угодно побежать. И попасть туда, куда не следует. К кровососу в гости, например. Сталкер - наше всё! Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 28 Января 2017 Поделиться Опубликовано 28 Января 2017 "И попасть туда, куда не следует. К кровососу в гости, например." Я пытаюсь обход аномалий таки сделать. Вот там, где непись под логикой перемещается. На тех самых длинных дистанциях. Где у него, как я понимаю, job.position_threshold == "graph", или со всей дури выставлено n сотен метров, или которые вообще безсмартовые. Тоннель у меня сейчас Круглов тот же проходить почти научился, но как только аномалии заканчиваются - тут же бежит опять на старт. ГДЕ конкретно его туда отправляют ? Вот нифига это место не вижу. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
losiara 13 Опубликовано 28 Января 2017 Поделиться Опубликовано 28 Января 2017 (изменено) Как раз вопрос близко к теме. Если непись заспавнен на одной точке валкером (1 точка пути), а затем по получению инфопоршня переходит на другую точку в патрулирование (2 точки пути), то по уходу в оффлайн например при переходе с одной локации на другую и опять обратно почему он оказывается вновь на первой точке??? Он конечно переходит на патрульный путь, но уже при приближении ГГ только, это некрасиво, он должен находиться на второй точке патрульной, а находится в первой??? Или так и должно быть, по уходу в оффлайн возвращается сначала в место спавна, а потом уже куда требуется??? Логика на всякий случай: [smart_terrains] none = true[logic]active = walker@stalker_propuskcombat_ignore = combat_ignore@stalker_propuskon_hit = hit@stalker_propuskon_death = death@stalker_propusk[walker@stalker_propusk]path_walk = stalker_propusk_esc_walkpath_look = stalker_propusk_esc_lookmeet = meet@stalker_propuskon_actor_dist_le_nvis = 10 |remark@stalker_propuskdanger = danger_condition[remark@stalker_propusk]anim = wardsnd = esc_guard_campno_move = truetarget = actoron_actor_dist_ge_nvis = 5 | {-esc_propusk_done} walker@stalker_propusk, {+esc_propusk_done} walker@stalker_propusk1;on_info = {+esc_propusk_done} walker@stalker_propusk1meet = meet@stalker_propuskcombat_ignore_cond = truedanger = danger_condition[walker@stalker_propusk1]path_walk = stalker_propusk_esc_walk1path_look = stalker_propusk_esc_look1danger = danger_condition[danger_condition]ignore_distance = 0ignore_distance_hit = 30ignore_distance_sound = 10[meet@stalker_propusk]use = trueuse_wpn = true[combat_ignore@stalker_propusk]combat_ignore_cond = true[hit@stalker_propusk]on_info = {=hit_by_actor} %=actor_enemy%[death@stalker_propusk]on_info = {+boar1_dead +boar2_dead +boar3_dead +boar4_dead +boar5_dead} %+esc_propusk_done%;"esc_propusk_done" - поршень свидетельствующий о выполнении квеста и соот. изменения схемы патрулирования! СПАСИБО!!! Изменено 28 Января 2017 пользователем losiara Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 28 Января 2017 Поделиться Опубликовано 28 Января 2017 (изменено) [logic] active = walker@stalker_propusk [walker@stalker_propusk] path_walk = stalker_propusk_esc_walk Именно по-этому. Ему сказали, где быть при входе в онлайн - он там и есть. Если надо, чтоб был в другом месте - прописываем более другую работу с другой секцией и другим путем. Будет там. Изменено 28 Января 2017 пользователем Dennis_Chikin 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
gam 117 Опубликовано 28 Января 2017 Поделиться Опубликовано 28 Января 2017 (изменено) losiara. Возможно попробовать так... [smart_terrains]none = true[logic]active = walker@stalker_propuskcombat_ignore = combat_ignore@stalker_propuskon_hit = hit@stalker_propuskon_death = death@stalker_propusk[walker@stalker_propusk]path_walk = stalker_propusk_esc_walkpath_look = stalker_propusk_esc_lookon_actor_dist_le_nvis = 10 | {-esc_propusk_done} remark@stalker_propuskon_info = {+esc_propusk_done} walker@stalker_propusk1meet = meet@stalker_propusk1danger = danger_condition[remark@stalker_propusk]anim = wardtarget = actorsnd = esc_guard_campon_signal = sound_end | walker@stalker_propusk1meet = no_meet[walker@stalker_propusk1]path_walk = stalker_propusk_esc_walk1path_look = stalker_propusk_esc_look1combat_ignore = combat_ignore@stalker_propuskdanger = danger_condition[danger_condition]ignore_distance = 0ignore_distance_hit = 30ignore_distance_sound = 10[meet@stalker_propusk]meet_state = 10 | guard@waitmeet_state_wpn = 10 | backoff@threat_weapvictim = 10 | actorvictim_wpn = 10 | actoruse = trueuse_wpn = true[combat_ignore@stalker_propusk]combat_ignore_cond = true[hit@stalker_propusk]on_info = {=hit_by_actor} %=actor_enemy%[death@stalker_propusk]on_info = {+boar1_dead +boar2_dead +boar3_dead +boar4_dead +boar5_dead} %+esc_propusk_done% думаю должно работать. [smart_terrains]none = true[logic]active = walker@stalker_propuskcombat_ignore = combat_ignore@stalker_propuskon_hit = hit@stalker_propuskon_death = death@stalker_propusk[walker@stalker_propusk]path_walk = stalker_propusk_esc_walkpath_look = stalker_propusk_esc_lookon_actor_dist_le_nvis = 10 | {-esc_propusk_done} remark@stalker_propuskon_info = {+esc_propusk_done} walker@stalker_propusk1meet = meet@stalker_propuskdanger = danger_condition[remark@stalker_propusk]anim = wardtarget = actorsnd = esc_guard_campon_signal = sound_end | remark@stalker_propusk2meet = no_meet[remark@stalker_propusk2]anim = wardtarget = actoron_info = {+esc_propusk_done} walker@stalker_propusk1meet = meet@stalker_propusk[walker@stalker_propusk1]path_walk = stalker_propusk_esc_walk1path_look = stalker_propusk_esc_look1combat_ignore = combat_ignore@stalker_propuskdanger = danger_condition[danger_condition]ignore_distance = 0ignore_distance_hit = 30ignore_distance_sound = 10[meet@stalker_propusk]meet_state = 10 | guard@waitmeet_state_wpn = 10 | backoff@threat_weapvictim = 10 | actorvictim_wpn = 10 | actoruse = trueuse_wpn = true[combat_ignore@stalker_propusk]combat_ignore_cond = true[hit@stalker_propusk]on_info = {=hit_by_actor} %=actor_enemy%[death@stalker_propusk]on_info = {+boar1_dead +boar2_dead +boar3_dead +boar4_dead +boar5_dead} %+esc_propusk_done% Изменено 28 Января 2017 пользователем gam 1 Ссылка на комментарий
UnLoaded 313 Опубликовано 28 Января 2017 Поделиться Опубликовано 28 Января 2017 (изменено) Или так и должно быть, по уходу в оффлайн возвращается сначала в место спавна, а потом уже куда требуется??? У тебя непись работает под собственной логикой, а логика работает только в онлайне. Причем сделано так, что при входе объекта в онлайн логика инициализируется с начала. Решений несколько, первое - дробить логику как-то так: [logic] active = walker@stalker_reset [walker@stalker_reset] path_walk = stalker_propusk_reset on_info = {+info1} walker@stalker_место_работы_1 on_info2 = {+info2} walker@stalker_место_работы_2 on_info3 = {+info3} walker@stalker_место_работы_3 т.е. смысл в том, что создается первая схема-"развилка", из которой толкаем непися в соответствующую предыдущим действиям(и выданным инфо-порциям) следующую схему. Второе решение - поставить непися на работу в гулаг, а гулаг более "красиво" раскидывает неписей по схемам при выходе в онлайн. Изменено 28 Января 2017 пользователем UnLoaded 1 Ссылка на комментарий
losiara 13 Опубликовано 28 Января 2017 Поделиться Опубликовано 28 Января 2017 (изменено) Да под собственной, потому как это проще, на нем висит 1 квест (пропуска в лагерь) и более ничего, дальше он уже просто патрулирует. А если его в гулаг поместить, то это придется all.spawn вскрывать, скрипты гулаговские под него делать что бы только его на эту работу посылали ибо он именно в таком виде и с таким профилем должен это место занять. Но суть я понял на будущее. Спасибо!!! Перепишу схемку не сложно. Я потому в том числе здесь недавно спрашивал о том как можно задавать условие в том числе и персональной логике: [logic] active = {+...........} walker@............. ; в этой секции, так было бы усе гораздо проще. [logic] active = {+поршень} walker1, {-поршень} walker2 ;к сожалению в оригинале не работает, не предусмотрена! А советы которые дали вызывали вылет, ну подумал не буду больше людей донимать одним и тем же, не переспрашивал... Изменено 28 Января 2017 пользователем losiara Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 28 Января 2017 Поделиться Опубликовано 28 Января 2017 (изменено) В общем, с необходом аномалий ларчик ломом открывался. 5 ошибок в слове из 3-х букв. 1. evid_anomaly никогда нельзя делать true. После того, ка она вернулась обратно в false 99% остальных скриптов сходят с ума, и идут на reset() (возвращая начальные настройки в т.ч. начальную точку пути). Остальные 146% - неправильный стэйт, тип пути, позиции и что еще кому в голову придет в зависимости от качества скуренной авторами травы. 2. Далее, не все state одинаково полезны. Что, кстати, логично: в боевом состоянии неписю не до аномалий. 3. Связка state_manager и move_manager - это адский ад, где сотона и скрежет зубовный, а также - типичный случай хронического антисемитизма. 4. как раз patrol_path аномалии обходит, level_path - 90% затыкается. Следовательно, move_mgr позволять его выставлять - нельзя. 5. Проверку близости аномалий переносить непосредственно в него, и врубать state_walk. Хотя все равно спасает не всегда, ибо см. пп 1 и 3. Изменено 28 Января 2017 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Карлан 1 049 Опубликовано 31 Января 2017 Поделиться Опубликовано 31 Января 2017 Едем далее. Честно признаюсь, лень самому докапываться, хотя и не долго. Надо сравнить в "ИЛИ" три и более флага. bit_or(bit_or(bit_or... сразу понятно что это затея явно так себе, поэтому пока в голове у меня монструозные конструкции, типа сравнение каждого с каждым и конечной сравнение результатов, ну или сразу там break result. Upd: да, и через пространство флагов не предлагать, это еще муторнее чистых побитовых операций. Ссылка на комментарий
abramcumner 1 157 Опубликовано 31 Января 2017 Поделиться Опубликовано 31 Января 2017 Надо сравнить в "ИЛИ" три и более флага. bit_or(bit_or(bit_or...Попробуй переформулировать задачу на русском, через установлены все биты или там хотя бы один. Есть подозрения, что тебе и не bit_or вообще нужен. Ссылка на комментарий
Карлан 1 049 Опубликовано 31 Января 2017 Поделиться Опубликовано 31 Января 2017 Да нужно много чего. Есть несколько флагов, надо получить если там хотя-бы один какой-то есть, вчера в принципе засунул bit_or в ключи, где сверка идет с флагом который в движке и так из себя представляет flag1|flag2|flag3... . Теперь думаю как узнать что вообще никакой не установлен, это решается конечно сверкой с нулем, но каноничнее вроде bit_not, только вот с чем этот bit_not делать я пока не понимаю. Можно начать с простого, в движке-бы это выглядело как-то так: flag1&(flag2|flag3|flag4). У меня пока как я выше и сказал конструкция примитивная, т.е. bit_and(flag1, bit_or(flag2,flag3)), где flag2 это, например, flag2|flag3 из примера выше, а flag3 это flag4. Но вот как это все в чистом луа перевязать пока не понял. Я думаю, что я не могу больше думать. Надо различить два события. Есть два флага, если первый есть, то мой band(flag,bor( дает true, если есть и второй флаг, то разумеется тоже true. Но как тут отличить первый от второго тогда, при условии что второй может активироваться только в случае если активен первый. Иными словами нужно понять активен ли первый и не активен ли второй. КАК?! Ну очень желательно в band вторым аргументом что-нибудь поставить. Ссылка на комментарий
abramcumner 1 157 Опубликовано 31 Января 2017 Поделиться Опубликовано 31 Января 2017 Иными словами нужно понять активен ли первый и не активен ли второй. local mask = bor(flag1, flag2) local test = band(value, mask) if test == flag1 then //значит flag1 установлен, а flag2 нет end Ссылка на комментарий
Карлан 1 049 Опубликовано 31 Января 2017 Поделиться Опубликовано 31 Января 2017 @abramcumner, а если в bor три и более флага положить нужно? Тут условно разумеется. И еще засыпался, как установить, что оба флага установлены, при учете что не установлены другие перед наибольшим, написал band(value,band(flag2, flag5)), а пространство скажем из восьми флагов, так вот мне надо проверить что активны только flag2 и flag5, а остальные НЕ активны. Короче конечная задача, есть: {flag1, flag2, flag3, flag4, flag5, flag6}. Мне надо проверить, что активен первый или второй и активен пятый, причем что все остальные должны быть НЕ активны. Мой условный код выше ошибается в том плане, что показывает true и в том числе когда активен flag3 и flag4. Твой способ не помогает определить установку конкретного флага из двух если они во множестве находятся, показывает true и, если, какие-то иные флаги стоят. Ссылка на комментарий
abramcumner 1 157 Опубликовано 31 Января 2017 Поделиться Опубликовано 31 Января 2017 (изменено) @abramcumner, а если в bor три и более флага положить нужно? Тут условно разумеется.Если флаги настоящие флаги, то есть степени двойки, то bor эквивалентен сложению. И можно написать просто flag1 + flag2 + flag3А правильно bor(bor(flag1, flag2), flag3) И еще засыпался, как установить, что оба флага установлены, при учете что не установлены другие перед наибольшим, написал band(value,band(flag2, flag5)), а пространство скажем из восьми флагов, так вот мне надо проверить что активны только flag2 и flag5, а остальные НЕ активны. local mask = bor(flag1...flagN)//bor по всем флагам, которые надо проверять на установленность/неустановленность //если это вообще все флаги, то можно оставить только if local test = band(value, mask) if test == bor(flag2,flag5) then //сюда войдет, только если установлены флаг2 и 5 и не установлены остальные флаги из маски end Короче конечная задача, есть: {flag1, flag2, flag3, flag4, flag5, flag6}. Мне надо проверить, что активен первый или второй и активен пятый, причем что все остальные должны быть НЕ активны. Мой условный код выше ошибается в том плане, что показывает true и в том числе когда активен flag3 и flag4. Твой способ не помогает определить установку конкретного флага из двух если они во множестве находятся, показывает true и, если, какие-то иные флаги стоят. На band`ах и bor`aх можно изобразить, но условие получится не кислое. Возможно стоит написать функцию типа такой: function test(template) end //где template строка вида "011100XX0", в которой указываешь какие биты(флаги) должны быть установлены, не установлены, и на какие можно не обращать внимание. Изменено 31 Января 2017 пользователем abramcumner 1 Ссылка на комментарий
Карлан 1 049 Опубликовано 31 Января 2017 Поделиться Опубликовано 31 Января 2017 Так вот я о том и говорю, что получается какая-то монструозная конструкция из таких матрешек, ну раз по другому никак, тогда ладно, будет так, мы не привыкли отступать. Флаги конечно степени двойки, стал бы я тогда эти шарады гадать . Ужасного вида конструкция конечно на выходе. Ссылка на комментарий
losiara 13 Опубликовано 31 Января 2017 Поделиться Опубликовано 31 Января 2017 Заметил одну неприятную вещь при использовании функции "set_gulag_enemy_actor(.....)" из xr.effects.script, если НПС в гулаге являются нейтралами, то функция делает их врагами для ГГ как и положено, а вот если они френды, то снижает их дружественность до нейтралов это так и задумано или у меня баг какой то??? Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
dsh 3 824 Опубликовано 31 Января 2017 Поделиться Опубликовано 31 Января 2017 @losiara, полагаю, что те, кто стали нейтралами, принадлежат группировке, у которой goodwill к актору очень большой. Так? dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
losiara 13 Опубликовано 31 Января 2017 Поделиться Опубликовано 31 Января 2017 (изменено) Да они друзья изначально. +600 из 5000 возможных по таблице из "game_relations" Изменено 31 Января 2017 пользователем losiara Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
dsh 3 824 Опубликовано 31 Января 2017 Поделиться Опубликовано 31 Января 2017 @losiara, вот для этих друзей, что возвращают relation_registry.community_goodwill( npc:character_community(), db.actor:id() ) npc:goodwill( db.actor ) dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти