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

1611 lines
58 KiB
Lua

-- ============================================================================
-- MoonWell
-- ============================================================================
CHARACTER_FACING_INCREMENT = 2;
MAX_RACES = 10;
MAX_CLASSES_PER_RACE = 10;
NUM_CHAR_CUSTOMIZATIONS = 5;
MIN_CHAR_NAME_LENGTH = 2;
CHARACTER_CREATE_ROTATION_START_X = nil;
CHARACTER_ROTATION_INCREMENT = 90;
CHARACTER_CREATE_INITIAL_FACING = nil;
PAID_CHARACTER_CUSTOMIZATION = 1;
PAID_RACE_CHANGE = 2;
PAID_FACTION_CHANGE = 3;
PAID_SERVICE_CHARACTER_ID = nil;
PAID_SERVICE_TYPE = nil;
FACTION_BACKDROP_COLOR_TABLE = {
["Alliance"] = {0.5, 0.5, 0.5, 0.09, 0.09, 0.19},
["Horde"] = {0.5, 0.2, 0.2, 0.19, 0.05, 0.05},
};
FRAMES_TO_BACKDROP_COLOR = {
"CharacterCreateCharacterRace",
"CharacterCreateCharacterClass",
-- "CharacterCreateCharacterFaction",
"CharacterCreateNameEdit",
};
RACE_ICON_TCOORDS = {
["HUMAN_MALE"] = {0.000000000, 0.062500000, 0.000000000, 0.125953125},
["DWARF_MALE"] = {0.063476563, 0.125976563, 0.000000000, 0.125953125},
["GNOME_MALE"] = {0.191406250, 0.253906250, 0.000000000, 0.125953125},
["NIGHTELF_MALE"] = {0.126953125, 0.189453125, 0.000000000, 0.125953125},
["DRAENEI_MALE"] = {0.255859375, 0.318359375, 0.000000000, 0.125953125},
["HUMAN_FEMALE"] = {0.000000000, 0.062500000, 0.128906250, 0.253906250},
["DWARF_FEMALE"] = {0.063476563, 0.125976563, 0.128906250, 0.253906250},
["GNOME_FEMALE"] = {0.192382813, 0.254882813, 0.128906250, 0.253906250},
["NIGHTELF_FEMALE"] = {0.127441406, 0.189941406, 0.128906250, 0.253906250},
["DRAENEI_FEMALE"] = {0.256347656, 0.318359375, 0.128906250, 0.253906250},
["ORC_MALE"] = {0.062011719, 0.000000000, 0.262695313, 0.384765625},
["SCOURGE_MALE"] = {0.125976563, 0.063964844, 0.262695313, 0.384765625},
["TAUREN_MALE"] = {0.189941406, 0.127929688, 0.262695313, 0.384765625},
["TROLL_MALE"] = {0.253906250, 0.192382813, 0.262695313, 0.384765625},
["BLOODELF_MALE"] = {0.317871094, 0.256835938, 0.262695313, 0.384765625},
["ORC_FEMALE"] = {0.060546875, 0.000000000, 0.391601563, 0.512695313},
["SCOURGE_FEMALE"] = {0.124023438, 0.063476563, 0.391601563, 0.512695313},
["TAUREN_FEMALE"] = {0.187988281, 0.127441406, 0.391601563, 0.512695313},
["TROLL_FEMALE"] = {0.252441406, 0.191894531, 0.391601563, 0.512695313},
["BLOODELF_FEMALE"] = {0.316894531, 0.256835938, 0.391601563, 0.512695313},
};
CLASS_ICON_TCOORDS = {
["WARRIOR"] = {0.000000000, 0.063000000, 0.872000000, 1.000000000},
["MAGE"] = {0.127441406, 0.189941406, 0.872070313, 1.000000000},
["ROGUE"] = {0.191406250, 0.253906250, 0.872070313, 1.000000000},
["DRUID"] = {0.447753906, 0.510253906, 0.872070313, 1.000000000},
["HUNTER"] = {0.063476563, 0.126464844, 0.872070313, 1.000000000},
["SHAMAN"] = {0.512695313, 0.575195313, 0.872070313, 1.000000000},
["PRIEST"] = {0.255859375, 0.318359375, 0.872070313, 1.000000000},
["WARLOCK"] = {0.319824219, 0.382324219, 0.872070313, 1.000000000},
["PALADIN"] = {0.383300781, 0.445800781, 0.872070313, 1.000000000},
["DEATHKNIGHT"] = {0.576660156, 0.639160156, 0.872070313, 1.000000000},
};
if not _G.ALLIANCE_RACES then
_G.ALLIANCE_RACES = {1, 2, 3, 4, 5}
end
if not _G.HORDE_RACES then
_G.HORDE_RACES = {6, 7, 8, 9, 10}
end
local HideNameEditFrame = CreateFrame("Frame")
local hideScheduled = false
local AllianceTooltip
local HordeTooltip
local raceTooltips = {};
local classTooltips = {};
local detailedRaceTooltips = {};
local detailedClassTooltips = {};
local function HideAllTooltips()
for button, tooltip in pairs(raceTooltips) do
if tooltip then
tooltip:Hide()
end
end
for button, tooltip in pairs(classTooltips) do
if tooltip then
tooltip:Hide()
end
end
if AllianceTooltip then
AllianceTooltip:Hide()
end
if HordeTooltip then
HordeTooltip:Hide()
end
end
local backdrop = {
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
tile = true, tileSize = 16, edgeSize = 16,
insets = { left = 4, right = 4, top = 4, bottom = 4 }
};
local Backdrop2 = {
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
edgeFile = "Interface\\Tooltips\\ui-tooltip-border-maw",
tile = true, tileSize = 16, edgeSize = 16,
insets = { left = 4, right = 4, top = 4, bottom = 4 }
};
local function GetOrCreateRaceTooltip(button)
if not raceTooltips[button] then
local tooltip = CreateFrame("Frame", nil, CharacterCreateFrame)
tooltip:SetBackdrop(Backdrop2)
tooltip:SetSize(280, 150)
tooltip:SetFrameStrata("TOOLTIP")
tooltip:SetBackdropColor(0, 0, 0, 1)
local raceID = button:GetID()
local faction = _G.GetFactionForRaceID(raceID)
if faction == "Alliance" then
tooltip:SetPoint("LEFT", CharacterCreateFrame, "LEFT", 160, 50)
elseif faction == "Horde" then
tooltip:SetPoint("RIGHT", CharacterCreateFrame, "RIGHT", -160, 50)
else
tooltip:SetPoint("CENTER", CharacterCreateFrame, "CENTER", 0, 0)
end
tooltip.text = tooltip:CreateFontString(nil, "OVERLAY", "GlueFontNormalSmall")
tooltip.text:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE")
tooltip.text:SetPoint("TOPLEFT", tooltip, "TOPLEFT", 10, -10)
tooltip.text:SetTextColor(1, 0.82, 0)
tooltip.text:SetJustifyH("LEFT")
tooltip.detailsText = tooltip:CreateFontString(nil, "OVERLAY")
tooltip.detailsText:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE")
tooltip.detailsText:SetPoint("TOPLEFT", tooltip.text, "BOTTOMLEFT", 0, -5)
tooltip.detailsText:SetWidth(260)
tooltip.detailsText:SetWordWrap(true)
tooltip.detailsText:SetJustifyH("LEFT")
tooltip.rightClickText = tooltip:CreateFontString(nil, "OVERLAY")
tooltip.rightClickText:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE")
tooltip.rightClickText:SetPoint("TOP", tooltip.detailsText, "BOTTOM", 0, -10)
tooltip.rightClickText:SetTextColor(0.8, 0.8, 0.8)
tooltip.rightClickText:SetJustifyH("CENTER")
raceTooltips[button] = tooltip
end
return raceTooltips[button]
end
local function UpdateRaceTooltip(button, toggleDetails)
local tooltip = GetOrCreateRaceTooltip(button)
local raceID = button:GetID()
local info = _G.Races_Informations[raceID]
if not info then return end
for i = 1, 6 do
if tooltip["spellContainer"..i] then
tooltip["spellContainer"..i]:Hide()
end
end
tooltip.text:SetText("|cFFFFFFFF"..info.Name)
tooltip.detailsText:SetText("|cffffd100"..info.Description.."|r")
tooltip.text:ClearAllPoints()
tooltip.text:SetPoint("TOPLEFT", tooltip, "TOPLEFT", 10, -5)
tooltip.detailsText:ClearAllPoints()
tooltip.detailsText:SetPoint("TOPLEFT", tooltip.text, "BOTTOMLEFT", 0, -5)
if toggleDetails == nil then
toggleDetails = not detailedRaceTooltips[button]
end
tooltip.rightClickText:SetText(toggleDetails and RACIALS_HIDE_HINT or RACIALS_SHOW_HINT)
local lastElement = tooltip.detailsText
local heightToAdd = 0
tooltip.rightClickText:ClearAllPoints()
tooltip.rightClickText:SetPoint("TOP", tooltip.detailsText, "BOTTOM", 0, -10)
lastElement = tooltip.rightClickText
if toggleDetails then
for i = 1, 6 do
if info["Spell_"..i] and info["Spell_"..i].name ~= "" then
if not tooltip["spellContainer"..i] then
tooltip["spellContainer"..i] = CreateFrame("Frame", nil, tooltip)
tooltip["spellContainer"..i]:SetSize(260, 60)
tooltip["spellIcon"..i] = tooltip["spellContainer"..i]:CreateTexture(nil, "OVERLAY")
tooltip["spellIcon"..i]:SetTexture("Interface\\Icons\\"..info["Spell_"..i].icon)
tooltip["spellIcon"..i]:SetSize(25, 25)
tooltip["spellIcon"..i]:SetPoint("TOPLEFT", -35, -20)
tooltip["spellName"..i] = tooltip["spellContainer"..i]:CreateFontString(nil, "OVERLAY")
tooltip["spellName"..i]:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE")
tooltip["spellName"..i]:SetPoint("LEFT", tooltip["spellIcon"..i], "RIGHT", 5, 8)
tooltip["spellName"..i]:SetTextColor(1, 0.82, 0)
tooltip["spellName"..i]:SetJustifyH("LEFT")
tooltip["spellDesc"..i] = tooltip["spellContainer"..i]:CreateFontString(nil, "OVERLAY")
tooltip["spellDesc"..i]:SetFont("Fonts\\FRIZQT__.TTF", 9, "OUTLINE")
tooltip["spellDesc"..i]:SetWordWrap(true)
tooltip["spellDesc"..i]:SetJustifyH("LEFT")
tooltip["spellDesc"..i]:SetPoint("TOPLEFT", tooltip["spellName"..i], "BOTTOMLEFT", 0, -2)
end
tooltip["spellName"..i]:SetText(info["Spell_"..i].name)
tooltip["spellDesc"..i]:SetText(info["Spell_"..i].description)
tooltip["spellContainer"..i]:Show()
tooltip["spellContainer"..i]:ClearAllPoints()
tooltip["spellContainer"..i]:SetPoint("TOPLEFT", lastElement, "BOTTOMLEFT", 0, 3)
local containerHeight = tooltip["spellIcon"..i]:GetHeight() + tooltip["spellDesc"..i]:GetHeight() + 3
tooltip["spellContainer"..i]:SetHeight(containerHeight)
lastElement = tooltip["spellContainer"..i]
end
end
end
local maxWidth = math.max(tooltip.text:GetWidth(), tooltip.detailsText:GetWidth())
if toggleDetails then
for i = 1, 6 do
if tooltip["spellContainer"..i] and tooltip["spellContainer"..i]:IsShown() then
local nameWidth = tooltip["spellName"..i]:GetStringWidth()
maxWidth = math.max(maxWidth, nameWidth + 70)
end
end
end
maxWidth = math.max(280, math.min(maxWidth + 40, 600))
tooltip:SetWidth(300)
if toggleDetails then
for i = 1, 6 do
if tooltip["spellContainer"..i] and tooltip["spellContainer"..i]:IsShown() then
tooltip["spellDesc"..i]:SetWidth(maxWidth - 60)
local containerHeight = tooltip["spellIcon"..i]:GetHeight() + tooltip["spellDesc"..i]:GetHeight() + 3
tooltip["spellContainer"..i]:SetHeight(containerHeight)
end
end
end
heightToAdd = 0
if toggleDetails then
for i = 1, 6 do
if tooltip["spellContainer"..i] and tooltip["spellContainer"..i]:IsShown() then
heightToAdd = heightToAdd + tooltip["spellContainer"..i]:GetHeight() + 3
end
end
end
local baseHeight = tooltip.text:GetHeight() +
tooltip.detailsText:GetHeight() +
tooltip.rightClickText:GetHeight() + 25
tooltip:SetHeight(baseHeight + heightToAdd)
detailedRaceTooltips[button] = toggleDetails
tooltip:ClearAllPoints()
local pos = _G.GetRaceTooltipPosition(raceID, button)
tooltip:SetPoint(pos.point, button, pos.relPoint, pos.x, pos.y)
end
local function GetOrCreateClassTooltip(button)
if not classTooltips[button] then
local tooltip = CreateFrame("Frame", nil, CharacterCreateFrame)
tooltip:SetBackdrop(Backdrop2)
tooltip:SetSize(300, 200)
tooltip:SetFrameStrata("TOOLTIP")
tooltip:SetBackdropColor(0, 0, 0, 1)
tooltip.text = tooltip:CreateFontString(nil, "OVERLAY", "GlueFontNormalSmall")
tooltip.text:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE")
tooltip.text:SetPoint("TOPLEFT", tooltip, "TOPLEFT", 8, -8)
tooltip.text:SetTextColor(1, 0.82, 0)
tooltip.text:SetJustifyH("LEFT")
tooltip.detailsText = tooltip:CreateFontString(nil, "OVERLAY")
tooltip.detailsText:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE")
tooltip.detailsText:SetPoint("TOPLEFT", tooltip.text, "BOTTOMLEFT", 0, -5)
tooltip.detailsText:SetWidth(284)
tooltip.detailsText:SetWordWrap(true)
tooltip.detailsText:SetJustifyH("LEFT")
tooltip.Roles = tooltip:CreateFontString(nil, "OVERLAY", "GlueFontNormalSmall")
tooltip.Roles:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE")
tooltip.Roles:SetWidth(284)
tooltip.Roles:SetWordWrap(true)
tooltip.Roles:SetJustifyH("LEFT")
classTooltips[button] = tooltip
end
return classTooltips[button]
end
local function GetValidRacesForClass(classID)
local allianceRaces = {}
local hordeRaces = {}
for _, raceID in ipairs(_G.ALLIANCE_RACES) do
if IsRaceClassValid(raceID, classID) then
local raceName = _G["RACE_" .. raceID] or RACE .. raceID
table.insert(allianceRaces, raceName)
end
end
for _, raceID in ipairs(_G.HORDE_RACES) do
if IsRaceClassValid(raceID, classID) then
local raceName = _G["RACE_" .. raceID] or RACE .. raceID
table.insert(hordeRaces, raceName)
end
end
return allianceRaces, hordeRaces
end
local function UpdateClassTooltip(button)
local tooltip = GetOrCreateClassTooltip(button)
local classID = button:GetID()
local info = _G.Class_Informations[classID]
if not info then return end
local buttonX, buttonY = button:GetCenter()
local parentX, parentY = CharacterCreateFrame:GetCenter()
if buttonX > parentX then
tooltip:SetPoint("BOTTOMRIGHT", button, "TOPRIGHT", 0, 10)
else
tooltip:SetPoint("BOTTOMLEFT", button, "TOPLEFT", 0, 10)
end
tooltip.text:SetText("|cFFFFFFFF"..info.Name)
tooltip.detailsText:SetText("|cffffd100"..info.Description.."|r")
tooltip.text:ClearAllPoints()
tooltip.text:SetPoint("TOPLEFT", tooltip, "TOPLEFT", 8, -8)
tooltip.detailsText:ClearAllPoints()
tooltip.detailsText:SetPoint("TOPLEFT", tooltip.text, "BOTTOMLEFT", 0, -5)
local currentRaceID = GetSelectedRace()
local isAllowed = IsRaceClassValid(currentRaceID, classID)
local showRestriction = not isAllowed
tooltip.RestrictionText = tooltip.RestrictionText or tooltip:CreateFontString(nil, "OVERLAY")
tooltip.RestrictionText:SetFont("Fonts\\FRIZQT__.TTF", 12, "OUTLINE")
tooltip.RestrictionText:SetJustifyH("LEFT")
tooltip.FactionText = tooltip.FactionText or tooltip:CreateFontString(nil, "OVERLAY")
tooltip.FactionText:SetFont("Fonts\\FRIZQT__.TTF", 11)
tooltip.FactionText:SetWordWrap(true)
tooltip.FactionText:SetJustifyH("LEFT")
local coloredRoles = info.Roles
coloredRoles = string.gsub(coloredRoles, "Ближний бой", "|cffff2020Ближний бой|r")
coloredRoles = string.gsub(coloredRoles, "Дальний бой", "|cffff2020Дальний бой|r")
coloredRoles = string.gsub(coloredRoles, "Танк", "|cff0070ddТанк|r")
coloredRoles = string.gsub(coloredRoles, "Лекарь", "|cff20c000Лекарь|r")
if not tooltip.Roles then
tooltip.Roles = tooltip:CreateFontString(nil, "OVERLAY")
tooltip.Roles:SetFont("Fonts\\FRIZQT__.TTF", 11)
end
tooltip.Roles:SetText("|cFFFFFFFF"..FUNTION_INF.."|r\n\n "..coloredRoles)
if showRestriction then
tooltip.Roles:ClearAllPoints()
tooltip.Roles:SetPoint("TOPLEFT", tooltip.detailsText, "BOTTOMLEFT", 0, -20)
tooltip.Roles:Show()
tooltip.RestrictionText:SetPoint("TOPLEFT", tooltip.Roles, "BOTTOMLEFT", 0, -20)
tooltip.RestrictionText:SetTextColor(1, 0, 0)
tooltip.RestrictionText:SetText(WARNING_RACE)
tooltip.RestrictionText:Show()
local allianceRaces, hordeRaces = GetValidRacesForClass(classID)
local factionText = ""
if #allianceRaces > 0 then
factionText = ALLIANCE_RACE .. " |cFFFFFFFF" .. table.concat(allianceRaces, ", ") .. "|r"
end
if #hordeRaces > 0 then
if factionText ~= "" then
factionText = factionText .. "\n\n"
end
factionText = factionText .. "\n" .. HORDE_RACE .. " |cFFFFFFFF" .. table.concat(hordeRaces, ", ") .. "|r"
end
tooltip.FactionText:SetPoint("TOPLEFT", tooltip.RestrictionText, "BOTTOMLEFT", 0, -15)
tooltip.FactionText:SetTextColor(1, 0.82, 0)
tooltip.FactionText:SetText(factionText)
tooltip.FactionText:Show()
local maxWidth = math.max(tooltip.text:GetWidth(), tooltip.detailsText:GetWidth())
maxWidth = math.max(maxWidth, tooltip.Roles:GetWidth())
maxWidth = math.max(maxWidth, tooltip.RestrictionText:GetWidth())
maxWidth = math.max(maxWidth, tooltip.FactionText:GetWidth())
maxWidth = math.max(280, math.min(maxWidth + 16, 400))
tooltip:SetWidth(maxWidth)
tooltip.FactionText:SetWidth(maxWidth - 16)
local restrictionHeight = tooltip.text:GetHeight() +
tooltip.detailsText:GetHeight() +
tooltip.Roles:GetHeight() +
tooltip.RestrictionText:GetHeight() +
tooltip.FactionText:GetHeight() + 80
tooltip:SetHeight(restrictionHeight)
else
tooltip.RestrictionText:Hide()
tooltip.FactionText:Hide()
tooltip.Roles:Show()
tooltip.Roles:ClearAllPoints()
tooltip.Roles:SetPoint("TOPLEFT", tooltip.detailsText, "BOTTOMLEFT", 0, -10)
local maxWidth = math.max(tooltip.text:GetWidth(), tooltip.detailsText:GetWidth())
maxWidth = math.max(maxWidth, tooltip.Roles:GetWidth())
maxWidth = math.max(280, math.min(maxWidth + 16, 400))
tooltip:SetWidth(maxWidth)
local baseHeight = tooltip.text:GetHeight() +
tooltip.detailsText:GetHeight() +
tooltip.Roles:GetHeight() + 30
tooltip:SetHeight(baseHeight)
end
end
function CharacterCreate_MoveTexturesToBackground()
for i = 1, MAX_RACES do
local button = _G["CharacterCreateRaceButton"..i]
if button then
local normalTex = _G[button:GetName().."NormalTexture"]
local pushedTex = _G[button:GetName().."PushedTexture"]
if normalTex then
normalTex:SetDrawLayer("BACKGROUND")
end
if pushedTex then
pushedTex:SetDrawLayer("BACKGROUND")
end
end
end
for i = 1, MAX_CLASSES_PER_RACE do
local button = _G["CharacterCreateClassButton"..i]
if button then
local normalTex = _G[button:GetName().."NormalTexture"]
local pushedTex = _G[button:GetName().."PushedTexture"]
if normalTex then
normalTex:SetDrawLayer("BACKGROUND")
end
if pushedTex then
pushedTex:SetDrawLayer("BACKGROUND")
end
end
end
local maleButton = CharacterCreateGenderButtonMale
local femaleButton = CharacterCreateGenderButtonFemale
if maleButton then
_G[maleButton:GetName().."NormalTexture"]:SetDrawLayer("BACKGROUND")
_G[maleButton:GetName().."PushedTexture"]:SetDrawLayer("BACKGROUND")
end
if femaleButton then
_G[femaleButton:GetName().."NormalTexture"]:SetDrawLayer("BACKGROUND")
_G[femaleButton:GetName().."PushedTexture"]:SetDrawLayer("BACKGROUND")
end
end
local function CreateFactionTooltip(parent, factionName)
local tooltip = CreateFrame("Frame", nil, parent)
tooltip:SetBackdrop(backdrop)
tooltip:SetFrameStrata("TOOLTIP")
tooltip:SetBackdropColor(0, 0, 0, 0.9)
tooltip:SetBackdropBorderColor(1, 1, 1, 1)
tooltip:Hide()
tooltip.title = tooltip:CreateFontString(nil, "OVERLAY")
tooltip.title:SetFont("Fonts\\FRIZQT__.TTF", 12, "OUTLINE")
tooltip.title:SetPoint("TOPLEFT", tooltip, "TOPLEFT", 10, -10)
tooltip.title:SetTextColor(1, 0.82, 0)
tooltip.title:SetJustifyH("LEFT")
tooltip.description = tooltip:CreateFontString(nil, "OVERLAY")
tooltip.description:SetFont("Fonts\\FRIZQT__.TTF", 12, "OUTLINE")
tooltip.description:SetPoint("TOPLEFT", tooltip.title, "BOTTOMLEFT", 0, -8)
tooltip.description:SetWidth(280)
tooltip.description:SetWordWrap(true)
tooltip.description:SetJustifyH("LEFT")
tooltip.description:SetTextColor(0.9, 0.9, 0.9)
return tooltip
end
local function UpdateTooltipSize(tooltip)
local titleHeight = tooltip.title:GetHeight()
local descHeight = tooltip.description:GetHeight()
local totalHeight = titleHeight + descHeight + 30
tooltip:SetHeight(totalHeight)
tooltip:SetWidth(300)
end
function CharacterCreate_PositionRaceButtons()
local buttonSpacing = 100
local horizontalOffset = -10
local verticalStart = -20
for i = 1, 5 do
local button = _G["CharacterCreateRaceButton"..i]
if button then
button:ClearAllPoints()
if i == 1 then
button:SetPoint("TOP", AllianceLogoFrame, "BOTTOM", -horizontalOffset, verticalStart)
else
local prevButton = _G["CharacterCreateRaceButton"..(i-1)]
button:SetPoint("TOP", prevButton, "BOTTOM", 0, -buttonSpacing + 38)
end
end
end
for i = 6, 10 do
local button = _G["CharacterCreateRaceButton"..i]
if button then
button:ClearAllPoints()
if i == 6 then
button:SetPoint("TOP", HordeLogoFrame, "BOTTOM", horizontalOffset, verticalStart)
else
local prevButton = _G["CharacterCreateRaceButton"..(i-1)]
button:SetPoint("TOP", prevButton, "BOTTOM", 0, -buttonSpacing + 38)
end
end
end
end
function CharacterCreate_PositionClassButtons()
local buttonSpacing = 80
for i = 1, MAX_CLASSES_PER_RACE do
local button = _G["CharacterCreateClassButton"..i]
if button then
button:ClearAllPoints()
if i == 1 then
button:SetPoint("CENTER", CharacterCreateFrame, "BOTTOM", -360, 80)
else
local prevButton = _G["CharacterCreateClassButton"..(i-1)]
button:SetPoint("LEFT", prevButton, "RIGHT", buttonSpacing - 38, 0)
end
end
end
end
function CharacterCreate_PositionGenderButtons()
local genderSpacing = 310
local maleButton = CharacterCreateGenderButtonMale
local femaleButton = CharacterCreateGenderButtonFemale
if maleButton then
maleButton:ClearAllPoints()
maleButton:SetPoint("CENTER", CharacterCreateFrame, "CENTER", -(genderSpacing/2), -250)
end
if femaleButton then
femaleButton:ClearAllPoints()
femaleButton:SetPoint("CENTER", CharacterCreateFrame, "CENTER", (genderSpacing/2), -250)
end
end
function CharacterCreate_PositionAllButtons()
CharacterCreate_PositionRaceButtons()
CharacterCreate_PositionClassButtons()
CharacterCreate_PositionGenderButtons()
end
function CharacterCreate_OnLoad(self)
self:SetSequence(0)
self:SetCamera(0)
SetCharCustomizeFrame("CharacterCreate")
CharacterCreate.numRaces = 0
CharacterCreate.selectedRace = 0
CharacterCreate.numClasses = 0
CharacterCreate.selectedClass = 0
CharacterCreate.selectedGender = 0
CharacterCreate.personalizationMode = false
CharacterCreate_MoveTexturesToBackground()
CharacterCreate_SetupCustomButtons()
for i=1, NUM_CHAR_CUSTOMIZATIONS, 1 do
_G["CharacterCustomizationButtonFrame"..i.."Text"]:SetText(_G["CHAR_CUSTOMIZATION"..i.."_DESC"])
end
local backdropColor = FACTION_BACKDROP_COLOR_TABLE["Alliance"]
CharacterCreateNameEdit:SetBackdropBorderColor(backdropColor[1], backdropColor[2], backdropColor[3])
CharacterCreateNameEdit:SetBackdropColor(backdropColor[4], backdropColor[5], backdropColor[6])
CustomizationBG2 = CharacterCreateFrame:CreateTexture("CustomizationBG2", "BACKGROUND")
CustomizationBG2:SetSize(GlueParent:GetWidth() + 2, GlueParent:GetHeight() + 6)
CustomizationBG2:SetTexture("Interface\\Glues\\CharacterCreate\\MainShadow")
CustomizationBG2:SetPoint("CENTER")
CustomizationBG2:SetAlpha(0.8)
CustomizationLogoAlliance = CharacterCreateFrame:CreateTexture("CustomizationLogoAlliance", "ARTWORK")
CustomizationLogoAlliance:SetSize(100, 100)
CustomizationLogoAlliance:SetTexture("Interface\\Glues\\CharacterCreate\\AllianceLogo")
CustomizationLogoAlliance:SetPoint("TOPLEFT", -16, 16)
CustomizationTextAlliance = CharacterCreateFrame:CreateFontString("CustomizationTextAlliance", "OVERLAY")
CustomizationTextAlliance:SetFontObject(GlueFontNormal)
CustomizationTextAlliance:SetText(string.upper(ALLIANCE))
CustomizationTextAlliance:SetPoint("LEFT", CustomizationLogoAlliance, "RIGHT", -24, 0)
AllianceTooltip = CreateFactionTooltip(CharacterCreateFrame, "Alliance")
AllianceLogoFrame = CreateFrame("Frame", "AllianceLogoFrame", CharacterCreateFrame)
AllianceLogoFrame:SetSize(100, 100)
AllianceLogoFrame:SetPoint("TOPLEFT", -16, 16)
AllianceLogoFrame:EnableMouse(true)
AllianceLogoFrame:SetScript("OnEnter", function(self)
AllianceTooltip.title:SetText(ALLIANCE)
AllianceTooltip.description:SetText(FACTION_ALLIANCE_DESCRIPTION)
UpdateTooltipSize(AllianceTooltip)
AllianceTooltip:ClearAllPoints()
AllianceTooltip:SetPoint("TOPLEFT", self, "BOTTOMLEFT", 90, 60)
AllianceTooltip:Show()
end)
AllianceLogoFrame:SetScript("OnLeave", function(self)
AllianceTooltip:Hide()
end)
CustomizationLogoHorde = CharacterCreateFrame:CreateTexture("CustomizationLogoHorde", "ARTWORK")
CustomizationLogoHorde:SetSize(100, 100)
CustomizationLogoHorde:SetTexture("Interface\\Glues\\CharacterCreate\\HordeLogo")
CustomizationLogoHorde:SetPoint("TOPRIGHT", 16, 16)
CustomizationTextHorde = CharacterCreateFrame:CreateFontString("CustomizationTextHorde", "OVERLAY")
CustomizationTextHorde:SetFontObject(GlueFontNormal)
CustomizationTextHorde:SetText(string.upper(HORDE))
CustomizationTextHorde:SetPoint("RIGHT", CustomizationLogoHorde, "LEFT", 24, 0)
HordeTooltip = CreateFactionTooltip(CharacterCreateFrame, "Horde")
HordeLogoFrame = CreateFrame("Frame", "HordeLogoFrame", CharacterCreateFrame)
HordeLogoFrame:SetSize(100, 100)
HordeLogoFrame:SetPoint("TOPRIGHT", 16, 16)
HordeLogoFrame:EnableMouse(true)
HordeLogoFrame:SetScript("OnEnter", function(self)
HordeTooltip.title:SetText(HORDE)
HordeTooltip.description:SetText(FACTION_HORDE_DESCRIPTION)
UpdateTooltipSize(HordeTooltip)
HordeTooltip:ClearAllPoints()
HordeTooltip:SetPoint("TOPRIGHT", self, "BOTTOMRIGHT", -90, 60)
HordeTooltip:Show()
end)
HordeLogoFrame:SetScript("OnLeave", function(self)
HordeTooltip:Hide()
end)
CharacterCreate_CreateGenderButtonTextures()
CharacterCreate_PositionAllButtons()
end
function CharacterCreate_SetupCustomButtons()
local buttons = {
{button = CharCreateRandomizeButton, width = 36, height = 36},
{button = CharacterCreateRandomName, width = 30, height = 30}
}
local texturePath = "Interface\\Buttons\\charactercreate.blp"
for _, btnInfo in ipairs(buttons) do
local button = btnInfo.button
if button then
button:SetNormalTexture(texturePath.."-Up")
button:GetNormalTexture():SetTexCoord(0.261230469, 0.292480469, 0.890625000, 0.920410156)
button:SetPushedTexture(texturePath.."-Down")
button:GetPushedTexture():SetTexCoord(0.223144531, 0.253906250, 0.890625000, 0.920410156)
button:SetHighlightTexture("Interface\\Buttons\\UI-Common-MouseHilight")
button:GetHighlightTexture():SetTexCoord(0.1, 0.9, 0.1, 0.9)
button:GetHighlightTexture():SetBlendMode("ADD")
button:SetSize(btnInfo.width, btnInfo.height)
if button:GetFontString() then
button:GetFontString():Hide()
else
button:SetText("")
end
end
end
end
function CharacterCreate_TogglePersonalization()
if (CharacterCreate.personalizationMode == false) then
CharacterCreate.personalizationMode = true;
PlaySound("gsCharacterSelectionCreateNew");
CharacterCreateRaceButtonsContainer:Hide();
CharacterCreateClassButtonsContainer:Hide();
CharacterCreateGenderButtonsContainer:Hide();
CustomizationLogoAlliance:Hide();
CustomizationTextAlliance:Hide();
CustomizationLogoHorde:Hide();
CustomizationTextHorde:Hide();
CharacterCreateRotateLeft:Show();
CharacterCreateRotateRight:Show();
CharacterCreateRotateLeft30:Show();
CharacterCreateRotateRight30:Show();
CharCreatePersonalizeButton:Hide();
CharCreateOkayButton:Show();
CharacterCreate_UpdateHairCustomization();
CharCreateRandomizeButton:Show();
CharacterCreateNameEdit:Show();
CharacterCreateRandomName:Show();
for i=1, NUM_CHAR_CUSTOMIZATIONS do
_G["CharacterCustomizationButtonFrame"..i]:Show();
end
else
CharacterCreate.personalizationMode = false;
PlaySound("gsCharacterCreationCancel");
CharacterCreateRaceButtonsContainer:Show();
CharacterCreateClassButtonsContainer:Show();
CharacterCreateGenderButtonsContainer:Show();
CustomizationLogoAlliance:Show();
CustomizationTextAlliance:Show();
CustomizationLogoHorde:Show();
CustomizationTextHorde:Show();
CharacterCreateRotateLeft:Hide();
CharacterCreateRotateRight:Hide();
CharacterCreateRotateLeft30:Hide();
CharacterCreateRotateRight30:Hide();
CharCreateRandomizeButton:Hide();
CharacterCreateNameEdit:Hide();
CharacterCreateRandomName:Hide();
CharCreatePersonalizeButton:Show();
CharCreateOkayButton:Hide();
for i=1, NUM_CHAR_CUSTOMIZATIONS do
_G["CharacterCustomizationButtonFrame"..i]:Hide();
end
end
end
HideNameEditFrame:SetScript("OnUpdate", function(self, elapsed)
if hideScheduled then
CharacterCreateNameEdit:Hide()
CharacterCreateRandomName:Hide()
hideScheduled = false
self:Hide()
end
end)
function CharacterCreate_OnShow()
CharacterCreate.personalizationMode = false;
for i=1, MAX_CLASSES_PER_RACE, 1 do
local button = _G["CharacterCreateClassButton"..i];
button:Enable();
SetButtonDesaturated(button, false)
end
for i=1, MAX_RACES, 1 do
local button = _G["CharacterCreateRaceButton"..i];
button:Enable();
SetButtonDesaturated(button, false)
end
if ( PAID_SERVICE_TYPE ) then
CustomizeExistingCharacter( PAID_SERVICE_CHARACTER_ID );
CharacterCreateNameEdit:SetText( PaidChange_GetName() );
else
ResetCharCustomize();
CharacterCreateNameEdit:SetText("");
CharCreateRandomizeButton:Hide();
end
CharacterCreate.personalizationMode = false;
CharCreateOkayButton:Hide();
for i=1, NUM_CHAR_CUSTOMIZATIONS do
_G["CharacterCustomizationButtonFrame"..i]:Hide();
end
CharacterCreateEnumerateRaces(GetAvailableRaces());
SetCharacterRace(GetSelectedRace());
CharacterCreateEnumerateClasses(GetAvailableClasses());
local_,_,index = GetSelectedClass();
SetCharacterClass(index);
SetCharacterGender(GetSelectedSex())
CharacterCreate_UpdateHairCustomization();
SetCharacterCreateFacing(-15);
CharacterChangeFixup();
CharacterCreate_CreateGenderButtonTextures();
CharacterCreate_UpdateButtonCheckedStates();
CharacterCreate_ResetState();
hideScheduled = true
HideNameEditFrame:Show()
CharacterCreate_PositionAllButtons()
end
function CharacterCreate_OnHide()
PAID_SERVICE_CHARACTER_ID = nil;
PAID_SERVICE_TYPE = nil;
CharacterCreate_ResetState();
for button, tooltip in pairs(raceTooltips) do
if tooltip then tooltip:Hide() end
end
for button, tooltip in pairs(classTooltips) do
if tooltip then tooltip:Hide() end
end
if AllianceTooltip then AllianceTooltip:Hide() end
if HordeTooltip then HordeTooltip:Hide() end
end
function CharacterCreateFrame_OnMouseDown(button)
if ( button == "LeftButton" ) then
CHARACTER_CREATE_ROTATION_START_X = GetCursorPosition();
CHARACTER_CREATE_INITIAL_FACING = GetCharacterCreateFacing();
end
end
function CharacterCreateFrame_OnMouseUp(button)
if ( button == "LeftButton" ) then
CHARACTER_CREATE_ROTATION_START_X = nil
end
end
function CharacterCreateFrame_OnUpdate()
if ( CHARACTER_CREATE_ROTATION_START_X ) then
local x = GetCursorPosition();
local diff = (x - CHARACTER_CREATE_ROTATION_START_X) * CHARACTER_ROTATION_CONSTANT;
CHARACTER_CREATE_ROTATION_START_X = GetCursorPosition();
SetCharacterCreateFacing(GetCharacterCreateFacing() + diff);
end
end
function CharacterCreateEnumerateRaces(...)
CharacterCreate.numRaces = select("#", ...)/3;
if ( CharacterCreate.numRaces > MAX_RACES ) then
message("Too many races! Update MAX_RACES");
return;
end
local coords;
local index = 1;
local button;
local gender;
local selectedSex = GetSelectedSex();
if ( selectedSex == SEX_MALE ) then
gender = "MALE";
elseif ( selectedSex == SEX_FEMALE ) then
gender = "FEMALE";
end
for i=1, select("#", ...), 3 do
coords = RACE_ICON_TCOORDS[strupper(select(i+1, ...).."_"..gender)];
_G["CharacterCreateRaceButton"..index.."NormalTexture"]:SetTexCoord(coords[1], coords[2], coords[3], coords[4]);
_G["CharacterCreateRaceButton"..index.."PushedTexture"]:SetTexCoord(coords[1], coords[2], coords[3], coords[4]);
button = _G["CharacterCreateRaceButton"..index];
local raceID = index
local faction = _G.GetFactionForRaceID(raceID)
local borderColor
if faction == "Alliance" then
borderColor = {0.0, 0.4, 1.0}
else
borderColor = {1.0, 0.0, 0.0}
end
if not button.staticTexture then
button.staticTexture = button:CreateTexture(button:GetName().."StaticTexture", "ARTWORK");
button.staticTexture:SetTexture("Interface\\Glues\\CharacterCreate\\IconBorder_F");
button.staticTexture:SetSize(112, 112);
button.staticTexture:SetPoint("CENTER", 0, 0);
button.staticTexture:SetVertexColor(borderColor[1], borderColor[2], borderColor[3]);
else
button.staticTexture:SetVertexColor(borderColor[1], borderColor[2], borderColor[3]);
end
if not button.highlightTexture then
button.highlightTexture = button:CreateTexture(button:GetName().."HighlightTexture", "HIGHLIGHT");
button.highlightTexture:SetTexture("Interface\\Glues\\CharacterCreate\\IconBorder_F");
button.highlightTexture:SetAlpha(0.5);
button.highlightTexture:SetBlendMode("ADD");
button.highlightTexture:SetSize(112, 112);
button.highlightTexture:SetPoint("CENTER", 0, 0);
button.highlightTexture:SetVertexColor(borderColor[1], borderColor[2], borderColor[3]);
else
button.highlightTexture:SetVertexColor(borderColor[1], borderColor[2], borderColor[3]);
end
if not button.checkedTexture then
button.checkedTexture = button:CreateTexture(button:GetName().."CheckedTexture", "OVERLAY");
button.checkedTexture:SetDrawLayer("OVERLAY", 7);
button.checkedTexture:SetTexture("Interface\\Glues\\CharacterCreate\\IconBorderRace_H");
button.checkedTexture:SetBlendMode("ADD");
button.checkedTexture:SetSize(112, 112);
button.checkedTexture:SetPoint("CENTER", 0, 0);
button.checkedTexture:Hide();
end
if not button.texturesMoved then
button:SetScript("OnMouseDown", nil);
button:SetScript("OnMouseUp", nil);
button.texturesMoved = true;
end
button:Show();
if ( select(i+2, ...) == 1 ) then
button.enable = true;
SetButtonDesaturated(button);
button.name = select(i, ...)
button.tooltip = select(i, ...);
button:SetScript("OnEnter", function(self)
if self:IsEnabled() then
local tooltip = GetOrCreateRaceTooltip(self)
tooltip:Show()
UpdateRaceTooltip(self, false)
end
end)
button:SetScript("OnLeave", function(self)
if self:IsEnabled() then
local tooltip = GetOrCreateRaceTooltip(self)
tooltip:Hide()
end
end)
button:SetScript("OnMouseDown", function(self, clickedButton)
if self:IsEnabled() and clickedButton == "RightButton" then
local tooltip = GetOrCreateRaceTooltip(self)
local isDetailed = detailedRaceTooltips[self]
UpdateRaceTooltip(self, not isDetailed)
end
end)
else
button.enable = false;
SetButtonDesaturated(button, 1);
button.name = select(i, ...)
button.tooltip = _G[strupper(select(i+1, ...).."_".."DISABLED")];
end
index = index + 1;
end
for i=CharacterCreate.numRaces + 1, MAX_RACES, 1 do
_G["CharacterCreateRaceButton"..i]:Hide();
end
end
function CharacterCreateEnumerateClasses(...)
CharacterCreate.numClasses = select("#", ...)/3;
if ( CharacterCreate.numClasses > MAX_CLASSES_PER_RACE ) then
message("Too many classes! Update MAX_CLASSES_PER_RACE");
return;
end
local coords;
local index = 1;
local button;
for i=1, select("#", ...), 3 do
coords = CLASS_ICON_TCOORDS[strupper(select(i+1, ...))];
_G["CharacterCreateClassButton"..index.."NormalTexture"]:SetTexCoord(coords[1], coords[2], coords[3], coords[4]);
_G["CharacterCreateClassButton"..index.."PushedTexture"]:SetTexCoord(coords[1], coords[2], coords[3], coords[4]);
button = _G["CharacterCreateClassButton"..index];
if not button.staticTexture then
button.staticTexture = button:CreateTexture(button:GetName().."StaticTexture", "ARTWORK");
button.staticTexture:SetTexture("Interface\\Glues\\CharacterCreate\\IconBorder_F1");
button.staticTexture:SetSize(112, 112);
button.staticTexture:SetPoint("CENTER", 0, 0);
end
if not button.highlightTexture then
button.highlightTexture = button:CreateTexture(button:GetName().."HighlightTexture", "HIGHLIGHT");
button.highlightTexture:SetTexture("Interface\\Glues\\CharacterCreate\\IconBorder_F1");
button.highlightTexture:SetAlpha(0.5);
button.highlightTexture:SetBlendMode("ADD");
button.highlightTexture:SetSize(112, 112);
button.highlightTexture:SetPoint("CENTER", 0, 0);
end
if not button.checkedTexture then
button.checkedTexture = button:CreateTexture(button:GetName().."CheckedTexture", "OVERLAY");
button.checkedTexture:SetDrawLayer("OVERLAY", 7);
button.checkedTexture:SetTexture("Interface\\Glues\\CharacterCreate\\IconBorderRace_H");
button.checkedTexture:SetBlendMode("ADD");
button.checkedTexture:SetSize(112, 112);
button.checkedTexture:SetPoint("CENTER", 0, 0);
button.checkedTexture:Hide();
end
if not button.nameFrame then
button.nameFrame = CreateFrame("Frame", nil, button);
button.nameFrame:SetSize(112, 40);
button.nameFrame:SetPoint("TOP", button, "BOTTOM", 0, -5);
button.nameFrame.text = button.nameFrame:CreateFontString(nil, "OVERLAY");
button.nameFrame.text:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE");
button.nameFrame.text:SetPoint("CENTER", 0, 0);
button.nameFrame.text:SetTextColor(1, 1, 1);
button.nameFrame.text:SetJustifyH("CENTER");
button.nameFrame.text:SetJustifyV("CENTER");
button.nameFrame.text:SetWidth(112);
button.nameFrame.text:SetWordWrap(true);
button.nameFrame.text:SetHeight(40);
end
if not button.texturesMoved then
button:SetScript("OnMouseDown", nil);
button:SetScript("OnMouseUp", nil);
button.texturesMoved = true;
end
button:Show();
local className = select(i, ...);
if className == "Caballero de la Muerte" then
button.nameFrame.text:SetText("Caballero\nde la Muerte");
elseif string.len(className) > 12 then
local spacePos = string.find(className, " ", 6)
if spacePos then
local firstPart = string.sub(className, 1, spacePos - 1);
local secondPart = string.sub(className, spacePos + 1);
button.nameFrame.text:SetText(firstPart .. "\n" .. secondPart);
else
local midPoint = math.floor(string.len(className) / 2);
local firstPart = string.sub(className, 1, midPoint);
local secondPart = string.sub(className, midPoint + 1);
button.nameFrame.text:SetText(firstPart .. "-\n" .. secondPart);
end
else
button.nameFrame.text:SetText(className);
end
if ( (select(i+2, ...) == 1) and (IsRaceClassValid(CharacterCreate.selectedRace, index)) ) then
button.enable = true;
button:Enable();
SetButtonDesaturated(button);
button.name = select(i, ...)
button.tooltip = select(i, ...);
_G["CharacterCreateClassButton"..index.."DisableTexture"]:Hide();
button.nameFrame.text:SetTextColor(1, 1, 1);
button:SetScript("OnEnter", function(self)
if self:IsEnabled() then
local tooltip = GetOrCreateClassTooltip(self)
tooltip:Show()
UpdateClassTooltip(self, false)
end
end)
button:SetScript("OnLeave", function(self)
if self:IsEnabled() then
local tooltip = GetOrCreateClassTooltip(self)
tooltip:Hide()
end
end)
button:SetScript("OnMouseDown", function(self, clickedButton)
if self:IsEnabled() and clickedButton == "RightButton" then
local tooltip = GetOrCreateClassTooltip(self)
local isDetailed = detailedClassTooltips[self]
UpdateClassTooltip(self, not isDetailed)
end
end)
else
button.enable = false;
button:Disable();
SetButtonDesaturated(button, 1);
button.name = select(i, ...)
button.tooltip = _G[strupper(select(i+1, ...).."_".."DISABLED")];
_G["CharacterCreateClassButton"..index.."DisableTexture"]:Show();
button.nameFrame.text:SetTextColor(0.5, 0.5, 0.5);
button:SetScript("OnEnter", function(self)
local tooltip = GetOrCreateClassTooltip(self)
tooltip:Show()
UpdateClassTooltip(self, false)
end)
button:SetScript("OnLeave", function(self)
local tooltip = GetOrCreateClassTooltip(self)
tooltip:Hide()
end)
end
index = index + 1;
end
for i=CharacterCreate.numClasses + 1, MAX_CLASSES_PER_RACE, 1 do
_G["CharacterCreateClassButton"..i]:Hide();
end
end
function CharacterCreate_CreateGenderButtonTextures()
local maleButton = CharacterCreateGenderButtonMale;
if maleButton and not maleButton.highlightTexture then
maleButton.staticTexture = maleButton:CreateTexture(maleButton:GetName().."StaticTexture", "ARTWORK");
maleButton.staticTexture:SetTexture("Interface\\Glues\\CharacterCreate\\IconBorder_F1");
maleButton.staticTexture:SetSize(86, 86);
maleButton.staticTexture:SetPoint("CENTER", 0, 0);
maleButton.highlightTexture = maleButton:CreateTexture(maleButton:GetName().."HighlightTexture", "HIGHLIGHT");
maleButton.highlightTexture:SetTexture("Interface\\Glues\\CharacterCreate\\IconBorder_F1");
maleButton.highlightTexture:SetAlpha(0.5);
maleButton.highlightTexture:SetBlendMode("ADD");
maleButton.highlightTexture:SetSize(86, 86);
maleButton.highlightTexture:SetPoint("CENTER", 0, 0);
maleButton.checkedTexture = maleButton:CreateTexture(maleButton:GetName().."CheckedTexture", "OVERLAY");
maleButton.checkedTexture:SetDrawLayer("OVERLAY", 7);
maleButton.checkedTexture:SetTexture("Interface\\Glues\\CharacterCreate\\IconBorderRace_H");
maleButton.checkedTexture:SetBlendMode("ADD");
maleButton.checkedTexture:SetSize(86, 86);
maleButton.checkedTexture:SetPoint("CENTER", 0, 0);
maleButton.checkedTexture:Hide();
maleButton:SetScript("OnMouseDown", nil);
maleButton:SetScript("OnMouseUp", nil);
end
local femaleButton = CharacterCreateGenderButtonFemale;
if femaleButton and not femaleButton.highlightTexture then
femaleButton.staticTexture = femaleButton:CreateTexture(femaleButton:GetName().."StaticTexture", "ARTWORK");
femaleButton.staticTexture:SetTexture("Interface\\Glues\\CharacterCreate\\IconBorder_F1");
femaleButton.staticTexture:SetSize(86, 86);
femaleButton.staticTexture:SetPoint("CENTER", 0, 0);
femaleButton.highlightTexture = femaleButton:CreateTexture(femaleButton:GetName().."HighlightTexture", "HIGHLIGHT");
femaleButton.highlightTexture:SetTexture("Interface\\Glues\\CharacterCreate\\IconBorder_F1");
femaleButton.highlightTexture:SetAlpha(0.5);
femaleButton.highlightTexture:SetBlendMode("ADD");
femaleButton.highlightTexture:SetSize(86, 86);
femaleButton.highlightTexture:SetPoint("CENTER", 0, 0);
femaleButton.checkedTexture = femaleButton:CreateTexture(femaleButton:GetName().."CheckedTexture", "OVERLAY");
femaleButton.checkedTexture:SetDrawLayer("OVERLAY", 7);
femaleButton.checkedTexture:SetTexture("Interface\\Glues\\CharacterCreate\\IconBorderRace_H");
femaleButton.checkedTexture:SetBlendMode("ADD");
femaleButton.checkedTexture:SetSize(86, 86);
femaleButton.checkedTexture:SetPoint("CENTER", 0, 0);
femaleButton.checkedTexture:Hide();
femaleButton:SetScript("OnMouseDown", nil);
femaleButton:SetScript("OnMouseUp", nil);
end
end
function SetCharacterRace(id)
CharacterCreate.selectedRace = id;
local selectedButton;
for i=1, CharacterCreate.numRaces, 1 do
local button = _G["CharacterCreateRaceButton"..i];
if ( i == id ) then
if button.nameFrame and button.nameFrame.text then
button.nameFrame.text:SetText(button.name);
end
button:SetChecked(1);
selectedButton = button;
else
if button.nameFrame and button.nameFrame.text then
button.nameFrame.text:SetText("");
end
button:SetChecked(0);
end
end
CharacterCreate_UpdateButtonCheckedStates();
local name, faction = GetFactionForRace(CharacterCreate.selectedRace);
local race, fileString = GetNameForRace();
CharacterCreateRaceLabel:SetText(race);
fileString = strupper(fileString);
if ( GetSelectedSex() == SEX_MALE ) then
gender = "MALE";
else
gender = "FEMALE";
end
local coords = RACE_ICON_TCOORDS[fileString.."_"..gender];
CharacterCreateRaceIcon:SetTexCoord(coords[1], coords[2], coords[3], coords[4]);
local raceText = _G["RACE_INFO_"..fileString];
local abilityIndex = 1;
local tempText = _G["ABILITY_INFO_"..fileString..abilityIndex];
abilityText = "";
while ( tempText ) do
abilityText = abilityText..tempText.."\n\n";
abilityIndex = abilityIndex + 1;
tempText = _G["ABILITY_INFO_"..fileString..abilityIndex];
end
CharacterCreateRaceScrollFrameScrollBar:SetValue(0);
CharacterCreateRaceText:SetText(GetFlavorText("RACE_INFO_"..strupper(fileString), GetSelectedSex()).."|n|n");
if ( abilityText and abilityText ~= "" ) then
CharacterCreateRaceAbilityText:SetText(abilityText);
else
CharacterCreateRaceAbilityText:SetText("");
end
local backdropColor = FACTION_BACKDROP_COLOR_TABLE[faction];
local frame;
for index, value in pairs(FRAMES_TO_BACKDROP_COLOR) do
frame = _G[value];
frame:SetBackdropColor(backdropColor[4], backdropColor[5], backdropColor[6]);
end
CharacterCreateConfigurationBackground:SetVertexColor(backdropColor[4], backdropColor[5], backdropColor[6]);
local backgroundFilename = GetCreateBackgroundModel();
SetBackgroundModel(CharacterCreate, backgroundFilename);
end
function SetCharacterClass(id)
CharacterCreate.selectedClass = id;
for i=1, CharacterCreate.numClasses, 1 do
local button = _G["CharacterCreateClassButton"..i];
if ( i == id ) then
CharacterCreateClassName:SetText(button.name);
button:SetChecked(1);
else
button:SetChecked(0);
end
end
CharacterCreate_UpdateButtonCheckedStates();
local className, classFileName, _, tank, healer, damage = GetSelectedClass();
local abilityIndex = 0;
local tempText = _G["CLASS_INFO_"..classFileName..abilityIndex];
abilityText = "";
while ( tempText ) do
abilityText = abilityText..tempText.."\n\n";
abilityIndex = abilityIndex + 1;
tempText = _G["CLASS_INFO_"..classFileName..abilityIndex];
end
local coords = CLASS_ICON_TCOORDS[classFileName];
CharacterCreateClassIcon:SetTexCoord(coords[1], coords[2], coords[3], coords[4]);
CharacterCreateClassLabel:SetText(className);
CharacterCreateClassRolesText:SetText(abilityText);
CharacterCreateClassText:SetText(GetFlavorText("CLASS_"..strupper(classFileName), GetSelectedSex()).."|n|n");
CharacterCreateClassScrollFrameScrollBar:SetValue(0);
end
function CharacterCreate_OnChar()
end
function CharacterCreate_UpdateButtonCheckedStates()
for i=1, MAX_RACES, 1 do
local button = _G["CharacterCreateRaceButton"..i];
if button and button:IsShown() and button.checkedTexture then
if button:GetChecked() then
button.checkedTexture:Show();
else
button.checkedTexture:Hide();
end
end
end
for i=1, MAX_CLASSES_PER_RACE, 1 do
local button = _G["CharacterCreateClassButton"..i];
if button and button:IsShown() and button.checkedTexture then
if button:GetChecked() then
button.checkedTexture:Show();
else
button.checkedTexture:Hide();
end
end
end
local maleButton = CharacterCreateGenderButtonMale;
local femaleButton = CharacterCreateGenderButtonFemale;
if maleButton and maleButton.checkedTexture then
if maleButton:GetChecked() then
maleButton.checkedTexture:Show();
else
maleButton.checkedTexture:Hide();
end
end
if femaleButton and femaleButton.checkedTexture then
if femaleButton:GetChecked() then
femaleButton.checkedTexture:Show();
else
femaleButton.checkedTexture:Hide();
end
end
end
function CharacterCreate_OnKeyDown(key)
if ( key == "ESCAPE" ) then
if (CharacterCreate.personalizationMode == true) then
CharacterCreate_TogglePersonalization();
else
CharacterCreate_Back();
end
elseif ( key == "ENTER" ) then
CharacterCreate_Okay();
elseif ( key == "PRINTSCREEN" ) then
Screenshot();
end
end
function CharacterCreate_UpdateModel(self)
UpdateCustomizationScene();
self:AdvanceTime();
end
function CharacterCreate_Okay()
if ( PAID_SERVICE_TYPE ) then
GlueDialog_Show("CONFIRM_PAID_SERVICE");
else
CreateCharacter(CharacterCreateNameEdit:GetText());
end
CharacterCreate.personalizationMode = false;
PlaySound("gsCharacterCreationCreateChar");
end
function CharacterCreate_Back()
if (CharacterCreate.personalizationMode == true) then
CharacterCreate_TogglePersonalization();
CharacterCreate.personalizationMode = false;
return;
end
CharacterCreate.personalizationMode = false;
PlaySound("gsCharacterCreationCancel");
SetGlueScreen("charselect");
end
function CharacterClass_OnClick(id)
PlaySound("gsCharacterCreationClass");
local _,_,currClass = GetSelectedClass();
if ( currClass ~= id and IsRaceClassValid(GetSelectedRace(), id) ) then
SetSelectedClass(id);
SetCharacterClass(id);
SetCharacterRace(GetSelectedRace());
CharacterChangeFixup();
CharacterCreate_UpdateButtonCheckedStates();
end
end
function CharacterRace_OnClick(self, id)
PlaySound("gsCharacterCreationClass");
if ( not self:GetChecked() ) then
self:SetChecked(1);
return;
end
if ( GetSelectedRace() ~= id ) then
SetSelectedRace(id);
SetCharacterRace(id);
SetSelectedSex(GetSelectedSex());
SetCharacterCreateFacing(-15);
CharacterCreateEnumerateClasses(GetAvailableClasses());
local _,_,classIndex = GetSelectedClass();
if ( PAID_SERVICE_TYPE ) then
classIndex = PaidChange_GetCurrentClassIndex();
end
SetCharacterClass(classIndex);
CharacterCreate_UpdateHairCustomization();
CharacterChangeFixup();
CharacterCreate_UpdateButtonCheckedStates();
end
end
function SetCharacterGender(sex)
local gender;
SetSelectedSex(sex);
if ( sex == SEX_MALE ) then
gender = "MALE";
CharacterCreateGender:SetText(MALE);
CharacterCreateGenderButtonMale:SetChecked(1);
CharacterCreateGenderButtonFemale:SetChecked(nil);
elseif ( sex == SEX_FEMALE ) then
gender = "FEMALE";
CharacterCreateGender:SetText(FEMALE);
CharacterCreateGenderButtonMale:SetChecked(nil);
CharacterCreateGenderButtonFemale:SetChecked(1);
end
CharacterCreateEnumerateRaces(GetAvailableRaces());
CharacterCreateEnumerateClasses(GetAvailableClasses());
SetCharacterRace(GetSelectedRace());
local _,_,classIndex = GetSelectedClass();
if ( PAID_SERVICE_TYPE ) then
classIndex = PaidChange_GetCurrentClassIndex();
end
SetCharacterClass(classIndex);
CharacterCreate_UpdateHairCustomization();
local race, fileString = GetNameForRace();
CharacterCreateRaceLabel:SetText(race);
fileString = strupper(fileString);
local coords = RACE_ICON_TCOORDS[fileString.."_"..gender];
CharacterCreateRaceIcon:SetTexCoord(coords[1], coords[2], coords[3], coords[4]);
CharacterChangeFixup();
CharacterCreate_UpdateButtonCheckedStates();
end
function CharacterCreate_ResetState()
CharacterCreate.personalizationMode = false;
CharacterCreateRaceButtonsContainer:Show();
CharacterCreateClassButtonsContainer:Show();
CharacterCreateGenderButtonsContainer:Show();
CustomizationLogoAlliance:Show();
CustomizationTextAlliance:Show();
CustomizationLogoHorde:Show();
CustomizationTextHorde:Show();
CharacterCreateRotateLeft:Hide();
CharacterCreateRotateRight:Hide();
CharacterCreateRotateLeft30:Hide();
CharacterCreateRotateRight30:Hide();
CharCreateRandomizeButton:Hide();
CharacterCreateNameEdit:Hide();
CharacterCreateRandomName:Hide();
CharCreatePersonalizeButton:Show();
CharCreateOkayButton:Hide();
for i=1, NUM_CHAR_CUSTOMIZATIONS do
_G["CharacterCustomizationButtonFrame"..i]:Hide();
end
end
function CharacterCustomization_Left(id)
PlaySound("gsCharacterCreationLook");
CycleCharCustomization(id, -1);
end
function CharacterCustomization_Right(id)
PlaySound("gsCharacterCreationLook");
CycleCharCustomization(id, 1);
end
function CharacterCreate_Randomize()
PlaySound("gsCharacterCreationLook");
RandomizeCharCustomization();
end
function CharacterCreateRotateRight_OnUpdate(self)
if ( self:GetButtonState() == "PUSHED" ) then
SetCharacterCreateFacing(GetCharacterCreateFacing() + CHARACTER_FACING_INCREMENT);
end
end
function CharacterCreateRotateLeft_OnUpdate(self)
if ( self:GetButtonState() == "PUSHED" ) then
SetCharacterCreateFacing(GetCharacterCreateFacing() - CHARACTER_FACING_INCREMENT);
end
end
function CharacterCreate_RotateLeft30()
local currentFacing = GetCharacterCreateFacing();
SetCharacterCreateFacing(currentFacing - CHARACTER_ROTATION_INCREMENT);
end
function CharacterCreate_RotateRight30()
local currentFacing = GetCharacterCreateFacing();
SetCharacterCreateFacing(currentFacing + CHARACTER_ROTATION_INCREMENT);
end
function CharacterCreate_UpdateHairCustomization()
CharacterCustomizationButtonFrame3Text:SetText(_G["HAIR_"..GetHairCustomization().."_STYLE"]);
CharacterCustomizationButtonFrame4Text:SetText(_G["HAIR_"..GetHairCustomization().."_COLOR"]);
CharacterCustomizationButtonFrame5Text:SetText(_G["FACIAL_HAIR_"..GetFacialHairCustomization()]);
end
function SetButtonDesaturated(button, desaturated, r, g, b)
if ( not button ) then
return;
end
local icon = button:GetNormalTexture();
if ( not icon ) then
return;
end
local shaderSupported = icon:SetDesaturated(desaturated);
if ( not desaturated ) then
r = 1.0;
g = 1.0;
b = 1.0;
elseif ( not r or not shaderSupported ) then
r = 0.5;
g = 0.5;
b = 0.5;
end
icon:SetVertexColor(r, g, b);
end
function GetFlavorText(tagname, sex)
local primary, secondary;
if ( sex == SEX_MALE ) then
primary = "";
secondary = "_FEMALE";
else
primary = "_FEMALE";
secondary = "";
end
local text = _G[tagname..primary];
if ( (text == nil) or (text == "") ) then
text = _G[tagname..secondary];
end
return text;
end
function CharacterCreate_DeathKnightSwap(self)
local _, classFilename = GetSelectedClass();
if ( classFilename == "DEATHKNIGHT" ) then
if (self.currentModel ~= "DEATHKNIGHT") then
self.currentModel = "DEATHKNIGHT";
self:SetNormalTexture("Interface\\Glues\\Common\\Glue-Panel-Button-Up-Blue");
self:SetPushedTexture("Interface\\Glues\\Common\\Glue-Panel-Button-Down-Blue");
self:SetHighlightTexture("Interface\\Glues\\Common\\Glue-Panel-Button-Highlight-Blue");
end
else
if (self.currentModel == "DEATHKNIGHT") then
self.currentModel = nil;
self:SetNormalTexture("Interface\\Glues\\Common\\Glue-Panel-Button-Up");
self:SetPushedTexture("Interface\\Glues\\Common\\Glue-Panel-Button-Down");
self:SetHighlightTexture("Interface\\Glues\\Common\\Glue-Panel-Button-Highlight");
end
end
end
function CharacterChangeFixup()
if ( PAID_SERVICE_TYPE ) then
for i=1, MAX_CLASSES_PER_RACE, 1 do
if (CharacterCreate.selectedClass ~= i) then
local button = _G["CharacterCreateClassButton"..i];
button:Disable();
SetButtonDesaturated(button, true)
end
end
for i=1, MAX_RACES, 1 do
local allow = false;
if ( PAID_SERVICE_TYPE == PAID_FACTION_CHANGE ) then
local faction = GetFactionForRace(PaidChange_GetCurrentRaceIndex());
if ( (i == PaidChange_GetCurrentRaceIndex()) or ((GetFactionForRace(i) ~= faction) and (IsRaceClassValid(i,CharacterCreate.selectedClass))) ) then
allow = true;
end
elseif ( PAID_SERVICE_TYPE == PAID_RACE_CHANGE ) then
local faction = GetFactionForRace(PaidChange_GetCurrentRaceIndex());
if ( (i == PaidChange_GetCurrentRaceIndex()) or ((GetFactionForRace(i) == faction) and (IsRaceClassValid(i,CharacterCreate.selectedClass))) ) then
allow = true
end
elseif ( PAID_SERVICE_TYPE == PAID_CHARACTER_CUSTOMIZATION ) then
if ( i == CharacterCreate.selectedRace ) then
allow = true
end
end
if (not allow) then
local button = _G["CharacterCreateRaceButton"..i];
button:Disable();
SetButtonDesaturated(button, true)
end
end
end
end