Перейти к контенту

Рекомендуемые сообщения

Это навскидку, а на деле он у тебя может десять раз этот путь туда обратно обойти в поисках кровососов, артефактов и разгадки зоны. В теории extrapolate_callback и ага.

Ссылка на комментарий

Не, ну мы его отвлекли, следовательно, знаем, с какой целью отвлекли.

А теперь пусть себе идет, куда шел. За кровососами - значит, за кровососами.

Нам надо свои дела сделать, и чтоб непись после этого обратно не побежал.

 

В общем, пока втыкаю вывод в лог во все подозрительные места с целью понять: где же у него кнопка.

 

UPD: э-эээ... мнэ-эээ...

xr_camper делает reset_scheme(), и move_mgr:setup_movement_by_patrol_path() делается npc:set_start_point( self.current_point_index ), после чего непись резво бежит назад.

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

@Dennis_Chikin,В ЧН присутствует похожая проблема. После возвращения на пути своя непись втыкает не на точку, в которую следовал, а на следующую (continue), пропуская таким образом сигналы для ВГ. Да, в некоторых квестологиках, теоретически, точки могут оказаться обязательными к посещению, что не стоит упускать из внимания. Интересно что тут с этим не так. Ну и после загрузки сохранения по любому срывается на ближайшую.

Ссылка на комментарий

 

 

self.se_respawn:update_online() похоже работает только для некоторых сторилайновых квестов.

Я вообще собираюсь вырезать сюжет и пилить свой, новый. Собсно, почему и вопрос задавал.

 

А за ответ - благодарю.


 

 

Вроде, как непись возвращается в предыдущую точку пути, с которого его сдернуло из схемы. Если путь длинный, а точек мало - выглядит не красиво...

Именно так. Потому при сейв-лоаде и выглядит некрасиво. Чем больше точек пути - тем красивее выглядит. Да и по уму логичнее получается.


 

 

А теперь пусть себе идет, куда шел. За кровососами - значит, за кровососами.

Тут тоже косяк кроется. Если путь дальний, а точек мало, он может по АИ-сетке как угодно побежать. И попасть туда, куда не следует. К кровососу в гости, например.

Сталкер - наше всё!

Ссылка на комментарий

"И попасть туда, куда не следует. К кровососу в гости, например."

 

Я пытаюсь обход аномалий таки сделать. Вот там, где непись под логикой перемещается. На тех самых длинных дистанциях. Где у него, как я понимаю, job.position_threshold == "graph", или со всей дури выставлено n сотен метров, или которые вообще безсмартовые.

 

Тоннель у меня сейчас Круглов тот же проходить почти научился, но как только аномалии заканчиваются - тут же бежит опять на старт.

 

 

ГДЕ конкретно его туда отправляют ? Вот нифига это место не вижу.

Ссылка на комментарий

Как раз вопрос близко к теме.

Если непись заспавнен на одной точке валкером (1 точка пути), а затем по получению инфопоршня переходит на другую точку в патрулирование (2 точки пути), то по уходу в оффлайн например при переходе с одной локации на другую и опять обратно почему он оказывается вновь на первой точке??? Он конечно переходит на патрульный путь, но уже при приближении ГГ только, это некрасиво, он должен находиться на второй точке патрульной, а находится в первой??? Или так и должно быть, по уходу в оффлайн возвращается сначала в место спавна, а потом уже куда требуется???

Логика на всякий случай:

[smart_terrains]


none = true


[logic]
active = walker@stalker_propusk
combat_ignore = combat_ignore@stalker_propusk
on_hit = hit@stalker_propusk
on_death = death@stalker_propusk

[walker@stalker_propusk]
path_walk = stalker_propusk_esc_walk
path_look = stalker_propusk_esc_look
meet = meet@stalker_propusk
on_actor_dist_le_nvis = 10 |remark@stalker_propusk
danger = danger_condition

[remark@stalker_propusk]
anim = ward
snd = esc_guard_camp
no_move = true
target = actor
on_actor_dist_ge_nvis = 5 | {-esc_propusk_done} walker@stalker_propusk, {+esc_propusk_done} walker@stalker_propusk1
;on_info = {+esc_propusk_done} walker@stalker_propusk1
meet = meet@stalker_propusk
combat_ignore_cond = true
danger = danger_condition

[walker@stalker_propusk1]
path_walk = stalker_propusk_esc_walk1
path_look = stalker_propusk_esc_look1
danger = danger_condition

[danger_condition]
ignore_distance = 0
ignore_distance_hit = 30
ignore_distance_sound = 10


[meet@stalker_propusk]
use = true
use_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" - поршень свидетельствующий о выполнении квеста и соот. изменения схемы патрулирования!

 

СПАСИБО!!!

Изменено пользователем losiara

Жизнь следует измерять поступками, а не временем...

Ссылка на комментарий

[logic]

active = walker@stalker_propusk

 

[walker@stalker_propusk]

path_walk = stalker_propusk_esc_walk

 

Именно по-этому. Ему сказали, где быть при входе в онлайн - он там и есть.

Если надо, чтоб был в другом месте - прописываем более другую работу с другой секцией и другим путем. Будет там.

Изменено пользователем Dennis_Chikin
  • Спасибо 1
Ссылка на комментарий

losiara. Возможно попробовать так...

 

[smart_terrains]
none = true

[logic]
active = walker@stalker_propusk
combat_ignore = combat_ignore@stalker_propusk
on_hit = hit@stalker_propusk
on_death = death@stalker_propusk

[walker@stalker_propusk]
path_walk = stalker_propusk_esc_walk
path_look = stalker_propusk_esc_look
on_actor_dist_le_nvis = 10 | {-esc_propusk_done} remark@stalker_propusk
on_info = {+esc_propusk_done} walker@stalker_propusk1
meet = meet@stalker_propusk1
danger = danger_condition

[remark@stalker_propusk]
anim = ward
target = actor
snd = esc_guard_camp
on_signal = sound_end | walker@stalker_propusk1
meet = no_meet

[walker@stalker_propusk1]
path_walk = stalker_propusk_esc_walk1
path_look = stalker_propusk_esc_look1
combat_ignore = combat_ignore@stalker_propusk
danger = danger_condition

[danger_condition]
ignore_distance = 0
ignore_distance_hit = 30
ignore_distance_sound = 10


[meet@stalker_propusk]
meet_state = 10 | guard@wait
meet_state_wpn = 10 | backoff@threat_weap
victim = 10 | actor
victim_wpn = 10 | actor
use = true
use_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_propusk
combat_ignore = combat_ignore@stalker_propusk
on_hit = hit@stalker_propusk
on_death = death@stalker_propusk

[walker@stalker_propusk]
path_walk = stalker_propusk_esc_walk
path_look = stalker_propusk_esc_look
on_actor_dist_le_nvis = 10 | {-esc_propusk_done} remark@stalker_propusk
on_info = {+esc_propusk_done} walker@stalker_propusk1
meet = meet@stalker_propusk
danger = danger_condition

[remark@stalker_propusk]
anim = ward
target = actor
snd = esc_guard_camp
on_signal = sound_end | remark@stalker_propusk2
meet = no_meet

[remark@stalker_propusk2]
anim = ward
target = actor
on_info = {+esc_propusk_done} walker@stalker_propusk1
meet = meet@stalker_propusk

[walker@stalker_propusk1]
path_walk = stalker_propusk_esc_walk1
path_look = stalker_propusk_esc_look1
combat_ignore = combat_ignore@stalker_propusk
danger = danger_condition

[danger_condition]
ignore_distance = 0
ignore_distance_hit = 30
ignore_distance_sound = 10


[meet@stalker_propusk]
meet_state = 10 | guard@wait
meet_state_wpn = 10 | backoff@threat_weap
victim = 10 | actor
victim_wpn = 10 | actor
use = true
use_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%

 

Изменено пользователем gam
  • Спасибо 1
Ссылка на комментарий
Или так и должно быть, по уходу в оффлайн возвращается сначала в место спавна, а потом уже куда требуется???

У тебя непись работает под собственной логикой, а логика работает только в онлайне. Причем сделано так, что при входе объекта в онлайн логика инициализируется с начала. Решений несколько, первое - дробить логику как-то так:

[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

т.е. смысл в том, что создается первая схема-"развилка", из которой толкаем непися в соответствующую предыдущим действиям(и выданным инфо-порциям) следующую схему. Второе решение - поставить непися на работу в гулаг, а гулаг более "красиво" раскидывает неписей по схемам при выходе в онлайн.

Изменено пользователем UnLoaded
  • Спасибо 1
Ссылка на комментарий

Да под собственной, потому как это проще, на нем висит 1 квест (пропуска в лагерь) и более ничего, дальше он уже просто патрулирует. А если его в гулаг поместить, то это придется all.spawn вскрывать, скрипты гулаговские под него делать что бы только его на эту работу посылали ибо он именно в таком виде и с таким профилем должен это место занять. Но суть я понял на будущее. Спасибо!!! Перепишу схемку не сложно.

Я потому в том числе здесь недавно спрашивал о том как можно задавать условие в том числе и персональной логике:

[logic]
active = {+...........} walker@............. ; в этой секции, так было бы усе гораздо проще.
[logic]
active = {+поршень} walker1, {-поршень}  walker2 ;к сожалению в оригинале не работает, не предусмотрена!
А советы которые дали вызывали вылет, ну подумал не буду больше людей донимать одним и тем же, не переспрашивал... :)
Изменено пользователем losiara

Жизнь следует измерять поступками, а не временем...

Ссылка на комментарий

В общем, с необходом аномалий ларчик ломом открывался.

 

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.

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

Едем далее. Честно признаюсь, лень самому докапываться, хотя и не долго. Надо сравнить в "ИЛИ" три и более флага. bit_or(bit_or(bit_or... сразу понятно что это затея явно так себе, поэтому пока в голове у меня монструозные конструкции, типа сравнение каждого с каждым и конечной сравнение результатов, ну или сразу там break result.


Upd: да, и через пространство флагов не предлагать, это еще муторнее чистых побитовых операций.

Ссылка на комментарий

Надо сравнить в "ИЛИ" три и более флага. bit_or(bit_or(bit_or...

Попробуй переформулировать задачу на русском, через установлены все биты или там хотя бы один. Есть подозрения, что тебе и не bit_or вообще нужен.
Ссылка на комментарий

Да нужно много чего. Есть несколько флагов, надо получить если там хотя-бы один какой-то есть, вчера в принципе засунул 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 вторым аргументом что-нибудь поставить.

Ссылка на комментарий

Иными словами нужно понять активен ли первый и не активен ли второй.

local mask = bor(flag1, flag2)
local test = band(value, mask)
if test == flag1 then
//значит flag1 установлен, а flag2 нет
end
Ссылка на комментарий

@abramcumner, а если в bor три и более флага положить нужно? Тут условно разумеется.

 

И еще засыпался, как установить, что оба флага установлены, при учете что не установлены другие перед наибольшим, написал band(value,band(flag2, flag5)), а пространство скажем из восьми флагов, так вот мне надо проверить что активны только flag2 и flag5, а остальные НЕ активны.

Короче конечная задача, есть: {flag1, flag2, flag3, flag4, flag5, flag6}. Мне надо проверить, что активен первый или второй и активен пятый, причем что все остальные должны быть НЕ активны. Мой условный код выше ошибается в том плане, что показывает true и в том числе когда активен flag3 и flag4.


Твой способ не помогает определить установку конкретного флага из двух если они во множестве находятся, показывает true и, если, какие-то иные флаги стоят.

Ссылка на комментарий

@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", в которой указываешь какие биты(флаги) должны быть установлены, не установлены, и на какие можно не обращать внимание.
Изменено пользователем abramcumner
  • Спасибо 1
Ссылка на комментарий

Так вот я о том и говорю, что получается какая-то монструозная конструкция из таких матрешек, ну раз по другому никак, тогда ладно, будет так, мы не привыкли отступать. Флаги конечно степени двойки, стал бы я тогда эти шарады гадать :). Ужасного вида конструкция конечно на выходе.

Ссылка на комментарий

Заметил одну неприятную вещь при использовании функции "set_gulag_enemy_actor(.....)" из xr.effects.script, если НПС в гулаге являются нейтралами, то функция делает их врагами для ГГ как и положено, а вот если они френды, то снижает их дружественность до нейтралов это так и задумано или у меня баг какой то???

Жизнь следует измерять поступками, а не временем...

Ссылка на комментарий
@losiara, полагаю, что те, кто стали нейтралами, принадлежат группировке, у которой goodwill к актору очень большой. Так?
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...