Обновлено: 05.02.2015 - версия 100002
Автор: Alex Rinic
Новая версия фикса для переупаковщика патронов Dunin Ammo от IG-2007
Архив для чистого ЗП 1.6.02 . Добавил совет для переноса фикса к адаптациям Dunin ammo под разные моды. Читайте РидМи в архиве.
Железная логика:
Многие наверно замечали странности в работе переупаковщика патронов Dunin ammo при разряжании оружия, а именно после переупаковки количество патронов оказывалось "не тем", было меньше, чем должно было быть. Сам я, столкнувшись с этой проблемой, сделал простенький фикс, отключающий переупаковку при разряжании оружия, находящегося в руках, и на этом успокоился. Однако после длительного периода, когда я не интересовался моддингом на Stalker (к тому времени появились адаптации Dunin ammo для разных версий игры и модов на любой вкус и цвет), я решил пройти один из модов, и тут обнаружил, что ошибка с пропаданием патронов начала вылезать снова. Заинтересовавшись этой проблемой, я решил провести тест - взяв оригинальный dunin_ammo.script модифицировал его так, чтобы при каждом вызове метода update каждая из функций скрипта выдавала статистику о своей работе в лог игры. Однако и тут везение сыграло свою роль - некоторое время спустя мне удалось повторить ситуации с пропажей патронов, без чего я не смог бы сделать данный фикс. Оказалось, что при разряжании оружия функции
enum_ammo(section, box_size)
и
get_ammo_size(obj)
иногда сбрасывали в лог билеберду. После знакомства с алгоритмами их работы, стало понятно, что кусок функции enum_ammo
for i=0, db.actor:object_count()-1 do
obj = db.actor:object(i)
if obj:section() == section then
size = get_ammo_size(obj)
if size < box_size then
table.insert(t, obj:id())
s = s + size
end
end
end
должен вроде бы возвращать общее количество неполных пачек и их ID, однако в случаях, когда после загрузки в инвентаре/слоте имеется ствол с неполным магазином, а тем паче, имеются несколько таких стволов, а тем более с одинаковыми секциями и в одинаковом состоянии, то в результате значение переменной s не соответствовало реальному количеству патронов в инвентаре. Оказалось, что функция
get_ammo_size(obj)
может выдать в определённых случаях значение меньше нуля или вообще непонятно что.
Для переноса фикса на различные адаптации Dunin ammo для разных версий игры и модов просто адаптируете функцию
enum_ammo(section, box_size)
под ваш модуль переупаковки.
Внимание: ожидайте | до открытия ссылки |
Комментарии
появилась свежая версия