В Сталкере ЧН в лицухе версии 1.5.10 при клике на сейвы в меню игры, моментально вылетает игра. До этого я прошел в переход в нору/подземелье из НИИ Агропрома, и игра также сразу вылетела.
И никак загрузить сохранения не могу.
В АМК 180-ой строки нет.
Вот лог:
[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\priquel\sources\engine\xrServerEntities\script_engine.cpp
[error]Line : 180
[error]Description : <no expression>
[error]Arguments : LUA error: ...\common\stalker clear sky\gamedata\scripts\_g.script:975: bad argument #2 to 'format' (string expected, got nil)
Помогите, как решить эту проблему!
UPD: Я смог решить эту проблему.
Для начала вам нужно скачать распаковщик архивов, подойдет S.T.A.L.K.E.R. Universal Extractor 1.3. Скачали, запустили exe, указав корневой каталог игры.
Далее создается папка gamedataUE, переименовываете ее в gamedata.
Откройте файл с помощью notepad++(предварительно скачайте его) _g.script (он находится по пути ...\STALKER Clear Sky\gamedata\scripts) и найдите строку 975. Вставьте след код, выделив целиком область кода, основываясь на этом:
function abort(fmt, ...)
local reason = string.format(fmt, ...)
-- Проверка на nil и замена на строку по умолчанию, если необходимо
if reason == nil then
reason = "Неизвестная ошибка"
end
assert("ERROR: " .. reason)
error_log("ERROR: " .. reason)
-- Исправляем форматирование для логирования
log(string.format("%s", reason))
end
Сохраните и закройте.
Откройте файл minigames_manager.script и найдите строку 71. Вставьте след код:
-- Load manager
function CMinigames:load(thread)
set_save_marker(thread, "load", false, "CMinigames")
local n = thread:r_u16()
self.minigames = {}
self.minigames_params = {}
for i = 1, n do
local key = thread:r_stringZ()
self.minigames[key] = {}
local profile = thread:r_stringZ()
-- Инициализируем game_profile в зависимости от значения profile
if profile == "CMGCrowKiller" then
self.minigames[key].game_profile = minigame_crowkiller.CMGCrowKiller()
elseif profile == "CMGShooting" then
self.minigames[key].game_profile = minigame_shooting.CMGShooting()
else
-- Логирование незнакомого профиля
log("Unknown game profile: " .. profile)
self.minigames[key].game_profile = nil
end
self.minigames[key].state = thread:r_stringZ()
self.minigames_params[key] = {}
-- Проверяем, что game_profile инициализирован перед вызовом load
if self.minigames[key].game_profile then
self.minigames[key].game_profile:load(thread, self.minigames_params[key])
else
-- Логируем ошибку, если game_profile не инициализирован
log("Error: game_profile is nil for key: " .. key)
end
end
set_save_marker(thread, "load", true, "CMinigames")
end
Сохраните и закройте.
Откройте файл minigames_manager.script и найдите строку 48. Вставьте след код:
-- Save manager
function CMinigames:save(thread)
set_save_marker(thread, "save", false, "CMinigames")
local n = 0
-- Подсчет количества мини-игр
for k, v in pairs(self.minigames) do
n = n + 1
end
-- Сохранение количества мини-игр
thread:w_u16(n)
-- Сохранение данных каждой мини-игры
for k, v in pairs(self.minigames) do
thread:w_stringZ(k)
-- Проверяем, что game_profile инициализирован перед вызовом метода
if v.game_profile then
thread:w_stringZ(v.game_profile:get_profile_name())
else
-- Логируем ошибку и используем значение по умолчанию
log("Error: game_profile is nil for key: " .. k)
thread:w_stringZ("UnknownProfile") -- Используйте значение по умолчанию
end
thread:w_stringZ(self.minigames[k].state)
-- Проверяем, что game_profile инициализирован перед вызовом метода save
if v.game_profile then
v.game_profile:save(thread, self.minigames_params[k])
else
-- Логируем ошибку
log("Error: game_profile is nil for key: " .. k)
end
end
set_save_marker(thread, "save", true, "CMinigames")
end
Сохраните и закройте.