1611 lines
58 KiB
Lua
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
|