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

[SoC] Ковыряемся в файлах


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

А я тут наведаюсь с вопросом... для Кашпировских, если честно. Потому как сам ничего пока не накопал, хотя вроде постарался. Знал бы точнее - решил бы сам, свою проблему. Есть просто небольшая надежда что у кого-то подобное было и дадут подсказку в какую сторону копать :)

Собственно, суть проблемы. Периодически какими-то "наплывами" происходят странные тормоза. Причем, мониторинг апдейтов всех биндеров всего-на свете, который я к слову в соседней теме и выложил, показал что все там нормально, в том числе апдейт актора и все что к нему прицеплено. Никаких заоблачных цифр нигде не нашлось. Входов в онлайн/выходов в оффлайн массовых тоже не происходит ни у каких объектов, ГГ неподвижен, массовых миграций кого-то/чего-то тоже не происходит. А при наступлении этих тормозов (которые повторюсь, не постоянно а некими "наплывами") - время самого апдейта актора, остается то же, все прочие апдейты всех объектов - те же, Но, время между апдейтами актора становится равно ста миллисекундам. т.е. апдейт 10 раз в секунду, delta сообщенная движком = 100. и так по несколько апдейтов, затем опять поехали нормально.
По апдейтам проверял актора, неписей, монстров, физ. объекты, рестрикторы не стал (они ведь через актора обновляются?), гулаги-смарты, менеджеры кампов и анимаций, везде время сжираемое на апдейты в пределах нормы, более чем.

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Респавн ?

Длительность апдейта самого актора перед этим тоже нормальная ? То есть, вот того, "между которыми" длительность вылезает ?

 

Ну и всякое внутридвижковое в общем ни как не отловить. Типа мусоросборки.

И отрисовки графики. Впрочем, по графике отлавливается "кручением головой" - в разные стороны и "под ноги - в небо".

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

Респавн оригинальный у меня отрублен полностью. А свой - вызывается только в определенные моменты, после выброса + два раза в сутки в определенные часы. Больше никогда.

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

@UnLoaded, я конечно не совсем понимаю зачем рестриктору указывать этот параметр (тем более у аномалии, у которой всегда должен быть NOT A restrictor)... вот совсем этого делать не нужно (не возбраняется, но глупо по крайней мере). В общем это все в двух словах не расскажешь, но на самом деле это ограничители, которые используются безобидно для объектов. Проще наверное тебе самому все устройство посмотреть в движке, там в целом конечно запутано (я плохо разбираюсь в скриптах/движке), но основную суть и принцип работы вполне уловить можно. Если на пальцах, то out - откуда не выходить, in - куда не входить. По какому принципу это все реализуется можно посмотреть в движке (я просто подозреваю, что это тебе не интересно).

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

Карлан, подозрительность Ваша однако не по делу, было-бы не интересно - стал бы я спрашивать ?

Насчет в движке посмотреть - ну мне проще спросить, чем разобраться в мегатонне сишного кода...

 

Насчет "всегда должен быть NOT A restrictor" - смотрел для Кордона, нашел 11 аномалий с IN default restrictor, остальные NONE default restrictor, с NOT а restrictor всего 5. И ничего не вылетает.

Так, что пока от Вашего ответа пользы... А посылать в движке копаться я и сам могу.

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

@UnLoaded, я разве где-то сказал, что из-за этого должно вылетать (странный вывод)? Я сказал, что это делать неразумно, но прописывать эти типы им вполне возможно. Какая мегатонна там весь принцип работы написан в одном файле.

 

К слову, твой вылет не связан конкретно с типами рестрикторов.

 

 

 

ну мне проще спросить, чем разобраться

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

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

[873]
 
; cse_abstract properties
section_name = stalker
name = esc_poter
position = 1.1648344993591,2.2486491394043,61.42854309082
direction = 0,0.00316426996141672,0.062321275472641
version = 118
script_version = 6
 
; cse_alife_trader_abstract properties
money = 5000
character_profile = esc_poter
 
; cse_alife_object properties
game_vertex_id = 89
distance = 9.80000019073486
level_vertex_id = 278058
object_flags = 0xffffffbf
custom_data = <<END
 
[spawner]
cond = {+elev_zone_psih} 
 
[logic]
active = patrol
danger = danger_ignore
 
[danger_ignore]
ignore_distance = 10
ignore_distance_grenade = 10
ignore_distance_corpse  = 0
ignore_distance_danger_hit = 20
ignore_distance_sound   = 0 
danger_inertion_time_hit = 1
 
[patrol]
def_state_moving = rush
path_walk = esc_poter_walk
END
story_id = 5484
 
; cse_visual properties
visual_name = actors\novice\green_stalker_2
 
; cse_alife_creature_abstract properties
g_team = 0
g_squad = 1
g_group = 5
health = 1
dynamic_out_restrictions = 
dynamic_in_restrictions = 
upd:health = 1
upd:timestamp = 0x617a6b75
upd:creature_flags = 0x6b
upd:position = 1.1648344993591,2.2486491394043,61.42854309082
upd:o_model = 0
upd:o_torso = 0.00316426996141672,0.062321275472641,0
upd:g_team = 0
upd:g_squad = 1
upd:g_group = 5
 
; cse_alife_monster_abstract properties
upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0
equipment_preferences = 2,2,0,1,1
main_weapon_preferences = 0,2,0,2
 
; cse_ph_skeleton properties
 
; cse_alife_human_stalker properties
upd:start_dialog = 
 
; se_stalker properties

 
Прописал условие появление сталкера, если он получит инфопоршень elev_zone_psih, то он соспавниться.
[spawner]
cond = {+elev_zone_psih}
Но он почему-то игнорирует данное условие. Не понимаю в чем может быть ошибка.
В свое время данную инфопорцию выдает space_restrictor.
 

[874]
 
; cse_abstract properties
section_name = space_restrictor
name = elev_zone_psih
position = 1.1648344993591,2.2486491394043,61.42854309082
direction = -0.000350999995134771,-0.0109850000590086,0.0319279991090298
version = 118
script_version = 6
 
; cse_alife_object properties
game_vertex_id = 89
distance = 0
level_vertex_id = 278058
object_flags = 0xffffff3e
custom_data = <<END
 
[spawner]
cond = {+kuznecov_pogovoril_2} 
 
[logic]
active = sr_idle
 
[sr_idle]
on_actor_inside = %+elev_zone_psih%
END
story_id = 5485
 
; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 28.99492645263672
 
; cse_alife_space_restrictor properties
restrictor_type = 3

У него тоже имеется условие что после разговора с определенным НПС выдается инфопорция которая дает разрешение на спавн space_restrictor.

 

NL-Vincenz.gif

Ссылка на комментарий
Но он почему-то игнорирует данное условие.

Игнорировать он ничего не может, если прописан спавнер - отработает как надо, а вот если само условие не выполняется, вот тогда запросто.

Сначала проверь: зарегистрирована ли инфо-порция, нет ли просто грамматической ошибки в именах, затем сделай проверку выдачи инфо-порции - к примеру ф-цию типа

function spawn_test()
local text = "спавним"
news_manager.send_tip(db.actor, text, nil, nil, 30000)
end

 

пропиши в xr_effects.script, затем добавь ее вызов

[sr_idle]

on_actor_inside = %+elev_zone_psih =spawn_test% 

 

Увидишь сообщение - значит рестриктор заспавнен и отработал появление актора в своей зоне...

 

Блин, чет я не смотрю на все внимательно - а с каких пор у нас рестрикторы по спавнеру спавнятся ? Спавнер для них не работает. Вот и решение твоей проблемы!

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

@UnLoaded, Спасибо!

В таком случае как написать в on_actor_inside = %+elev_zone_psih% так что-бы при получении определенной инфопорции (например kuznecov_pogovoril_2), выдалась вот эта: elev_zone_psih..  :russian_ru:

NL-Vincenz.gif

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

А кто подскажет, можно в тайники класть некое подобие денег (или мешка какого), чтобы при его взятии у ГГ увеличивалась сумма на кармане?

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

Ссылка на комментарий
чтобы при его взятии у ГГ увеличивалась сумма на кармане?

Ну это-же элементарно, Ватсон :)

Сделать инвентарный предмет на классе к примеру хлебушка. Тока поменять визуал на пачку денег(туго набитый мешочек), и подсказку сменить: вместо "Съесть" на как Вам захочется. По факту употребления добавлять денег в нужном кол-ве, которое можно прописать новым параметром в конфиге этого добавленного предмета(и соответственно вычитывать при выполнении действия). Можно и по факту взятия в инвентарь(или on_use или  on_item_take) - на что повесите, то и будет...

 

@NL-Vincenz

on_actor_inside = {+kuznecov_pogovoril_2} nil %+elev_zone_psih%

здесь nil - перевод спейс_рестриктора в неактивное состояние, чтоб отработав свое, более ресурсы движка не кушал...

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

 

 

Тока поменять визуал на пачку денег(туго набитый мешочек), и подсказку сменить: вместо "Съесть" на как Вам захочется. По факту употребления добавлять денег в нужном кол-ве, которое можно прописать новым параметром в конфиге этого добавленного предмета(и соответственно вычитывать при выполнении действия). Можно и по факту взятия в инвентарь(или on_use или on_item_take) - на что повесите, то и будет...

Вот и я в этом же направлении подумал. А вешать именно по факту появления в инвентаре (поначалу хотел их именно съедать).

 

Тогда еще вопрос: если вешать на on_item_take (это ведь появление в инвентаре), можно ли его сразу того... удалить? Берешь в инвентарь - предмет удаляется и бабло добавляется? Можно ли удалить именно СРАЗУ, в одном обработчике?

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

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

 

 

Можно ли удалить именно СРАЗУ, в одном обработчике?
Можно. Обработчик срабатывает по факту появления объекта в инвентаре - следовательно делай с ним что хочешь...
  • Спасибо 1
Ссылка на комментарий

Идея возникла, может, бредовая: а можно ли поговорить с Монолитом? Он же вроде, физический объект?

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

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

а можно ли поговорить с Монолитом? Он же вроде, физический объект?

И что ? Почитай на Вики раздел "A-Life - статьи об использовании ССЖ A-Life". Разберешься - будет у тебя и Монолит разговаривать...

 

Ответ ни о чём. Какая из статей по указанному адресу имеет отношение к сути заданного вопроса? Malandrinus

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

@AndrewMor, в привычном смысле этого слова - нельзя (ну разве что ты со всякими бочками не говоришь, но вроде большинство - не говорят). Сделай на CUIWindow подобие диалогового окна, ну и вызывай при юзе.

 

@Malandrinus, подобные операции с созданием подобия физобъекта на основе людей/торговцев у меня ничем положительным не закончились. Хотя вот помнится в огсе 0692 что-то подобное было, но как это будет выглядеть с монолитом я не знаю, нужно тестировать. Поэтому советовать не стал.

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

можно ли поговорить с Монолитом? Он же вроде, физический объект?

Технически говоря, вопрос сводится к задаче вызвать стандартный диалог разговора для неживого объекта. Строго говоря, это невозможно, поскольку диалог можно вызвать только для сталкеров и торговцев. Но можно как-то обойти это. Я вижу два пути:

1. Создать объект торговца с визуалом монолита и тогда с ним можно будет говорить. Надо будет конечно повозиться с тем, чтобы вписать движковую механику торговца в левый визуал. Как-то поставить заглушки на анимации и т.п.

2. (меня опеределили) сделать своё окно диалога.

  • Нравится 1
 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

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

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

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

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

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

Войти

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

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

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