Files
moonwell-client/patch-ruRU-5/Interface/GlueXML/AccountLogin.lua
T

1001 lines
34 KiB
Lua

-- ==============================================================================================
-- MoonWell - SISTEMA DE AUTOLOGIN CON BOTONES DE REDES SOCIALES CON ANIMACIÓN BLP Y ESCENA 3D
-- ==============================================================================================
local Config = {
FADE_IN_TIME = 2,
DEFAULT_TOOLTIP_COLOR = {0.8, 0.8, 0.8, 0.09, 0.09, 0.09},
MAX_PIN_LENGTH = 10,
AUTO_LOGIN_DELAY = 3.0,
BACKGROUND_TEXTURE = "Interface/Loginscreen/Background.blp",
LOGIN_AMBIENCE = false,
ENABLE_BLP_ANIMATION = false,
FRAME_COUNT = 3,
ANIMATION_DURATION = 16.0,
FPS_LIMIT = 30,
ANIMATION_PATH = "Interface\\Loginscreen\\Scene\\",
MODEL_UPDATE_INTERVAL = 0.1,
MODEL_UPDATE_COUNT_REQUIRED = 2,
SCROLL_THRESHOLD = 20,
FADE_DURATION = 0.5,
LOGO_TEXTURE = "Interface\\Glues\\Common\\glues-wow-wotlklogo",
LOGO_SIZE = 225,
LOGO_POSITION_X = 60,
LOGO_POSITION_Y = 40,
CUSTOM_PANEL_WIDTH = 352,
CUSTOM_PANEL_SCROLL_WIDTH = 300,
DEFAULT_FRAME_LEVEL = 2,
AMBIENCE_FADE_TIME = 5.0,
UNDEAD_AMBIENCE_FADE_TIME = 4.0,
SFX_STOP_TIME = 1.0,
TOS_FRAME_WIDTH = 640,
TOS_FRAME_HEIGHT = 512,
TOS_SCROLL_WIDTH = 540,
TOS_SCROLL_HEIGHT = 407,
TOS_HEADER_WIDTH = 300,
TOS_TITLE_OFFSET = 12,
TOS_TEXT_OFFSET = 56,
BUTTON_HEIGHT_SMALL = 38,
BUTTON_HEIGHT_LARGE = 55,
CINEMATICS_BUTTON_HEIGHT = 80,
CINEMATICS_BACKGROUND_HEIGHT_BASE = 70
}
local LoginState = {
autoLoginTimer = nil, autoLoginDelay = Config.AUTO_LOGIN_DELAY, autoLoginAttempted = false, musicTimer = 0, sceneTimer = 0, currentFrame = 0, lastUpdateTime = 0, currentScene = 1
}
local ModelManager = {
models = {}, loginModels = {}
}
local UICache = {
accountEdit = nil, passwordEdit = nil, saveAccountName = nil, savePassword = nil, autoLogin = nil, autoLoginText = nil, loginButton = nil, versionText = nil, realmName = nil, upgradeButton = nil, tosFrame = nil, tosAccept = nil, tosDecline = nil, backgroundTexture = nil, animatedTexture = nil, newLogo = nil, newLogoFrame = nil
}
LOGIN_MODEL_LIGHTS = {
[0] = {1, 0, 0, -0.707, -0.707, 0.7, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 0.8},
}
LOGIN_MODEL_STRUCT = {
SCENE_ID = 1, POS_Y = 2, POS_Z = 3, POS_X = 4, FACING = 5, SCALE = 6, ALPHA = 7, LIGHT = 8, SEQUENCE = 9, WIDTH_SQUISH = 10, HEIGHT_SQUISH = 11, MODEL_PATH = 12,
}
LOGIN_MODELS = {
{1, 0.000, 0.300, 0.285, 0.684, 0.085, 1.000, LOGIN_MODEL_LIGHTS[0], 1, 1, 1, "Environments\\Stars\\icecrownarthasdeathsky.m2"},
{1, -0.712, 0.800, 0.000, 6.245, 0.100, 0.400, LOGIN_MODEL_LIGHTS[0], 1, 1, 1, "Environments\\Stars\\aurorayellowgreen.m2"},
{1, -0.712, -0.750, 0.000, 6.245, 0.100, 0.500, LOGIN_MODEL_LIGHTS[0], 1, 1, 1, "Environments\\Stars\\auroraorange.m2"},
}
BACKGROUND_MODELS = {
["Environments\\Stars\\icecrownarthasdeathsky.m2"] = { frameLevel = 0 },
}
-- ==================== CONFIGURACIÓN ADICIONAL ====================
local function InitializeUICache()
UICache.accountEdit = _G["AccountLoginAccountEdit"]
UICache.passwordEdit = _G["AccountLoginPasswordEdit"]
UICache.saveAccountName = _G["AccountLoginSaveAccountName"]
UICache.savePassword = _G["AccountLoginSavePassword"]
UICache.autoLogin = _G["AccountLoginAutoLogin"]
UICache.autoLoginText = _G["AccountLoginAutoLoginText"]
UICache.loginButton = _G["AccountLoginLoginButton"]
UICache.versionText = _G["AccountLoginVersion"]
UICache.realmName = _G["AccountLoginRealmName"]
UICache.upgradeButton = _G["AccountLoginUpgradeAccountButton"]
UICache.tosFrame = _G["TOSFrame"]
UICache.tosAccept = _G["TOSAccept"]
UICache.tosDecline = _G["TOSDecline"]
end
function GetLoginConfig()
return Config
end
function GetLoginState()
return LoginState
end
-- ============================================================================
-- SISTEMA DE ANIMACIÓN BLP
-- ============================================================================
local function UpdateBackgroundAnimation(self, elapsed)
if not Config.ENABLE_BLP_ANIMATION or Config.FRAME_COUNT <= 0 then
return
end
local currentTime = GetTime()
if (currentTime - LoginState.lastUpdateTime) < (1 / Config.FPS_LIMIT) then
return
end
LoginState.lastUpdateTime = currentTime
LoginState.currentFrame = (LoginState.currentFrame + 1) % Config.FRAME_COUNT
if self.animatedTexture then
local texturePath = Config.ANIMATION_PATH .. string.format("%04d.blp", LoginState.currentFrame)
self.animatedTexture:SetTexture(texturePath)
end
end
-- ============================================================================
-- DIÁLOGOS
-- ============================================================================
GlueDialogTypes["REMEMBER_PASSWORD"] = {
text = SAVE_PASSWORD_NOTICE,
button1 = OKAY,
button2 = CANCEL,
OnAccept = function()
UICache.autoLoginText:Show()
UICache.autoLogin:Show()
end,
OnCancel = function()
UICache.savePassword:SetChecked(0)
UICache.autoLoginText:Hide()
UICache.autoLogin:Hide()
UICache.autoLogin:SetChecked(0)
end,
}
GlueDialogTypes["AUTO_LOGIN"] = {
text = SAVE_AUTOLOGIN_NOTICE,
button1 = OKAY,
button2 = CANCEL,
OnAccept = function()
end,
OnCancel = function()
UICache.autoLogin:SetChecked(0)
end,
}
-- ============================================================================
-- GESTIÓN DE MODELOS 3D
-- ============================================================================
local function CreateLoginModel(parent, modelData)
local model = CreateFrame("Model", nil, parent)
local width, height = parent:GetSize()
model:SetSize(
width * (modelData[LOGIN_MODEL_STRUCT.WIDTH_SQUISH] or 1),
height * (modelData[LOGIN_MODEL_STRUCT.HEIGHT_SQUISH] or 1)
)
model:SetPoint("CENTER")
model:SetModel("Character/Human/Male/HumanMale.mdx")
model:SetCamera(1)
model:SetModel(modelData[LOGIN_MODEL_STRUCT.MODEL_PATH])
model:SetPosition(
modelData[LOGIN_MODEL_STRUCT.POS_X],
modelData[LOGIN_MODEL_STRUCT.POS_Y],
modelData[LOGIN_MODEL_STRUCT.POS_Z]
)
model:SetFacing(modelData[LOGIN_MODEL_STRUCT.FACING])
model:SetModelScale(modelData[LOGIN_MODEL_STRUCT.SCALE])
model:SetAlpha(modelData[LOGIN_MODEL_STRUCT.ALPHA])
model:SetSequence(modelData[LOGIN_MODEL_STRUCT.SEQUENCE])
if modelData[LOGIN_MODEL_STRUCT.LIGHT] then
model:SetLight(unpack(modelData[LOGIN_MODEL_STRUCT.LIGHT]))
end
return model
end
local function InitializeLoginScene(parent)
for _, model in ipairs(ModelManager.loginModels) do
model:Hide()
model:SetParent(nil)
end
ModelManager.loginModels = {}
for _, modelData in ipairs(LOGIN_MODELS) do
if modelData[LOGIN_MODEL_STRUCT.SCENE_ID] == LoginState.currentScene then
local model = CreateLoginModel(parent, modelData)
table.insert(ModelManager.loginModels, model)
end
end
end
-- ============================================================================
-- ACTUALIZACIÓN DE LA ESCENA
-- ============================================================================
function LoginScene_OnUpdate(self, elapsed)
if Config.LOGIN_AMBIENCE and not self.ambiencePlayed then
PlayGlueAmbience(Config.LOGIN_AMBIENCE, Config.AMBIENCE_FADE_TIME)
self.ambiencePlayed = true
end
if LoginState.autoLoginTimer and LoginState.autoLoginTimer < LoginState.autoLoginDelay then
LoginState.autoLoginTimer = LoginState.autoLoginTimer + elapsed
if LoginState.autoLoginTimer >= LoginState.autoLoginDelay then
AccountLogin_Login()
LoginState.autoLoginTimer = nil
end
end
UpdateBackgroundAnimation(self, elapsed)
if not self.modelsInitialized and self.Models then
self.modelUpdateTimer = (self.modelUpdateTimer or 0) + elapsed
if self.modelUpdateTimer >= Config.MODEL_UPDATE_INTERVAL then
self.modelUpdateTimer = 0
self.modelUpdateCount = (self.modelUpdateCount or 0) + 1
if self.modelUpdateCount == 1 then
for i = 1, #self.Models do
local model = self.Models[i]
local data = LOGIN_MODELS[i]
if model and data then
model:SetModel(data[LOGIN_MODEL_STRUCT.MODEL_PATH])
model:SetPosition(data[LOGIN_MODEL_STRUCT.POS_X], data[LOGIN_MODEL_STRUCT.POS_Y], data[LOGIN_MODEL_STRUCT.POS_Z])
model:SetFacing(data[LOGIN_MODEL_STRUCT.FACING])
model:SetModelScale(data[LOGIN_MODEL_STRUCT.SCALE])
model:SetSequence(data[LOGIN_MODEL_STRUCT.SEQUENCE])
if data[LOGIN_MODEL_STRUCT.LIGHT] then
model:SetLight(unpack(data[LOGIN_MODEL_STRUCT.LIGHT]))
end
model:Show()
end
end
end
if self.modelUpdateCount >= Config.MODEL_UPDATE_COUNT_REQUIRED then
self.modelsInitialized = true
self.modelsCreated = true
self.modelUpdateTimer = nil
self.modelUpdateCount = nil
end
end
end
LoginState.sceneTimer = LoginState.sceneTimer + elapsed
end
-- ============================================================================
-- INICIALIZACIÓN Y EVENTOS
-- ============================================================================
local function isBackgroundModel(modelPath)
return BACKGROUND_MODELS[modelPath] ~= nil
end
local function getModelFrameLevel(modelPath)
return isBackgroundModel(modelPath) and BACKGROUND_MODELS[modelPath].frameLevel or Config.DEFAULT_FRAME_LEVEL
end
function AccountLogin_OnLoad(self)
InitializeUICache()
AccountLogin_SetupServerAlert()
UICache.tosFrame.noticeType = "EULA"
self:RegisterEvent("SHOW_SERVER_ALERT")
self:RegisterEvent("SHOW_SURVEY_NOTIFICATION")
self:RegisterEvent("CLIENT_ACCOUNT_MISMATCH")
self:RegisterEvent("CLIENT_TRIAL")
self:RegisterEvent("SCANDLL_ERROR")
self:RegisterEvent("SCANDLL_FINISHED")
local versionType, buildType, version, internalVersion, date = GetBuildInfo()
UICache.versionText:SetText(buildType.." "..version.." ("..internalVersion..")")
local backdropColor = Config.DEFAULT_TOOLTIP_COLOR
UICache.accountEdit:SetBackdropBorderColor(backdropColor[1], backdropColor[2], backdropColor[3])
UICache.accountEdit:SetBackdropColor(backdropColor[4], backdropColor[5], backdropColor[6])
UICache.passwordEdit:SetBackdropBorderColor(backdropColor[1], backdropColor[2], backdropColor[3])
UICache.passwordEdit:SetBackdropColor(backdropColor[4], backdropColor[5], backdropColor[6])
self.Models = {}
for i = 1, #LOGIN_MODELS do
local data = LOGIN_MODELS[i]
local model = CreateFrame("Model", "AccountLoginModel"..i, self)
model:SetModel("Character/Human/Male/HumanMale.mdx")
model:SetPoint("CENTER", 0, 0)
model:SetSize(self:GetWidth() / (data[LOGIN_MODEL_STRUCT.WIDTH_SQUISH] or 1),
self:GetHeight() / (data[LOGIN_MODEL_STRUCT.HEIGHT_SQUISH] or 1))
model:SetCamera(1)
if data[LOGIN_MODEL_STRUCT.LIGHT] then
model:SetLight(unpack(data[LOGIN_MODEL_STRUCT.LIGHT]))
end
model:SetAlpha(data[LOGIN_MODEL_STRUCT.ALPHA])
local frameLevel = getModelFrameLevel(data[LOGIN_MODEL_STRUCT.MODEL_PATH])
model:SetFrameLevel(frameLevel)
if frameLevel == 0 then
model:SetFrameStrata("LOW")
end
model:Hide()
self.Models[i] = model
end
self.modelUpdateCount = 0
self.modelUpdateTimer = 0
self.modelsInitialized = false
self.ambiencePlayed = false
self.modelsCreated = false
AcceptTOS()
AcceptEULA()
end
function AccountLogin_OnShow(self)
self:Show()
self:SetAlpha(1)
WorldOfWarcraftRating:Hide()
if not self.backgroundTexture then
self.backgroundTexture = self:CreateTexture("AccountLoginBackground", "BACKGROUND")
self.backgroundTexture:SetTexture(Config.BACKGROUND_TEXTURE)
self.backgroundTexture:SetAllPoints(self)
self.backgroundTexture:SetTexCoord(0, 1, 0, 1)
UICache.backgroundTexture = self.backgroundTexture
else
self.backgroundTexture:Show()
end
if Config.ENABLE_BLP_ANIMATION and Config.FRAME_COUNT > 0 then
if not self.animatedTexture then
self.animatedTexture = self:CreateTexture("AccountLoginAnimatedBackground", "BACKGROUND")
self.animatedTexture:SetAllPoints(self)
self.animatedTexture:SetTexture(Config.ANIMATION_PATH .. "0000.blp")
UICache.animatedTexture = self.animatedTexture
LoginState.currentFrame = 0
LoginState.lastUpdateTime = GetTime()
else
self.animatedTexture:Show()
LoginState.currentFrame = 0
LoginState.lastUpdateTime = GetTime()
end
elseif self.animatedTexture then
self.animatedTexture:Hide()
end
AccountLoginUI:Show()
AccountLoginUI:SetAlpha(1)
if not self.newLogo then
self.newLogoFrame = CreateFrame("Frame", nil, self)
self.newLogoFrame:SetSize(Config.LOGO_SIZE, Config.LOGO_SIZE)
self.newLogoFrame:SetPoint("TOPLEFT", Config.LOGO_POSITION_X, Config.LOGO_POSITION_Y)
self.newLogo = self.newLogoFrame:CreateTexture("AccountLoginNewLogo", "OVERLAY")
self.newLogo:SetTexture(Config.LOGO_TEXTURE)
self.newLogo:SetAllPoints(self.newLogoFrame)
self.newLogo:Show()
UICache.newLogo = self.newLogo
UICache.newLogoFrame = self.newLogoFrame
else
self.newLogoFrame:Show()
end
if self.Models then
for i = 1, #self.Models do
local model = self.Models[i]
if model then
model:Show()
end
end
end
if self.modelsCreated then
self.modelsInitialized = true
else
self.modelsInitialized = false
end
self.modelUpdateCount = 0
self.modelUpdateTimer = 0
local accountName, password = unpack(string_explode(GetSavedAccountName(), "#&|&#"))
UICache.accountEdit:SetText(accountName or "")
UICache.passwordEdit:SetText(password or "")
PlayGlueAmbience("GlueScreenUndead", Config.UNDEAD_AMBIENCE_FADE_TIME)
AccountLogin_ShowUserAgreements()
local serverName = GetServerName()
if serverName then
UICache.realmName:SetText(serverName)
else
UICache.realmName:SetText("No Recent Server")
end
if accountName == "" then
AccountLogin_FocusAccountName()
else
AccountLogin_FocusPassword()
end
if UICache.savePassword:GetChecked() then
UICache.autoLoginText:Show()
UICache.autoLogin:Show()
else
UICache.autoLoginText:Hide()
UICache.autoLogin:Hide()
end
if IsTrialAccount() then
UICache.upgradeButton:Show()
else
UICache.upgradeButton:Hide()
end
ACCOUNT_MSG_NUM_AVAILABLE = 0
ACCOUNT_MSG_PRIORITY = 0
ACCOUNT_MSG_HEADERS_LOADED = false
ACCOUNT_MSG_BODY_LOADED = false
ACCOUNT_MSG_CURRENT_INDEX = nil
AccountLogin_CheckAutoLogin()
self:SetScript("OnUpdate", LoginScene_OnUpdate)
end
function AccountLogin_OnHide(self)
StopAllSFX(Config.SFX_STOP_TIME)
if not UICache.saveAccountName:GetChecked() then
SetSavedAccountList("")
end
self:SetScript("OnUpdate", nil)
if self.Models then
for i = 1, #self.Models do
local model = self.Models[i]
if model then
model:Hide()
end
end
end
self.modelsInitialized = false
self.ambiencePlayed = false
if UICache.backgroundTexture then
UICache.backgroundTexture:Hide()
end
if UICache.animatedTexture then
UICache.animatedTexture:Hide()
end
if UICache.newLogoFrame then
UICache.newLogoFrame:Hide()
end
StopGlueAmbience()
end
function AccountLogin_FocusPassword()
UICache.passwordEdit:SetFocus()
end
function AccountLogin_FocusAccountName()
UICache.accountEdit:SetFocus()
end
function AccountLogin_OnKeyDown(key)
if key == "ESCAPE" then
if ConnectionHelpFrame:IsShown() then
ConnectionHelpFrame:Hide()
AccountLoginUI:Show()
elseif SurveyNotificationFrame:IsShown() then
else
AccountLogin_Exit()
end
elseif key == "ENTER" then
if not TOSAccepted() then
return
elseif TOSFrame:IsShown() or ConnectionHelpFrame:IsShown() then
return
elseif SurveyNotificationFrame:IsShown() then
AccountLogin_SurveyNotificationDone(1)
end
AccountLogin_Login()
elseif key == "PRINTSCREEN" then
Screenshot()
end
end
function AccountLogin_OnEvent(event, arg1, arg2, arg3)
if event == "SHOW_SERVER_ALERT" then
ServerAlertText:SetText(arg1)
ServerAlertFrame:Show()
elseif event == "SHOW_SURVEY_NOTIFICATION" then
AccountLogin_ShowSurveyNotification()
elseif event == "CLIENT_ACCOUNT_MISMATCH" then
local accountExpansionLevel = arg1
local installationExpansionLevel = arg2
if accountExpansionLevel == 1 then
GlueDialog_Show("CLIENT_ACCOUNT_MISMATCH", CLIENT_ACCOUNT_MISMATCH_BC)
else
GlueDialog_Show("CLIENT_ACCOUNT_MISMATCH", CLIENT_ACCOUNT_MISMATCH_LK)
end
elseif event == "CLIENT_TRIAL" then
GlueDialog_Show("CLIENT_TRIAL")
elseif event == "SCANDLL_ERROR" then
GlueDialog:Hide()
ScanDLLContinueAnyway()
AccountLoginUI:Show()
elseif event == "SCANDLL_FINISHED" then
if arg1 == "OK" then
GlueDialog:Hide()
AccountLoginUI:Show()
else
AccountLogin.hackURL = _G["SCANDLL_URL_"..arg1]
AccountLogin.hackName = arg2
AccountLogin.hackType = arg1
local formatString = _G["SCANDLL_MESSAGE_"..arg1]
if arg3 == 1 then
formatString = _G["SCANDLL_MESSAGE_HACKNOCONTINUE"]
end
local msg = format(formatString, AccountLogin.hackName, AccountLogin.hackURL)
if arg3 == 1 then
GlueDialog_Show("SCANDLL_HACKFOUND_NOCONTINUE", msg)
else
GlueDialog_Show("SCANDLL_HACKFOUND", msg)
end
PlaySoundFile("Sound\\Creature\\MobileAlertBot\\MobileAlertBotIntruderAlert01.wav")
end
end
end
-- ============================================================================
-- SISTEMA DE LOGIN CON GUARDADO DE CONTRASEÑA
-- ============================================================================
function AccountLogin_Login()
PlaySound("gsLogin")
local accountName = UICache.accountEdit:GetText()
local password = UICache.passwordEdit:GetText()
local savedData = ""
if UICache.saveAccountName:GetChecked() then
if UICache.savePassword:GetChecked() then
local autoLoginFlag = UICache.autoLogin:GetChecked() and "1" or "0"
savedData = accountName.."#&|&#"..password.."#&|&#"..autoLoginFlag
else
local autoLoginFlag = UICache.autoLogin:GetChecked() and "1" or "0"
savedData = accountName.."#&|&#".."".."#&|&#"..autoLoginFlag
end
else
if UICache.autoLogin:GetChecked() then
GlueDialog_Show("AUTO_LOGIN_NEEDS_ACCOUNT")
UICache.autoLogin:SetChecked(0)
end
SetSavedAccountName("")
SetUsesToken(false)
end
if savedData ~= "" then
SetSavedAccountName(savedData)
end
DefaultServerLogin(accountName, password)
end
-- ============================================================================
-- SISTEMA DE AUTOLOGIN
-- ============================================================================
function AccountLogin_CheckAutoLogin()
if not LoginState.autoLoginAttempted then
LoginState.autoLoginAttempted = true
local savedAccountInfo = GetSavedAccountName()
if savedAccountInfo and savedAccountInfo ~= "" then
local accountData = string_explode(savedAccountInfo, "#&|&#")
local accountName = accountData[1] or ""
local password = accountData[2] or ""
local autoLogin = accountData[3] or "0"
if autoLogin == "1" and accountName ~= "" and password ~= "" then
LoginState.autoLoginTimer = 0
LoginState.autoLoginDelay = Config.AUTO_LOGIN_DELAY
else
LoginState.autoLoginTimer = nil
end
end
end
end
-- ============================================================================
-- ANIMACIÓN PARA SERVER ALERT FRAME
-- ============================================================================
function AccountLogin_ToggleServerAlert()
local frame = ServerAlertFrame
if not frame then return end
if frame.isAnimating then
return
end
if frame.fadeInfo then
frame:SetScript("OnUpdate", nil)
frame.fadeInfo = nil
end
frame.isAnimating = true
local logoTexture = UICache.newLogo
if frame:IsShown() then
local startWidth = frame:GetWidth()
local scrollFrame = _G["ServerAlertScrollFrame"]
if not scrollFrame then
frame:Hide()
frame.isAnimating = false
return
end
local startScrollWidth = scrollFrame:GetWidth()
frame.fadeInfo = {
mode = "OUT",
timeToFade = 0.5,
startAlpha = 1,
endAlpha = 0,
startWidth = startWidth,
endWidth = 0,
startScrollWidth = startScrollWidth,
endScrollWidth = 0,
scrollFrame = scrollFrame,
savedWidth = startWidth,
savedScrollWidth = startScrollWidth,
logoAlpha = logoTexture and logoTexture:GetAlpha() or 1,
logoEndAlpha = 0
}
frame:SetScript("OnUpdate", function(self, elapsed)
if not self.fadeInfo then return end
local fadeInfo = self.fadeInfo
fadeInfo.elapsed = (fadeInfo.elapsed or 0) + elapsed
if fadeInfo.elapsed < fadeInfo.timeToFade then
local progress = fadeInfo.elapsed / fadeInfo.timeToFade
self:SetAlpha(fadeInfo.startAlpha + (fadeInfo.endAlpha - fadeInfo.startAlpha) * progress)
if logoTexture then
local logoProgress = progress
local logoAlpha = fadeInfo.logoAlpha + (fadeInfo.logoEndAlpha - fadeInfo.logoAlpha) * logoProgress
logoTexture:SetAlpha(logoAlpha)
end
local currentWidth = fadeInfo.startWidth + (fadeInfo.endWidth - fadeInfo.startWidth) * progress
self:SetWidth(currentWidth)
local currentScrollWidth = fadeInfo.startScrollWidth + (fadeInfo.endScrollWidth - fadeInfo.startScrollWidth) * progress
if fadeInfo.scrollFrame then
fadeInfo.scrollFrame:SetWidth(currentScrollWidth)
end
else
self:SetAlpha(fadeInfo.endAlpha)
self:SetWidth(fadeInfo.endWidth)
if logoTexture then
logoTexture:SetAlpha(fadeInfo.logoEndAlpha)
end
if fadeInfo.scrollFrame then
fadeInfo.scrollFrame:SetWidth(fadeInfo.endScrollWidth)
end
self:Hide()
self:SetWidth(fadeInfo.savedWidth or 341)
if fadeInfo.scrollFrame then
fadeInfo.scrollFrame:SetWidth(fadeInfo.savedScrollWidth or 300)
end
self:SetScript("OnUpdate", nil)
self.fadeInfo = nil
self.isAnimating = false
end
end)
else
local targetWidth = 341
local targetScrollWidth = 300
local scrollFrame = _G["ServerAlertScrollFrame"]
if not scrollFrame then
frame:Show()
frame.isAnimating = false
return
end
frame:SetWidth(0)
scrollFrame:SetWidth(0)
frame:SetAlpha(0)
frame:Show()
if logoTexture then
logoTexture:SetAlpha(0)
logoTexture:Show()
end
frame.fadeInfo = {
mode = "IN",
timeToFade = 0.5,
startAlpha = 0,
endAlpha = 1,
startWidth = 0,
endWidth = targetWidth,
startScrollWidth = 0,
endScrollWidth = targetScrollWidth,
scrollFrame = scrollFrame,
logoAlpha = 0,
logoEndAlpha = 1
}
frame:SetScript("OnUpdate", function(self, elapsed)
if not self.fadeInfo then return end
local fadeInfo = self.fadeInfo
fadeInfo.elapsed = (fadeInfo.elapsed or 0) + elapsed
if fadeInfo.elapsed < fadeInfo.timeToFade then
local progress = fadeInfo.elapsed / fadeInfo.timeToFade
self:SetAlpha(fadeInfo.startAlpha + (fadeInfo.endAlpha - fadeInfo.startAlpha) * progress)
if logoTexture then
local logoProgress = progress
local logoAlpha = fadeInfo.logoAlpha + (fadeInfo.logoEndAlpha - fadeInfo.logoAlpha) * logoProgress
logoTexture:SetAlpha(logoAlpha)
end
local currentWidth = fadeInfo.startWidth + (fadeInfo.endWidth - fadeInfo.startWidth) * progress
self:SetWidth(currentWidth)
local currentScrollWidth = fadeInfo.startScrollWidth + (fadeInfo.endScrollWidth - fadeInfo.startScrollWidth) * progress
if fadeInfo.scrollFrame then
fadeInfo.scrollFrame:SetWidth(currentScrollWidth)
end
else
self:SetAlpha(fadeInfo.endAlpha)
self:SetWidth(fadeInfo.endWidth)
if logoTexture then
logoTexture:SetAlpha(fadeInfo.logoEndAlpha)
end
if fadeInfo.scrollFrame then
fadeInfo.scrollFrame:SetWidth(fadeInfo.endScrollWidth)
end
self:SetScript("OnUpdate", nil)
self.fadeInfo = nil
self.isAnimating = false
end
end)
end
PlaySound("gsLoginNewAccount")
end
function AccountLogin_SetupServerAlert()
if ServerAlertFrame then
ServerAlertFrame.isAnimating = false
ServerAlertFrame.fadeInfo = nil
end
end
-- ============================================================================
-- FUNCIONES ADICIONALES
-- ============================================================================
function AccountLogin_TOS()
if not GlueDialog:IsShown() then
PlaySound("gsLoginNewAccount")
AccountLoginUI:Hide()
UICache.tosFrame:Show()
TOSScrollFrameScrollBar:SetValue(0)
TOSScrollFrame:Show()
TOSFrameTitle:SetText(TOS_FRAME_TITLE)
TOSText:Show()
end
end
function AccountLogin_ManageAccount()
PlaySound("gsLoginNewAccount")
LaunchURL(AUTH_NO_TIME_URL)
end
function AccountLogin_LaunchCommunitySite()
PlaySound("gsLoginNewAccount")
LaunchURL(COMMUNITY_URL)
end
function CharacterSelect_UpgradeAccount()
PlaySound("gsLoginNewAccount")
LaunchURL(AUTH_NO_TIME_URL)
end
function AccountLogin_Credits()
CreditsFrame.creditsType = 3
PlaySound("gsTitleCredits")
SetGlueScreen("credits")
end
function AccountLogin_Cinematics()
if not GlueDialog:IsShown() then
PlaySound("gsLoginNewAccount")
MOVIE_RETURN_SCREEN = "login"
if CinematicsFrame.numMovies > 1 then
CinematicsFrame:Show()
else
MovieFrame.version = 1
SetGlueScreen("movie")
end
end
end
function AccountLogin_Options()
PlaySound("gsTitleOptions")
end
function AccountLogin_Exit()
QuitGame()
end
function AccountLogin_ShowSurveyNotification()
GlueDialog:Hide()
AccountLoginUI:Hide()
SurveyNotificationAccept:Enable()
SurveyNotificationDecline:Enable()
SurveyNotificationFrame:Show()
end
function AccountLogin_SurveyNotificationDone(accepted)
SurveyNotificationFrame:Hide()
SurveyNotificationAccept:Disable()
SurveyNotificationDecline:Disable()
SurveyNotificationDone(accepted)
AccountLoginUI:Show()
end
function AccountLogin_ShowUserAgreements()
TOSScrollFrame:Hide()
EULAScrollFrame:Hide()
TerminationScrollFrame:Hide()
ScanningScrollFrame:Hide()
ContestScrollFrame:Hide()
TOSText:Hide()
EULAText:Hide()
TerminationText:Hide()
ScanningText:Hide()
if not EULAAccepted() then
if ShowEULANotice() then
TOSNotice:SetText(EULA_NOTICE)
TOSNotice:Show()
end
AccountLoginUI:Hide()
TOSFrame.noticeType = "EULA"
TOSFrameTitle:SetText(EULA_FRAME_TITLE)
TOSFrameHeader:SetWidth(TOSFrameTitle:GetWidth())
EULAScrollFrame:Show()
EULAText:Show()
TOSFrame:Show()
elseif not TOSAccepted() then
if ShowTOSNotice() then
TOSNotice:SetText(TOS_NOTICE)
TOSNotice:Show()
end
AccountLoginUI:Hide()
TOSFrame.noticeType = "TOS"
TOSFrameTitle:SetText(TOS_FRAME_TITLE)
TOSFrameHeader:SetWidth(TOSFrameTitle:GetWidth())
TOSScrollFrame:Show()
TOSText:Show()
TOSFrame:Show()
elseif not IsScanDLLFinished() then
AccountLoginUI:Hide()
TOSFrame:Hide()
local dllURL = ""
if IsWindowsClient() then
dllURL = SCANDLL_URL_WIN32_SCAN_DLL
end
ScanDLLStart(SCANDLL_URL_LAUNCHER_TXT, dllURL)
else
AccountLoginUI:Show()
TOSFrame:Hide()
end
end
function AccountLogin_UpdateAcceptButton(scrollFrame, isAcceptedFunc, noticeType)
local scrollbar = _G[scrollFrame:GetName().."ScrollBar"]
local min, max = scrollbar:GetMinMaxValues()
if scrollbar:GetValue() >= max - Config.SCROLL_THRESHOLD then
UICache.tosAccept:Enable()
else
if not isAcceptedFunc() and UICache.tosFrame.noticeType == noticeType then
UICache.tosAccept:Disable()
end
end
end
-- ============================================================================
-- FUNCIONES DE CINEMATICS
-- ============================================================================
function CinematicsFrame_OnLoad(self)
local numMovies = GetClientExpansionLevel()
CinematicsFrame.numMovies = numMovies
if numMovies < 2 then
return
end
for i = 1, numMovies do
_G["CinematicsButton"..i]:Show()
end
CinematicsBackground:SetHeight(numMovies * 40 + 70)
end
function CinematicsFrame_OnKeyDown(key)
if key == "PRINTSCREEN" then
Screenshot()
else
PlaySound("igMainMenuOptionCheckBoxOff")
CinematicsFrame:Hide()
end
end
function Cinematics_PlayMovie(self)
CinematicsFrame:Hide()
PlaySound("gsTitleOptionOK")
MovieFrame.version = self:GetID()
SetGlueScreen("movie")
end
-- ============================================================================
-- FUNCIONES AUXILIARES
-- ============================================================================
function string_explode(str, div)
assert(type(str) == "string" and type(div) == "string", "invalid arguments")
local o = {}
while true do
local pos1, pos2 = str:find(div, 1, true)
if not pos1 then
o[#o+1] = str
break
end
o[#o+1], str = str:sub(1, pos1-1), str:sub(pos2+1)
end
return o
end
-- ============================================================================
-- TOKEN SYSTEM - FUNCIONES SIMPLES
-- ============================================================================
function TokenEnterDialog_Okay(self)
local editBox = TokenEnterDialogBackgroundEdit
if not editBox then return end
local text = editBox:GetText()
if not text or string.len(text) < 6 then return end
TokenEntered(text)
TokenEnterDialog:Hide()
end
function TokenEnterDialog_Cancel(self)
if TokenEnterDialog then
TokenEnterDialog:Hide()
end
CancelLogin()
end
function TokenEntry_Okay(self)
TokenEnterDialog_Okay(self)
end
function TokenEntry_Cancel(self)
TokenEnterDialog_Cancel(self)
end
function TokenEntryOkayButton_OnLoad(self)
self:RegisterEvent("PLAYER_ENTER_TOKEN")
end
function TokenEntryOkayButton_OnEvent(self, event)
if event == "PLAYER_ENTER_TOKEN" then
if AccountLoginSaveAccountName:GetChecked() then
if GetUsesToken() then
if AccountLoginTokenEdit:GetText() ~= "" then
TokenEntered(AccountLoginTokenEdit:GetText())
return
end
else
SetUsesToken(true)
end
end
self:Show()
end
end
function TokenEntryOkayButton_OnShow()
if TokenEnterDialogBackgroundEdit then
TokenEnterDialogBackgroundEdit:SetText("")
TokenEnterDialogBackgroundEdit:SetFocus()
end
end
function TokenEntryOkayButton_OnKeyDown(self, key)
if key == "ENTER" then
TokenEntry_Okay(self)
elseif key == "ESCAPE" then
TokenEntry_Cancel(self)
end
end
-- ============================================================================