From bdffcabed371797834d7aa1d0a290ddbce077da0 Mon Sep 17 00:00:00 2001 From: tekkub Date: Wed, 21 Oct 2009 18:08:05 -0600 Subject: [PATCH] Build 10623 --- .../Blizzard_AchievementUI.lua | 5 +- .../Blizzard_ItemSocketingUI.xml | 5 +- FrameXML/Bindings.xml | 2 +- FrameXML/ChatFrame.lua | 2 + FrameXML/FontStyles.xml | 3 + FrameXML/Fonts.xml | 5 + FrameXML/FrameXML.toc | 1 + FrameXML/GlobalStrings.lua | 47 +- FrameXML/InterfaceOptionsPanels.lua | 21 +- FrameXML/InterfaceOptionsPanels.xml | 40 - FrameXML/LFDFrame.lua | 68 +- FrameXML/LFDFrame.xml | 48 +- FrameXML/MainMenuBarMicroButtons.lua | 10 +- FrameXML/MainMenuBarMicroButtons.xml | 2 +- FrameXML/Minimap.lua | 2 +- FrameXML/QuestLogFrame.lua | 17 +- FrameXML/StaticPopup.lua | 13 +- FrameXML/TutorialFrame.lua | 246 ++++- FrameXML/TutorialFrame.xml | 180 ++-- FrameXML/UI.xsd | 9 + FrameXML/UIParent.lua | 38 +- FrameXML/WatchFrame.lua | 896 +++++------------- FrameXML/WatchFrame.xml | 377 +------- FrameXML/WorldMapFrame.lua | 31 +- FrameXML/WorldMapFrame.xml | 11 +- 25 files changed, 810 insertions(+), 1269 deletions(-) diff --git a/AddOns/Blizzard_AchievementUI/Blizzard_AchievementUI.lua b/AddOns/Blizzard_AchievementUI/Blizzard_AchievementUI.lua index dde55434..56bee082 100644 --- a/AddOns/Blizzard_AchievementUI/Blizzard_AchievementUI.lua +++ b/AddOns/Blizzard_AchievementUI/Blizzard_AchievementUI.lua @@ -979,10 +979,7 @@ function AchievementButton_ToggleTracking (id) local count = GetNumTrackedAchievements(); - if ( WatchFrame_GetRemainingSpace() < WatchFrame_GetHeightNeededForAchievement(id) ) then - UIErrorsFrame:AddMessage(OBJECTIVES_WATCH_TOO_MANY, 1.0, 0.1, 0.1, 1.0); - return - elseif ( count >= WATCHFRAME_MAXACHIEVEMENTS ) then + if ( count >= WATCHFRAME_MAXACHIEVEMENTS ) then UIErrorsFrame:AddMessage(format(ACHIEVEMENT_WATCH_TOO_MANY, WATCHFRAME_MAXACHIEVEMENTS), 1.0, 0.1, 0.1, 1.0); return; end diff --git a/AddOns/Blizzard_ItemSocketingUI/Blizzard_ItemSocketingUI.xml b/AddOns/Blizzard_ItemSocketingUI/Blizzard_ItemSocketingUI.xml index dcee6dce..e4849720 100644 --- a/AddOns/Blizzard_ItemSocketingUI/Blizzard_ItemSocketingUI.xml +++ b/AddOns/Blizzard_ItemSocketingUI/Blizzard_ItemSocketingUI.xml @@ -407,10 +407,7 @@ dialog.data = 2; end elseif ( ItemSocketingFrame.itemIsBoundTradeable ) then - local dialog = StaticPopup_Show("END_BOUND_TRADEABLE"); - if(dialog) then - dialog.data = 2; - end + local dialog = StaticPopup_Show("END_BOUND_TRADEABLE", nil, nil, "gem"); elseif ( ItemSocketingFrame.destroyingGem ) then StaticPopup_Show("CONFIRM_ACCEPT_SOCKETS"); else diff --git a/FrameXML/Bindings.xml b/FrameXML/Bindings.xml index 1350a8cc..8180e151 100644 --- a/FrameXML/Bindings.xml +++ b/FrameXML/Bindings.xml @@ -690,7 +690,7 @@ ToggleFriendsFrame(5); - --ToggleLFDParentFrame(); + ToggleLFDParentFrame(); ToggleLFGParentFrame(1); diff --git a/FrameXML/ChatFrame.lua b/FrameXML/ChatFrame.lua index 18cad904..6103adff 100644 --- a/FrameXML/ChatFrame.lua +++ b/FrameXML/ChatFrame.lua @@ -2113,6 +2113,8 @@ SlashCmdList["SET_TITLE"] = function(msg) if(not SetTitleByName(name)) then UIErrorsFrame:AddMessage(TITLE_DOESNT_EXIST, 1.0, 0.1, 0.1, 1.0); end + else + SetCurrentTitle(-1) end end diff --git a/FrameXML/FontStyles.xml b/FrameXML/FontStyles.xml index 7b78f9e3..6e23cb6f 100644 --- a/FrameXML/FontStyles.xml +++ b/FrameXML/FontStyles.xml @@ -113,6 +113,9 @@ + + + diff --git a/FrameXML/Fonts.xml b/FrameXML/Fonts.xml index 8897cc24..9eadb6e7 100644 --- a/FrameXML/Fonts.xml +++ b/FrameXML/Fonts.xml @@ -114,6 +114,11 @@ + + + + + diff --git a/FrameXML/FrameXML.toc b/FrameXML/FrameXML.toc index 1ec4df21..ca9ba205 100644 --- a/FrameXML/FrameXML.toc +++ b/FrameXML/FrameXML.toc @@ -124,6 +124,7 @@ PVPBattlegroundFrame.xml ArenaFrame.xml ArenaRegistrarFrame.xml ##LFGFrame.xml +LFDFrame.xml MovieRecordingProgress.xml MacOptionsFrame.xml RatingMenuFrame.xml diff --git a/FrameXML/GlobalStrings.lua b/FrameXML/GlobalStrings.lua index 19f776ae..85ebd52a 100644 --- a/FrameXML/GlobalStrings.lua +++ b/FrameXML/GlobalStrings.lua @@ -1081,6 +1081,24 @@ BUILDING_DAMAGE = "Siege"; BUILDING_DAMAGE_COMBATLOG_TOOLTIP = "Show messages when a spell or ability deals damage to a destructible building."; BUILDING_HEAL = "Repairs"; BUILDING_HEAL_COMBATLOG_TOOLTIP = "Show messages when a spell or ability repairs a building."; +BUTTON_LAG_AUCTIONHOUSE = "Auction House"; +BUTTON_LAG_AUCTIONHOUSE_NEWBIE = "There is a long delay when posting, buying, searching or paging through auctions."; +BUTTON_LAG_AUCTIONHOUSE_TOOLTIP = "Auction House Lag"; +BUTTON_LAG_CHAT = "Chat"; +BUTTON_LAG_CHAT_NEWBIE = "It takes a long time for your friends to see messages you send them or for you to see messages they send you."; +BUTTON_LAG_CHAT_TOOLTIP = "Chat Message Lag"; +BUTTON_LAG_LOOT = "Loot"; +BUTTON_LAG_LOOT_NEWBIE = "It takes a long time for loot that you click on or that someone assigns to you to show up in your inventory. It may also take a long time to trade items with another player."; +BUTTON_LAG_LOOT_TOOLTIP = "Loot Lag"; +BUTTON_LAG_MAIL = ""; +BUTTON_LAG_MAIL_NEWBIE = "It takes a long time to open mail or retrieve items from mail."; +BUTTON_LAG_MAIL_TOOLTIP = "In Game Mail Lag"; +BUTTON_LAG_MOVEMENT = "Movement"; +BUTTON_LAG_MOVEMENT_NEWBIE = "Creatures and players may pop or teleport from place to place. They may also run in place. You may notice that you try to attack creatures that aren't really where you think they are."; +BUTTON_LAG_MOVEMENT_TOOLTIP = "Movement Lag"; +BUTTON_LAG_SPELL = "Spells and Abilities"; +BUTTON_LAG_SPELL_NEWBIE = "It takes a long time after you try and use a spell or ability before the spell or ability actually occurs. Abilities may behave as if they are on cooldown even though they are not."; +BUTTON_LAG_SPELL_TOOLTIP = "Spell and Ability Lag"; BUYBACK = "Buyback"; BUYBACK_THIS_ITEM = "Buy Back This Item"; BUYOUT = "Buyout"; @@ -1889,6 +1907,14 @@ DUNGEON_FLOOR_GUNDRAK1 = "Gundrak"; DUNGEON_FLOOR_HALLSOFLIGHTNING1 = "Unyielding Garrison"; DUNGEON_FLOOR_HALLSOFLIGHTNING2 = "Walk of the Makers"; DUNGEON_FLOOR_HALLSOFREFLECTION1 = "Halls of Reflection"; +DUNGEON_FLOOR_ICECROWNCITADEL1 = "The Lower Citadel"; +DUNGEON_FLOOR_ICECROWNCITADEL2 = "The Rampart of Skulls"; +DUNGEON_FLOOR_ICECROWNCITADEL3 = "Deathbringer's Rise"; +DUNGEON_FLOOR_ICECROWNCITADEL4 = "The Frost Queen's Lair"; +DUNGEON_FLOOR_ICECROWNCITADEL5 = "The Upper Reaches"; +DUNGEON_FLOOR_ICECROWNCITADEL6 = "Royal Quarters"; +DUNGEON_FLOOR_ICECROWNCITADEL7 = "The Frozen Throne"; +DUNGEON_FLOOR_ICECROWNCITADEL8 = "Frostmourne"; DUNGEON_FLOOR_NAXXRAMAS1 = "The Construct Quarter"; DUNGEON_FLOOR_NAXXRAMAS2 = "The Arachnid Quarter"; DUNGEON_FLOOR_NAXXRAMAS3 = "The Military Quarter"; @@ -2996,6 +3022,8 @@ ERR_LFG_NO_SLOTS_PLAYER = "You do not meet the requirements for the chosen dunge ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = "The dungeon you chose does not support players from multiple realms."; ERR_LFG_PENDING = "You already have a pending match."; ERR_LFG_PROPOSAL_FAILED = "Someone has declined the dungeon invite. You have been added to the front of the dungeon queue."; +ERR_LFG_RANDOM_COOLDOWN_PARTY = "One or more party members are on random dungeon cooldown."; +ERR_LFG_RANDOM_COOLDOWN_PLAYER = "You can not queue for random dungeons while on random dungeon cooldown."; ERR_LFG_ROLE_CHECK_FAILED = "The Role Check has failed."; ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE = "Role Check failed because your group is not viable."; ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT = "Role Check failed because group member did not respond."; @@ -3841,6 +3869,8 @@ HELPFRAME_ITEM_BULLET_TITLE2 = "The following are NOT considered item issues:"; HELPFRAME_ITEM_BUTTON_TEXT = "Report Item Issue"; HELPFRAME_ITEM_TEXT = "Issues regarding any problem dealing with item functionality or possession"; HELPFRAME_ITEM_TITLE = "Item"; +HELPFRAME_LAG_TEXT1 = "The primary cause of lag is high population. You will usually notice lag by mail boxes in major cities...\n\n What type of lag are you experiencing? Click on a button below to submit a report."; +HELPFRAME_LAG_TITLE = "Report Lag"; HELPFRAME_NONQUEST_BULLET1 = "Creeps permanently evading"; HELPFRAME_NONQUEST_BULLET2 = "NPC is not pathing correctly"; HELPFRAME_NONQUEST_BULLET3 = "Creeps over-spawning or under-spawning"; @@ -3874,6 +3904,7 @@ HELPFRAME_REPORTISSUE_BULLET_TITLE1 = "Topics can include but are not limited to HELPFRAME_REPORTISSUE_TEXT1 = "Unlike the \"Talk to a GM\" feature, this feature is for players to give the Game Master Department a heads up on issues that may be occurring in-game. There can be times when players come across something in-game they feel requires our attention but does not necessarily require a Game Master response. We encourage the use of this category for those occasions."; HELPFRAME_REPORTISSUE_TEXT2 = "In addition there may be times when a Game Master will still need to contact players in order to gather further information. We apologize in advance for any interruption to game play that may ensue."; HELPFRAME_REPORTISSUE_TITLE = "Report an Issue"; +HELPFRAME_REPORTLAG_TEXT1 = "Your lag report has been successfully submitted."; HELPFRAME_STUCK_BUTTON_DESCRIPTION = "Physically stuck in an area of the map"; HELPFRAME_STUCK_BUTTON_TEXT = "Stuck:"; HELPFRAME_STUCK_TEXT1 = "If you find yourself stuck and unable to move, please try the auto-unstuck feature prior to petitioning a GM. In most cases, this should solve the problem. Activating the auto-unstuck command will first attempt to use your hearthstone to port you back to your inn. If this is not possible, it will attempt to nudge your character out of position.\n\nPlease note this option can only be used every 5 minutes. Using the auto-unstuck option will log your character and location so that we can verify and fix the location in the future."; @@ -4012,19 +4043,19 @@ INSTANCE_RESET_FAILED_ZONING = "Cannot reset %s. There are players in your part INSTANCE_RESET_SUCCESS = "%s has been reset."; INSTANCE_SAVED = "You are now saved to this instance"; INSTANCE_SHUTDOWN_MESSAGE = "Not enough players. The game will end in %s"; -INSTANCE_UNAVAILABLE_OTHER_EXPANSION_TOO_LOW = "%s does not have a recent enough expansion."; +INSTANCE_UNAVAILABLE_OTHER_EXPANSION_TOO_LOW = "%s does not have the correct World of Warcraft expansion."; INSTANCE_UNAVAILABLE_OTHER_GEAR_TOO_HIGH = "%s's gear is too good."; INSTANCE_UNAVAILABLE_OTHER_GEAR_TOO_LOW = "%s must obtain better gear."; INSTANCE_UNAVAILABLE_OTHER_LEVEL_TOO_HIGH = "%s's level is too high."; INSTANCE_UNAVAILABLE_OTHER_LEVEL_TOO_LOW = "%s must advance to a higher level."; -INSTANCE_UNAVAILABLE_OTHER_OTHER = "%s does not meet the requirements for this instance."; +INSTANCE_UNAVAILABLE_OTHER_OTHER = "%s does not meet the requirements for this dungeon."; INSTANCE_UNAVAILABLE_OTHER_RAID_LOCKED = "%s is already locked to this instance."; -INSTANCE_UNAVAILABLE_SELF_EXPANSION_TOO_LOW = "You do not have a recent enough expansion."; +INSTANCE_UNAVAILABLE_SELF_EXPANSION_TOO_LOW = "You do not have the World of Warcraft expansion."; INSTANCE_UNAVAILABLE_SELF_GEAR_TOO_HIGH = "Your gear is too good."; INSTANCE_UNAVAILABLE_SELF_GEAR_TOO_LOW = "You must obtain better gear."; INSTANCE_UNAVAILABLE_SELF_LEVEL_TOO_HIGH = "Your level is too high."; INSTANCE_UNAVAILABLE_SELF_LEVEL_TOO_LOW = "You must advance to a higher level."; -INSTANCE_UNAVAILABLE_SELF_OTHER = "You do not meet the requirements for this instance."; +INSTANCE_UNAVAILABLE_SELF_OTHER = "You do not meet the requirements for this dungeon."; INSTANCE_UNAVAILABLE_SELF_RAID_LOCKED = "You are already locked to this instance."; INT = "Int"; INTELLECT_COLON = "Intellect:"; @@ -4302,6 +4333,7 @@ KBASE_ERROR_LOAD_FAILURE = "The Knowledge Base is currently unavailable. Please KBASE_ERROR_NO_RESULTS = "There were no articles matching your search criteria."; KBASE_GMTALK = "Talk to a GM"; KBASE_HOT_ISSUE = "Hot Issue"; +KBASE_LAG = "Report Lag"; KBASE_RECENTLY_UPDATED = "Recently Updated"; KBASE_REPORTISSUE = "Report Issue"; KBASE_SEARCH_RESULTS = "Search Results"; @@ -4465,7 +4497,7 @@ LFD_LEVEL_FORMAT_RANGE = "(%d - %d)"; LFD_LEVEL_FORMAT_SINGLE = "(%d)"; LFD_RANDOM_EXPLANATION = "Using the Dungeons panel to do a Random Dungeon will earn you extra rewards."; LFD_RANDOM_REWARD_EXPLANATION1 = "The first random dungeon that you complete each day will earn you:"; -LFD_RANDOM_REWARD_PUG_EXPLANATION = "For every random player included in your group, you will get:"; +LFD_RANDOM_REWARD_PUG_EXPLANATION = "You will also receive the following rewards. They scale with the number of random players included in your group:"; LFD_REWARDS = "Rewards"; LFGWIZARD_TITLE = "Choose an Action"; LFG_BUTTON = "Looking For Group/Looking For More"; @@ -5551,6 +5583,7 @@ QUESTS_SUBTEXT = "These options allow you to customize the behaviors of the game QUEST_ACCEPT = "%s is starting %s\nWould you like to as well?"; QUEST_ACCEPT_LOG_FULL = "%s is starting %s\nYour quest log is full. You can join this\nquest if you make room in your quest log."; QUEST_COMPLETE = "Quest completed"; +QUEST_DASH = "- "; QUEST_DESCRIPTION = "Description"; QUEST_DETAILS = "Quest Details"; QUEST_FACTION_NEEDED = "%s: %s / %s"; @@ -5954,7 +5987,7 @@ SHOW_PET_SPELL_DAMAGE = "Show pet spell damage"; SHOW_PLAYER_NAMES = "Player Names"; SHOW_PLAYER_TITLES = "Player Titles"; SHOW_QUEST_FADING_TEXT = "Instant Quest Text"; -SHOW_QUEST_OBJECTIVES_ON_MAP_TEXT = "Show Quest Objectives On Map"; +SHOW_QUEST_OBJECTIVES_ON_MAP_TEXT = "Show Quest Objectives"; SHOW_QUICK_BUTTON = "Show Quick Button"; SHOW_RAID_RANGE_TEXT = "Range in Raid Interface"; SHOW_TARGET = "Show Target"; @@ -6674,6 +6707,8 @@ SPELL_FAILED_CUSTOM_ERROR_83 = "You must have a Fire Totem active."; SPELL_FAILED_CUSTOM_ERROR_84 = "You may not bite other vampires."; SPELL_FAILED_CUSTOM_ERROR_85 = "Your pet is already at your level."; SPELL_FAILED_CUSTOM_ERROR_86 = "You do not meet the level requirements for this item."; +SPELL_FAILED_CUSTOM_ERROR_87 = "There are too many Mutated Abominations."; +SPELL_FAILED_CUSTOM_ERROR_88 = "The potions have all been depleted by Professor Putricide."; SPELL_FAILED_CUSTOM_ERROR_9 = "Requires Corpse Dust"; SPELL_FAILED_DAMAGE_IMMUNE = "You can't do that while you are immune"; SPELL_FAILED_EQUIPPED_ITEM = "Must have the proper item equipped"; diff --git a/FrameXML/InterfaceOptionsPanels.lua b/FrameXML/InterfaceOptionsPanels.lua index eba25d93..1e61f947 100644 --- a/FrameXML/InterfaceOptionsPanels.lua +++ b/FrameXML/InterfaceOptionsPanels.lua @@ -787,8 +787,6 @@ ObjectivesPanelOptions = { questFadingDisable = { text = "SHOW_QUEST_FADING_TEXT" }, autoQuestWatch = { text = "AUTO_QUEST_WATCH_TEXT" }, autoQuestProgress = { text = "AUTO_QUEST_PROGRESS_TEXT" }, - advancedWatchFrame = { text = "ADVANCED_OBJECTIVES_TEXT" }, - watchFrameIgnoreCursor = { text = "OBJECTIVES_IGNORE_CURSOR_TEXT" }, } function InterfaceOptionsObjectivesPanel_OnLoad (self) @@ -801,24 +799,6 @@ end function InterfaceOptionsObjectivesPanel_OnEvent (self, event, ...) BlizzardOptionsPanel_OnEvent(self, event, ...); - - if ( event == "PLAYER_ENTERING_WORLD" ) then - local control = InterfaceOptionsObjectivesPanelAdvancedWatchFrame; - control.setFunc(GetCVar(control.cvar)); - - control = InterfaceOptionsObjectivesPanelIgnoreCursor; - control.setFunc(GetCVar(control.cvar)); - end -end - -function InterfaceOptionsObjectivesPanelAdvancedWatchFrame_UncheckInterrupt(self) - StaticPopup_Show("ADVANCED_WATCHFRAME_OPTION_ENABLE_INTERRUPT"); -end - -function InterfaceOptionsObjectivesPanelAdvancedWatchFrame_ConfirmUncheck() - local checkButton = InterfaceOptionsObjectivesPanelAdvancedWatchFrame; - checkButton:SetChecked(false); - InterfaceOptionsPanel_CheckButton_Update(checkButton); end -- [[ Social Options Panel ]] -- @@ -851,6 +831,7 @@ function InterfaceOptionsSocialPanel_OnLoad (self) else SIMPLE_CHAT = "0"; FCF_Set_NormalChat(); + UIParent_ManageFramePositions(); end end diff --git a/FrameXML/InterfaceOptionsPanels.xml b/FrameXML/InterfaceOptionsPanels.xml index 69d12dcb..8f522874 100644 --- a/FrameXML/InterfaceOptionsPanels.xml +++ b/FrameXML/InterfaceOptionsPanels.xml @@ -994,46 +994,6 @@ - - - - - - - - - - - --If you change this, be sure to change the interrupt function in UIOptionsPanels.lua - self.type = CONTROLTYPE_CHECKBOX; - self.cvar = "advancedWatchFrame"; - self.uvar = "ADVANCED_WATCH_FRAME"; - self.interruptUncheck = InterfaceOptionsObjectivesPanelAdvancedWatchFrame_UncheckInterrupt; - self.setFunc = function() WatchFrame_ToggleSimpleWatch() end - BlizzardOptionsPanel_RegisterControl(self, self:GetParent()); - - - - - - - - - - - - - - - self.type = CONTROLTYPE_CHECKBOX; - self.cvar = "watchFrameIgnoreCursor"; - self.uvar = "WATCHFRAME_IGNORECURSOR"; - self.setFunc = function() WatchFrame_ToggleIgnoreCursor() end - BlizzardOptionsPanel_RegisterControl(self, self:GetParent()); - BlizzardOptionsPanel_SetupDependentControl(InterfaceOptionsObjectivesPanelAdvancedWatchFrame, self); - - - diff --git a/FrameXML/LFDFrame.lua b/FrameXML/LFDFrame.lua index 9948e0b0..d3308f53 100644 --- a/FrameXML/LFDFrame.lua +++ b/FrameXML/LFDFrame.lua @@ -14,6 +14,8 @@ LFD_PROPOSAL_FAILED_CLOSE_TIME = 5; LFD_NUM_ROLES = 3; +LFD_MAX_SHOWN_LEVEL_DIFF = 15; + local NUM_STATISTIC_TYPES = 4; local hasSetUp = false; @@ -24,10 +26,12 @@ LFD_RETURN_VALUES = { typeID = 2, minLevel = 3, maxLevel = 4, - expansionLevel = 5, - groupID = 6, - texture = 7, - difficulty = 8, + minRecLevel = 5, --Minimum recommended level + maxRecLevel = 6, --Maximum recommended level + expansionLevel = 7, + groupID = 8, + texture = 9, + difficulty = 10, } LFD_INSTANCE_INVALID_CODES = { --Any other codes are unspecified conditions (e.g. attunements) @@ -39,6 +43,10 @@ LFD_INSTANCE_INVALID_CODES = { --Any other codes are unspecified conditions (e.g "RAID_LOCKED", } +------------------------------------- +-----------LFD Frame-------------- +------------------------------------- + --General functions function LFDFrame_OnLoad(self) self:RegisterEvent("LFG_PROPOSAL_UPDATE"); @@ -135,14 +143,22 @@ function LFDQueueFrame_DisableRoleButton(button) button:Disable(); SetDesaturation(button:GetNormalTexture(), true); button.cover:Show(); + button.checkButton:Hide(); button.checkButton:Disable(); + if ( button.background ) then + button.background:Hide(); + end end function LFDQueueFrame_EnableRoleButton(button) button:Enable(); SetDesaturation(button:GetNormalTexture(), false); button.cover:Hide(); + button.checkButton:Show(); button.checkButton:Enable(); + if ( button.background ) then + button.background:Show(); + end end function LFDQueueFrame_UpdateAvailableRoles() @@ -315,7 +331,7 @@ function LFDQueueFrameSpecificListButton_SetDungeon(button, dungeonID, mode, sub button.expandOrCollapseButton:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-UP"); end else - local name, minLevel, maxLevel = info[LFD_RETURN_VALUES.name], info[LFD_RETURN_VALUES.minLevel], info[LFD_RETURN_VALUES.maxLevel]; + local name, minRecLevel, maxRecLevel = info[LFD_RETURN_VALUES.name], info[LFD_RETURN_VALUES.minRecLevel], info[LFD_RETURN_VALUES.maxRecLevel]; button.instanceName:SetText(name); button.instanceName:SetPoint("RIGHT", button.level, "LEFT", -10, 0); @@ -323,10 +339,10 @@ function LFDQueueFrameSpecificListButton_SetDungeon(button, dungeonID, mode, sub button.heroicIcon:Hide(); button.instanceName:SetPoint("LEFT", 40, 0); - if ( minLevel == maxLevel ) then - button.level:SetText(format(LFD_LEVEL_FORMAT_SINGLE, minLevel)); + if ( minRecLevel == maxRecLevel ) then + button.level:SetText(format(LFD_LEVEL_FORMAT_SINGLE, minRecLevel)); else - button.level:SetText(format(LFD_LEVEL_FORMAT_RANGE, minLevel, maxLevel)); + button.level:SetText(format(LFD_LEVEL_FORMAT_RANGE, minRecLevel, maxRecLevel)); end button.level:Show(); @@ -334,7 +350,7 @@ function LFDQueueFrameSpecificListButton_SetDungeon(button, dungeonID, mode, sub button.instanceName:SetFontObject(QuestDifficulty_Header); button.level:SetFontObject(QuestDifficulty_Header); else - local difficultyColor = GetQuestDifficultyColor((minLevel + maxLevel)/2) + local difficultyColor = GetQuestDifficultyColor((minRecLevel + maxRecLevel)/2) button.instanceName:SetFontObject(difficultyColor.font); button.level:SetFontObject(difficultyColor.font); end @@ -413,7 +429,7 @@ function LFDList_SetHeaderCollapsed(headerID, isCollapsed) end function LFDQueueFrame_QueueForInstanceIfEnabled(queueID) - if ( not LFDIsIDHeader(queueID) and LFDEnabledList[queueID] ) then + if ( not LFDIsIDHeader(queueID) and LFDEnabledList[queueID] and not LFDLockList[queueID] ) then local info = LFDGetDungeonInfoByID(queueID); SetLFGDungeon(info[LFD_RETURN_VALUES.typeID], queueID); return true; @@ -583,7 +599,11 @@ function LFDDungeonReadyPopup_Update() end function LFDDungeonReadyDialog_UpdateRewards(dungeonID) - local doneToday, moneyAmount, experienceGained, numRewards = GetLFGDungeonRewards(dungeonID); + local doneToday, moneyBase, moneyVar, experienceBase, experienceVar, numRewards = GetLFGDungeonRewards(dungeonID); + + local numRandoms = 4 - GetNumPartyMembers(); + local moneyAmount = moneyBase + moneyVar * numRandoms; + local experienceGained = experienceBase + experienceVar * numRandoms; local rewardsOffset = 0; --DEBUG FIXME @@ -639,7 +659,11 @@ function LFDDungeonReadyDialogReward_OnEnter(self, dungeonID) GameTooltip:SetOwner(self, "ANCHOR_RIGHT"); if ( self.rewardID == 0 ) then GameTooltip:AddLine(REWARD_ITEMS_ONLY); - local doneToday, moneyAmount, experienceGained, numRewards = GetLFGDungeonRewards(LFDDungeonReadyPopup.dungeonID); + local doneToday, moneyBase, moneyVar, experienceBase, experienceVar, numRewards = GetLFGDungeonRewards(LFDDungeonReadyPopup.dungeonID); + local numRandoms = 4 - GetNumPartyMembers(); + local moneyAmount = moneyBase + moneyVar * numRandoms; + local experienceGained = experienceBase + experienceVar * numRandoms; + if ( experienceGained > 0 ) then GameTooltip:AddLine(string.format(GAIN_EXPERIENCE, experienceGained)); end @@ -706,7 +730,7 @@ function LFDQueueFrameTypeDropDown_OnLoad(self) end local function isRandomDungeonDisplayable(id) - local name, typeID, minLevel, maxLevel, expansionLevel = GetLFGDungeonInfo(id); + local name, typeID, minLevel, maxLevel, _, _, expansionLevel = GetLFGDungeonInfo(id); local myLevel = UnitLevel("player"); return myLevel >= minLevel and myLevel <= maxLevel and EXPANSION_LEVEL >= expansionLevel; end @@ -721,7 +745,7 @@ function LFDQueueFrameTypeDropDown_Initialize() UIDropDownMenu_AddButton(info); for i=1, GetNumRandomDungeons() do - local id, name, typeID, minLevel, maxLevel, expansionLevel = GetLFGRandomDungeonInfo(i); + local id, name = GetLFGRandomDungeonInfo(i); local isAvailable = IsLFGDungeonJoinable(id); if ( isRandomDungeonDisplayable(id) ) then if ( isAvailable ) then @@ -806,12 +830,21 @@ function LFDQueueFrameRandom_UpdateFrame() local lastFrame; local dungeonID = LFDQueueFrame.type; - if ( not dungeonID ) then --We haven't gotten info on available dungoens yet. + if ( not dungeonID ) then --We haven't gotten info on available dungeons yet. return; end --DEBUG FIXME - local doneToday, moneyAmount, experienceGained, numRewards = GetLFGDungeonRewards(dungeonID); + local doneToday, moneyBase, moneyVar, experienceBase, experienceVar, numRewards = GetLFGDungeonRewards(dungeonID); + local numRandoms = 4 - GetNumPartyMembers(); + local moneyAmount = moneyBase + moneyVar * numRandoms; + local experienceGained = experienceBase + experienceVar * numRandoms; + if ( doneToday ) then + parentFrame.rewardsDescription:SetText(LFD_RANDOM_REWARD_EXPLANATION2); + else + parentFrame.rewardsDescription:SetText(LFD_RANDOM_REWARD_EXPLANATION1); + end + for i=1, numRewards do local frame = _G[parentName.."Item"..i]; if ( not frame ) then @@ -1079,7 +1112,8 @@ function LFDList_DefaultFilterFunction(dungeonID) local sufficientExpansion = EXPANSION_LEVEL >= info[LFD_RETURN_VALUES.expansionLevel]; local level = UnitLevel("player"); local sufficientLevel = level >= info[LFD_RETURN_VALUES.minLevel] and level <= info[LFD_RETURN_VALUES.maxLevel]; - return hasHeader and sufficientExpansion and sufficientLevel; + return (hasHeader and sufficientExpansion and sufficientLevel) and + ( level - LFD_MAX_SHOWN_LEVEL_DIFF <= info[LFD_RETURN_VALUES.maxRecLevel] or (LFDLockList and not LFDLockList[dungeonID])); --If the server tells us we can join, who are we to complain? end LFD_CURRENT_FILTER = LFDList_DefaultFilterFunction diff --git a/FrameXML/LFDFrame.xml b/FrameXML/LFDFrame.xml index bf97bf97..99af79b8 100644 --- a/FrameXML/LFDFrame.xml +++ b/FrameXML/LFDFrame.xml @@ -145,7 +145,7 @@ - @@ -201,6 +201,20 @@ + @@ -962,10 +976,10 @@ - + - + @@ -984,7 +998,7 @@ - + @@ -999,7 +1013,7 @@ - + @@ -1022,9 +1036,9 @@ - + - + @@ -1032,7 +1046,7 @@ - - - diff --git a/FrameXML/Minimap.lua b/FrameXML/Minimap.lua index 03c13cda..81685901 100644 --- a/FrameXML/Minimap.lua +++ b/FrameXML/Minimap.lua @@ -220,7 +220,7 @@ function MiniMapLFGFrame_OnClick(self, button) elseif ( mode == "proposal" ) then StaticPopupSpecial_Show(LFDDungeonReadyPopup); elseif ( mode == "queued" or mode == "rolecheck" ) then - --ToggleLFDParentFrame(); + ToggleLFDParentFrame(); end end diff --git a/FrameXML/QuestLogFrame.lua b/FrameXML/QuestLogFrame.lua index 4f60b945..22e96d52 100644 --- a/FrameXML/QuestLogFrame.lua +++ b/FrameXML/QuestLogFrame.lua @@ -102,23 +102,15 @@ local function _QuestLog_ToggleQuestWatch(questIndex) RemoveQuestWatch(questIndex); WatchFrame_Update(); else - -- Set an error message if trying to show too many quests - if ( (not WatchFrame:IsUserPlaced()) and ArenaEnemyFrames and ArenaEnemyFrames:IsShown() ) then - UIErrorsFrame:AddMessage(OBJECTIVES_WATCH_QUESTS_ARENA, 1.0, 0.1, 0.1, 1.0); - return; - elseif ( GetNumQuestWatches() >= MAX_WATCHABLE_QUESTS ) then -- Check this first though it's less likely, otherwise they could make the frame bigger and be disappointed + if ( GetNumQuestWatches() >= MAX_WATCHABLE_QUESTS ) then -- Check this first though it's less likely, otherwise they could make the frame bigger and be disappointed UIErrorsFrame:AddMessage(format(QUEST_WATCH_TOO_MANY, MAX_WATCHABLE_QUESTS), 1.0, 0.1, 0.1, 1.0); return; - elseif ( WatchFrame_GetRemainingSpace() < WatchFrame_GetHeightNeededForQuest(questIndex) ) then - UIErrorsFrame:AddMessage(OBJECTIVES_WATCH_TOO_MANY, 1.0, 0.1, 0.1, 1.0); - return; end AddQuestWatch(questIndex); WatchFrame_Update(); end end - -- -- QuestLogTitleButton -- @@ -266,9 +258,7 @@ function QuestLog_OnEvent(self, event, ...) QuestLog_UpdateMap(); end elseif ( event == "QUEST_ACCEPTED" ) then - if ( AUTO_QUEST_WATCH == "1" and - GetNumQuestWatches() < MAX_WATCHABLE_QUESTS and - WatchFrame_GetRemainingSpace() >= WatchFrame_GetHeightNeededForQuest(arg1) ) then + if ( AUTO_QUEST_WATCH == "1" and GetNumQuestWatches() < MAX_WATCHABLE_QUESTS ) then AddQuestWatch(arg1); QuestLog_Update(); WatchFrame_Update(); @@ -276,8 +266,7 @@ function QuestLog_OnEvent(self, event, ...) elseif ( event == "QUEST_WATCH_UPDATE" ) then if ( AUTO_QUEST_PROGRESS == "1" and GetNumQuestLeaderBoards(arg1) > 0 and - GetNumQuestWatches() < MAX_WATCHABLE_QUESTS and - WatchFrame_GetRemainingSpace() >= WatchFrame_GetHeightNeededForQuest(arg1) ) then + GetNumQuestWatches() < MAX_WATCHABLE_QUESTS ) then AddQuestWatch(arg1,MAX_QUEST_WATCH_TIME); QuestLog_Update(); WatchFrame_Update(); diff --git a/FrameXML/StaticPopup.lua b/FrameXML/StaticPopup.lua index 74f7d2f7..125b1228 100644 --- a/FrameXML/StaticPopup.lua +++ b/FrameXML/StaticPopup.lua @@ -2711,17 +2711,6 @@ StaticPopupDialogs["SIMPLE_CHAT_OPTION_ENABLE_INTERRUPT"] = { hideOnEscape = 1 }; -StaticPopupDialogs["ADVANCED_WATCHFRAME_OPTION_ENABLE_INTERRUPT"] = { - text = ADVANCED_WATCHFRAME_OPTION_ENABLE_INTERRUPT, - button1 = YES, - button2 = CANCEL, - OnAccept = function(self) - InterfaceOptionsObjectivesPanelAdvancedWatchFrame_ConfirmUncheck(); - end, - timeout = 0, - whileDead = 1, - hideOnEscape = 1 -}; StaticPopupDialogs["WOW_MOUSE_NOT_FOUND"] = { text = WOW_MOUSE_NOT_FOUND, button1 = OKAY, @@ -3164,7 +3153,7 @@ function StaticPopup_Show(which, text_arg1, text_arg2, data) dialog.hideOnEscape = info.hideOnEscape; dialog.enterClicksFirstButton = info.enterClicksFirstButton; -- Clear out data - dialog.data = nil; + dialog.data = data; if ( info.StartDelay ) then dialog.startDelay = info.StartDelay(); diff --git a/FrameXML/TutorialFrame.lua b/FrameXML/TutorialFrame.lua index 29a68419..1290a8dc 100644 --- a/FrameXML/TutorialFrame.lua +++ b/FrameXML/TutorialFrame.lua @@ -1,5 +1,79 @@ +MAX_TUTORIAL_VERTICAL_TILE = 30; +MAX_TUTORIAL_IMAGES = 3; +MAX_TUTORIAL_KEYS = 4; + +TUTORIALFRAME_TOP_HEIGHT = 80; +TUTORIALFRAME_MIDDLE_HEIGHT = 10; +TUTORIALFRAME_BOTTOM_HEIGHT = 15; +TUTORIALFRAME_WIDTH = 364; + TUTORIALFRAME_QUEUE = { }; +TUTORIAL_DATA = { +-- [37] = "CrazyEight", +-- [38] = "CrazyEight", +-- [42] = "CrazyEight", +}; + +DISPLAY_DATA = { + -- Do not remove "Base" it is the default + ["Base"] = { + tileHeight = 4, + anchorData = {align = "CENTER", xOff = 0, yOff = 0} + }, + + -- layers can be BACKGROUND, BORDER, ARTWORK, OVERLAY, HIGHLIGHT + -- if you don't assign one it will default to ARTWORK + ["CrazyEight"] = { + tileHeight = 30, + anchorData = {align = "TOPLEFT", xOff = 100, yOff = -300}, + callOut = {parent = "PlayerFrame", align = "TOPLEFT", xOff = 0, yOff = 0, width = 300, height = 100}, + textBox = {topLeft_xOff = -10, topLeft_yOff = -10, bottomRight_xOff = -10, bottomRight = -10}, + imageData1 = {file ="UI-TutorialFrame-QuestCursor", align = "TOPLEFT", xOff = 100, yOff = -300}, + imageData2 = {file ="UI-TutorialFrame-QuestGiver", align = "TOPLEFT", xOff = 100, yOff = -300}, + mouseData = {image = "RightClick", align = "TOPRIGHT", xOff = -20, yOff = 15}, + keyData1 = {command = "TURNLEFT", layer = "OVERLAY", align = "TOPLEFT", xOff = 35, yOff = -70}, + keyData2 = {command = "MOVEBACKWARD", layer = "OVERLAY", align = "TOPLEFT", xOff = 90, yOff = -70}, + keyData3 = {command = "TURNRIGHT", layer = "OVERLAY", align = "TOPLEFT", xOff = 145, yOff = -70}, + keyData4 = {command = "MOVEFORWARD", align = "TOPLEFT", xOff = 90, yOff = -30}, + arrowUp = {layer = "OVERLAY", align = "TOPRIGHT", xOff = 30, yOff = 0}, + arrowCurveRight = {layer = "OVERLAY", align = "TOPRIGHT", xOff = 60, yOff = 0}, + }, +}; + +function TutorialFrame_OnLoad(self) + self:RegisterEvent("TUTORIAL_TRIGGER"); + self:RegisterEvent("CINEMATIC_STOP"); + + for i = 1, MAX_TUTORIAL_VERTICAL_TILE do + local texture = self:CreateTexture("TutorialFrameLeft"..i, "BORDER"); + texture:SetTexture("Interface\\TutorialFrame\\UI-TUTORIAL-FRAME"); + texture:SetTexCoord(0.4433594, 0.4628906, 0.521484375, 0.541015625); + texture:SetSize(11, 10); + texture = self:CreateTexture("TutorialFrameRight"..i, "BORDER"); + texture:SetTexture("Interface\\TutorialFrame\\UI-TUTORIAL-FRAME"); + texture:SetTexCoord(0.4433594, 0.4550781, 0.812500025, 0.832031275); + texture:SetSize(7, 10); + end + TutorialFrameLeft1:SetPoint("TOPLEFT", TutorialFrameTop, "BOTTOMLEFT", 6, 0); + TutorialFrameRight1:SetPoint("TOPRIGHT", TutorialFrameTop, "BOTTOMRIGHT", -1, 0); + + for i = 1, MAX_TUTORIAL_IMAGES do + local texture = self:CreateTexture("TutorialFrameImage"..i, "ARTWORK"); + end + + for i = 1, MAX_TUTORIAL_KEYS do + local texture = self:CreateTexture("TutorialFrameKey"..i, "ARTWORK"); + texture:SetTexture("Interface\\TutorialFrame\\UI-TUTORIAL-FRAME"); + texture:SetTexCoord(0.1542969, 0.3007813, 0.5898438, 0.7285156); + texture:SetSize(76, 72); + local keyString = self:CreateFontString("TutorialFrameKeyString"..i, "ARTWORK", "GameFontNormalHugeBlack"); + keyString:SetPoint("CENTER", texture, "CENTER", 0, 10); + end + + TutorialFrame_ClearTextures(); +end + function TutorialFrame_OnHide(self) PlaySound("igMainMenuClose"); if ( not TutorialFrameCheckButton:GetChecked() ) then @@ -21,7 +95,118 @@ function TutorialFrame_Update(currentTutorial) TutorialFrameTitle:SetText(title); TutorialFrameText:SetText(text); end --- TutorialFrame:SetHeight(TutorialFrameText:GetHeight() + 62); + + local displayData = DISPLAY_DATA[ TUTORIAL_DATA[currentTutorial] ]; + if ( not displayData ) then + displayData = DISPLAY_DATA["Base"]; + end + + -- setup the frame + TutorialFrame_ClearTextures(); + local anchorData = displayData.anchorData; + TutorialFrame:SetPoint( anchorData.align, UIParent, anchorData.align, anchorData.xOff, anchorData.yOff ); + + local anchorParentLeft = TutorialFrameLeft1; + local anchorParentRight = TutorialFrameRight1; + for i = 2, displayData.tileHeight do + local leftTexture = _G["TutorialFrameLeft"..i]; + local rightTexture = _G["TutorialFrameRight"..i]; + leftTexture:SetPoint("TOPLEFT", anchorParentLeft, "BOTTOMLEFT", 0, 0); + rightTexture:SetPoint("TOPRIGHT", anchorParentRight, "BOTTOMRIGHT", 0, 0); + leftTexture:Show(); + rightTexture:Show(); + anchorParentLeft = leftTexture; + anchorParentRight = rightTexture; + end + TutorialFrameBottom:SetPoint("TOPLEFT", anchorParentLeft, "BOTTOMLEFT", 0, 0); + TutorialFrameBottom:SetPoint("TOPRIGHT", anchorParentRight, "TOPRIGHT", 0, 0); + + local height = TUTORIALFRAME_TOP_HEIGHT + (displayData.tileHeight * TUTORIALFRAME_MIDDLE_HEIGHT) + TUTORIALFRAME_BOTTOM_HEIGHT; + TutorialFrame:SetSize(TUTORIALFRAME_WIDTH, height); + + -- setup the callout + local callOut = displayData.callOut; + if(callOut) then + TutorialFrameCallOut:SetSize(callOut.width, callOut.height); + TutorialFrameCallOut:SetPoint( callOut.align, callOut.parent, callOut.align, callOut.xOff, callOut.yOff ); + TutorialFrameCallOut:Show(); + TutorialFrameCallOutPulser:Play(); + end + + -- setup images + for i = 1, MAX_TUTORIAL_IMAGES do + local imageTexture = _G["TutorialFrameImage"..i]; + local imageData = displayData["imageData"..i]; + if(imageData and imageTexture) then + imageTexture:SetTexture(imageData.file); + imageTexture:SetPoint( imageData.align, TutorialFrame, imageData.align, imageData.xOff, imageData.yOff ); + if ( imageData.layer) then + imageTexture:SetDrawLayer(imageData.layer); + end + imageTexture:Show(); + end + end + + -- setup mouse + local mouseData = displayData.mouseData; + if(mouseData) then + local mouseTexture = _G["TutorialFrameMouse"..mouseData.image]; + mouseTexture:SetPoint( mouseData.align, TutorialFrame, mouseData.align, mouseData.xOff, mouseData.yOff ); + if ( mouseData.layer) then + mouseTexture:SetDrawLayer(mouseData.layer); + end + mouseTexture:Show(); + end + + -- setup keys + for i = 1, MAX_TUTORIAL_KEYS do + local keyTexture = _G["TutorialFrameKey"..i]; + local keyString = _G["TutorialFrameKeyString"..i]; + local keyData = displayData["keyData"..i]; + if(keyTexture and keyString and keyData) then + keyTexture:SetPoint( keyData.align, TutorialFrame, keyData.align, keyData.xOff, keyData.yOff ); + keyString:SetText( GetBindingText(GetBindingKey(keyData.command), "KEY_") ); + if ( keyData.layer) then + keyTexture:SetDrawLayer(keyData.layer); + keyString:SetDrawLayer(keyData.layer); + end + keyTexture:Show(); + keyString:Show(); + end + end + + -- setup arrows + if ( displayData.arrowUp) then + TutorialFrameArrowUp:SetPoint( displayData.arrowUp.align, TutorialFrame, displayData.arrowUp.align, displayData.arrowUp.xOff, displayData.arrowUp.yOff ); + if ( displayData.arrowUp.layer) then + TutorialFrameArrowUp:SetDrawLayer(displayData.arrowUp.layer); + end + TutorialFrameArrowUp:Show(); + end + if ( displayData.arrowDown) then + TutorialFrameArrowDown:SetPoint( displayData.arrowDown.align, TutorialFrame, displayData.arrowDown.align, displayData.arrowDown.xOff, displayData.arrowDown.yOff ); + if ( displayData.arrowDown.layer) then + TutorialFrameArrowDown:SetDrawLayer(displayData.arrowDown.layer); + end + TutorialFrameArrowDown:Show(); + end + if ( displayData.arrowCurveRight) then + TutorialFrameArrowCurveRight:SetPoint( displayData.arrowCurveRight.align, TutorialFrame, displayData.arrowCurveRight.align, displayData.arrowCurveRight.xOff, displayData.arrowCurveRight.yOff ); + if ( displayData.arrowCurveRight.layer) then + TutorialFrameArrowCurveRight:SetDrawLayer(displayData.arrowCurveRight.layer); + end + TutorialFrameArrowCurveRight:Show(); + end + if ( displayData.arrowCurveLeft) then + TutorialFrameArrowCurveLeft:SetPoint( displayData.arrowCurveLeft.align, TutorialFrame, displayData.arrowCurveLeft.align, displayData.arrowCurveLeft.xOff, displayData.arrowCurveLeft.yOff ); + if ( displayData.arrowCurveLeft.layer) then + TutorialFrameArrowCurveLeft:SetDrawLayer(displayData.arrowCurveLeft.layer); + end + TutorialFrameArrowCurveLeft:Show(); + end + + -- show + TutorialFrame:Show(); -- Remove the tutorial from the queue for index, value in pairs(TUTORIALFRAME_QUEUE) do @@ -31,9 +216,59 @@ function TutorialFrame_Update(currentTutorial) end end +function TutorialFrame_ClearTextures() + TutorialFrame:Hide(); + TutorialFrame:ClearAllPoints(); + TutorialFrameBottom:ClearAllPoints(); + + TutorialFrameCallOutPulser:Stop(); + TutorialFrameCallOut:ClearAllPoints(); + TutorialFrameCallOut:Hide(); + + TutorialFrameMouseRightClick:ClearAllPoints(); + TutorialFrameMouseLeftClick:ClearAllPoints(); + TutorialFrameMouseBothClick:ClearAllPoints(); + TutorialFrameMouseWheel:ClearAllPoints(); + TutorialFrameMouseRightClick:Hide(); + TutorialFrameMouseLeftClick:Hide(); + TutorialFrameMouseBothClick:Hide(); + TutorialFrameMouseWheel:Hide(); + + TutorialFrameArrowUp:ClearAllPoints(); + TutorialFrameArrowDown:ClearAllPoints(); + TutorialFrameArrowCurveRight:ClearAllPoints(); + TutorialFrameArrowCurveLeft:ClearAllPoints(); + TutorialFrameArrowUp:Hide(); + TutorialFrameArrowDown:Hide(); + TutorialFrameArrowCurveRight:Hide(); + TutorialFrameArrowCurveLeft:Hide(); + + -- top & left1 & right1 never have thier anchors changed; or are independantly hidden + for i = 2, MAX_TUTORIAL_VERTICAL_TILE do + local leftTexture = _G["TutorialFrameLeft"..i]; + local rightTexture = _G["TutorialFrameRight"..i]; + leftTexture:ClearAllPoints(); + rightTexture:ClearAllPoints(); + leftTexture:Hide(); + rightTexture:Hide(); + end + + for i = 1, MAX_TUTORIAL_IMAGES do + local imageTexture = _G["TutorialFrameImage"..i]; + imageTexture:ClearAllPoints(); + imageTexture:Hide(); + end + + for i = 1, MAX_TUTORIAL_KEYS do + local keyTexture = _G["TutorialFrameKey"..i]; + keyTexture:ClearAllPoints(); + keyTexture:Hide(); + _G["TutorialFrameKeyString"..i]:Hide(); + end +end + function TutorialFrame_NewTutorial(tutorialID) if ( not TutorialFrame:IsShown() ) then - TutorialFrame:Show(); TutorialFrame_Update(tutorialID); return; else @@ -49,9 +284,14 @@ function TutorialFrame_NewTutorial(tutorialID) end function TutorialFrame_AlertButton_OnClick(id) - TutorialFrame:Show(); TutorialFrame_Update(id); if ( getn(TUTORIALFRAME_QUEUE) <= 0 ) then TutorialFrameAlertButton:Hide(); end +end + +function TutorialFrame_CheckIntro() + if ( getn(TUTORIALFRAME_QUEUE) > 0 ) then + TutorialFrame_AlertButton_OnClick( TUTORIALFRAME_QUEUE[1] ); + end end \ No newline at end of file diff --git a/FrameXML/TutorialFrame.xml b/FrameXML/TutorialFrame.xml index 952a8438..6ff8a34b 100644 --- a/FrameXML/TutorialFrame.xml +++ b/FrameXML/TutorialFrame.xml @@ -2,103 +2,120 @@ ..\FrameXML\UI.xsd">