Всем привет.
ewgen , вот нашёл может быть поможет.
ВНИМАНИЕ: СПОЙЛЕР! "У КОГО ВЫЛЕТАЕТ ПО СТВОЛАМ !!!"
УСТРАНЯЕМ ВЫЛЕТ ПРИ ПЕРЕХОДЕ НА ДРУГУЮ ЛОКАЦИЮ.
Итак,
1) Открываем каталог со скриптами по следущему пути "S.T.A.L.K.E.R\gamedata\scripts" и находим файл bind_stalker.script Оставляем окно с файлом открытым.
2) Создаем текстовый файл, откроем его блокнотом и пока оставляем открытым.
3)Запускаем игру с последнего сейва который был перед /или ниже сохранялки с именем имя _autosave" идем к злополучному переходу и благополучно вылетаем в родной Windows где нас ожидает открытый блокнот.
4) Щелкаем теперь курсором в открытом блокноте. Меню Правка - Вставить у вас должен появиться этот листинг: (не пугайтесь информация при вылете игры храниться в буфере обмена- это было не чудо smile.gif)
Expression : !object->used_ai_locations() || ai().level_graph().valid_vertex_id(object->m_tNodeID)
Function : CALifeSwitchManager::add_online
File : E:\stalker\patch_1_0004\xr_3da\xrGame\alife_switch_manager.cpp
Line : 64
Description : Invalid vertex for object
Arguments : wpn_lr30011145 тут у вас будет своя строка с другими параметрами Аргумента- запишите ее. (блокнот пока не закрывайте)
5) В найденом файле bind_stalker.script ищем строку:
function actor_binder:update(delta)
ниже этой строки прописываем
local se_obj = alife():object("wpn_lr30011145") сюда вписываем записанный ранее параметр, соблюдаяя кавычки и скобки.
if se_obj then
alife():release(se_obj, true)
end
(Не удаляем ниже вписаные строки. Обычно они могут немного отличаться)
amk.oau_watchdog=200
amk.oau_reason="actor_binder:update"
object_binder.update(self, delta)
amk.oau_watchdog=199
6) Сохраняем, закрываем файл и запускаем игру с тогоже самого сейва. Если игра снова вылетела , опять копируем в блокнот свой листинг и находим нижнюю строку
Arguments Записываем ее новый параметр , допустим wpn_lr30032265
Теперь наше выражение будет выглядить так:
________________________________________________
function actor_binder:update(delta)
local se_obj = alife():object("wpn_lr30011145")
local se_obj2 = alife():object("wpn_lr30032265")
if se_obj then
alife():release(se_obj, true)
end
if se_obj2 then
alife():release(se_obj2, true)
end
amk.oau_watchdog=200
amk.oau_reason="actor_binder:update"
object_binder.update(self, delta)
_________________________________
Вот ещё один, способ дубликат.
ВНИМАНИЕ: СПОЙЛЕР! function actor_binder:update(delta)
local se_obj = alife():object("wpn_lr3007994")
local se_obj2 = alife():object("wpn_lr3008003")
local se_obj3 = alife():object("wpn_lr30014177")
local se_obj4 = alife():object("wpn_lr30014962")
if se_obj then
alife():release(se_obj, true)
end
if se_obj2 then
alife():release(se_obj2, true)
end
if se_obj3 then
alife():release(se_obj3, true)
end
if se_obj4 then
alife():release(se_obj4, true)
end
Вставляем после function actor_binder:update(delta)
Красный ствол первый, Если после правки, на переходе, вылетает с другим стволом, добавляем остальные цвета по мере необходимости. Если не нужны, то соответсвующие цвета удаляем Грузить лучше с сейва до перехода.
То есть посмотрели в логе вылета из за какого ствола вылет- вставили в скрипт свое название, если еще из за одного и его добавляем.
Ещё один способ, удаления "глючных" предметов, предложенный пользователем romale, сам автор сего способа (sapsan?Shadowman? поправьте если не так)
В файле gamedata\scripts\bind_stalker.script после значения function actor_binder:net_spawn(data) найти закомментированный блок кода:
--[local bad_object_names = {"wpn_lr30053522", "wpn_lr30058409" } --"wpn_lr30025601", "wpn_lr30028817","wpn_lr30033589"
local i, se_name, se_obj
for i, se_name in ipairs(bad_object_names) do
se_obj = alife():object(se_name)
if se_obj then
news_manager.send_tip(db.actor,"Удалили глючный ствол:"..se_name,nil,nil,1000)
alife():release(se_obj, true)
end
end]]
Убрать комментарии --[ в начале перед local и ]] в конце после end.
В bad_object_names вместо указанных для примера наименований стволов вписать названия объектов, которые имеется необходимость удалить. Каждое наименование заключается в кавычки ("wpn_lr30053522"), наименования, если их более одного, следует перечислять через запятую ("wpn_lr30053522", "wpn_lr30053522", и т.д)
Пример 1. Удаление рестриктора удаления Седого
Код
local bad_object_names = {"atp_sedoy_delete_restrictor"}
local i, se_name, se_obj
for i, se_name in ipairs(bad_object_names) do
se_obj = alife():object(se_name)
if se_obj then
news_manager.send_tip(db.actor,"Удалили глючный ствол:"..se_name,nil,nil,1000)
alife():release(se_obj, true)
end
end
Пример 2. Удаление 2-х предметов, к примеру - двух глючных зомбарей в саркофаге
Код
local bad_object_names = {"sarc_niz_zomb_2", "sarc_niz_zomb_1"} --тут аргументы могут быть другими...а название берём из лога вылета.
local i, se_name, se_obj
for i, se_name in ipairs(bad_object_names) do
se_obj = alife():object(se_name)
if se_obj then
news_manager.send_tip(db.actor,"Удалили глючный ствол:"..se_name,nil,nil,1000)
alife():release(se_obj, true)
end
end
После этих действий, необходимо сохранить изменения в скрипте и загрузить сейв (лучше конечно до входа на локацию).
Удаление будет выполнено во время загрузки, ГГ получит сообщение
"Удалили глючный ствол:<название>" для каждого объекта, перечисленного в bad_object_names и существующего в игре. Удаленный один раз объект более раз удалять не нужно.
После успешного удаления лучше (не критично) восстановить комментарии в коде --[ в начале перед local и]] в конце после end
ewgen, циферки нужно вставлять от своего лога.