mirror of
https://github.com/mehah/otclient
synced 2026-08-15 16:29:06 -04:00
106 lines
3.1 KiB
Lua
106 lines
3.1 KiB
Lua
ThingsLoaderController = Controller:new()
|
|
|
|
local filename = nil
|
|
local loaded = false
|
|
|
|
function setFileName(name)
|
|
filename = name
|
|
end
|
|
|
|
function isLoaded()
|
|
return loaded
|
|
end
|
|
|
|
local function tryLoadDatWithFallbacks(datPath)
|
|
if g_things.loadDat(datPath) then
|
|
return true
|
|
end
|
|
|
|
local featureFlags = {
|
|
GameSpritesU32,
|
|
GameEnhancedAnimations,
|
|
GameIdleAnimations
|
|
}
|
|
|
|
local combinations = {
|
|
{ 1 }, { 2 }, { 3 },
|
|
{ 1, 2 }, { 1, 3 }, { 2, 3 },
|
|
{ 1, 2, 3 }
|
|
}
|
|
|
|
for _, combo in ipairs(combinations) do
|
|
for _, idx in ipairs(combo) do
|
|
g_game.enableFeature(featureFlags[idx])
|
|
end
|
|
|
|
if g_things.loadDat(datPath) then
|
|
return true
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
local function load(version)
|
|
local errorList = {}
|
|
|
|
if version >= 1281 and not g_game.getFeature(GameLoadSprInsteadProtobuf) then
|
|
local filePath = resolvepath(string.format('/things/%d/', version))
|
|
if not g_things.loadAppearances(filePath) then
|
|
errorList[#errorList + 1] = "Couldn't load assets"
|
|
end
|
|
if not g_things.loadStaticData(filePath) then
|
|
errorList[#errorList + 1] = "Couldn't load staticdata"
|
|
end
|
|
else
|
|
local datPath, sprPath
|
|
if filename then
|
|
datPath = resolvepath('/data/things/' .. filename)
|
|
sprPath = resolvepath('/data/things/' .. filename)
|
|
else
|
|
datPath = resolvepath('/data/things/' .. version .. '/Tibia')
|
|
sprPath = resolvepath('/data/things/' .. version .. '/Tibia')
|
|
end
|
|
|
|
g_logger.setLevel(5)
|
|
if not tryLoadDatWithFallbacks(datPath) then
|
|
errorList[#errorList + 1] = tr('Unable to load dat file, please place a valid dat in \'%s.dat\'', datPath)
|
|
end
|
|
g_logger.setLevel(1)
|
|
|
|
if not g_sprites.loadSpr(sprPath) then
|
|
errorList[#errorList + 1] = tr('Unable to load spr file, please place a valid spr in \'%s.spr\'', sprPath)
|
|
end
|
|
if g_game.getFeature(GameLoadSprInsteadProtobuf) and version >= 1281 then
|
|
local staticPath = resolvepath(string.format('/things/%d/appearances', version))
|
|
if not g_things.loadAppearances(staticPath) then
|
|
g_logger.warning(string.format(
|
|
"[game_things.load()] Couldn't load /things/%d/appearances.dat, possible packets error.", version))
|
|
end
|
|
end
|
|
end
|
|
|
|
loaded = #errorList == 0
|
|
if loaded then
|
|
-- loading client files was successful, try to load sounds now
|
|
-- sound files are optional, this means that failing to load them
|
|
-- will not block logging into game
|
|
g_sounds.loadClientFiles(resolvepath(string.format('/sounds/%d/', version)))
|
|
return
|
|
end
|
|
|
|
local messageBox = displayErrorBox(tr('Error'), table.concat(errorList, "\n"))
|
|
addEvent(function()
|
|
messageBox:raise()
|
|
messageBox:focus()
|
|
end)
|
|
|
|
g_game.setClientVersion(0)
|
|
g_game.setProtocolVersion(0)
|
|
end
|
|
|
|
function ThingsLoaderController:onInit()
|
|
self:registerEvents(g_game, {
|
|
onClientVersionChange = load
|
|
})
|
|
end
|