khanat-client-data-NeL/data/ryz/ryz_zzz_bazaar/bg_downloader.lua

181 lines
6 KiB
Lua

------------------------------------------------------------------------------------------------------------
-------------------
-- BG DOWNLOADER --
-------------------
bgdownloader =
{
ChangePriorityLock = false
}
------------------------------------------------------------------------------------------------------------
function bgdownloader:getProgressGroup()
if isInGame() then
local grp = getUI("ui:interface:bg_downloader")
return grp
else
local grp = getUI("ui:outgame:charsel:bgd_progress")
return grp
end
end
------------------------------------------------------------------------------------------------------------
function bgdownloader:getPrioCB()
return self:getProgressGroup():find("prio")
end
------------------------------------------------------------------------------------------------------------
function bgdownloader:getProgressBar()
return self:getProgressGroup():find("progress")
end
------------------------------------------------------------------------------------------------------------
function bgdownloader:setIcon(icon)
local bm = self:getProgressGroup():find("bm")
if icon == "" then
bm.active = false
else
bm.active = true
bm.texture = icon
end
end
local pausedText = i18n.get("uiBGD_Paused")
------------------------------------------------------------------------------------------------------------
function bgdownloader:setProgressText(ucstr, color, progress, ellipsis)
local text = self:getProgressGroup():find("text")
local ellipsisTxt = self:getProgressGroup():find("ellipsis")
text.color = color
text.uc_hardtext = ucstr
if ellipsis then
ellipsisTxt.hardtext = ellipsis
else
ellipsisTxt.hardtext = ""
end
ellipsisTxt.color = color
if getBGDownloaderPriority() == 0 then -- paused ?
-- don't update progress when in pause (it may change because the pause actually wait
-- any current download to finish, otherwise connection may be lost)
self:setIcon("bgd_pause.tga")
ellipsisTxt.hardtext = ""
text.uc_hardtext = pausedText
else
self:setIcon("")
local progressCtrl = self:getProgressBar()
progressCtrl.range = 100
progressCtrl.value = progress * 100
progressCtrl.active = true
end
self:displayPriority()
end
local progress progressSymbol = { ".", "..", "..." }
------------------------------------------------------------------------------------------------------------
-- set patching progression (from 0 to 1)
function bgdownloader:setPatchProgress(progress)
if not isInGame() then
self:getProgressGroup().active = true
end
self:getPrioCB().active = true
local progressPercentText = string.format("%d%%", 100 * progress)
local progressPostfix = math.fmod(os.time(), 3)
local progressDate = nltime.getLocalTime() / 500
local colValue = math.floor(230 + 24 * math.sin(progressDate))
local color = string.format("%d %d %d %d", colValue, colValue, colValue, 255)
self:setProgressText(concatUCString(i18n.get("uiBGD_Progress"), ucstring(progressPercentText)), color, progress, progressSymbol[progressPostfix + 1])
end
------------------------------------------------------------------------------------------------------------
function bgdownloader:setPatchSuccess()
if not isInGame() then
self:getProgressGroup().active = true
end
self:setProgressText(i18n.get("uiBGD_PatchUpToDate"), "0 255 0 255", 1)
self:setIcon("W_answer_16_valid.tga")
--if isInGame() then
self:getPrioCB().active = false
--end
end
------------------------------------------------------------------------------------------------------------
function bgdownloader:setPatchError()
if not isInGame() then
self:getProgressGroup().active = true
end
local errMsg = getPatchLastErrorMessage()
if errMsg == ucstring() then
self:setProgressText(i18n.get("uiBGD_PatchError"), "255 0 0 255", 0)
else
self:setProgressText(errMsg, "255 0 0 255", 0)
end
self:setIcon("W_answer_16_cancel.tga")
--if isInGame() then
self:getPrioCB().active = false
--end
end
------------------------------------------------------------------------------------------------------------
function bgdownloader:setNoDownloader()
if isInGame() then
self:setProgressText(i18n.get("uiBGD_NotUsed"), "255 255 255 255", 0)
else
self:getProgressGroup().active = false
end
self:setIcon("")
--if isInGame() then
self:getPrioCB().active = false
--end
self:getProgressBar().active = false
end
------------------------------------------------------------------------------------------------------------
function bgdownloader:setNoNecessaryPatch()
if isInGame() then
self:setProgressText(i18n.get("uiBGD_PatchUpToDate"), "255 255 255 255", 0)
else
self:getProgressGroup().active = false
end
self:setIcon("")
--if isInGame() then
self:getPrioCB().active = false
--end
self:getProgressBar().active = false
end
------------------------------------------------------------------------------------------------------------
-- the priority was changed by the user
function bgdownloader:onChangePriority()
if not self.ChangePriorityLock then
requestBGDownloaderPriority(self:getPrioCB().selection)
self:displayPriority()
end
end
------------------------------------------------------------------------------------------------------------
-- the priority has been changed externally, display it
function bgdownloader:displayPriority()
--if not isInGame() then return end
self.ChangePriorityLock = true
self:getPrioCB().selection = getBGDownloaderPriority()
self.ChangePriorityLock = false
self:getPrioCB().active = (getBGDownloaderPriority() ~= -1)
end
------------------------------------------------------------------------------------------------------------
-- display a warning telling that the user need a fully patched client to go further
function bgdownloader:inGamePatchUncompleteWarning()
local pg = self:getProgressGroup()
pg.active = true
setTopWindow(pg)
pg:blink(2)
messageBoxWithHelp(i18n.get("uiBGD_InGamePatchIncomplete"), "ui:interface", tonumber(getDefine("case_normal")))
displaySystemInfo(i18n.get("uiBGD_InGamePatchIncompleteBC"), "BC")
end