-----------------------------------------------------------------------------
-- u3_utils.script
-- zestawik maіych funkcji i klas, przydatnych w innych skryptach.
-- tam, gdzie nie jest napisane inaczej, autor: utak3r.
-- 
-- Last update: 2009.12.29
-----------------------------------------------------------------------------

--
-- Zapis do logu
--
function printf(str,...)
	if not str then
		str = "((string is nil))"
	end
	get_console():execute("load ~#I#:"..string.format(str,...))
end

--
-- Sprawdzenie, czy jest gra i czy aktor jest їywy
--
function isGameOn()
	if level.present() and db.actor ~= nil and db.actor:alive() then
		return true
	end
	return false
end

--
-- Zapis stanu gry (save)
--
function savegame(save_name)
	--if game_setup.autosave_enable == 0 then return end
    if save_name == nil then
        printf("Попытка сохранить игру без названия")
        return
    end
    if has_alife_info("transform") then
        cant_save("Автосейв не создан - запущена варка артефактов")
        return
    end
	
    if isGameOn() then
        local save_param = save_name
        save_param = string.gsub(save_param,"[><|?*/\\,:\"%b/n]","")
        save_param = string.gsub(save_param,"[%%][c][\[][%a%d%p%s]*[\]]","")
        if string.len(save_param)>60 then
            save_param = string.sub(save_param,1,58).."..."
        end
        get_console():execute("save "..save_param)
    end
end

function savegame_date(save_name)
	savegame(save_name..". "..game.translate_string(level.name())..". День "..amk.game_days())
end
function savegame_lc(name, to_level)
	savegame(name.." "..game.translate_string(level.name()).." - "..game.translate_string(to_level)..". День "..amk.game_days())
end

function can_save() -- не сохраняем во время открытых окон, когда нельзя сделать квиксейв
	return not (db.actor:is_talking() or has_alife_info("ui_car_body") or has_alife_info("ui_inventory") or has_alife_info("ui_pda"))
end

function cant_save(reason) -- сообщение, что нельзя сохраняться во время оределенных действий
	local hud = get_hud()
	hud:AddCustomStatic("cant_walk", true)
	local wnd = hud:GetCustomStatic("cant_walk"):wnd()
	wnd:SetText(reason)
end
