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

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


Halford

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

  abramcumner писал(а):
Вроде распределение по гулагам идет на апдейте - custom_data должна спокойно записываться.

 

Отладка показывает, что присваивание смарт террейна происходит вот тут

function se_monster:on_before_register()
	if modified_params then -- при наличии таблицы с данными для замены
		-- читаем из родного пакета данные
		local params = m_net_utils.get_monster_data( self )
		replace_params( modified_params, params )
		m_net_utils.set_monster_data( params, self )
		modified_params = nil -- обнуляем табличку с исходными данными
	end
	self:fill_exclusives()
end

С modified_params - это уже мое.

 

  abramcumner писал(а):
Кроме того custom_data можно задать прямо в конфиге секции.

 

Ты же не предлагаешь для каждого респаунера делать мутантов со своими секциями? Это соляночные респаунеры, они скриптово задаются и мутанты в них спаунятся самые обычные, какие в конфиге задали. Тем более, что во всех Солянках, мутантам в этих респаунерах задается своя логика. А это значит, что custom_data у них должна быть разная, в зависимости от респаунера.

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

Поделиться этим сообщением


Ссылка на сообщение
  Dennis_Chikin писал(а):
Это не соляночный код.

 

Упс... Не ожидал, что в ОП-2 это изменено. Вот из ОП-2:

function se_monster:on_before_register()
	self:fill_exclusives()
end

В Солянке по другому?

 

 

  Dennis_Chikin писал(а):
У свежезаспавненного монстра очевидно нет ни каких эксклюзивов. Соотвественно, они ни где не запоминаются.

 

Отладка показывает, что свежеспауненого мутанта немедленно, вон в том коде, затягивает в любой свободный гулаг. Если выразиться точнее, не в том коде конкретно, а в промежутке между create() и вызовом amk.on_REspawn(), который вызывает amk_mod.respawned(), который и ставит мутанту custom_data.

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

Поделиться этим сообщением


Ссылка на сообщение

@abramcumner, а при чем тут чистый ТЧ, если я в самом первом сообщении, на эту тему, написал:

 

Кто использует респаунеры из Солянки, которые при спауне мутантов делают вот так:

 

Ах да, это же русский форум. ;)

Поделиться этим сообщением


Ссылка на сообщение

Подскажите пожалуйста, в каком направлении копать? Выхожу в онлайн на Радаре, рядом в онлайн выходит монолитовец и тут-же умирает. Хит коллбэк не вызывается. В death коллбэк убивший его - он сам. Как же отследить, почему и где он убивается?

Поделиться этим сообщением


Ссылка на сообщение

 

 

  dsh писал(а):
Выхожу в онлайн на Радаре, рядом в онлайн выходит монолитовец и тут-же умирает.

 

Люди, кто в потрохах мамонта разбирается? Вот это вот из ОП-2, но скорее всего из Солянки:

	if type == "rad_antena" then
		for i = 1, 5 do
			t = { section = "logic@rad_antenna_patrol_wagon"..i,
				idle = 0,
				prior = 5, state = {0},
				squad = squad, group = groups[1],
				in_rest = "rad_wagon_restrictor", out_rest = ""
			}
			table.insert(sj, t)
		end

Похоже, из-за этого убивается монолитовец. Если я отключаю ему установку логики, он жив живехенек. Поискал строку "@rad_antenna_patrol" во всем моде. Нету. Т.е. секция назначается, а самой логики-то нету. Если я правильно все понимаю. Может кто-нибудь, что-нибудь помнит?

Поделиться этим сообщением


Ссылка на сообщение
@naxac, а зачем так сделано, может ты знаешь? Выжигатель отключается один раз, а этот смарт вечный и безусловный. И приходят туда новые монолитовцы и автоматически убиваются при выходе в онлайн и лежат трупики с халявным лутом. И так до скончания веков. Каков замысел был? Должно было убивание происходить только один раз? Или смарт должен был иметь соотв. cond и прекратить свое существование?

Поделиться этим сообщением


Ссылка на сообщение

Расскажите пожалуйста, кто знает, зачем у некоторых персонажей в all.spawn указываются флаги, запрещающие переход в оффлайн? В чем смысл такого?


 

 

  AndrewMor писал(а):
в конфигах аномалий есть параметр "BirthProbability", вроде отвечающий за вероятность порождения аномалией артефакта (платформа - ТЧ)

 

Разглядывая исходники, у меня есть сильное подозрение, что этот параметр никакого отношения к аномалиям и артефактам не имеет. Насколько я вижу, он упоминается только при обработке мутантов. Вроде как должен популяцию мутантов пополнять. А во вторых, вызов кода, где этот параметр используется, просто закомментирован. Т.е., похоже, что этот параметр не используется вообще.

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение

 

 

  AndrewMor писал(а):
А какая строчка/строчки указывают на эти флаги?

 

А вот, например, Шерстюк из Солянок:

object_flags = 0xffffff7b

Здесь сброшен бит, разрешающий переход в оффлайн.

 

 

 

  AndrewMor писал(а):
spawn_blowout_artefacts artefact_spawn_probability   Как с ними дело обстоит, поскольку сам пока не проверял. Так понимаю, что это возможность спавна арта при выбросе/после выброса и ее вероятность. Так?

 

Судя по исходникам, эти параметры используются. Но только не при выбросе, насколько я понимаю. А при срабатывании аномалии. Т.е. при попадании в нее какого-то объекта.

Поделиться этим сообщением


Ссылка на сообщение

 

 

  Marafon6540 писал(а):
А можно вот именно об этом поподробнее? Как учитываются, где это можно отследить?

 

Лучше самостоятельно исходники посмотреть. В частности xr_3da/xrGame/CustomZone.cpp. Дальнейшее, всего лишь мои теоретические измышления, основанные на разглядывании этого файла. Параметр "spawn_blowout_artefacts" указывает, будет ли вообще производится спаун артефактов при срабатывании аномалии. Параметр "artefact_spawn_probability" задает  вероятность, что при срабатывании будет какой-нибудь спаун вообще. Т.е. спаун будет обрабатываться, если rnd < значения этого параметра. В качестве значения имеется ввиду float от 0 до 1. И параметр "artefacts" задает список секций артфактов и их относительных вероятностей, как в описании спаунеров, через запятую, что-то вроде "art1,30,art2,70". Ну и далее, собственно, при попадании в аномалию чего-нибудь живого и имеющего радиус >= 0.6 и пробывшего в аномалии дольше "disable_time" или имеющего радиус < 0.6 и пробывшего в аномалии дольше "disable_time_small", срабатывает аномалия и вроде как создается артефакт из списка, если выполнено условие "artefact_spawn_probability". В общем, как-то так.

  • Спасибо 2
  • Полезно 2

Поделиться этим сообщением


Ссылка на сообщение

Вот этот же уборщик, взятый из ОП-2, но в немного причесанном виде: https://github.com/dsh2dsh/op2ogse/blob/master/gamedata/scripts/sak_off_corpses.script

 

Если кому нужно. Убрал нафиг, мягко говоря, лишнее и привел к более читаемому виду. По хорошему, нафиг, мягко говоря, его переписать надо, но работает...

Поделиться этим сообщением


Ссылка на сообщение

Может у кого дельная мысль будет. Провожу эксперимент. На локациях Бар и Армейские склады держу принудительно в онлайне почти всех неписей. Всех их по пути посещаю, обратите на это внимание. Через некоторое кол-во переходов получаю вылет по нехватке памяти. Теперь перестаю держать их в онлайне, но по прежнему, всех и посещаю по пути, т.е. все они в онлайн выходят, правда и уходят из него. Вылета по нехватки памяти нет. Вопрос, где же в первом случае утекает память?

  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

 

 

  Fagot. писал(а):
Вот тебе и ответ

 

Не, это не ответ. Вопрос-то в том, что такого в онлайновых объектах, что запись их в сейв вызывает утечку памяти.


 

 

  Struck писал(а):
Или предлагаешь эксперимент провести за тебя?

 

Цитат из моего вопроса

  Цитата

 

Может у кого дельная мысль будет.

а потрындеть я и сам могу. :)


 

 

  Fagot. писал(а):
А теперь прикинь размер АС...

 

А что прикидывать, маленькая эта локация. В онлайне там примерно 42 непися. Не сказать, что слишком много. 

Поделиться этим сообщением


Ссылка на сообщение

@Dennis_Chikin, цифр нехватающей памяти нет вообще. Чаще всего есть только

  Цитата

 

[12/27/15 23:41:45] [error]Expression    : error handler is invoked!

[12/27/15 23:41:45] [error]Function      : handler_base
[12/27/15 23:41:45] [error]File          : E:\stalker\sources\trunk\xrCore\xrDebugNew.cpp
[12/27/15 23:41:45] [error]Line          : 753
[12/27/15 23:41:45] [error]Description   : std: out of memory
 

Это процесс отожрался где-то до 3.5 гигов. Тоже самое будет и без принудительного держания в онлайне неписей, но гораздо позже, может часов через 5 игры. А тут 2.5 - 3 часа и вылет.

Поделиться этим сообщением


Ссылка на сообщение

 

 

  Dennis_Chikin писал(а):
По тому как в "скрипточасти" так красиво может течь, только если что-то висит.

 

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

 

 

 

  Dennis_Chikin писал(а):
Баг с malloc() - что-то слабо верится, ибо починено везде, где можно, лет 15 назад уже как

 

А вот что мне кажется более вероятным, так где-то память просто не переиспользуется. Ладно оно в систему ее не отдает, это нормально еще. Но чую я, что каждый игровой объект дописывается в какую-то кучу линейно. Эта память не только не освобождается, но и не переиспользуется. Такое вот ощущение. Пришли мы на эту локацию повторно, так мало того, что память занята этим же неписем с прошлого раза, так для него еще выделяется новая и т.д. снова и снова.


 

 

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

 

Память течет жутким образом. Перехожу с АС в Бар и обратно несколько раз и каждый раз смотрю в диспетчере задач размер процесса. Каждый переход прибавляет сотню мегабайт. Притом это зависит от кол-ва неписей в онлайне на момент перехода.

  • Полезно 2

Поделиться этим сообщением


Ссылка на сообщение

 

 

  dsh писал(а):
Память течет жутким образом. Перехожу с АС в Бар и обратно несколько раз и каждый раз смотрю в диспетчере задач размер процесса. Каждый переход прибавляет сотню мегабайт.

 

Не, не докопаюсь я до сути. От неписей это не зависит. Убрал всех в радиусе алайфа. Перехожу с АС в Бар - процесс уменьшается на несколько десятков мегабайт. А перехожу обратно, с Бара на АС и оппа, процесс увеличивается на сотню мегабайт. Повторяю и каждый переход с Бара на АС увеличивает процесс на сотню мегабайт. Да что же там такое на АС, что так память течет.

Поделиться этим сообщением


Ссылка на сообщение
  Dennis_Chikin писал(а):

По раненым, которые забывают собственное оружие - увижу - буду смотреть.

Им в анимации нужно отключать роняние оружия. И кому такое только в голову пришло. Подобрать-то они его подберут, но на общих основаниях. Т.е. как обычный, валяющийся предмет. Если успеют. А то желающих может быть много.

Поделиться этим сообщением


Ссылка на сообщение

@Struck, в смысле? Ты же сам и написал:

  Цитата

 

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

Я твой ответ до этого не видел, но предлагаю именно это. Все остальные варианты гораздо сложнее и не факт, что осмысленнее. Что бы заставить сталкера, выронившего оружие, его подобрать, нужно написать доп. код, а главное, четко сформулировать, что есть его оружие и потом опять таки написать код, для реализации этой самой принадлежности оружия.

Поделиться этим сообщением


Ссылка на сообщение

 

 

  Struck писал(а):
Очевидно ствол до дропа, что же еще? Оперируешь-то одним итемом.

 

Ага, т.е. где-то еще надо запоминать, что объект с таким-то id - это его оружие? Т.е. ко всему прочему, что ты предлагаешь дописать (кому?), ты предлагаешь еще дописать кучу кода для хранения факта, какой именно объект в игре является оружием данного непися. А плюс к этому, еще кучу кода для обработки ситуаций, что вот это оружие было легально продано/куплено или иными способами легально поменяло своего владельца. И зачем? Что бы в результате получить, что бы раненый непись не остался без своего оружия? И вот это вот все лучше, чем закомментировать "drop" в соотв. скрипте: https://github.com/dsh2dsh/op2ogse/commit/e81640102623455061b84cc7e263f550ee24c895

Ну не знаю. Сдается мне, месье знает толк в извращениях. :)

  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

 

 

  Struck писал(а):
не понимаю где тут куча кода

 

Не ну советовать же легко, ты же наверняка в курсе. Ну раз не понимаешь, так возьмись, накидай эту НЕ кучу кода. Отладить не забудь только и все крайние варианты проверить. Например, когда раненый непись роняет свое оружие, игрок записывается и загружается. Ты все еще считаешь, что это будет добавление элемента в список? Ну-ну.

 

 

 

  Struck писал(а):
Предлагаю я дописать вопрошающему

 

А ты так уверен, что вопрошающий осилит? Ох уж эти советчики...

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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