/
## Interface: 40300 |
## Title: QuestGuru |
## Notes: Quest Log Enhancement |
## Author: MrOBrian/Gregity |
## Version: 2.2.5-40300 |
## SavedVariables: QuestGuru_Items, QuestGuru_Settings |
## SavedVariablesPerCharacter: |
ChatThrottleLib.lua |
localization.lua |
localization.DE.lua |
localization.FR.lua |
localization.RU.lua |
localization.TW.lua |
QuestGuruComm.lua |
QuestGuru_Templates.xml |
QuestGuru.xml |
QuestGuruOptions.lua |
QuestGuruAnnounce.lua |
------------------------------------ |
-- QuestGuru English Localization -- |
------------------------------------ |
QG_REP_GAIN = "Reputation with (.*) increased by ([%d]+)."; |
QG_REP_DEC = "Reputation with (.*) decreased by ([%d]+)."; |
QG_XP_GAIN = "You gain ([%d]+) experience."; |
QG_QUEST_COMPLETE = "Quest Complete!"; |
-- Default filler words used in various places |
QG_UNKNOWN = "Unknown"; |
QG_NONE = "None"; |
-- Right click menu strings for Quest Log and Tracker |
QG_TRACK = "Track"; |
QG_UNTRACK = "Untrack"; |
QG_SHARE_QUEST = "Share Quest"; |
QG_ABANDON_QUEST = "Abandon Quest"; |
QG_DELETE_QUEST = "Delete Quest"; |
-- User Interface Elements |
QG_EXPAND_HEADERS = "Expand/Collapse all headers"; |
QG_OPTIONS = "Options"; |
QG_SEARCH = "Search: "; |
-- History strings |
QG_HISTORY_NONE = "No Quest History"; |
QG_SHOWHISTORY = "History"; |
QG_COLLEVEL = "Level"; |
QG_COLTITLE = "Title"; |
QG_COLSTATUS = "Status"; |
QG_COLSTART = "Started by"; |
QG_ACTIVE = "Active"; |
-- Announcer |
QG_OPT_ANNOUNCE_HEAD = "QuestGuru Announcer Options"; |
QG_OPT_ANNOUNCE_DESC = "Use these options to announce your quest progress to others.\nChanges to these settings are saved when you click Okay."; |
QG_OPT_ANNOUNCE_PROGRESS = "Announce Quest Progress"; |
QG_OPT_ANNOUNCE_CHANNEL_HEAD = "Channels:"; |
QG_OPT_ANNOUNCE_CHANNEL_SAY = "/s"; |
QG_OPT_ANNOUNCE_CHANNEL_SAY_DESC = "Make announcements in Say"; |
QG_OPT_ANNOUNCE_CHANNEL_PARTY = "/p"; |
QG_OPT_ANNOUNCE_CHANNEL_PARTY_DESC = "Make announcements to your Party"; |
QG_OPT_ANNOUNCE_CHANNEL_GUILD = "/g"; |
QG_OPT_ANNOUNCE_CHANNEL_GUILD_DESC = "Make announcements to your Guild"; |
QG_OPT_ANNOUNCE_CHANNEL_WHISPER = "/w"; |
QG_OPT_ANNOUNCE_CHANNEL_WHISPER_DESC = "Whisper your announcements to someone"; |
QG_OPT_ANNOUNCE_CHANNEL_WHISPER_TO = "to:"; |
QG_OPT_ANNOUNCE_ECHO = "Echo"; |
QG_OPT_ANNOUNCE_ECHO_DESC = "Display announcements in your General chat window."; |
QG_OPT_ANNOUNCE_MESSAGES = "Messages:"; |
QG_OPT_ANNOUNCE_HELP_DONE = "Number of items collected or monsters killed"; |
QG_OPT_ANNOUNCE_HELP_NEEDED = "Total number of items or monsters needed"; |
QG_OPT_ANNOUNCE_HELP_NUMLEFT = "Number of items or monsters remaining"; |
QG_OPT_ANNOUNCE_HELP_NAME = "Objective text without #/#"; |
QG_OPT_ANNOUNCE_HELP_TITLE = "Name of the quest for this objective"; |
QG_OPT_ANNOUNCE_HELP_UITEXT = "The text that showed up onscreen"; |
QG_OPT_ANNOUNCE_HELP_COMPLETE = "Localized complete message: \""..COMPLETE.."\""; |
QG_OPT_ANNOUNCE_HELP_QLINK = "The quest link of the affected quest"; |
QG_OPT_ANNOUNCE_ITEM_MSG = "Announce item objective progress using message:"; |
QG_OPT_ANNOUNCE_MOB_MSG = "Announce monster objective progress using message:"; |
QG_OPT_ANNOUNCE_EVENT_MSG = "Announce event objective progress using message:"; |
QG_OPT_ANNOUNCE_COMPLETE_MSG = "Announce quest completion using message:"; |
QG_OPT_ANNOUNCE_QUESTACCEPT_MSG = "Announce when you Accept a new Quest"; |
QG_ANNOUNCE_ITEM_DEFAULT = "Collected $done $name of $needed needed for $questTitle"; |
QG_ANNOUNCE_MOB_DEFAULT = "$done $name of $needed needed for $questTitle"; |
QG_ANNOUNCE_QUESTACCEPT_DEFAULT = "Started quest $qlink"; |
QG_ANNOUNCE_RESET = "Resetting Announcer settings to defaults."; |
-- Options |
QG_OPT_OPTIONS_DESC = "These options change general settings for QuestGuru.\nChanges to these settings are saved immediately."; |
QG_OPT_LEVELS_HEAD = "Show Levels"; |
QG_OPT_LEVELS_QUESTLOG = "In Quest Log"; |
QG_OPT_LEVELS_HISTORY = "In History Log"; |
QG_OPT_LEVELS_ABANDON = "In Abandon Log"; |
QG_OPT_AUTOCOMPLETE = "AutoComplete Quests"; |
QG_OPT_OBJ_ICON = "Show objective item icons in log"; |
QG_OPT_HEADER_QUEST_NUM = "Show number of quests in headers"; |
QG_OPT_DISABLE_COMM = "Disable all addon-to-addon communications"; |
QG_OPT_SOUND_HEAD = "Sound Options"; |
QG_OPT_SOUND_DESC = "Use this panel to change the sounds played on quest progress.\nChanges to these settings are saved immediately."; |
QG_OPT_SOUND_ENABLE = "Enable additional sounds"; |
QG_OPT_SOUND_OBJ = "Play sound on objective progress:"; |
QG_OPT_SOUND_OBJ_DONE = "Play sound on objective completion:"; |
QG_SOUND_QUEST_DONE = "Play sound on quest completion:"; |
-- Other strings that may or may not need localizing |
QG_ITEM_REQ_STR = "(.*):%s*([%d]+)%s*/%s*([%d]+)"; -- The format of the line when an item is required for a quest, an invalid format can cause many errors |
do |
local temp, i; |
QuestGuru_AnnounceFrame = CreateFrame("FRAME", "QuestGuru_AnnounceFrame", QuestGuru_OptionsFrame); |
QuestGuru_AnnounceFrame.name = "QG Announcer"; |
QuestGuru_AnnounceFrame.parent = "QuestGuru"; |
QuestGuru_AnnounceFrame.default = function () QuestGuru_SetAnnounceDefaults(); end; |
QuestGuru_AnnounceFrame.okay = function () QuestGuru_SaveAnnounceSettings(); end; |
QuestGuru_AnnounceFrame.cancel = function () QuestGuru_CancelAnnounceChanges(); end; |
InterfaceOptions_AddCategory(QuestGuru_AnnounceFrame); |
QuestGuru_OptionsFrameAnnounceTitle = QuestGuru_AnnounceFrame:CreateFontString("QuestGuru_OptionsFrameAnnounceTitle", "ARTWORK", "GameFontNormalLarge"); |
QuestGuru_OptionsFrameAnnounceTitle:SetPoint("TOPLEFT", 16, -16); |
QuestGuru_OptionsFrameAnnounceTitle:SetJustifyH("LEFT"); |
QuestGuru_OptionsFrameAnnounceTitle:SetJustifyV("TOP"); |
QuestGuru_OptionsFrameAnnounceTitle:SetText(QG_OPT_ANNOUNCE_HEAD); |
QuestGuru_OptionsFrameAnnounceSubText = QuestGuru_AnnounceFrame:CreateFontString("QuestGuru_OptionsFrameAnnounceSubText", "ARTWORK", "GameFontHighlightSmall"); |
QuestGuru_OptionsFrameAnnounceSubText:SetPoint("TOPLEFT", "QuestGuru_OptionsFrameAnnounceTitle", "BOTTOMLEFT", 0, -8); |
QuestGuru_OptionsFrameAnnounceSubText:SetPoint("RIGHT", -32, 0); |
QuestGuru_OptionsFrameAnnounceSubText:SetJustifyH("LEFT"); |
QuestGuru_OptionsFrameAnnounceSubText:SetJustifyV("TOP"); |
QuestGuru_OptionsFrameAnnounceSubText:SetHeight(24); |
QuestGuru_OptionsFrameAnnounceSubText:SetText(QG_OPT_ANNOUNCE_DESC); |
QuestGuru_AnnounceFrameAnnounceToggle = CreateFrame("CheckButton", "QuestGuru_AnnounceFrameAnnounceToggle", QuestGuru_AnnounceFrame, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_AnnounceFrameAnnounceToggle:SetPoint("TOPLEFT", "QuestGuru_OptionsFrameAnnounceSubText", "BOTTOMLEFT", -2, -8); |
QuestGuru_AnnounceFrameAnnounceToggleText:SetText(QG_OPT_ANNOUNCE_PROGRESS); |
temp = QuestGuru_AnnounceFrame:CreateFontString("QuestGuru_AnnounceFrameChannelsLabel", "ARTWORK", "GameFontNormal"); |
temp:SetText(QG_OPT_ANNOUNCE_CHANNEL_HEAD); |
temp:SetPoint("TOPLEFT", "QuestGuru_AnnounceFrameAnnounceToggle", "BOTTOMLEFT", 0, -6); |
QuestGuru_AnnounceFrameChannelSayToggle = CreateFrame("CheckButton", "QuestGuru_AnnounceFrameChannelSayToggle", QuestGuru_AnnounceFrame, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_AnnounceFrameChannelSayToggle:SetPoint("TOPLEFT", "QuestGuru_AnnounceFrameChannelsLabel", "BOTTOMLEFT", 0, -2); |
QuestGuru_AnnounceFrameChannelSayToggleText:SetText(QG_OPT_ANNOUNCE_CHANNEL_SAY); |
QuestGuru_AnnounceFrameChannelSayToggle.tooltipText = QG_OPT_ANNOUNCE_CHANNEL_SAY_DESC; |
QuestGuru_AnnounceFrameChannelPartyToggle = CreateFrame("CheckButton", "QuestGuru_AnnounceFrameChannelPartyToggle", QuestGuru_AnnounceFrame, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_AnnounceFrameChannelPartyToggle:SetPoint("LEFT", "QuestGuru_AnnounceFrameChannelSayToggle", "RIGHT", 24, 0); |
QuestGuru_AnnounceFrameChannelPartyToggleText:SetText(QG_OPT_ANNOUNCE_CHANNEL_PARTY); |
QuestGuru_AnnounceFrameChannelPartyToggle.tooltipText = QG_OPT_ANNOUNCE_CHANNEL_PARTY_DESC; |
QuestGuru_AnnounceFrameChannelGuildToggle = CreateFrame("CheckButton", "QuestGuru_AnnounceFrameChannelGuildToggle", QuestGuru_AnnounceFrame, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_AnnounceFrameChannelGuildToggle:SetPoint("LEFT", "QuestGuru_AnnounceFrameChannelPartyToggle", "RIGHT", 24, 0); |
QuestGuru_AnnounceFrameChannelGuildToggleText:SetText(QG_OPT_ANNOUNCE_CHANNEL_GUILD); |
QuestGuru_AnnounceFrameChannelGuildToggle.tooltipText = QG_OPT_ANNOUNCE_CHANNEL_GUILD_DESC; |
QuestGuru_AnnounceFrameChannelWhisperToggle = CreateFrame("CheckButton", "QuestGuru_AnnounceFrameChannelWhisperToggle", QuestGuru_AnnounceFrame, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_AnnounceFrameChannelWhisperToggle:SetPoint("LEFT", "QuestGuru_AnnounceFrameChannelGuildToggle", "RIGHT", 24, 0); |
QuestGuru_AnnounceFrameChannelWhisperToggleText:SetText(QG_OPT_ANNOUNCE_CHANNEL_WHISPER); |
QuestGuru_AnnounceFrameChannelWhisperToggle.tooltipText = QG_OPT_ANNOUNCE_CHANNEL_WHISPER_DESC; |
temp = QuestGuru_AnnounceFrame:CreateFontString("QuestGuru_AnnounceFrameChannelWhisperToText", "ARTWORK", "GameFontNormal"); |
temp:SetText(QG_OPT_ANNOUNCE_CHANNEL_WHISPER_TO); |
temp:SetPoint("LEFT", "QuestGuru_AnnounceFrameChannelWhisperToggle", "RIGHT", 24, 0); |
QuestGuru_AnnounceFrameChannelWhisperTo = CreateFrame("EditBox", "QuestGuru_AnnounceFrameChannelWhisperTo", QuestGuru_AnnounceFrame, "InputBoxTemplate"); |
QuestGuru_AnnounceFrameChannelWhisperTo:SetPoint("LEFT", "QuestGuru_AnnounceFrameChannelWhisperToText", "RIGHT", 8, 0); |
QuestGuru_AnnounceFrameChannelWhisperTo:SetHeight(20); |
QuestGuru_AnnounceFrameChannelWhisperTo:SetWidth(72); |
QuestGuru_AnnounceFrameChannelWhisperTo:SetAutoFocus(false); |
QuestGuru_AnnounceFrameChannelWhisperTo:SetScript("OnShow", |
function () |
QuestGuru_AnnounceFrameChannelWhisperTo:SetCursorPosition(1); |
end); |
QuestGuru_AnnounceFrameChannelWhisperTo:SetScript("OnEscapePressed", |
function (self) |
self:ClearFocus(); |
end); |
QuestGuru_AnnounceFrameChannelEchoToggle = CreateFrame("CheckButton", "QuestGuru_AnnounceFrameChannelEchoToggle", QuestGuru_AnnounceFrame, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_AnnounceFrameChannelEchoToggle:SetPoint("LEFT", "QuestGuru_AnnounceFrameChannelWhisperTo", "RIGHT", 24, 2); |
QuestGuru_AnnounceFrameChannelEchoToggleText:SetText(QG_OPT_ANNOUNCE_ECHO); |
QuestGuru_AnnounceFrameChannelEchoToggle.tooltipText = QG_OPT_ANNOUNCE_ECHO_DESC; |
temp = QuestGuru_AnnounceFrame:CreateFontString("QuestGuru_AnnounceFrameMessageLabel", "ARTWORK", "GameFontNormal"); |
temp:SetText(QG_OPT_ANNOUNCE_MESSAGES); |
temp:SetPoint("TOPLEFT", "QuestGuru_AnnounceFrameChannelSayToggle", "BOTTOMLEFT", 0, -8); |
QuestGuru_AnnounceFrameMessageHelpButton = CreateFrame("BUTTON", "QuestGuru_AnnounceFrameMessageHelpButton", QuestGuru_AnnounceFrame, "UIPanelButtonTemplate"); |
QuestGuru_AnnounceFrameMessageHelpButton:SetHeight(24); |
QuestGuru_AnnounceFrameMessageHelpButton:SetWidth(24); |
QuestGuru_AnnounceFrameMessageHelpButton:SetText("?"); |
QuestGuru_AnnounceFrameMessageHelpButton:SetPoint("TOP", "QuestGuru_AnnounceFrameChannelSayToggle", "BOTTOM", 0, -24); |
QuestGuru_AnnounceFrameMessageHelpButton:SetPoint("RIGHT", -8, 0); |
QuestGuru_AnnounceFrameMessageHelpButton:SetScript("OnEnter", |
function (self) |
GameTooltip:SetOwner(self, "ANCHOR_RIGHT"); |
GameTooltip:ClearLines(); |
GameTooltip:AddLine("Announce Message Variables"); |
GameTooltip:AddDoubleLine("$done",QG_OPT_ANNOUNCE_HELP_DONE); |
GameTooltip:AddDoubleLine("$needed",QG_OPT_ANNOUNCE_HELP_NEEDED); |
GameTooltip:AddDoubleLine("$numleft",QG_OPT_ANNOUNCE_HELP_NUMLEFT); |
GameTooltip:AddDoubleLine("$name",QG_OPT_ANNOUNCE_HELP_NAME); |
GameTooltip:AddDoubleLine("$questTitle",QG_OPT_ANNOUNCE_HELP_TITLE); |
GameTooltip:AddDoubleLine("$uitext",QG_OPT_ANNOUNCE_HELP_UITEXT); |
GameTooltip:AddDoubleLine("$complete",QG_OPT_ANNOUNCE_HELP_COMPLETE); |
GameTooltip:AddDoubleLine("$qlink",QG_OPT_ANNOUNCE_HELP_QLINK); |
GameTooltip:Show(); |
end); |
QuestGuru_AnnounceFrameMessageHelpButton:SetScript("OnLeave", |
function () |
GameTooltip:Hide(); |
end); |
QuestGuru_AnnounceFrameMessageItemToggle = CreateFrame("CheckButton", "QuestGuru_AnnounceFrameMessageItemToggle", QuestGuru_AnnounceFrame, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_AnnounceFrameMessageItemToggle:SetPoint("TOPLEFT", "QuestGuru_AnnounceFrameMessageLabel", "BOTTOMLEFT", 0, -2); |
QuestGuru_AnnounceFrameMessageItemToggleText:SetText(QG_OPT_ANNOUNCE_ITEM_MSG); |
QuestGuru_AnnounceFrameMessageItem = CreateFrame("EditBox", "QuestGuru_AnnounceFrameMessageItem", QuestGuru_AnnounceFrame, "InputBoxTemplate"); |
QuestGuru_AnnounceFrameMessageItem:SetPoint("TOPLEFT", "QuestGuru_AnnounceFrameMessageItemToggle", "BOTTOMLEFT", 2, 0); |
QuestGuru_AnnounceFrameMessageItem:SetHeight(20); |
QuestGuru_AnnounceFrameMessageItem:SetWidth(352); |
QuestGuru_AnnounceFrameMessageItem:SetAutoFocus(false); |
QuestGuru_AnnounceFrameMessageItem:SetScript("OnShow", |
function () |
QuestGuru_AnnounceFrameMessageItem:SetCursorPosition(1); |
end); |
QuestGuru_AnnounceFrameMessageItem:SetScript("OnEscapePressed", |
function (self) |
self:ClearFocus(); |
end); |
QuestGuru_AnnounceFrameMessageMonsterToggle = CreateFrame("CheckButton", "QuestGuru_AnnounceFrameMessageMonsterToggle", QuestGuru_AnnounceFrame, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_AnnounceFrameMessageMonsterToggle:SetPoint("TOPLEFT", "QuestGuru_AnnounceFrameMessageItem", "BOTTOMLEFT", -2, -6); |
QuestGuru_AnnounceFrameMessageMonsterToggleText:SetText(QG_OPT_ANNOUNCE_MOB_MSG); |
QuestGuru_AnnounceFrameMessageMonster = CreateFrame("EditBox", "QuestGuru_AnnounceFrameMessageMonster", QuestGuru_AnnounceFrame, "InputBoxTemplate"); |
QuestGuru_AnnounceFrameMessageMonster:SetPoint("TOPLEFT", "QuestGuru_AnnounceFrameMessageMonsterToggle", "BOTTOMLEFT", 2, 0); |
QuestGuru_AnnounceFrameMessageMonster:SetHeight(20); |
QuestGuru_AnnounceFrameMessageMonster:SetWidth(352); |
QuestGuru_AnnounceFrameMessageMonster:SetAutoFocus(false); |
QuestGuru_AnnounceFrameMessageMonster:SetScript("OnShow", |
function () |
QuestGuru_AnnounceFrameMessageMonster:SetCursorPosition(1); |
end); |
QuestGuru_AnnounceFrameMessageMonster:SetScript("OnEscapePressed", |
function (self) |
self:ClearFocus(); |
end); |
QuestGuru_AnnounceFrameMessageEventToggle = CreateFrame("CheckButton", "QuestGuru_AnnounceFrameMessageEventToggle", QuestGuru_AnnounceFrame, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_AnnounceFrameMessageEventToggle:SetPoint("TOPLEFT", "QuestGuru_AnnounceFrameMessageMonster", "BOTTOMLEFT", -2, -6); |
QuestGuru_AnnounceFrameMessageEventToggleText:SetText(QG_OPT_ANNOUNCE_EVENT_MSG); |
QuestGuru_AnnounceFrameMessageEvent = CreateFrame("EditBox", "QuestGuru_AnnounceFrameMessageEvent", QuestGuru_AnnounceFrame, "InputBoxTemplate"); |
QuestGuru_AnnounceFrameMessageEvent:SetPoint("TOPLEFT", "QuestGuru_AnnounceFrameMessageEventToggle", "BOTTOMLEFT", 2, 0); |
QuestGuru_AnnounceFrameMessageEvent:SetHeight(20); |
QuestGuru_AnnounceFrameMessageEvent:SetWidth(352); |
QuestGuru_AnnounceFrameMessageEvent:SetAutoFocus(false); |
QuestGuru_AnnounceFrameMessageEvent:SetScript("OnShow", |
function () |
QuestGuru_AnnounceFrameMessageEvent:SetCursorPosition(1); |
end); |
QuestGuru_AnnounceFrameMessageEvent:SetScript("OnEscapePressed", |
function (self) |
self:ClearFocus(); |
end); |
QuestGuru_AnnounceFrameMessageQuestToggle = CreateFrame("CheckButton", "QuestGuru_AnnounceFrameMessageQuestToggle", QuestGuru_AnnounceFrame, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_AnnounceFrameMessageQuestToggle:SetPoint("TOPLEFT", "QuestGuru_AnnounceFrameMessageEvent", "BOTTOMLEFT", -2, -6); |
QuestGuru_AnnounceFrameMessageQuestToggleText:SetText(QG_OPT_ANNOUNCE_COMPLETE_MSG); |
QuestGuru_AnnounceFrameMessageQuest = CreateFrame("EditBox", "QuestGuru_AnnounceFrameMessageQuest", QuestGuru_AnnounceFrame, "InputBoxTemplate"); |
QuestGuru_AnnounceFrameMessageQuest:SetPoint("TOPLEFT", "QuestGuru_AnnounceFrameMessageQuestToggle", "BOTTOMLEFT", 2, 0); |
QuestGuru_AnnounceFrameMessageQuest:SetHeight(20); |
QuestGuru_AnnounceFrameMessageQuest:SetWidth(352); |
QuestGuru_AnnounceFrameMessageQuest:SetAutoFocus(false); |
QuestGuru_AnnounceFrameMessageQuest:SetScript("OnShow", |
function () |
QuestGuru_AnnounceFrameMessageQuest:SetCursorPosition(1); |
end); |
QuestGuru_AnnounceFrameMessageQuest:SetScript("OnEscapePressed", |
function (self) |
self:ClearFocus(); |
end); |
QuestGuru_AnnounceFrameMessageQuestAcceptToggle = CreateFrame("CheckButton", "QuestGuru_AnnounceFrameMessageQuestAcceptToggle", QuestGuru_AnnounceFrame, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_AnnounceFrameMessageQuestAcceptToggle:SetPoint("TOPLEFT", "QuestGuru_AnnounceFrameMessageQuest", "BOTTOMLEFT", -2, -6); |
QuestGuru_AnnounceFrameMessageQuestAcceptToggleText:SetText(QG_OPT_ANNOUNCE_QUESTACCEPT_MSG); |
QuestGuru_AnnounceFrameMessageQuestAccept = CreateFrame("EditBox", "QuestGuru_AnnounceFrameMessageQuestAccept", QuestGuru_AnnounceFrame, "InputBoxTemplate"); |
QuestGuru_AnnounceFrameMessageQuestAccept:SetPoint("TOPLEFT", "QuestGuru_AnnounceFrameMessageQuestAcceptToggle", "BOTTOMLEFT", 2, 0); |
QuestGuru_AnnounceFrameMessageQuestAccept:SetHeight(20); |
QuestGuru_AnnounceFrameMessageQuestAccept:SetWidth(352); |
QuestGuru_AnnounceFrameMessageQuestAccept:SetAutoFocus(false); |
QuestGuru_AnnounceFrameMessageQuestAccept:SetScript("OnShow", |
function () |
QuestGuru_AnnounceFrameMessageQuestAccept:SetCursorPosition(1); |
end); |
QuestGuru_AnnounceFrameMessageQuestAccept:SetScript("OnEscapePressed", |
function (self) |
self:ClearFocus(); |
end); |
end |
function QuestGuru_QuestAnnounceLoadSettings() |
if (QuestGuru_Settings.Announce == nil) then |
QuestGuru_Settings.Announce={}; |
end |
if (QuestGuru_Settings.Announce.Enabled ~= true) then |
QuestGuru_Settings.Announce.Enabled = false; |
end |
QuestGuru_AnnounceFrameAnnounceToggle:SetChecked(QuestGuru_Settings.Announce.Enabled); |
if (QuestGuru_Settings.Announce.item == nil) then |
QuestGuru_Settings.Announce.item = {}; |
end |
if (QuestGuru_Settings.Announce.item.Enabled ~= false) then |
QuestGuru_Settings.Announce.item.Enabled = true; |
end |
QuestGuru_AnnounceFrameMessageItemToggle:SetChecked(QuestGuru_Settings.Announce.item.Enabled); |
if (QuestGuru_Settings.Announce.item.Text == nil) then |
QuestGuru_Settings.Announce.item.Text = QG_ANNOUNCE_ITEM_DEFAULT; |
end |
QuestGuru_AnnounceFrameMessageItem:SetText(QuestGuru_Settings.Announce.item.Text); |
if (QuestGuru_Settings.Announce.monster == nil) then |
QuestGuru_Settings.Announce.monster = {}; |
end |
if (QuestGuru_Settings.Announce.monster.Enabled ~= false) then |
QuestGuru_Settings.Announce.monster.Enabled = true; |
end |
QuestGuru_AnnounceFrameMessageMonsterToggle:SetChecked(QuestGuru_Settings.Announce.monster.Enabled); |
if (QuestGuru_Settings.Announce.monster.Text == nil) then |
QuestGuru_Settings.Announce.monster.Text = QG_ANNOUNCE_MOB_DEFAULT; |
end |
QuestGuru_AnnounceFrameMessageMonster:SetText(QuestGuru_Settings.Announce.monster.Text); |
if (QuestGuru_Settings.Announce.QuestAccept == nil) then |
QuestGuru_Settings.Announce.QuestAccept = {}; |
end |
if (QuestGuru_Settings.Announce.QuestAccept.Enabled ~= false) then |
QuestGuru_Settings.Announce.QuestAccept.Enabled = true; |
end |
QuestGuru_AnnounceFrameMessageQuestAcceptToggle:SetChecked(QuestGuru_Settings.Announce.QuestAccept.Enabled); |
if (QuestGuru_Settings.Announce.QuestAccept.Text == nil) then |
QuestGuru_Settings.Announce.QuestAccept.Text = QG_ANNOUNCE_QUESTACCEPT_DEFAULT; |
end |
QuestGuru_AnnounceFrameMessageQuestAccept:SetText(QuestGuru_Settings.Announce.QuestAccept.Text); |
if (QuestGuru_Settings.Announce.event == nil) then |
QuestGuru_Settings.Announce.event = {}; |
end |
if (QuestGuru_Settings.Announce.event.Enabled ~= false) then |
QuestGuru_Settings.Announce.event.Enabled = true; |
end |
QuestGuru_AnnounceFrameMessageEventToggle:SetChecked(QuestGuru_Settings.Announce.event.Enabled); |
if (QuestGuru_Settings.Announce.event.Text == nil) then |
QuestGuru_Settings.Announce.event.Text = "$uitext"; |
end |
QuestGuru_AnnounceFrameMessageEvent:SetText(QuestGuru_Settings.Announce.event.Text); |
if (QuestGuru_Settings.Announce.Quest == nil) then |
QuestGuru_Settings.Announce.Quest = {}; |
end |
if (QuestGuru_Settings.Announce.Quest.Enabled ~= false) then |
QuestGuru_Settings.Announce.Quest.Enabled = true; |
end |
QuestGuru_AnnounceFrameMessageQuestToggle:SetChecked(QuestGuru_Settings.Announce.Quest.Enabled); |
if (QuestGuru_Settings.Announce.Quest.Text == nil) then |
QuestGuru_Settings.Announce.Quest.Text = "$qlink $complete!"; |
end |
QuestGuru_AnnounceFrameMessageQuest:SetText(QuestGuru_Settings.Announce.Quest.Text); |
if (QuestGuru_Settings.Announce.say ~= true) then |
QuestGuru_Settings.Announce.say = false; |
end |
QuestGuru_AnnounceFrameChannelSayToggle:SetChecked(QuestGuru_Settings.Announce.say); |
if (QuestGuru_Settings.Announce.party ~= false) then |
QuestGuru_Settings.Announce.party = true; |
end |
QuestGuru_AnnounceFrameChannelPartyToggle:SetChecked(QuestGuru_Settings.Announce.party); |
if (QuestGuru_Settings.Announce.guild ~= true) then |
QuestGuru_Settings.Announce.guild = false; |
end |
QuestGuru_AnnounceFrameChannelGuildToggle:SetChecked(QuestGuru_Settings.Announce.guild); |
if (QuestGuru_Settings.Announce.whisper == nil) then |
QuestGuru_Settings.Announce.whisper = {}; |
end |
if (QuestGuru_Settings.Announce.whisper.Enabled ~= true) then |
QuestGuru_Settings.Announce.whisper.Enabled = false; |
end |
QuestGuru_AnnounceFrameChannelWhisperToggle:SetChecked(QuestGuru_Settings.Announce.whisper.Enabled); |
if (QuestGuru_Settings.Announce.whisper.To == nil) then |
QuestGuru_Settings.Announce.whisper.To = ""; |
end |
QuestGuru_AnnounceFrameChannelWhisperTo:SetText(QuestGuru_Settings.Announce.whisper.To); |
if (QuestGuru_Settings.Announce.Echo ~= true) then |
QuestGuru_Settings.Announce.Echo = false; |
end |
QuestGuru_AnnounceFrameChannelEchoToggle:SetChecked(QuestGuru_Settings.Announce.Echo); |
end |
function QuestGuru_SetAnnounceDefaults() |
QuestGuru_Echo(QG_ANNOUNCE_RESET); |
QuestGuru_Settings.Announce.Enabled = false; |
QuestGuru_AnnounceFrameAnnounceToggle:SetChecked(QuestGuru_Settings.Announce.Enabled); |
QuestGuru_Settings.Announce.item = {}; |
QuestGuru_Settings.Announce.item.Enabled = true; |
QuestGuru_AnnounceFrameMessageItemToggle:SetChecked(QuestGuru_Settings.Announce.item.Enabled); |
QuestGuru_Settings.Announce.item.Text = QG_ANNOUNCE_ITEM_DEFAULT; |
QuestGuru_AnnounceFrameMessageItem:SetText(QuestGuru_Settings.Announce.item.Text); |
QuestGuru_Settings.Announce.monster = {}; |
QuestGuru_Settings.Announce.monster.Enabled = true; |
QuestGuru_AnnounceFrameMessageMonsterToggle:SetChecked(QuestGuru_Settings.Announce.monster.Enabled); |
QuestGuru_Settings.Announce.monster.Text = QG_ANNOUNCE_MOB_DEFAULT; |
QuestGuru_AnnounceFrameMessageMonster:SetText(QuestGuru_Settings.Announce.monster.Text); |
QuestGuru_Settings.Announce.QuestAccept = {}; |
QuestGuru_Settings.Announce.QuestAccept.Enabled = true; |
QuestGuru_AnnounceFrameMessageQuestAcceptToggle:SetChecked(QuestGuru_Settings.Announce.QuestAccept.Enabled); |
QuestGuru_Settings.Announce.QuestAccept.Text = QG_ANNOUNCE_QUESTACCEPT_DEFAULT; |
QuestGuru_AnnounceFrameMessageQuestAccept:SetText(QuestGuru_Settings.Announce.QuestAccept.Text); |
QuestGuru_Settings.Announce.event = {}; |
QuestGuru_Settings.Announce.event.Enabled = true; |
QuestGuru_AnnounceFrameMessageEventToggle:SetChecked(QuestGuru_Settings.Announce.event.Enabled); |
QuestGuru_Settings.Announce.event.Text = "$uitext"; |
QuestGuru_AnnounceFrameMessageEvent:SetText(QuestGuru_Settings.Announce.event.Text); |
QuestGuru_Settings.Announce.Quest = {}; |
QuestGuru_Settings.Announce.Quest.Enabled = true; |
QuestGuru_AnnounceFrameMessageQuestToggle:SetChecked(QuestGuru_Settings.Announce.Quest.Enabled); |
QuestGuru_Settings.Announce.Quest.Text = "$qlink $complete!"; |
QuestGuru_AnnounceFrameMessageQuest:SetText(QuestGuru_Settings.Announce.Quest.Text); |
QuestGuru_Settings.Announce.say = false; |
QuestGuru_AnnounceFrameChannelSayToggle:SetChecked(QuestGuru_Settings.Announce.say); |
QuestGuru_Settings.Announce.party = true; |
QuestGuru_AnnounceFrameChannelPartyToggle:SetChecked(QuestGuru_Settings.Announce.party); |
QuestGuru_Settings.Announce.guild = false; |
QuestGuru_AnnounceFrameChannelGuildToggle:SetChecked(QuestGuru_Settings.Announce.guild); |
QuestGuru_Settings.Announce.whisper = {}; |
QuestGuru_Settings.Announce.whisper.Enabled = false; |
QuestGuru_AnnounceFrameChannelWhisperToggle:SetChecked(QuestGuru_Settings.Announce.whisper.Enabled); |
QuestGuru_Settings.Announce.whisper.To = ""; |
QuestGuru_AnnounceFrameChannelWhisperTo:SetText(QuestGuru_Settings.Announce.whisper.To); |
QuestGuru_Settings.Announce.Echo = false; |
QuestGuru_AnnounceFrameChannelEchoToggle:SetChecked(QuestGuru_Settings.Announce.Echo); |
end |
function QuestGuru_SaveAnnounceSettings() |
if (QuestGuru_AnnounceFrameAnnounceToggle:GetChecked()) then |
QuestGuru_Settings.Announce.Enabled = true; |
else |
QuestGuru_Settings.Announce.Enabled = false; |
end |
if (QuestGuru_AnnounceFrameChannelSayToggle:GetChecked()) then |
QuestGuru_Settings.Announce.say = true; |
else |
QuestGuru_Settings.Announce.say = false; |
end |
if (QuestGuru_AnnounceFrameChannelPartyToggle:GetChecked()) then |
QuestGuru_Settings.Announce.party = true; |
else |
QuestGuru_Settings.Announce.party = false; |
end |
if (QuestGuru_AnnounceFrameChannelGuildToggle:GetChecked()) then |
QuestGuru_Settings.Announce.guild = true; |
else |
QuestGuru_Settings.Announce.guild = false; |
end |
if (QuestGuru_AnnounceFrameChannelWhisperToggle:GetChecked()) then |
QuestGuru_Settings.Announce.whisper.Enabled = true; |
else |
QuestGuru_Settings.Announce.whisper.Enabled = false; |
end |
QuestGuru_Settings.Announce.whisper.To = QuestGuru_AnnounceFrameChannelWhisperTo:GetText(); |
if (QuestGuru_AnnounceFrameChannelEchoToggle:GetChecked()) then |
QuestGuru_Settings.Announce.Echo = true; |
else |
QuestGuru_Settings.Announce.Echo = false; |
end |
if (QuestGuru_AnnounceFrameMessageItemToggle:GetChecked()) then |
QuestGuru_Settings.Announce.item.Enabled = true; |
else |
QuestGuru_Settings.Announce.item.Enabled = false; |
end |
QuestGuru_Settings.Announce.item.Text = QuestGuru_AnnounceFrameMessageItem:GetText(); |
if (QuestGuru_AnnounceFrameMessageMonsterToggle:GetChecked()) then |
QuestGuru_Settings.Announce.monster.Enabled = true; |
else |
QuestGuru_Settings.Announce.monster.Enabled = false; |
end |
QuestGuru_Settings.Announce.monster.Text = QuestGuru_AnnounceFrameMessageMonster:GetText(); |
if (QuestGuru_AnnounceFrameMessageQuestAcceptToggle:GetChecked()) then |
QuestGuru_Settings.Announce.QuestAccept.Enabled = true; |
else |
QuestGuru_Settings.Announce.QuestAccept.Enabled = false; |
end |
QuestGuru_Settings.Announce.QuestAccept.Text = QuestGuru_AnnounceFrameMessageQuestAccept:GetText(); |
if (QuestGuru_AnnounceFrameMessageEventToggle:GetChecked()) then |
QuestGuru_Settings.Announce.event.Enabled = true; |
else |
QuestGuru_Settings.Announce.event.Enabled = false; |
end |
QuestGuru_Settings.Announce.event.Text = QuestGuru_AnnounceFrameMessageEvent:GetText(); |
if (QuestGuru_AnnounceFrameMessageQuestToggle:GetChecked()) then |
QuestGuru_Settings.Announce.Quest.Enabled = true; |
else |
QuestGuru_Settings.Announce.Quest.Enabled = false; |
end |
QuestGuru_Settings.Announce.Quest.Text = QuestGuru_AnnounceFrameMessageQuest:GetText(); |
end |
function QuestGuru_CancelAnnounceChanges() |
QuestGuru_AnnounceFrameAnnounceToggle:SetChecked(QuestGuru_Settings.Announce.Enabled); |
QuestGuru_AnnounceFrameChannelSayToggle:SetChecked(QuestGuru_Settings.Announce.say); |
QuestGuru_AnnounceFrameChannelPartyToggle:SetChecked(QuestGuru_Settings.Announce.party); |
QuestGuru_AnnounceFrameChannelGuildToggle:GetChecked(QuestGuru_Settings.Announce.guild); |
QuestGuru_AnnounceFrameChannelWhisperToggle:GetChecked(QuestGuru_Settings.Announce.whisper.Enabled); |
QuestGuru_AnnounceFrameChannelWhisperTo:SetText(QuestGuru_Settings.Announce.whisper.To); |
QuestGuru_AnnounceFrameChannelEchoToggle:SetChecked(QuestGuru_Settings.Announce.Echo); |
QuestGuru_AnnounceFrameMessageItemToggle:SetChecked(QuestGuru_Settings.Announce.item.Enabled); |
QuestGuru_AnnounceFrameMessageItem:SetText(QuestGuru_Settings.Announce.item.Text); |
QuestGuru_AnnounceFrameMessageMonsterToggle:SetChecked(QuestGuru_Settings.Announce.monster.Enabled); |
QuestGuru_AnnounceFrameMessageMonster:SetText(QuestGuru_Settings.Announce.monster.Text); |
QuestGuru_AnnounceFrameMessageQuestAcceptToggle:SetChecked(QuestGuru_Settings.Announce.QuestAccept.Enabled); |
QuestGuru_AnnounceFrameMessageQuestAccept:SetText(QuestGuru_Settings.Announce.QuestAccept.Text); |
QuestGuru_AnnounceFrameMessageEventToggle:SetChecked(QuestGuru_Settings.Announce.event.Enabled); |
QuestGuru_AnnounceFrameMessageEvent:SetText(QuestGuru_Settings.Announce.event.Text); |
QuestGuru_AnnounceFrameMessageQuestToggle:SetChecked(QuestGuru_Settings.Announce.Quest.Enabled); |
QuestGuru_AnnounceFrameMessageQuest:SetText(QuestGuru_Settings.Announce.Quest.Text); |
end |
function QuestGuru_DoAnnounce(announceText, numDone, numNeeded, itemName, questTitle, arg1, questID) |
if (not QuestGuru_Settings.Announce.Enabled) then return; end |
if (announceText ~= nil) then |
if (numDone == nil) then numDone = 0; end |
if (numNeeded == nil) then numNeeded = 0; end |
announceText = string.gsub(announceText,"$done",numDone); |
announceText = string.gsub(announceText,"$needed",numNeeded); |
announceText = string.gsub(announceText,"$numleft",numNeeded-numDone); |
announceText = string.gsub(announceText,"$name",itemName); |
announceText = string.gsub(announceText,"$questTitle",questTitle); |
announceText = string.gsub(announceText,"$uitext",arg1); |
announceText = string.gsub(announceText,"$complete",COMPLETE); |
announceText = string.gsub(announceText,"$qlink",GetQuestLink(questID)); |
if (QuestGuru_Settings.Announce.say) then |
SendChatMessage(announceText, "SAY"); |
end |
local partyNum = GetNumPartyMembers(); |
if ((QuestGuru_Settings.Announce.party) and (partyNum > 0)) then |
SendChatMessage(announceText, "PARTY"); |
end |
if ((QuestGuru_Settings.Announce.guild) and IsInGuild()) then |
SendChatMessage(announceText, "GUILD"); |
end |
if (QuestGuru_Settings.Announce.whisper.Enabled) then |
SendChatMessage(announceText, "WHISPER", nil, QuestGuru_Settings.Announce.whisper.To); |
end |
if (QuestGuru_Settings.Announce.Echo) then |
QuestGuru_Echo(announceText, true); |
end |
end |
end |
function QuestGuru_DoAnnounceByTitle(questTitle, announceText, numDone, numNeeded, itemName, arg1) |
local i; |
local numEntries, numQuests = GetNumQuestLogEntries(); |
for i=1, numEntries do |
local qTitle, _, _, _, isHeader = GetQuestLogTitle(i); |
if not isHeader and (qTitle == questTitle) then |
QuestGuru_DoAnnounce(announceText, numDone, numNeeded, itemName, questTitle, arg1, i); |
end |
end |
end |
-- |
-- ChatThrottleLib by Mikk |
-- |
-- Manages AddOn chat output to keep player from getting kicked off. |
-- |
-- ChatThrottleLib:SendChatMessage/:SendAddonMessage functions that accept |
-- a Priority ("BULK", "NORMAL", "ALERT") as well as prefix for SendChatMessage. |
-- |
-- Priorities get an equal share of available bandwidth when fully loaded. |
-- Communication channels are separated on extension+chattype+destination and |
-- get round-robinned. (Destination only matters for whispers and channels, |
-- obviously) |
-- |
-- Will install hooks for SendChatMessage and SendAddonMessage to measure |
-- bandwidth bypassing the library and use less bandwidth itself. |
-- |
-- |
-- Fully embeddable library. Just copy this file into your addon directory, |
-- add it to the .toc, and it's done. |
-- |
-- Can run as a standalone addon also, but, really, just embed it! :-) |
-- |
local CTL_VERSION = 21 |
local _G = _G |
if _G.ChatThrottleLib then |
if _G.ChatThrottleLib.version >= CTL_VERSION then |
-- There's already a newer (or same) version loaded. Buh-bye. |
return |
elseif not _G.ChatThrottleLib.securelyHooked then |
print("ChatThrottleLib: Warning: There's an ANCIENT ChatThrottleLib.lua (pre-wow 2.0, <v16) in an addon somewhere. Get the addon updated or copy in a newer ChatThrottleLib.lua (>=v16) in it!") |
-- ATTEMPT to unhook; this'll behave badly if someone else has hooked... |
-- ... and if someone has securehooked, they can kiss that goodbye too... >.< |
_G.SendChatMessage = _G.ChatThrottleLib.ORIG_SendChatMessage |
if _G.ChatThrottleLib.ORIG_SendAddonMessage then |
_G.SendAddonMessage = _G.ChatThrottleLib.ORIG_SendAddonMessage |
end |
end |
_G.ChatThrottleLib.ORIG_SendChatMessage = nil |
_G.ChatThrottleLib.ORIG_SendAddonMessage = nil |
end |
if not _G.ChatThrottleLib then |
_G.ChatThrottleLib = {} |
end |
ChatThrottleLib = _G.ChatThrottleLib -- in case some addon does "local ChatThrottleLib" above us and we're copypasted (AceComm-2, sigh) |
local ChatThrottleLib = _G.ChatThrottleLib |
ChatThrottleLib.version = CTL_VERSION |
------------------ TWEAKABLES ----------------- |
ChatThrottleLib.MAX_CPS = 800 -- 2000 seems to be safe if NOTHING ELSE is happening. let's call it 800. |
ChatThrottleLib.MSG_OVERHEAD = 40 -- Guesstimate overhead for sending a message; source+dest+chattype+protocolstuff |
ChatThrottleLib.BURST = 4000 -- WoW's server buffer seems to be about 32KB. 8KB should be safe, but seen disconnects on _some_ servers. Using 4KB now. |
ChatThrottleLib.MIN_FPS = 20 -- Reduce output CPS to half (and don't burst) if FPS drops below this value |
local setmetatable = setmetatable |
local table_remove = table.remove |
local tostring = tostring |
local GetTime = GetTime |
local math_min = math.min |
local math_max = math.max |
local next = next |
local strlen = string.len |
local GetFrameRate = GetFrameRate |
----------------------------------------------------------------------- |
-- Double-linked ring implementation |
local Ring = {} |
local RingMeta = { __index = Ring } |
function Ring:New() |
local ret = {} |
setmetatable(ret, RingMeta) |
return ret |
end |
function Ring:Add(obj) -- Append at the "far end" of the ring (aka just before the current position) |
if self.pos then |
obj.prev = self.pos.prev |
obj.prev.next = obj |
obj.next = self.pos |
obj.next.prev = obj |
else |
obj.next = obj |
obj.prev = obj |
self.pos = obj |
end |
end |
function Ring:Remove(obj) |
obj.next.prev = obj.prev |
obj.prev.next = obj.next |
if self.pos == obj then |
self.pos = obj.next |
if self.pos == obj then |
self.pos = nil |
end |
end |
end |
----------------------------------------------------------------------- |
-- Recycling bin for pipes |
-- A pipe is a plain integer-indexed queue, which also happens to be a ring member |
ChatThrottleLib.PipeBin = nil -- pre-v19, drastically different |
local PipeBin = setmetatable({}, {__mode="k"}) |
local function DelPipe(pipe) |
for i = #pipe, 1, -1 do |
pipe[i] = nil |
end |
pipe.prev = nil |
pipe.next = nil |
PipeBin[pipe] = true |
end |
local function NewPipe() |
local pipe = next(PipeBin) |
if pipe then |
PipeBin[pipe] = nil |
return pipe |
end |
return {} |
end |
----------------------------------------------------------------------- |
-- Recycling bin for messages |
ChatThrottleLib.MsgBin = nil -- pre-v19, drastically different |
local MsgBin = setmetatable({}, {__mode="k"}) |
local function DelMsg(msg) |
msg[1] = nil |
-- there's more parameters, but they're very repetetive so the string pool doesn't suffer really, and it's faster to just not delete them. |
MsgBin[msg] = true |
end |
local function NewMsg() |
local msg = next(MsgBin) |
if msg then |
MsgBin[msg] = nil |
return msg |
end |
return {} |
end |
----------------------------------------------------------------------- |
-- ChatThrottleLib:Init |
-- Initialize queues, set up frame for OnUpdate, etc |
function ChatThrottleLib:Init() |
-- Set up queues |
if not self.Prio then |
self.Prio = {} |
self.Prio["ALERT"] = { ByName = {}, Ring = Ring:New(), avail = 0 } |
self.Prio["NORMAL"] = { ByName = {}, Ring = Ring:New(), avail = 0 } |
self.Prio["BULK"] = { ByName = {}, Ring = Ring:New(), avail = 0 } |
end |
-- v4: total send counters per priority |
for _, Prio in pairs(self.Prio) do |
Prio.nTotalSent = Prio.nTotalSent or 0 |
end |
if not self.avail then |
self.avail = 0 -- v5 |
end |
if not self.nTotalSent then |
self.nTotalSent = 0 -- v5 |
end |
-- Set up a frame to get OnUpdate events |
if not self.Frame then |
self.Frame = CreateFrame("Frame") |
self.Frame:Hide() |
end |
self.Frame:SetScript("OnUpdate", self.OnUpdate) |
self.Frame:SetScript("OnEvent", self.OnEvent) -- v11: Monitor P_E_W so we can throttle hard for a few seconds |
self.Frame:RegisterEvent("PLAYER_ENTERING_WORLD") |
self.OnUpdateDelay = 0 |
self.LastAvailUpdate = GetTime() |
self.HardThrottlingBeginTime = GetTime() -- v11: Throttle hard for a few seconds after startup |
-- Hook SendChatMessage and SendAddonMessage so we can measure unpiped traffic and avoid overloads (v7) |
if not self.securelyHooked then |
-- Use secure hooks as of v16. Old regular hook support yanked out in v21. |
self.securelyHooked = true |
--SendChatMessage |
hooksecurefunc("SendChatMessage", function(...) |
return ChatThrottleLib.Hook_SendChatMessage(...) |
end) |
--SendAddonMessage |
hooksecurefunc("SendAddonMessage", function(...) |
return ChatThrottleLib.Hook_SendAddonMessage(...) |
end) |
end |
self.nBypass = 0 |
end |
----------------------------------------------------------------------- |
-- ChatThrottleLib.Hook_SendChatMessage / .Hook_SendAddonMessage |
local bMyTraffic = false |
function ChatThrottleLib.Hook_SendChatMessage(text, chattype, language, destination, ...) |
if bMyTraffic then |
return |
end |
local self = ChatThrottleLib |
local size = strlen(tostring(text or "")) + strlen(tostring(destination or "")) + self.MSG_OVERHEAD |
self.avail = self.avail - size |
self.nBypass = self.nBypass + size -- just a statistic |
end |
function ChatThrottleLib.Hook_SendAddonMessage(prefix, text, chattype, destination, ...) |
if bMyTraffic then |
return |
end |
local self = ChatThrottleLib |
local size = tostring(text or ""):len() + tostring(prefix or ""):len(); |
size = size + tostring(destination or ""):len() + self.MSG_OVERHEAD |
self.avail = self.avail - size |
self.nBypass = self.nBypass + size -- just a statistic |
end |
----------------------------------------------------------------------- |
-- ChatThrottleLib:UpdateAvail |
-- Update self.avail with how much bandwidth is currently available |
function ChatThrottleLib:UpdateAvail() |
local now = GetTime() |
local MAX_CPS = self.MAX_CPS; |
local newavail = MAX_CPS * (now - self.LastAvailUpdate) |
local avail = self.avail |
if now - self.HardThrottlingBeginTime < 5 then |
-- First 5 seconds after startup/zoning: VERY hard clamping to avoid irritating the server rate limiter, it seems very cranky then |
avail = math_min(avail + (newavail*0.1), MAX_CPS*0.5) |
self.bChoking = true |
elseif GetFramerate() < self.MIN_FPS then -- GetFrameRate call takes ~0.002 secs |
avail = math_min(MAX_CPS, avail + newavail*0.5) |
self.bChoking = true -- just a statistic |
else |
avail = math_min(self.BURST, avail + newavail) |
self.bChoking = false |
end |
avail = math_max(avail, 0-(MAX_CPS*2)) -- Can go negative when someone is eating bandwidth past the lib. but we refuse to stay silent for more than 2 seconds; if they can do it, we can. |
self.avail = avail |
self.LastAvailUpdate = now |
return avail |
end |
----------------------------------------------------------------------- |
-- Despooling logic |
function ChatThrottleLib:Despool(Prio) |
local ring = Prio.Ring |
while ring.pos and Prio.avail > ring.pos[1].nSize do |
local msg = table_remove(Prio.Ring.pos, 1) |
if not Prio.Ring.pos[1] then |
local pipe = Prio.Ring.pos |
Prio.Ring:Remove(pipe) |
Prio.ByName[pipe.name] = nil |
DelPipe(pipe) |
else |
Prio.Ring.pos = Prio.Ring.pos.next |
end |
Prio.avail = Prio.avail - msg.nSize |
bMyTraffic = true |
msg.f(unpack(msg, 1, msg.n)) |
bMyTraffic = false |
Prio.nTotalSent = Prio.nTotalSent + msg.nSize |
DelMsg(msg) |
if msg.callbackFn then |
msg.callbackFn (msg.callbackArg) |
end |
end |
end |
function ChatThrottleLib.OnEvent(this,event) |
-- v11: We know that the rate limiter is touchy after login. Assume that it's touchy after zoning, too. |
local self = ChatThrottleLib |
if event == "PLAYER_ENTERING_WORLD" then |
self.HardThrottlingBeginTime = GetTime() -- Throttle hard for a few seconds after zoning |
self.avail = 0 |
end |
end |
function ChatThrottleLib.OnUpdate(this,delay) |
local self = ChatThrottleLib |
self.OnUpdateDelay = self.OnUpdateDelay + delay |
if self.OnUpdateDelay < 0.08 then |
return |
end |
self.OnUpdateDelay = 0 |
self:UpdateAvail() |
if self.avail < 0 then |
return -- argh. some bastard is spewing stuff past the lib. just bail early to save cpu. |
end |
-- See how many of our priorities have queued messages (we only have 3, don't worry about the loop) |
local n = 0 |
for prioname,Prio in pairs(self.Prio) do |
if Prio.Ring.pos or Prio.avail < 0 then |
n = n + 1 |
end |
end |
-- Anything queued still? |
if n<1 then |
-- Nope. Move spillover bandwidth to global availability gauge and clear self.bQueueing |
for prioname, Prio in pairs(self.Prio) do |
self.avail = self.avail + Prio.avail |
Prio.avail = 0 |
end |
self.bQueueing = false |
self.Frame:Hide() |
return |
end |
-- There's stuff queued. Hand out available bandwidth to priorities as needed and despool their queues |
local avail = self.avail/n |
self.avail = 0 |
for prioname, Prio in pairs(self.Prio) do |
if Prio.Ring.pos or Prio.avail < 0 then |
Prio.avail = Prio.avail + avail |
if Prio.Ring.pos and Prio.avail > Prio.Ring.pos[1].nSize then |
self:Despool(Prio) |
-- Note: We might not get here if the user-supplied callback function errors out! Take care! |
end |
end |
end |
end |
----------------------------------------------------------------------- |
-- Spooling logic |
function ChatThrottleLib:Enqueue(prioname, pipename, msg) |
local Prio = self.Prio[prioname] |
local pipe = Prio.ByName[pipename] |
if not pipe then |
self.Frame:Show() |
pipe = NewPipe() |
pipe.name = pipename |
Prio.ByName[pipename] = pipe |
Prio.Ring:Add(pipe) |
end |
pipe[#pipe + 1] = msg |
self.bQueueing = true |
end |
function ChatThrottleLib:SendChatMessage(prio, prefix, text, chattype, language, destination, queueName, callbackFn, callbackArg) |
if not self or not prio or not prefix or not text or not self.Prio[prio] then |
error('Usage: ChatThrottleLib:SendChatMessage("{BULK||NORMAL||ALERT}", "prefix", "text"[, "chattype"[, "language"[, "destination"]]]', 2) |
end |
if callbackFn and type(callbackFn)~="function" then |
error('ChatThrottleLib:ChatMessage(): callbackFn: expected function, got '..type(callbackFn), 2) |
end |
local nSize = text:len() |
if nSize>255 then |
error("ChatThrottleLib:SendChatMessage(): message length cannot exceed 255 bytes", 2) |
end |
nSize = nSize + self.MSG_OVERHEAD |
-- Check if there's room in the global available bandwidth gauge to send directly |
if not self.bQueueing and nSize < self:UpdateAvail() then |
self.avail = self.avail - nSize |
bMyTraffic = true |
_G.SendChatMessage(text, chattype, language, destination) |
bMyTraffic = false |
self.Prio[prio].nTotalSent = self.Prio[prio].nTotalSent + nSize |
if callbackFn then |
callbackFn (callbackArg) |
end |
return |
end |
-- Message needs to be queued |
local msg = NewMsg() |
msg.f = _G.SendChatMessage |
msg[1] = text |
msg[2] = chattype or "SAY" |
msg[3] = language |
msg[4] = destination |
msg.n = 4 |
msg.nSize = nSize |
msg.callbackFn = callbackFn |
msg.callbackArg = callbackArg |
self:Enqueue(prio, queueName or (prefix..(chattype or "SAY")..(destination or "")), msg) |
end |
function ChatThrottleLib:SendAddonMessage(prio, prefix, text, chattype, target, queueName, callbackFn, callbackArg) |
if not self or not prio or not prefix or not text or not chattype or not self.Prio[prio] then |
error('Usage: ChatThrottleLib:SendAddonMessage("{BULK||NORMAL||ALERT}", "prefix", "text", "chattype"[, "target"])', 2) |
end |
if callbackFn and type(callbackFn)~="function" then |
error('ChatThrottleLib:SendAddonMessage(): callbackFn: expected function, got '..type(callbackFn), 2) |
end |
local nSize = prefix:len() + 1 + text:len(); |
if nSize>255 then |
error("ChatThrottleLib:SendAddonMessage(): prefix + message length cannot exceed 254 bytes", 2) |
end |
nSize = nSize + self.MSG_OVERHEAD; |
-- Check if there's room in the global available bandwidth gauge to send directly |
if not self.bQueueing and nSize < self:UpdateAvail() then |
self.avail = self.avail - nSize |
bMyTraffic = true |
_G.SendAddonMessage(prefix, text, chattype, target) |
bMyTraffic = false |
self.Prio[prio].nTotalSent = self.Prio[prio].nTotalSent + nSize |
if callbackFn then |
callbackFn (callbackArg) |
end |
return |
end |
-- Message needs to be queued |
local msg = NewMsg() |
msg.f = _G.SendAddonMessage |
msg[1] = prefix |
msg[2] = text |
msg[3] = chattype |
msg[4] = target |
msg.n = (target~=nil) and 4 or 3; |
msg.nSize = nSize |
msg.callbackFn = callbackFn |
msg.callbackArg = callbackArg |
self:Enqueue(prio, queueName or (prefix..chattype..(target or "")), msg) |
end |
----------------------------------------------------------------------- |
-- Get the ball rolling! |
ChatThrottleLib:Init() |
--[[ WoWBench debugging snippet |
if(WOWB_VER) then |
local function SayTimer() |
print("SAY: "..GetTime().." "..arg1) |
end |
ChatThrottleLib.Frame:SetScript("OnEvent", SayTimer) |
ChatThrottleLib.Frame:RegisterEvent("CHAT_MSG_SAY") |
end |
]] |
------------------------------------ |
-- QuestGuru Russian Localization by StingerSoft-- |
------------------------------------ |
if (GetLocale() == "ruRU") then |
QG_REP_GAIN = "ÐÑноÑение |3-7(.*) к вам ÑлÑÑÑилоÑÑ Ð½Ð° ([%d]+)."; |
QG_REP_DEC = "ÐÑноÑение |3-7(.*) к вам ÑÑ ÑдÑилоÑÑ Ð½Ð° ([%d]+)."; |
QG_XP_GAIN = "ÐÑ Ð¿Ð¾Ð»ÑÑили ([%d])|4оÑко:оÑка:оÑков; опÑÑа."; |
QG_QUEST_COMPLETE = "Ðадание вÑполнено!"; |
-- Default filler words used in various places |
QG_UNKNOWN = "ÐеизвеÑÑнÑй"; |
QG_NONE = "ÐÑÑÑÑÑÑвÑеÑ"; |
-- Right click menu strings for Quest Log and Tracker |
QG_TRACK = "СледиÑÑ"; |
QG_UNTRACK = "Ðе ÑледиÑÑ"; |
QG_SHARE_QUEST = "ÐоделиÑÑÑÑ"; |
QG_ABANDON_QUEST = "ÐÑмениÑÑ Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ"; |
QG_DELETE_QUEST = "УдалиÑÑ Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ"; |
-- Quest Start and Finish information |
QG_QSTART_HEAD = "ÐеÑали о наÑале заданиÑ"; |
QG_QSTART_NPC = "ÐаÑало:"; |
QG_QSTART_TIME = "ÐаÑаÑо:"; |
QG_QSTART_LEVEL = "ÐаÑалÑнÑй ÑÑовенÑ:"; |
QG_QFINISH_HEAD = "ÐеÑали о завеÑÑении заданиÑ"; |
QG_QFINISH_NPC = "ÐонеÑ:"; |
QG_QFINISH_TIME = "ÐавеÑÑено:"; |
QG_QFINISH_LEVEL = "ÐонеÑнÑй ÑÑовенÑ:"; |
QG_QABANDON = "ÐÑменен:"; |
-- Tab Text |
QG_TAB_CURRENT = "ТекÑÑий"; |
QG_TAB_HISTORY = "ÐÑÑоÑиÑ"; |
QG_TAB_ABANDON = "ÐÑмененнÑе"; |
QG_TAB_GUILD = "ÐилÑдиÑ"; |
QG_TAB_PARTY = "ÐÑÑппа"; |
-- Party Info Tooltip strings |
QG_ABANDONED = "ÐÑменÑннÑй" |
QG_INCOMPLETE = "Ðе вÑполненнÑй"; |
QG_ACTIVE = "ÐкÑивнÑй"; |
QG_ALT_STATUS_HEAD = "------------- СÑаÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð°Ð»ÑÑа -------------"; |
QG_GUILD_STATUS_HEAD = "---------- СÑаÑÑÑ ÑÑаÑÑников гилÑдии ----------"; |
-- User Interface Elements |
QG_EXPAND_HEADERS = "РазвеÑнÑÑÑ/СвеÑнÑÑÑ Ð²Ñе загаловки"; |
QG_OPTIONS = "ÐаÑÑÑойки"; |
QG_SEARCH = "ÐоиÑк: "; |
QG_CLEAR_ABANDON = "ÐÑиÑÑиÑÑ ÑпиÑок оÑменений"; |
-- Abandon Tab Strings |
QG_ABANDON_CLEAR = "ÐÑ Ð´ÐµÐ¹ÑÑвиÑелÑно Ñ Ð¾ÑиÑе оÑиÑÑиÑÑ ÑпиÑок оÑмен?"; |
QG_ABANDON_DELETE = "УдалиÑÑ \"%s\" из ваÑего жÑÑнала оÑмен?"; -- %s is the name of the quest |
-- History Tab strings |
QG_HISTORY_DELETE = "УдалиÑÑ \"%s\" из ваÑего жÑÑнала иÑÑоÑии?"; -- %s is the name of the quest |
QG_HISTORY_NONE = "ÐÐµÑ Ð¸ÑÑоÑии заданиÑ"; |
QG_HISTORY_EXPGAIN = "ÐолÑÑено опÑÑа: "; |
QG_HISTORY_REPGAIN = "РепÑÑаÑиÑ:"; |
-- History Database strings |
QG_HISTORY_NOTLOADED = "Ðаза иÑÑоÑии не загÑежена"; |
QG_HISTORY_CLICKTOLOAD = "|cff2040ffÐажмиÑе ÑÑÑ ÑÑÐ¾Ð±Ñ Ð·Ð°Ð³ÑÑзиÑÑ Ð±Ð°Ð·Ñ Ð¸ÑÑоÑии.|r"; |
QG_HISTORY_DBLOADDESC = "ЧÑÐ¾Ð±Ñ ÑменÑÑиÑÑ Ð¸ÑполÑзование памÑÑи, база даннÑÑ , коÑоÑÐ°Ñ ÑодеÑÐ¶Ð¸Ñ Ð´Ð°Ð½Ð½Ñе заданий в ÑÑом диапазоне ÑÑовней в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð½Ðµ загÑÑжена."; |
-- Announcer |
QG_OPT_ANNOUNCE_HEAD = "ÐаÑÑÑойки оповеÑений QuestGuru"; |
QG_OPT_ANNOUNCE_DESC = "ÐаÑÑÑойки оповеÑений о ваÑÐ¸Ñ Ð¿ÑодвижениÑÑ Ð¿Ð¾ заданиÑм.\nÐÐ·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð°ÑÑÑоек ÑÐ¾Ñ ÑанÑÑÑÑÑ Ð¿Ð¾Ñле нажаÑÐ¸Ñ Ð½Ð° ÐºÐ½Ð¾Ð¿ÐºÑ Ok."; |
QG_OPT_ANNOUNCE_PROGRESS = "СообÑаÑÑ Ð¾ пÑогÑеÑÑе заданиÑ"; |
QG_OPT_ANNOUNCE_CHANNEL_HEAD = "ÐаналÑ:"; |
QG_OPT_ANNOUNCE_CHANNEL_SAY = "/s"; |
QG_OPT_ANNOUNCE_CHANNEL_SAY_DESC = "СказаÑÑ"; |
QG_OPT_ANNOUNCE_CHANNEL_PARTY = "/p"; |
QG_OPT_ANNOUNCE_CHANNEL_PARTY_DESC = "СообÑаÑÑ Ð² ваÑÑ Ð³ÑÑппÑ"; |
QG_OPT_ANNOUNCE_CHANNEL_GUILD = "/g"; |
QG_OPT_ANNOUNCE_CHANNEL_GUILD_DESC = "СообÑаÑÑ Ð² гилÑдиÑ"; |
QG_OPT_ANNOUNCE_CHANNEL_WHISPER = "/w"; |
QG_OPT_ANNOUNCE_CHANNEL_WHISPER_DESC = "СообÑиÑÑ ÑепоÑом комÑ-нибÑдÑ"; |
QG_OPT_ANNOUNCE_CHANNEL_WHISPER_TO = "в:"; |
QG_OPT_ANNOUNCE_ECHO = "ÐÑ Ð¾"; |
QG_OPT_ANNOUNCE_ECHO_DESC = "ÐÑобÑажаÑÑ Ð¾Ð¿Ð¾Ð²ÐµÑÐµÐ½Ð¸Ñ Ð² окне ваÑего обÑего ÑаÑа."; |
QG_OPT_ANNOUNCE_MESSAGES = "СообÑение:"; |
QG_OPT_ANNOUNCE_HELP_DONE = "ЧиÑло ÑобÑаннÑÑ Ð¿ÑедмеÑов или ÑбиÑÑÑ ÑÑÑеÑÑв"; |
QG_OPT_ANNOUNCE_HELP_NEEDED = "ÐбÑее ÑиÑло ÑÑебÑемÑÑ Ð¿ÑедмеÑов или ÑÑÑеÑÑв"; |
QG_OPT_ANNOUNCE_HELP_NUMLEFT = "ЧиÑло оÑÑавÑÐ¸Ñ ÑÑ Ð¿ÑедмеÑов или ÑÑÑеÑÑв"; |
QG_OPT_ANNOUNCE_HELP_NAME = "ТекÑÑ Ð·Ð°Ð´Ð°Ñи без #/#"; |
QG_OPT_ANNOUNCE_HELP_TITLE = "Ðазвание Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ задаÑи"; |
QG_OPT_ANNOUNCE_HELP_UITEXT = "ТекÑÑ Ð¾ÑобÑажаемÑй ввеÑÑ Ñ ÑкÑана"; |
QG_OPT_ANNOUNCE_HELP_COMPLETE = "СообÑение о завеÑÑении: \""..COMPLETE.."\""; |
QG_OPT_ANNOUNCE_HELP_QLINK = "СÑÑлка на задание"; |
QG_OPT_ANNOUNCE_ITEM_MSG = "ÐповеÑаÑÑ Ð¾ пÑодвижение по задаÑе м пÑедмеÑами:"; |
QG_OPT_ANNOUNCE_MOB_MSG = "ÐповеÑаÑÑ Ð¾ пÑодвижение по задаÑе Ñ Ð¼Ð¾Ð½ÑÑÑами:"; |
QG_OPT_ANNOUNCE_EVENT_MSG = "ÐповеÑаÑÑ Ð¾ ÑобÑÑии по пÑÐ¾Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ задаÑе:"; |
QG_OPT_ANNOUNCE_COMPLETE_MSG = "ÐповеÑаÑÑ Ð¾ вÑполненном задании:"; |
QG_OPT_ANNOUNCE_QUESTACCEPT_MSG = "ÐповеÑаÑÑ Ð¾ взÑÑии нового заданиÑ"; |
--QG_ANNOUNCE_ITEM_DEFAULT = "СобÑано $done $name из $needed ÑÑебÑемÑÑ Ð´Ð»Ñ $questTitle"; |
--QG_ANNOUNCE_MOB_DEFAULT = "$done $name из $needed ÑÑебÑемÑÑ Ð´Ð»Ñ $questTitle"; |
--QG_ANNOUNCE_QUESTACCEPT_DEFAULT = "ÐзÑÑо задание $qlink"; |
QG_ANNOUNCE_RESET = "ÐоÑcÑоновиÑÑ ÑÑандаÑÑнÑе наÑÑÑойки оповеÑений."; |
-- Options |
QG_OPT_OPTIONS_DESC = "ÐÑновнÑе наÑÑÑойки QuestGuru.\nÐÐ·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð°ÑÑÑоек ÑÐ¾Ñ ÑанÑÑÑÑÑ Ð¼Ð³Ð½Ð¾Ð²ÐµÐ½Ð½Ð¾."; |
QG_OPT_COLORIZE_HEAD = "ÐкÑаÑка"; |
QG_OPT_COLORIZE_PLAYER = "ÐÐ¼Ñ Ð¸Ð³Ñока"; |
QG_OPT_COLORIZE_AREA = "ТеÑÑиÑоÑиÑ"; |
QG_OPT_COLORIZE_NPC = "ÐÐ¼Ñ ÐÐÐа"; |
QG_OPT_LEVELS_HEAD = "Ðоказ ÑÑовни"; |
QG_OPT_LEVELS_QUESTLOG = "РжÑÑнале заданий"; |
QG_OPT_LEVELS_HISTORY = "РжÑÑнале иÑÑоÑии"; |
QG_OPT_LEVELS_ABANDON = "РжÑÑнале оÑмен"; |
QG_OPT_TOOLTIP_TEXT = "Ð¢ÐµÐºÑ Ð² подÑÐºÐ°Ð·ÐºÐ°Ñ Ð¿ÑедмеÑов и монÑÑÑов"; |
QG_OPT_AUTOCOMPLETE = "ÐвÑо-ÑдаваÑÑ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ"; |
QG_OPT_ALT_STATUS = "СÑаÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð¸Ð¹ алÑÑа в подÑказке гÑÑппÑ"; |
QG_OPT_GUILD_STATUS = "СÑаÑÑÑ ÑогÑлÑдÑан в подÑказке гÑÑппÑ"; |
QG_OPT_GUILD_SIMPLE = "ÐбÑÑное оÑобÑажение ÑогÑлÑдÑан"; |
QG_OPT_OBJ_ICON = "Ðоказ в жÑÑнале Ð¸ÐºÐ¾Ð½ÐºÑ ÑÑебÑемого пÑедмеÑа"; |
QG_OPT_WORLDMAP_ICON = "Ðоказ на каÑÑе нипов давÑÐ¸Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ"; |
QG_OPT_HEADER_QUEST_NUM = "Ðоказ колиÑевÑÑва заданий в загаловке"; |
QG_OPT_DISABLE_COMM = "ÐÑклÑÑиÑÑ Ð²Ñе коммÑникаÑии addon < - > addon"; |
QG_OPT_SOUND_HEAD = "ÐаÑÑÑойки звÑков"; |
QG_OPT_SOUND_DESC = "ÐÑполÑзÑйÑе панели Ð´Ð»Ñ ÑÐ¼ÐµÐ½Ñ Ð¿ÑоигÑÑваемого звÑка в Ñ Ð¾Ð´Ðµ вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ."; |
QG_OPT_SOUND_ENABLE = "ÐклÑÑиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе звÑки"; |
QG_OPT_SOUND_OBJ = "ÐÑоигÑаÑÑ Ð·Ð²Ñк во вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑебований:"; |
QG_OPT_SOUND_OBJ_DONE = "ÐÑоигÑаÑÑ Ð·Ð²Ñк поÑле вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑебованиÑ:"; |
QG_SOUND_QUEST_DONE = "ÐÑоигÑаÑÑ Ð·Ð²Ñк поÑле вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ:"; |
-- Other strings that may or may not need localizing |
QG_ITEM_REQ_STR = "(.*):%s*([%d]+)%s*/%s*([%d]+)"; -- The format of the line when an item is required for a quest, an invalid format can cause many errors |
QG_DATETIME = "%m/%d/%Y %H:%M:%S"; -- The format that date/time values are stored and displayed for start/finish info |
end |
------------------------------------ |
-- QuestGuru French Localization -- |
------------------------------------ |
-- Ã \195\128 |
-- Ã \195\129 |
-- Ã \195\130 |
-- Ã \195\132 |
-- Ã \195\136 |
-- Ã \195\137 |
-- Ã \195\138 |
-- Ã \195\139 |
-- Ã \195\142 |
-- Ã \195\143 |
-- Ã \195\148 |
-- Ã \195\150 |
-- Ã \195\155 |
-- Ã \195\156 |
-- Ã \195\160 |
-- á \195\161 |
-- â \195\162 |
-- ä \195\164 |
-- è \195\168 |
-- é \195\169 |
-- ê \195\170 |
-- ë \195\171 |
-- î \195\174 |
-- ï \195\175 |
-- ô \195\180 |
-- ö \195\182 |
-- û \195\187 |
-- ü \195\188 |
-- 'Å \39\197\146 |
-- |
if (GetLocale() == "frFR") then |
QG_REP_GAIN = "R\195\169putation aupr\195\168s de (.*) augment\195\169e de ([%d]+)."; |
QG_REP_DEC = "R\195\169putation aupr\195\168s de (.*) diminu\195\169e de ([%d]+)."; |
QG_XP_GAIN = "Vous gagnez ([%d]+) points d'exp\195\169rience."; |
QG_QUEST_COMPLETE = "Qu\195\170te termin\195\169e !"; |
-- Default filler words used in various places |
QG_UNKNOWN = "Inconnu"; |
QG_NONE = "Aucun"; |
-- Right click menu strings for Quest Log and Tracker |
QG_TRACK = "Suivre"; |
QG_UNTRACK = "Ne pas suivre"; |
QG_SHARE_QUEST = "Partager la qu\195\170te"; |
QG_ABANDON_QUEST = "Abandonner la qu\195\170te"; |
QG_DELETE_QUEST = "Supprimer la qu\195\170te"; |
-- Quest Start and Finish information |
QG_QSTART_HEAD = "D\195\169tails du d\195\169but de qu\195\170te"; |
QG_QSTART_NPC = "Lanc\195\169e par :"; |
QG_QSTART_TIME = "Le :"; |
QG_QSTART_LEVEL = "Au niveau :"; |
QG_QFINISH_HEAD = "D\195\169tails de fin de qu\195\170te"; |
QG_QFINISH_NPC = "Finie par :"; |
QG_QFINISH_TIME = "A :"; |
QG_QFINISH_LEVEL = "Au niveau :"; |
QG_QABANDON = "Abandonn\195\169e:"; |
-- Tab Text |
QG_TAB_CURRENT = "En cours"; |
QG_TAB_HISTORY = "Historique"; |
QG_TAB_ABANDON = "Abandon\195\169es"; |
QG_TAB_GUILD = "Guilde"; |
QG_TAB_PARTY = "Groupe"; |
-- Party Info Tooltip strings |
QG_ABANDONED = "Abandonn\195\169e"; |
QG_INCOMPLETE = "Incompl\195\168te"; |
QG_ACTIVE = "Active"; |
QG_ALT_STATUS_HEAD = "------------- Vos autres personnages ----------"; |
QG_GUILD_STATUS_HEAD = "-------- Les membres de votre Guilde ---------"; |
-- User Interface Elements |
QG_EXPAND_HEADERS = "Ouvrir/fermer tout"; |
QG_OPTIONS = "Options"; |
QG_SEARCH = "Rech. : "; |
QG_CLEAR_ABANDON = "Effacer la liste"; |
-- Abandon Tab Strings |
QG_ABANDON_CLEAR = "Voulez-vous effacer la liste ?"; |
QG_ABANDON_DELETE = "Effacer \"%s\" du journal d'abandon ?"; -- %s est le nom de la quete |
-- History Tab strings |
QG_HISTORY_DELETE = "Effacer \"%s\" de l'historique ?"; -- %s est le nom de la quete |
QG_HISTORY_NONE = "Pas de qu\195\170te dans l'historique"; |
QG_HISTORY_EXPGAIN = "Exp\195\169rience gagn\195\169e :"; |
QG_HISTORY_REPGAIN = "R\195\169putation :"; |
-- Announcer |
QG_OPT_ANNOUNCE_HEAD = "Options d'annonce"; |
QG_OPT_ANNOUNCE_DESC = "Evitez les annonces publiques si vous ne voulez pas vous faire ignorer !\nLes modifications sont enregistr\195\169es lors du clic sur OK."; |
QG_OPT_ANNOUNCE_PROGRESS = "Annoncer la progression"; |
QG_OPT_ANNOUNCE_CHANNEL_HEAD = "Canaux :"; |
QG_OPT_ANNOUNCE_CHANNEL_SAY = "/s"; |
QG_OPT_ANNOUNCE_CHANNEL_SAY_DESC = "Annoncer \195\160 ceux qui vous entourent"; |
QG_OPT_ANNOUNCE_CHANNEL_PARTY = "/p"; |
QG_OPT_ANNOUNCE_CHANNEL_PARTY_DESC = "Annoncer au groupe"; |
QG_OPT_ANNOUNCE_CHANNEL_GUILD = "/g"; |
QG_OPT_ANNOUNCE_CHANNEL_GUILD_DESC = "Annoncer \195\160 votre guilde"; |
QG_OPT_ANNOUNCE_CHANNEL_WHISPER = "/w"; |
QG_OPT_ANNOUNCE_CHANNEL_WHISPER_DESC = "Annoncer \195\160 un ami"; |
QG_OPT_ANNOUNCE_CHANNEL_WHISPER_TO = "A :"; |
QG_OPT_ANNOUNCE_ECHO = "Discussion"; |
QG_OPT_ANNOUNCE_ECHO_DESC = "Afficher votre progression sur la fen\195\169tre de discussion (conseill\195\169)."; |
QG_OPT_ANNOUNCE_MESSAGES = "Messages :"; |
QG_OPT_ANNOUNCE_HELP_DONE = "Nombre d'objets collect\195\169s ou de mobs tu\195\169s"; |
QG_OPT_ANNOUNCE_HELP_NEEDED = "Nombre total d'objets ou de mobs n\195\169c\195\169ssaires"; |
QG_OPT_ANNOUNCE_HELP_NUMLEFT = "Nombre d'objets restants"; |
QG_OPT_ANNOUNCE_HELP_NAME = "Texte d'objectif (sans #/#)"; |
QG_OPT_ANNOUNCE_HELP_TITLE = "Nom de la qu\195\170te pour cet objectif"; |
QG_OPT_ANNOUNCE_HELP_UITEXT = "Le texte affich\195\169 sur l'\195\169cran"; |
QG_OPT_ANNOUNCE_HELP_COMPLETE = "Message \""..COMPLETE.."\""; |
QG_OPT_ANNOUNCE_HELP_QLINK = "Lien de la qu\195\170te concern\195\169e"; |
QG_OPT_ANNOUNCE_ITEM_MSG = "Message pour la progression d'objectifs (objets) :"; |
QG_OPT_ANNOUNCE_MOB_MSG = "Message pour la progression d'objectifs (mobs) :"; |
QG_OPT_ANNOUNCE_EVENT_MSG = "Message pour la progression d'objectifs (event) :"; |
QG_OPT_ANNOUNCE_COMPLETE_MSG = "Message pour la fin de qu\195\170te :"; |
QG_ANNOUNCE_ITEM_DEFAULT = "$done $name sur $needed collect\195\169(s) pour la qu\195\170te $questTitle"; |
QG_ANNOUNCE_MOB_DEFAULT = "$done $name sur $needed n\195\169c\195\169ssaires pour la qu\195\170te $questTitle"; |
QG_ANNOUNCE_RESET = "Restaurer les param\195\169tres par d\195\169faut."; |
-- Tracker |
QG_TRACKER_SHOW = "Afficher le suivi"; |
QG_TRACKER_MINIMIZE = "R\195\169duire"; |
QG_TRACKER_OPTIONS = "Options"; |
-- Options |
QG_OPT_OPTIONS_DESC = "Param\195\169tres g\195\169n\195\169raux de QuestGuru. Les modifications sont prises en compte imm\195\169diatement."; |
QG_OPT_COLORIZE_HEAD = "Couleurs"; |
QG_OPT_COLORIZE_PLAYER = "Joueurs"; |
QG_OPT_COLORIZE_AREA = "Zones"; |
QG_OPT_COLORIZE_NPC = "PNJ"; |
QG_OPT_LEVELS_HEAD = "Afficher les niveaux"; |
QG_OPT_LEVELS_QUESTLOG = "Dans le journal de qu\195\170te"; |
QG_OPT_LEVELS_HISTORY = "Dans l'historique"; |
QG_OPT_LEVELS_ABANDON = "Dans le journal d'abandon"; |
QG_OPT_TOOLTIP_TEXT = "Afficher le texte dans les infobulles des objets/mobs"; |
QG_OPT_AUTOCOMPLETE = "Terminer automatiquement les qu\195\170tes"; |
QG_OPT_ALT_STATUS = "Afficher vos autres personnages dans l'infobulle"; |
QG_OPT_GUILD_STATUS = "Afficher les membres de votre guilde dans l'infobulle"; |
QG_OPT_GUILD_SIMPLE = "Affichage simple des membres de guilde"; |
QG_OPT_OBJ_ICON = "Afficher les ic\195\180nes des objets dans le journal"; |
QG_OPT_WORLDMAP_ICON = "Afficher les donneurs de qu\195\170tes sur la carte du monde"; |
QG_OPT_HEADER_QUEST_NUM = "Montrer le nombre de qu\195\170tes dans les ent\195\170tes"; |
QG_OPT_DISABLE_COMM = "Emp\195\170cher QG de communiquer avec les autres joueurs"; |
QG_OPT_TRACKER_DESC = "Faites-vous un superbe Tracker avec plein de couleurs !\nLes modifications sont appliqu\195\169es imm\195\169diatement."; |
QG_OPT_TRACKER_USE = "Suivre les qu\195\170tes avec QG"; |
QG_OPT_TRACKER_USE_DESC = "D\195\169cocher cette option pour utiliser le Tracker original du jeu."; |
QG_OPT_TRACKER_BORDER = "Afficher la bordure"; |
QG_OPT_TRACKER_BORDER_DESC = "Afficher ou non une bordure autour de la fen\195\170tre de suivi."; |
QG_OPT_TRACKER_CLICKTHROUGH = "Fixer la fen\195\170tre"; |
QG_OPT_TRACKER_CLICKTHROUGH_DESC = "Cette option activ\195\169e, vous ne pouvez plus d\195\169placer la fen\195\170tre."; |
QG_OPT_TRACKER_HEADERS = "Afficher les ent\195\170tes"; |
QG_OPT_TRACKER_HEADERS_DESC = "Affiche les ent\195\170tes des zones/cat\195\169gories des qu\195\170tes"; |
QG_OPT_TRACKER_LEVELS = "Afficher les niveaux"; |
QG_OPT_TRACKER_LEVELS_DESC = "Affiche les informations sur le niveau n\195\169c\195\169ssaire pour faire les qu\195\170tes."; |
QG_OPT_TRACKER_QUEST_TOOLTIPS = "Afficher les infobulles"; |
QG_OPT_TRACKER_QUEST_TOOLTIPS_DESC = "Ouvre une infobulle avec plein d'infos sur la qu\195\170te survol\195\169e. Ne fonctionne pas si le Tracker est fix\195\169 !"; |
QG_OPT_TRACKER_PARTY_TOOLTIPS = "Infobulles de groupe"; |
QG_OPT_TRACKER_PARTY_TOOLTIPS_DESC = "Ouvre une infobulle avec plein d'infos concernant le groupe/la guilde sur la qu\195\170te survol\195\169e.\nNe fonctionne pas si le tracker est fix\195\169 !"; |
QG_OPT_TRACKER_PERCENT = "Afficher les pourcentages"; |
QG_OPT_TRACKER_PERCENT_DESC = "Affiche le pourcentage de r\195\169alisation des qu\195\170tes."; |
QG_OPT_TRACKER_ANCHOR_BOTTOM = "Etirer vers le haut"; |
QG_OPT_TRACKER_ANCHOR_BOTTOM_DESC = "La fen\195\170tre de suivi grandit vers le haut (pratique pour la fixer en bas de l'\195\169cran)"; |
QG_OPT_TRACKER_AUTOTRACK = "Suivi auto. des qu\195\170tes"; |
QG_OPT_TRACKER_AUTOTRACK_DESC = "Ajoute automatiquement les nouvelles qu\195\170tes \195\160 la fen\195\170tre de suivi."; |
QG_OPT_TRACKER_AUTOUNTRACK = "Masquer les qu\195\170tes termin\195\169es"; |
QG_OPT_TRACKER_AUTOUNTRACK_DESC = "D\195\169sactive automatiquement le suivi des qu\195\170tes termin\195\169es."; |
QG_OPT_TRACKER_COMPLETE_OBJ = "Objectifs termin\195\169s"; |
QG_OPT_TRACKER_COMPLETE_OBJ_DESC = "D\195\169cocher la case pour masquer les objectifs termin\195\169s."; |
QG_OPT_TRACKER_COLOR_OBJ = "Couleurs"; |
QG_OPT_TRACKER_COLOR_OBJ_DESC = "Utiliser les couleurs ci-dessous pour identifier l'\195\169tat des qu\195\170tes :"; |
QG_OPT_TRACKER_OBJ_COLOR_0 = "Couleur quand l'objectif est atteint \195\160 0%"; |
QG_OPT_TRACKER_OBJ_COLOR_99 = "Couleur quand l'objectif est atteint \195\160 99%"; |
QG_OPT_TRACKER_OBJ_COLOR_COMPLETE = "Couleur quand l'objectif est termin\195\169"; |
QG_OPT_TRACKER_SIZE = "Taille de la fen\195\170tre"; |
QG_OPT_TRACKER_MAX_LINES = "Lignes maximum :"; |
QG_OPT_TRACKER_ALPHA = "Transparence"; |
QG_OPT_TRACKER_BULLET = "Symbole affich\195\169 devant les objectifs :"; |
QG_OPT_SOUND_HEAD = "Sons"; |
QG_OPT_SOUND_DESC = "Vous pouvez modifier les sons jou\195\169s lors de la progression des qu\195\170tes.\nLes modifications sont prises en compte imm\195\169diatement."; |
QG_OPT_SOUND_ENABLE = "Activer les sons"; |
QG_OPT_SOUND_OBJ = "Pour la progression d'un objectif :"; |
QG_OPT_SOUND_OBJ_DONE = "Pour la fin d'un objectif :"; |
QG_SOUND_QUEST_DONE = "Pour la fin d'une qu\195\170te :"; |
-- Other strings that may or may not need localizing |
QG_ITEM_REQ_STR = "(.*):%s*([%d]+)%s*/%s*([%d]+)"; -- The format of the line when an item is required for a quest, an invalid format can cause many errors |
QG_DATETIME = "%d/%m/%Y %H:%M:%S"; -- Format des dates utilise dans les infos des quetes |
end |
------------------------------------ |
-- QuestGuru German Localization -- |
------------------------------------ |
if (GetLocale() == "deDE") then |
QG_REP_GAIN = "Euer Ruf bei der Fraktion '(.*)' hat sich um ([%d]+) verbessert."; |
QG_REP_DEC = "Euer Ruf bei der Fraktion '(.*)' hat sich um ([%d]+) verschlechtert."; |
QG_XP_GAIN = "Ihr bekommt ([%d]+) Erfahrung."; |
QG_QUEST_COMPLETE = "Quest fertig!"; |
-- Default filler words used in various places |
QG_UNKNOWN = "Unbekannt"; |
QG_NONE = "Nichts"; |
-- Right click menu strings for Quest Log and Tracker |
QG_TRACK = "Beobachten"; |
QG_UNTRACK = "Nicht beobachten"; |
QG_SHARE_QUEST = "Quest teilen"; |
QG_ABANDON_QUEST = "Quest abbrechen"; |
QG_DELETE_QUEST = "Quest l\195\182schen"; |
-- Quest Start and Finish information |
QG_QSTART_HEAD = "Queststart Details"; |
QG_QSTART_NPC = "Gestartet von:"; |
QG_QSTART_TIME = "Startzeit:"; |
QG_QSTART_LEVEL = "Startstufe:"; |
QG_QFINISH_HEAD = "Questabgabe Details"; |
QG_QFINISH_NPC = "Abgegeben bei:"; |
QG_QFINISH_TIME = "Abgabezeit:"; |
QG_QFINISH_LEVEL = "Abgabestufe:"; |
QG_QABANDON = "Abgebrochen:"; |
-- Tab Text |
QG_TAB_CURRENT = "Aktuell"; |
QG_TAB_HISTORY = "Historie"; |
QG_TAB_ABANDON = "Abgebrochen"; |
QG_TAB_GUILD = "Gilde"; |
QG_TAB_PARTY = "Gruppe"; |
-- Party Info Tooltip strings |
QG_COMPLETE = "Fertig"; |
QG_ABANDONED = "Abgebrochen"; |
QG_INCOMPLETE = "Nicht fertig"; |
QG_ACTIVE = "Aktiv"; |
QG_ALT_STATUS_HEAD = "------------- Status eigener Charaktere -------------"; |
QG_GUILD_STATUS_HEAD = "---------- Gildenmitglieder Status ----------"; |
-- User Interface Elements |
QG_EXPAND_HEADERS = "Alle Bereiche ein-/ausklappen"; |
QG_OPTIONS = "Optionen"; |
QG_SEARCH = "Suchen: "; |
QG_CLEAR_ABANDON = "Abgebrochen-Liste l\195\182schen"; |
-- Abandon Tab Strings |
QG_ABANDON_CLEAR = "Wollen Sie die Liste l\195\182schen?"; |
QG_ABANDON_DELETE = "\"%s\" aus der Liste l\195\182schen?"; -- %s is the name of the quest |
-- History Tab strings |
QG_HISTORY_DELETE = "\"%s\" aus der Historie l\195\182schen?"; -- %s is the name of the quest |
QG_HISTORY_NONE = "Keine Quest Historie"; |
QG_HISTORY_EXPGAIN = "Erfahrung erhalten: "; |
QG_HISTORY_REPGAIN = "Ruf:"; |
-- Announcer |
QG_OPT_ANNOUNCE_HEAD = "QuestGuru Announcer Optionen"; |
QG_OPT_ANNOUNCE_DESC = "Benutzen Sie diese Optionen, um Ihren Questfortschritt anderen mitzuteilen.\n\195\132nderungen werden beim Klick auf OK gespeichert."; |
QG_OPT_ANNOUNCE_PROGRESS = "Questfortschritt mitteilen"; |
QG_OPT_ANNOUNCE_CHANNEL_HEAD = "Kan\195\164le:"; |
QG_OPT_ANNOUNCE_CHANNEL_SAY = "/s"; |
QG_OPT_ANNOUNCE_CHANNEL_SAY_DESC = "Questfortschritt in \"Say\" mitteilen"; |
QG_OPT_ANNOUNCE_CHANNEL_PARTY = "/p"; |
QG_OPT_ANNOUNCE_CHANNEL_PARTY_DESC = "Questfortschritt der Gruppe mitteilen"; |
QG_OPT_ANNOUNCE_CHANNEL_GUILD = "/g"; |
QG_OPT_ANNOUNCE_CHANNEL_GUILD_DESC = "Questfortschritt der Gilde mitteilen"; |
QG_OPT_ANNOUNCE_CHANNEL_WHISPER = "/w"; |
QG_OPT_ANNOUNCE_CHANNEL_WHISPER_DESC = "Questfortschritt jemandem zufl\195\188stern"; |
QG_OPT_ANNOUNCE_CHANNEL_WHISPER_TO = "an:"; |
QG_OPT_ANNOUNCE_ECHO = "Echo"; |
QG_OPT_ANNOUNCE_ECHO_DESC = "Fortschritt im allgemeinen Chatfenster anzeigen."; |
QG_OPT_ANNOUNCE_MESSAGES = "Nachrichten:"; |
QG_OPT_ANNOUNCE_HELP_DONE = "Anzahl gesammelter Gegenst\195\164nde oder get\195\182teter Monster"; |
QG_OPT_ANNOUNCE_HELP_NEEDED = "Gesamtzahl ben\195\182tigter Gegens\195\164tnde oder Monster"; |
QG_OPT_ANNOUNCE_HELP_NUMLEFT = "Anzahl noch ben\195\182tigter Gegenst\195\164nde oder Monster"; |
QG_OPT_ANNOUNCE_HELP_NAME = "Zieltext ohne #/#"; |
QG_OPT_ANNOUNCE_HELP_TITLE = "Name der Quest f\195\188r dieses Ziel"; |
QG_OPT_ANNOUNCE_HELP_UITEXT = "The text that showed up onscreen"; |
QG_OPT_ANNOUNCE_HELP_COMPLETE = "\195\156bersetzte Fertigmeldung: \""..COMPLETE.."\""; |
QG_OPT_ANNOUNCE_HELP_QLINK = "Der Questlink der betroffenen Quest"; |
QG_OPT_ANNOUNCE_ITEM_MSG = "Fortschritt bei Genst\195\164nden mit dieser Nachricht mitteilen:"; |
QG_OPT_ANNOUNCE_MOB_MSG = "Fortschritt bei Monstern mit dieser Nachricht mitteilen:"; |
QG_OPT_ANNOUNCE_EVENT_MSG = "Fortschritt bei Ereignissen mit dieser Nachricht mitteilen:"; |
QG_OPT_ANNOUNCE_COMPLETE_MSG = "Quest Fertigstellung mit dieser Nachticht mitteilen:"; |
QG_ANNOUNCE_ITEM_DEFAULT = "$done $name von $needed ben\195\182tigten f\195\188r $questTitle gesammelt"; |
QG_ANNOUNCE_MOB_DEFAULT = "$done $name von $needed ben\195\182tigten f\195\188r $questTitle"; |
QG_ANNOUNCE_RESET = "Announcer Optionen werden zur\195\188ckgesetzt."; |
-- Tracker |
QG_TRACKER_SHOW = "Tracker anzeigen"; |
QG_TRACKER_MINIMIZE = "Tracker minimieren"; |
QG_TRACKER_OPTIONS = "Trackeroptionen"; |
-- Options |
QG_OPT_OPTIONS_DESC = "Die sind die allgemeinen Einstellungen von QuestGuru.\n\195\132nderungen werden sofort gespeichert."; |
QG_OPT_COLORIZE_HEAD = "Einf\195\164rben"; |
QG_OPT_COLORIZE_PLAYER = "Spielername"; |
QG_OPT_COLORIZE_AREA = "Gebiete"; |
QG_OPT_COLORIZE_NPC = "NPC Namen"; |
QG_OPT_LEVELS_HEAD = "Stufen anzeigen"; |
QG_OPT_LEVELS_QUESTLOG = "Im Questlog"; |
QG_OPT_LEVELS_HISTORY = "In der Historie"; |
QG_OPT_LEVELS_ABANDON = "In der Abgebrochen-Liste"; |
QG_OPT_TOOLTIP_TEXT = "Zeige Text in Gegenstand- und Monstertooltips"; |
QG_OPT_AUTOCOMPLETE = "Quests automatisch einl\195\182sen"; |
QG_OPT_ALT_STATUS = "Zeige Queststatus eigener Charaktere im Tooltip"; |
QG_OPT_GUILD_STATUS = "Zeige Queststatus von Gildenmitgliedern im Tooltip"; |
QG_OPT_GUILD_SIMPLE = "Einfache Gildenmitgliederanzeige"; |
QG_OPT_OBJ_ICON = "Zeige Gegenstandicons im Questlog"; |
QG_OPT_DISABLE_COMM = "gesamte addon-zu-addon Kommunikation abschalten"; |
QG_OPT_TRACKER_DESC = "Diese Optionen \195\164ndern das Aussehen des QuestGuru Trackers.\n\195\132nderungen werden sofort gespeichert."; |
QG_OPT_TRACKER_USE = "QuestGuru Tracker verwenden"; |
QG_OPT_TRACKER_USE_DESC = "Deaktivieren Sie diese Option, um den Standardtracker oder andere Tracker Addons zu verwenden"; |
QG_OPT_TRACKER_BORDER = "Rahmen anzeigen"; |
QG_OPT_TRACKER_BORDER_DESC = "Aktivieren Sie diese Option, um einen d\195\188nnen Rahmen um den Tracker anzuzeigen"; |
QG_OPT_TRACKER_CLICKTHROUGH = "Durch den Tracker klicken"; |
QG_OPT_TRACKER_CLICKTHROUGH_DESC = "Aktivieren Sie diese Option, um den Tracker nicht anklickbar zu machen"; |
QG_OPT_TRACKER_HEADERS = "\195\156berschriften anzeigen"; |
QG_OPT_TRACKER_HEADERS_DESC = "Aktivieren Sie diese Option, um Zonen\195\188berschriften im Tracker anzuzeigen"; |
QG_OPT_TRACKER_LEVELS = "Queststufen anzeigen"; |
QG_OPT_TRACKER_LEVELS_DESC = "Aktivieren Sie diese Option, um die Queststufen im Tracker anzuzeigen"; |
QG_OPT_TRACKER_QUEST_TOOLTIPS = "Quest Tooltips anzeigen"; |
QG_OPT_TRACKER_QUEST_TOOLTIPS_DESC = "Aktivieren Sie diese Option, um einen Tooltip mit Informationen anzuzeigen, wenn Sie mit dem Mauszeiger \195\188ber Questnamen oder Ziele fahren"; |
QG_OPT_TRACKER_PARTY_TOOLTIPS = "Gruppen Tooltips anzeigen"; |
QG_OPT_TRACKER_PARTY_TOOLTIPS_DESC = "Aktivieren Sie diese Option, um den Tooltip f\195\188r Gruppen-, Gilden und Zweitcharakterinformationen anzuzeigen, wenn Sie mit dem Mauszeiger \195\188ber Questnamen fahren"; |
QG_OPT_TRACKER_PERCENT = "Quest Prozentwert anzeigen"; |
QG_OPT_TRACKER_PERCENT_DESC = "Aktivieren Sie diese Option, um den Fortschrittsprozentwert neben dem Questnamen im Tracker anzuzeigen"; |
QG_OPT_TRACKER_ANCHOR_BOTTOM = "Unten verankern"; |
QG_OPT_TRACKER_ANCHOR_BOTTOM_DESC = "Verankert den unteren Rand des Trackers, um ihn nach oben zu vergr\195\182\195\159ern."; |
QG_OPT_TRACKER_AUTOTRACK = "Neue Q's automatisch beobachten"; |
QG_OPT_TRACKER_AUTOTRACK_DESC = "Aktivieren Sie diese Option, um neue Quests automatisch zum Tracker hinzuzuf\195\188gen"; |
QG_OPT_TRACKER_AUTOUNTRACK = "Fertige Q's nicht beobachten"; |
QG_OPT_TRACKER_AUTOUNTRACK_DESC = "Nach abschlie\195\159en aller Questziele Quest automtisch aus dem Tracker entfernen"; |
QG_OPT_TRACKER_COMPLETE_OBJ = "Vollendete Ziele anzeigen"; |
QG_OPT_TRACKER_COMPLETE_OBJ_DESC = "Deaktivieren Sie diese Option, um vollendete Questziele nicht im Tracker anzuzeigen"; |
QG_OPT_TRACKER_COLOR_OBJ = "Ziele nach Fortschritt einf\195\164rben"; |
QG_OPT_TRACKER_COLOR_OBJ_DESC = "Aktivieren Sie diese Option, um Questziele nach dem Fortschritt mit den folgenden Farben einzuf\195\164rben"; |
QG_OPT_TRACKER_OBJ_COLOR_0 = "Farbe f\195\188r zu 0% vollendete Ziele"; |
QG_OPT_TRACKER_OBJ_COLOR_99 = "Farbe f\195\188r zu 99% vollendete Ziele"; |
QG_OPT_TRACKER_OBJ_COLOR_COMPLETE = "Farbe f\195\188r vollendete Ziele"; |
QG_OPT_TRACKER_SIZE = "Trackergr\195\182\195\159e"; |
QG_OPT_TRACKER_MAX_LINES = "Max. Trackerzeilen:"; |
QG_OPT_TRACKER_ALPHA = "Hintergrund-Alpha"; |
QG_OPT_SOUND_HEAD = "Klangoptionen"; |
QG_OPT_SOUND_DESC = "Benutzen Sie diese Optionen, um die Kl\195\164nge zu \195\164ndern, die beim Questfortschritt abgespielt werden.\n\195\132nderungen werden sofort gespeichert."; |
QG_OPT_SOUND_ENABLE = "Zus\195\164tzliche Kl\195\164nge aktivieren"; |
QG_OPT_SOUND_OBJ = "Klang beim Zielfortschritt abspielen:"; |
QG_OPT_SOUND_OBJ_DONE = "Klang beim abschlie\195\159en eines Questziels abspielen:"; |
QG_SOUND_QUEST_DONE = "Klang beim Fertigstellen einer Quest abspielen:"; |
-- Other strings that may or may not need localizing |
QG_ITEM_REQ_STR = "(.*):%s*([%d]+)%s*/%s*([%d]+)"; -- The format of the line when an item is required for a quest, an invalid format can cause many errors |
QG_DATETIME = "%d/%m/%Y %H:%M:%S"; -- The format that date/time values are stored and displayed for start/finish info |
end |
QuestGuru_CommFrame = CreateFrame("FRAME", "QuestGuru_CommFrame", UIParent); |
QuestGuru_CommFrame:SetPoint("TOPLEFT"); |
QuestGuru_CommFrame:SetHeight(0); |
QuestGuru_CommFrame:SetWidth(0); |
QuestGuru_CommFrame:SetScript("OnUpdate", |
function (self, elapsed) |
QuestGuru_CommOnUpdate(elapsed); |
end); |
QuestGuru_CommFrame:Show(); |
QuestGuru_CommGuild = {}; |
QuestGuru_CommParty = {}; |
-- [PlayerName].QGver = version of QuestGuru other player is using |
-- quietTime = number of seconds since last message from player |
-- [quest number].Title |
-- .Status = status of player on that quest |
-- .Objectives = objectives text |
-- .Description = description text |
-- .[Obj#].type = objective type |
-- .text = objective text |
-- .finished = objective finished? |
-- .[Reward#].type = reward type (choice, spell, reward) |
-- .link = reward link |
-- MPmsg = storage for multi-part messages |
QuestGuru_CommTimer = {}; |
-- .interval = number of seconds to wait |
-- .currTime = number of seconds remaining |
-- .func = function to call after interval |
-- .count = number of times to repeat (-1 for infinite) |
-- .args = options arguments to pass |
QuestGuru_CommLastPartyNum = 0; |
QuestGuru_CommPendingPartyUpdate = false; |
function QuestGuru_CommOnUpdate(elapsed) |
local i, timer; |
for i, timer in ipairs(QuestGuru_CommTimer) do |
timer.currTime = timer.currTime - elapsed; |
if (timer.currTime <= 0) then |
timer.func(timer.arg1, timer.arg2, timer.arg3, timer.arg4); |
timer.currTime = timer.interval; |
timer.count = timer.count - 1; |
if (timer.count < 0) then |
timer.count = -1; |
elseif (timer.count == 0) then |
tremove(QuestGuru_CommTimer, i); |
i = i - 1; |
end |
end |
end |
end |
function QuestGuru_CommAddTimer(interval, count, func, arg1, arg2, arg3, arg4) |
local tempTimer = {} |
tempTimer.interval = interval; |
tempTimer.currTime = interval; |
tempTimer.count = count; |
tempTimer.func = func; |
tempTimer.arg1 = arg1; |
tempTimer.arg2 = arg2; |
tempTimer.arg3 = arg3; |
tempTimer.arg4 = arg4; |
tinsert(QuestGuru_CommTimer, tempTimer); |
end |
function QuestGuru_CommSendMessage(channel, code, ...) |
local i = 1; |
local recipient; |
if (channel == "WHISPER") then |
i = 2; |
recipient = select(1, ...); |
end |
if ((not QuestGuru_Settings.DisableComm) and not ((UnitInBattleground("player") ~= nil) and (channel == "PARTY"))) then |
ChatThrottleLib:SendAddonMessage("NORMAL", "QuGu", strjoin(string.char(2), code, ...), channel, recipient); |
end |
end |
function QuestGuru_CommSendPGMessage(...) |
if ((GetNumPartyMembers() > 0) and (table.getn(QuestGuru_CommParty) > 0)) then |
QuestGuru_CommSendMessage("PARTY", ...); |
end |
if (IsInGuild()) then |
QuestGuru_CommSendMessage("GUILD", ...); |
end |
end |
function QuestGuru_CommSendMPMessage(channel, code, recipient, qNum, msg) |
-- Sends a MultiPart message (for quest objective and description since they can exceed the per-message size limit) |
-- These should always be WHISPER. Part "0" is last part, ready to process |
-- MP messages use char(3) to not conflict with SendMessage |
local i=1; |
msg = qNum..string.char(3)..msg; |
while (strlen(msg) > 200) do |
local t = string.sub(msg, 1, 200); |
msg = string.sub(msg, 201); |
QuestGuru_CommSendMessage(channel, code, recipient, i, t) |
i = i + 1; |
end |
QuestGuru_CommSendMessage(channel, code, recipient, "0", msg) |
end |
function QuestGuru_CommProcessMsg(sender, channel, message) |
local msg = { strsplit(string.char(2), message) }; |
if (msg == nil) then return; end |
local code = msg[1]; |
local currSender; |
if (channel == "GUILD") then |
if (QuestGuru_CommGuild[sender] == nil) then |
QuestGuru_CommGuild[sender] = {}; |
end |
currSender = QuestGuru_CommGuild[sender]; |
elseif (channel == "PARTY") then |
if (QuestGuru_CommParty[sender] == nil) then |
QuestGuru_CommParty[sender] = {}; |
end |
currSender = QuestGuru_CommParty[sender]; |
else |
if (QuestGuru_CommGuild[sender]) then QuestGuru_CommGuild[sender].quietTime = 0; end |
if (QuestGuru_CommParty[sender]) then QuestGuru_CommParty[sender].quietTime = 0; end |
currSender = {}; |
end |
currSender.quietTime = 0; |
if (code == "0000") then -- Player is sending their QG info |
-- store it |
currSender.QGver = msg[2]; |
QuestGuru_Echo(sender.." is using QuestGuru v"..msg[2]); |
elseif (code == "0001") then -- Player is sending QG info and requesting yours |
-- store their info and send ours |
currSender.QGver = msg[2]; |
QuestGuru_Echo(sender.." is using QuestGuru v"..msg[2]); |
if (sender ~= QuestGuru_Player) then QuestGuru_CommSendMessage(channel, "0000", QUESTGURU_VERSION); end |
elseif (code == "0008") then -- Pong |
-- not really necessary to do anything |
elseif (code == "0009") then -- Ping |
-- send a Pong |
QuestGuru_CommSendMessage("WHISPER", "0008", sender); |
elseif (code == "000F") then -- Player logged out |
currSender = nil; |
QuestGuru_Echo(sender.." logged off"); |
elseif (code == "0020") then -- Discovered NPC Name |
QuestGuru_MoreNPCNames[msg[2]] = 1; |
elseif (code == "0024") then -- Discovered Area Name |
QuestGuru_MoreAreaNames[msg[2]] = 1; |
elseif (code == "0108") then -- Player is on quest (linkNum, objStatus) |
if ((not msg[2]) or (not msg[3])) then return; end |
local qIDi, qIDj, qNum = string.find(msg[2], (":(%d+):")); |
if (qNum) then |
if (not currSender[qNum]) then currSender[qNum] = {}; end |
currSender[qNum].Status = msg[3]; |
end |
QuestLog_Update(); |
elseif (code == "0109") then -- Player is on quest, requesting who else is too |
if ((not msg[2]) or (not msg[3])) then return; end |
local qIDi, qIDj, qNum = string.find(msg[2], (":(%d+):")); |
if (qNum) then |
if (not currSender[qNum]) then currSender[qNum] = {}; end |
currSender[qNum].Status = msg[3]; |
end |
local numEntries, numQuests = GetNumQuestLogEntries(); |
local i, j; |
local qStatus = ""; |
for i=1, numEntries do |
local qLink = GetQuestLink(i); |
if (qLink) then |
local qli, qlj, qlNum = string.find(qLink, (":(%d+):")); |
if (qlNum == qNum) then |
QuestGuru_SendQuestStatus(i, false); |
end |
end |
end |
QuestLog_Update(); |
elseif (code == "010A") then -- Player completed quest |
currSender[msg[2]] = nil; |
QuestLog_Update(); |
elseif (code == "010B") then -- Player completed quest, requesting who else has it |
-- not used at this time |
elseif (code == "010C") then -- Player abandoned quest |
currSender[msg[2]] = nil; |
QuestLog_Update(); |
elseif (code == "010D") then -- Player abandoned quest, requesting who else has it |
-- not used at this time |
elseif (code == "0200") then -- qID = quest link |
QuestGuru_UpdateqID(msg[2], msg[3]); |
elseif (code == "0201") then -- Request quest link by qID |
if (QuestGuru_Quests[QuestGuru_RealmName][msg[2]] ~= nil) then |
if (QuestGuru_Quests[QuestGuru_RealmName][msg[2]]["_link"] ~= nil) then |
QuestGuru_CommSendMessage(channel, "0200", msg[2], QuestGuru_Quests[QuestGuru_RealmName][msg[2]]["_link"]); |
end |
end |
elseif (code == "0202") then -- Quest Title (qNum, Title) |
if (not currSender[msg[2]]) then currSender[msg[2]] = {}; end |
currSender[msg[2]].Title = msg[3]; |
elseif (code == "0203") then -- Request quest title (qNum) |
if (not msg[2]) then return; end |
local qNum = msg[2]; |
local numEntries, numQuests = GetNumQuestLogEntries(); |
local i, j; |
local qStatus = ""; |
for i=1, numEntries do |
local qLink = GetQuestLink(i); |
if (qLink) then |
local qli, qlj, qlNum = string.find(qLink, (":(%d+):")); |
if (qlNum == qNum) then |
local qTitle = GetQuestLogTitle(i); |
QuestGuru_CommSendMessage(channel, "0202", sender, qNum, qTitle); |
end |
end |
end |
elseif (code == "0204") then -- Objectives text (msg[2] = part, msg[3] = qNum..char(3)..text) |
if (tonumber(msg[2]) == 1) then currSender.MPmsg = nil; end |
currSender.MPmsg = currSender.MPmsg..msg[3]; |
if (msg[2] == "0") then -- end of multi-part |
local qDesc = { strsplit(string.char(3), currSender.MPmsg) }; -- qDesc[1] = qNum, qDesc[2] = text |
if (not currSender[qDesc[1]]) then currSender[qDesc[1]] = {}; end |
currSender[qDesc[1]].Objectives = qDesc[2]; |
currSender.MPmsg = nil; |
end |
elseif (code == "0205") then -- Request objectives text (qNum) |
if (not msg[2]) then return; end |
local qNum = msg[2]; |
local numEntries, numQuests = GetNumQuestLogEntries(); |
local i, j; |
local qStatus = ""; |
for i=1, numEntries do |
local qLink = GetQuestLink(i); |
if (qLink) then |
local qli, qlj, qlNum = string.find(qLink, (":(%d+):")); |
if (qlNum == qNum) then |
QuestGuru_SendQuestObjectivesText(i, sender, qNum); |
end |
end |
end |
elseif (code == "0206") then -- Description text (msg[2] = part, msg[3] = qNum..char(3)..text) |
if (tonumber(msg[2]) < 2) then currSender.MPmsg = nil; end |
currSender.MPmsg = currSender.MPmsg..msg[3]; |
if (msg[2] == "0") then -- end of multi-part |
local qDesc = { strsplit(string.char(3), currSender.MPmsg) }; -- qDesc[1] = qNum, qDesc[2] = text |
if (not currSender[qDesc[1]]) then currSender[qDesc[1]] = {}; end |
currSender[qDesc[1]].Description = qDesc[2]; |
end |
elseif (code == "0207") then -- Request description text (qNum) |
if (not msg[2]) then return; end |
local qNum = msg[2]; |
local numEntries, numQuests = GetNumQuestLogEntries(); |
local i, j; |
local qStatus = ""; |
for i=1, numEntries do |
local qLink = GetQuestLink(i); |
if (qLink) then |
local qli, qlj, qlNum = string.find(qLink, (":(%d+):")); |
if (qlNum == qNum) then |
QuestGuru_SendQuestDescription(i, sender, qNum); |
end |
end |
end |
elseif (code == "0208") then -- Quest starter info (qNum, info) |
if (QuestGuru_Quests[QuestGuru_RealmName][msg[2]] == nil) then |
QuestGuru_Quests[QuestGuru_RealmName][msg[2]] = {}; |
end |
if ((QuestGuru_Quests[QuestGuru_RealmName][msg[2]].StartInfo == nil) or (string.find(QuestGuru_Quests[QuestGuru_RealmName][msg[2]].StartInfo, QG_UNKNOWN))) then |
QuestGuru_Quests[QuestGuru_RealmName][msg[2]].StartInfo = msg[3]; |
end |
elseif (code == "0209") then -- Requesting quest starter info (qNum) |
if (QuestGuru_Quests[QuestGuru_RealmName][msg[2]] ~= nil) then |
if ((QuestGuru_Quests[QuestGuru_RealmName][msg[2]].StartInfo ~= nil) and (not string.find(QuestGuru_Quests[QuestGuru_RealmName][msg[2]].StartInfo, QG_UNKNOWN))) then |
QuestGuru_CommSendMessage(channel, "020A", msg[2], QuestGuru_Quests[QuestGuru_RealmName][msg[2]].StartInfo); |
end |
end |
elseif (code == "020A") then -- Quest finisher info (qNum, info) |
if (QuestGuru_Quests[QuestGuru_RealmName][msg[2]] == nil) then |
QuestGuru_Quests[QuestGuru_RealmName][msg[2]] = {}; |
end |
if ((QuestGuru_Quests[QuestGuru_RealmName][msg[2]].FinishInfo == nil) or (string.find(QuestGuru_Quests[QuestGuru_RealmName][msg[2]].FinishInfo, QG_UNKNOWN))) then |
QuestGuru_Quests[QuestGuru_RealmName][msg[2]].FinishInfo = msg[3]; |
end |
elseif (code == "020B") then -- Requesting quest finisher info (qNum) |
if (QuestGuru_Quests[QuestGuru_RealmName][msg[2]] ~= nil) then |
if ((QuestGuru_Quests[QuestGuru_RealmName][msg[2]].FinishInfo ~= nil) and (not string.find(QuestGuru_Quests[QuestGuru_RealmName][msg[2]].FinishInfo, QG_UNKNOWN))) then |
QuestGuru_CommSendMessage(channel, "020A", msg[2], QuestGuru_Quests[QuestGuru_RealmName][msg[2]].FinishInfo); |
end |
end |
elseif (code == "020C") then -- Quest objective (qNum, type, text) |
elseif (code == "020D") then -- Request quest objectives (qNum) |
elseif (code == "020E") then -- Quest reward (qNum, type, link) |
elseif (code == "020F") then -- Request quest rewards (qNum) |
elseif (code == "0300") then -- Item link by name |
if (QuestGuru_Items[QuestGuru_RealmName]) then |
QuestGuru_Items[QuestGuru_RealmName][msg[2]] = msg[3]; |
end |
elseif (code == "0301") then -- Request item link by name |
if (QuestGuru_Items[QuestGuru_RealmName] and QuestGuru_Items[QuestGuru_RealmName][msg[2]]) then |
QuestGuru_CommSendMessage(channel, "0300", msg[2], QuestGuru_Items[QuestGuru_RealmName][msg[2]]); |
end |
end |
end |
function QuestGuru_UpdateqID(qID, link) |
if (QuestGuru_Quests[QuestGuru_RealmName][qID] == nil) then |
QuestGuru_Quests[QuestGuru_RealmName][qID] = {}; |
end |
if (QuestGuru_Quests[QuestGuru_RealmName][qID]["_link"] == nil) then |
QuestGuru_Quests[QuestGuru_RealmName][qID]["_link"] = link; |
end |
local qIDi, qIDj, qNum, qLevel = string.find(link, (":(%d+):(%d+)|")); |
if (qLevel and (QuestGuru_Quests[QuestGuru_RealmName][qID].level == nil)) then |
QuestGuru_Quests[QuestGuru_RealmName][qID].level = qLevel; |
end |
if (qNum and (QuestGuru_Quests[QuestGuru_RealmName][qNum] == nil)) then |
QuestGuru_Quests[QuestGuru_RealmName][qNum] = {}; |
end |
if (qNum and (QuestGuru_Quests[QuestGuru_RealmName][qNum][qID] == nil)) then |
QuestGuru_Quests[QuestGuru_RealmName][qNum][qID] = 1; |
end |
end |
function QuestGuru_SendCurrentQuestStatus(req, channel) |
local numEntries, numQuests = GetNumQuestLogEntries(); |
local i; |
for i=1, numEntries do |
QuestGuru_SendQuestStatus(i, req, channel); |
end |
end |
function QuestGuru_SendQuestStatusByName(name, req, channel) |
local i; |
local numEntries, numQuests = GetNumQuestLogEntries(); |
for i=1, numEntries do |
local qTitle = GetQuestLogTitle(i); |
if (qTitle == name) then |
QuestGuru_SendQuestStatus(i, req, channel); |
end |
end |
end |
function QuestGuru_SendQuestStatus(index, req, channel) |
local j; |
local qStatus = ""; |
if (req ~= false) then req = true; end |
local qLink = GetQuestLink(index); |
if (qLink) then |
local numObjectives = GetNumQuestLeaderBoards(index); |
for j=1, numObjectives do |
local text, type, finished = GetQuestLogLeaderBoard(j, index); |
if ((type == "item") or (type == "monster") or (type == "object")) then |
local x, y, name, numItems, numNeeded = string.find(text, QG_ITEM_REQ_STR); |
if (name ~= nil) then |
qStatus = qStatus..numItems..";"; |
end |
else |
if (finished) then |
qStatus = qStatus.."1;"; |
else |
qStatus = qStatus.."0;"; |
end |
end |
end |
local code = "0108"; |
if (req == true) then code = "0109"; end |
if (channel == nil) then |
QuestGuru_CommSendPGMessage(code, qLink, qStatus); |
else |
QuestGuru_CommSendMessage(channel, code, qLink, qStatus); |
end |
end |
end |
function QuestGuru_SendQuestDescription(index, recipient, qNum) |
local questSelected = GetQuestLogSelection(); |
SelectQuestLogEntry(index); |
local questDescription, questObjectives = GetQuestLogQuestText(); |
QuestGuru_CommSendMPMessage("WHISPER", "0206", recipient, qNum, questDescription); |
SelectQuestLogEntry(questSelected); |
end |
function QuestGuru_SendQuestObjectivesText(index, recipient, qNum) |
local questSelected = GetQuestLogSelection(); |
SelectQuestLogEntry(index); |
local questDescription, questObjectives = GetQuestLogQuestText(); |
QuestGuru_CommSendMPMessage("WHISPER", "0204", recipient, qNum, questObjectives); |
SelectQuestLogEntry(questSelected); |
end |
function QuestGuru_FindLink(lastqID) |
local qID, record; |
for qID, record in pairs(QuestGuru_Quests) do |
if (record["_link"] == nil) then |
if (lastqID == nil) then |
lastqID = qID; |
QuestGuru_CommSendPGMessage("0201", qID); |
QuestGuru_CommAddTimer(60, 1, QuestGuru_FindLink, lastqID); |
return; |
elseif (lastqID == qID) then |
lastqID = nil; |
end |
end |
end |
end |
function QuestGuru_CommUpdateParty() |
local i, v; |
local c = 0; |
for i, v in pairs(QuestGuru_CommParty) do |
if (not UnitInParty(i)) then |
QuestGuru_CommParty[i] = nil; |
else |
c = c + 1; |
end |
end |
if ((QuestGuru_CommLastPartyNum == 0) and (GetNumPartyMembers() > 0)) then |
QuestGuru_CommSendMessage("PARTY", "0001", QUESTGURU_VERSION); |
QuestGuru_SendCurrentQuestStatus(true, "PARTY"); |
end |
QuestGuru_CommLastPartyNum = GetNumPartyMembers(); |
QuestGuru_CommPendingPartyUpdate = false; |
end |
function QuestGuru_CommUpdateGuild() |
local i; |
local c = 0; |
local guildNum = GetNumGuildMembers(); |
local showOffline = GetGuildRosterShowOffline(); |
if (QuestGuru_CommGuild == nil) then QuestGuru_CommGuild = {}; end |
SetGuildRosterShowOffline(true); |
for i=1, guildNum do |
local name, rank, rankIndex, level, class, zone, note, officernote, online, status = GetGuildRosterInfo(i); |
if (not online) then |
if (name) then QuestGuru_CommGuild[name] = nil; end |
else |
if (name and QuestGuru_CommGuild[name]) then |
c = c + 1; |
end |
end |
end |
SetGuildRosterShowOffline(showOffline); |
end |
function QuestGuru_CommListGuild() |
local i, v; |
for i, v in pairs(QuestGuru_CommGuild) do |
QuestGuru_Echo(i.." is using QuestGuru v"..v.QGver, true); |
end |
end |
local lastColorPick; |
QuestGuru_Sounds = {"PVPENTERQUEUE","PVPTHROUGHQUEUE","GLUECREATECHARACTERBUTTON","GLUEENTERWORLDBUTTON","QUESTCOMPLETED","INTERFACESOUND_MONEYFRAMEOPEN", |
"igPlayerInvite","LEVELUP","QUESTADDED","gsCharacterCreationCreateChar","TalentScreenOpen","ReadyCheck","RaidWarning","AuctionWindowOpen","AuctionWindowClose", |
"Sound\\Creature\\Peon\\PeonBuildingComplete1.wav", "Sound\\Creature\\Peon\\PeonReady1.wav", "Sound\\Creature\\Peasant\\PeasantReady1.wav", "Sound\\Interface\\igPlayerBind.wav", |
"Sound\\Creature\\MillhouseManastorm\\TEMPEST_Millhouse_Ready01.wav", "Sound\\Creature\\MillhouseManastorm\\TEMPEST_Millhouse_Slay01.wav", "Sound\\Creature\\Cow\\CowDeath.wav", |
"Sound\\interface\\HumanExploration.wav","Sound\\Creature\\Peasant\\PeasantWhat3.wav"}; |
function QuestGuru_OptionsFrameSoundProgressDropDown_Initialize() |
if (QuestGuru_Settings.Sounds == nil) then return; end |
local info = UIDropDownMenu_CreateInfo(); |
info.func = QuestGuru_OptionsFrameSoundProgress_OnClick; |
info.owner = QuestGuru_OptionsFrameSoundProgressButton; |
info.checked = nil; |
info.icon = nil; |
for i,v in ipairs(QuestGuru_Sounds) do |
info.text = v; |
info.value = i; |
if (v == QuestGuru_Settings.Sounds.Progress.Sound) then |
info.checked = 1; |
else |
info.checked = nil; |
end |
UIDropDownMenu_AddButton(info, 1); |
end |
UIDropDownMenu_SetText(QuestGuru_OptionsFrameSoundProgressButton, QuestGuru_Settings.Sounds.Progress.Sound); |
end |
function QuestGuru_OptionsFrameSoundProgress_OnClick(self, button, down) |
if (QuestGuru_Settings.Sounds == nil) then return; end |
local sound = QuestGuru_Sounds[self.value]; |
if ((string.sub(sound, -4) == ".wav") or (string.sub(sound, -4) == ".mp3")) then |
PlaySoundFile(sound); |
else |
PlaySound(sound); |
end |
UIDropDownMenu_SetText(QuestGuru_OptionsFrameSoundProgressButton, sound); |
QuestGuru_Settings.Sounds.Progress.Sound = sound; |
end |
function QuestGuru_OptionsFrameSoundObjCompleteDropDown_Initialize() |
if (QuestGuru_Settings.Sounds == nil) then return; end |
local info = UIDropDownMenu_CreateInfo(); |
info.func = QuestGuru_OptionsFrameSoundObjComplete_OnClick; |
info.owner = QuestGuru_OptionsFrameSoundObjCompleteButton; |
info.checked = nil; |
info.icon = nil; |
for i,v in ipairs(QuestGuru_Sounds) do |
info.text = v; |
info.value = i; |
if (v == QuestGuru_Settings.Sounds.ObjComplete.Sound) then |
info.checked = 1; |
else |
info.checked = nil; |
end |
UIDropDownMenu_AddButton(info, 1); |
end |
UIDropDownMenu_SetText(QuestGuru_OptionsFrameSoundObjCompleteButton, QuestGuru_Settings.Sounds.ObjComplete.Sound); |
end |
function QuestGuru_OptionsFrameSoundObjComplete_OnClick(self, button, down) |
if (QuestGuru_Settings.Sounds == nil) then return; end |
local sound = QuestGuru_Sounds[self.value]; |
if ((string.sub(sound, -4) == ".wav") or (string.sub(sound, -4) == ".mp3")) then |
PlaySoundFile(sound); |
else |
PlaySound(sound); |
end |
UIDropDownMenu_SetText(QuestGuru_OptionsFrameSoundObjCompleteButton, sound); |
QuestGuru_Settings.Sounds.ObjComplete.Sound = sound; |
end |
function QuestGuru_OptionsFrameSoundQuestCompleteDropDown_Initialize() |
if (QuestGuru_Settings.Sounds == nil) then return; end |
local info = UIDropDownMenu_CreateInfo(); |
info.func = QuestGuru_OptionsFrameSoundQuestComplete_OnClick; |
info.owner = QuestGuru_OptionsFrameSoundQuestCompleteButton; |
info.checked = nil; |
info.icon = nil; |
for i,v in ipairs(QuestGuru_Sounds) do |
info.text = v; |
info.value = i; |
if (v == QuestGuru_Settings.Sounds.QuestComplete.Sound) then |
info.checked = 1; |
else |
info.checked = nil; |
end |
UIDropDownMenu_AddButton(info, 1); |
end |
UIDropDownMenu_SetText(QuestGuru_OptionsFrameSoundQuestCompleteButton, QuestGuru_Settings.Sounds.QuestComplete.Sound); |
end |
function QuestGuru_OptionsFrameSoundQuestComplete_OnClick(self, button, down) |
if (QuestGuru_Settings.Sounds == nil) then return; end |
local sound = QuestGuru_Sounds[self.value]; |
if ((string.sub(sound, -4) == ".wav") or (string.sub(sound, -4) == ".mp3")) then |
PlaySoundFile(sound); |
else |
PlaySound(sound); |
end |
UIDropDownMenu_SetText(QuestGuru_OptionsFrameSoundQuestCompleteButton, sound); |
QuestGuru_Settings.Sounds.QuestComplete.Sound = sound; |
end |
do |
local temp, i; |
--------------------- |
-- General Options -- |
--------------------- |
QuestGuru_OptionsFrameGeneral = CreateFrame("FRAME", "QuestGuru_OptionsFrameGeneral", QuestGuru_OptionsFrame); |
QuestGuru_OptionsFrameGeneral.name = "QuestGuru"; |
QuestGuru_OptionsFrameGeneral.default = function () QuestGuru_SetGeneralDefaults(); end; |
InterfaceOptions_AddCategory(QuestGuru_OptionsFrameGeneral); |
QuestGuru_OptionsFrameGeneralTitle = QuestGuru_OptionsFrameGeneral:CreateFontString("QuestGuru_OptionsFrameGeneralTitle", "ARTWORK", "GameFontNormalLarge"); |
QuestGuru_OptionsFrameGeneralTitle:SetPoint("TOPLEFT", 16, -16); |
QuestGuru_OptionsFrameGeneralTitle:SetJustifyH("LEFT"); |
QuestGuru_OptionsFrameGeneralTitle:SetJustifyV("TOP"); |
QuestGuru_OptionsFrameGeneralTitle:SetText("QuestGuru "..QG_OPTIONS); |
QuestGuru_OptionsFrameGeneralSubText = QuestGuru_OptionsFrameGeneral:CreateFontString("QuestGuru_OptionsFrameGeneralSubText", "ARTWORK", "GameFontHighlightSmall"); |
QuestGuru_OptionsFrameGeneralSubText:SetPoint("TOPLEFT", "QuestGuru_OptionsFrameGeneralTitle", "BOTTOMLEFT", 0, -8); |
QuestGuru_OptionsFrameGeneralSubText:SetPoint("RIGHT", -32, 0); |
QuestGuru_OptionsFrameGeneralSubText:SetJustifyH("LEFT"); |
QuestGuru_OptionsFrameGeneralSubText:SetJustifyV("TOP"); |
QuestGuru_OptionsFrameGeneralSubText:SetHeight(24); |
QuestGuru_OptionsFrameGeneralSubText:SetText(QG_OPT_OPTIONS_DESC); |
QuestGuru_OptionsFrameGeneralShowLevels = QuestGuru_OptionsFrameGeneral:CreateFontString("QuestGuru_OptionsFrameGeneralShowLevels", "OVERLAY", "GameFontHighlight"); |
QuestGuru_OptionsFrameGeneralShowLevels:SetPoint("TOPLEFT", "QuestGuru_OptionsFrameGeneralSubText", "BOTTOMLEFT", -2, -8); |
QuestGuru_OptionsFrameGeneralShowLevels:SetText(QG_OPT_LEVELS_HEAD); |
QuestGuru_OptionsFrameShowLevelsQuestLogToggle = CreateFrame("CheckButton", "QuestGuru_OptionsFrameShowLevelsQuestLogToggle", QuestGuru_OptionsFrameGeneral, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_OptionsFrameShowLevelsQuestLogToggle:SetPoint("TOPLEFT", QuestGuru_OptionsFrameGeneralShowLevels, "BOTTOMLEFT", 0, -2); |
QuestGuru_OptionsFrameShowLevelsQuestLogToggleText:SetText(QG_OPT_LEVELS_QUESTLOG); |
QuestGuru_OptionsFrameShowLevelsQuestLogToggle:SetScript("OnClick", |
function () |
if (QuestGuru_OptionsFrameShowLevelsQuestLogToggle:GetChecked()) then |
QuestGuru_Settings.ShowLevels.QuestLog = true; |
else |
QuestGuru_Settings.ShowLevels.QuestLog = false; |
end |
QuestLog_Update(); |
end); |
QuestGuru_OptionsFrameAutoCompleteToggle = CreateFrame("CheckButton", "QuestGuru_OptionsFrameAutoCompleteToggle", QuestGuru_OptionsFrameGeneral, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_OptionsFrameAutoCompleteToggle:SetPoint("TOPLEFT", QuestGuru_OptionsFrameShowLevelsQuestLogToggle, "BOTTOMLEFT", 0, -6); |
QuestGuru_OptionsFrameAutoCompleteToggleText:SetText(QG_OPT_AUTOCOMPLETE); |
QuestGuru_OptionsFrameAutoCompleteToggle:SetScript("OnClick", |
function () |
if (QuestGuru_OptionsFrameAutoCompleteToggle:GetChecked()) then |
QuestGuru_Settings.AutoComplete = true; |
else |
QuestGuru_Settings.AutoComplete = false; |
end |
end); |
QuestGuru_OptionsFrameShowObjItemIconsToggle = CreateFrame("CheckButton", "QuestGuru_OptionsFrameShowObjItemIconsToggle", QuestGuru_OptionsFrameGeneral, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_OptionsFrameShowObjItemIconsToggle:SetPoint("TOPLEFT", QuestGuru_OptionsFrameAutoCompleteToggle, "BOTTOMLEFT", 0, -4); |
QuestGuru_OptionsFrameShowObjItemIconsToggleText:SetText(QG_OPT_OBJ_ICON); |
QuestGuru_OptionsFrameShowObjItemIconsToggle:SetScript("OnClick", |
function () |
if (QuestGuru_OptionsFrameShowObjItemIconsToggle:GetChecked()) then |
QuestGuru_Settings.ShowObjItemIcons = true; |
else |
QuestGuru_Settings.ShowObjItemIcons = false; |
end |
QuestLog_UpdateQuestDetails(); |
end); |
QuestGuru_OptionsFrameShowHeaderQuestsToggle = CreateFrame("CheckButton", "QuestGuru_OptionsFrameShowHeaderQuestsToggle", QuestGuru_OptionsFrameGeneral, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_OptionsFrameShowHeaderQuestsToggle:SetPoint("TOPLEFT", QuestGuru_OptionsFrameShowObjItemIconsToggle, "BOTTOMLEFT", 0, -4); |
QuestGuru_OptionsFrameShowHeaderQuestsToggleText:SetText(QG_OPT_HEADER_QUEST_NUM); |
QuestGuru_OptionsFrameShowHeaderQuestsToggle:SetScript("OnClick", |
function () |
if (QuestGuru_OptionsFrameShowHeaderQuestsToggle:GetChecked()) then |
QuestGuru_Settings.HeaderQuests = true; |
else |
QuestGuru_Settings.HeaderQuests = false; |
end |
QuestLog_Update(); |
end); |
QuestGuru_OptionsFrameDisableCommToggle = CreateFrame("CheckButton", "QuestGuru_OptionsFrameDisableCommToggle", QuestGuru_OptionsFrameGeneral, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_OptionsFrameDisableCommToggle:SetPoint("TOPLEFT", QuestGuru_OptionsFrameShowHeaderQuestsToggle, "BOTTOMLEFT", 0, -4); |
QuestGuru_OptionsFrameDisableCommToggleText:SetText(QG_OPT_DISABLE_COMM); |
QuestGuru_OptionsFrameDisableCommToggle:SetScript("OnClick", |
function () |
if (QuestGuru_OptionsFrameDisableCommToggle:GetChecked()) then |
QuestGuru_Settings.DisableComm = true; |
else |
QuestGuru_Settings.DisableComm = false; |
QuestGuru_CommSendPGMessage("0001", QUESTGURU_VERSION); |
QuestGuru_SendCurrentQuestStatus(true); |
end |
end); |
--------------------- |
-- Sound Options -- |
--------------------- |
QuestGuru_OptionsFrameSound = CreateFrame("FRAME", "QuestGuru_OptionsFrameSound", QuestGuru_OptionsFrame); |
QuestGuru_OptionsFrameSound.name = "QG Sounds"; |
QuestGuru_OptionsFrameSound.parent = "QuestGuru"; |
QuestGuru_OptionsFrameSound.default = function () QuestGuru_SetSoundDefaults(); end; |
InterfaceOptions_AddCategory(QuestGuru_OptionsFrameSound) |
QuestGuru_OptionsFrameSoundTitle = QuestGuru_OptionsFrameSound:CreateFontString("QuestGuru_OptionsFrameSoundTitle", "ARTWORK", "GameFontNormalLarge"); |
QuestGuru_OptionsFrameSoundTitle:SetPoint("TOPLEFT", 16, -16); |
QuestGuru_OptionsFrameSoundTitle:SetJustifyH("LEFT"); |
QuestGuru_OptionsFrameSoundTitle:SetJustifyV("TOP"); |
QuestGuru_OptionsFrameSoundTitle:SetText("QuestGuru "..QG_OPT_SOUND_HEAD); |
QuestGuru_OptionsFrameSoundSubText = QuestGuru_OptionsFrameSound:CreateFontString("QuestGuru_OptionsFrameSoundSubText", "ARTWORK", "GameFontHighlightSmall"); |
QuestGuru_OptionsFrameSoundSubText:SetPoint("TOPLEFT", "QuestGuru_OptionsFrameSoundTitle", "BOTTOMLEFT", 0, -8); |
QuestGuru_OptionsFrameSoundSubText:SetPoint("RIGHT", -32, 0); |
QuestGuru_OptionsFrameSoundSubText:SetJustifyH("LEFT"); |
QuestGuru_OptionsFrameSoundSubText:SetJustifyV("TOP"); |
QuestGuru_OptionsFrameSoundSubText:SetHeight(24); |
QuestGuru_OptionsFrameSoundSubText:SetText(QG_OPT_SOUND_DESC); |
QuestGuru_OptionsFrameSoundToggle = CreateFrame("CheckButton", "QuestGuru_OptionsFrameSoundToggle", QuestGuru_OptionsFrameSound, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_OptionsFrameSoundToggle:SetPoint("TOPLEFT", "QuestGuru_OptionsFrameSoundSubText", "BOTTOMLEFT", -2, -8); |
QuestGuru_OptionsFrameSoundToggleText:SetText(QG_OPT_SOUND_ENABLE); |
QuestGuru_OptionsFrameSoundToggle:SetScript("OnClick", |
function () |
if (QuestGuru_OptionsFrameSoundToggle:GetChecked()) then |
QuestGuru_Settings.Sounds.Enabled = true; |
else |
QuestGuru_Settings.Sounds.Enabled = false; |
end |
end); |
QuestGuru_OptionsFrameSoundProgressToggle = CreateFrame("CheckButton", "QuestGuru_OptionsFrameSoundProgressToggle", QuestGuru_OptionsFrameSound, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_OptionsFrameSoundProgressToggle:SetPoint("TOPLEFT", "QuestGuru_OptionsFrameSoundToggle", "BOTTOMLEFT", 0, -12); |
QuestGuru_OptionsFrameSoundProgressToggleText:SetText(QG_OPT_SOUND_OBJ); |
QuestGuru_OptionsFrameSoundProgressToggle:SetScript("OnClick", |
function () |
if (QuestGuru_OptionsFrameSoundProgressToggle:GetChecked()) then |
QuestGuru_Settings.Sounds.Progress.Enabled = true; |
else |
QuestGuru_Settings.Sounds.Progress.Enabled = false; |
end |
end); |
QuestGuru_OptionsFrameSoundProgressButton = CreateFrame("Frame", "QuestGuru_OptionsFrameSoundProgressButton", QuestGuru_OptionsFrameSound, "UIDropDownMenuTemplate"); |
QuestGuru_OptionsFrameSoundProgressButton:SetPoint("TOPLEFT", "QuestGuru_OptionsFrameSoundProgressToggle", "BOTTOMLEFT"); |
QuestGuru_OptionsFrameSoundProgressButton:SetWidth(200); |
QuestGuru_OptionsFrameSoundProgressButtonText:SetJustifyH("LEFT"); |
UIDropDownMenu_SetWidth(QuestGuru_OptionsFrameSoundProgressButton, 200); |
UIDropDownMenu_Initialize(QuestGuru_OptionsFrameSoundProgressButton, QuestGuru_OptionsFrameSoundProgressDropDown_Initialize); |
QuestGuru_OptionsFrameSoundObjCompleteToggle = CreateFrame("CheckButton", "QuestGuru_OptionsFrameSoundObjCompleteToggle", QuestGuru_OptionsFrameSound, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_OptionsFrameSoundObjCompleteToggle:SetPoint("TOPLEFT", "QuestGuru_OptionsFrameSoundProgressToggle", "BOTTOMLEFT", 0, -48); |
QuestGuru_OptionsFrameSoundObjCompleteToggleText:SetText(QG_OPT_SOUND_OBJ_DONE); |
QuestGuru_OptionsFrameSoundObjCompleteToggle:SetScript("OnClick", |
function () |
if (QuestGuru_OptionsFrameSoundObjCompleteToggle:GetChecked()) then |
QuestGuru_Settings.Sounds.ObjComplete.Enabled = true; |
else |
QuestGuru_Settings.Sounds.ObjComplete.Enabled = false; |
end |
end); |
QuestGuru_OptionsFrameSoundObjCompleteButton = CreateFrame("Frame", "QuestGuru_OptionsFrameSoundObjCompleteButton", QuestGuru_OptionsFrameSound, "UIDropDownMenuTemplate"); |
QuestGuru_OptionsFrameSoundObjCompleteButton:SetPoint("TOPLEFT", "QuestGuru_OptionsFrameSoundObjCompleteToggle", "BOTTOMLEFT"); |
QuestGuru_OptionsFrameSoundObjCompleteButton:SetWidth(200); |
QuestGuru_OptionsFrameSoundObjCompleteButtonText:SetJustifyH("LEFT"); |
UIDropDownMenu_SetWidth(QuestGuru_OptionsFrameSoundObjCompleteButton, 200); |
UIDropDownMenu_Initialize(QuestGuru_OptionsFrameSoundObjCompleteButton, QuestGuru_OptionsFrameSoundObjCompleteDropDown_Initialize); |
QuestGuru_OptionsFrameSoundQuestCompleteToggle = CreateFrame("CheckButton", "QuestGuru_OptionsFrameSoundQuestCompleteToggle", QuestGuru_OptionsFrameSound, "QuestGuru_InterfaceOptionsCheckButtonTemplate"); |
QuestGuru_OptionsFrameSoundQuestCompleteToggle:SetPoint("TOPLEFT", "QuestGuru_OptionsFrameSoundObjCompleteToggle", "BOTTOMLEFT", 0, -48); |
QuestGuru_OptionsFrameSoundQuestCompleteToggleText:SetText(QG_SOUND_QUEST_DONE); |
QuestGuru_OptionsFrameSoundQuestCompleteToggle:SetScript("OnClick", |
function () |
if (QuestGuru_OptionsFrameSoundQuestCompleteToggle:GetChecked()) then |
QuestGuru_Settings.Sounds.QuestComplete.Enabled = true; |
else |
QuestGuru_Settings.Sounds.QuestComplete.Enabled = false; |
end |
end); |
QuestGuru_OptionsFrameSoundQuestCompleteButton = CreateFrame("Frame", "QuestGuru_OptionsFrameSoundQuestCompleteButton", QuestGuru_OptionsFrameSound, "UIDropDownMenuTemplate"); |
QuestGuru_OptionsFrameSoundQuestCompleteButton:SetPoint("TOPLEFT", "QuestGuru_OptionsFrameSoundQuestCompleteToggle", "BOTTOMLEFT"); |
QuestGuru_OptionsFrameSoundQuestCompleteButton:SetWidth(200); |
QuestGuru_OptionsFrameSoundQuestCompleteButtonText:SetJustifyH("LEFT"); |
UIDropDownMenu_SetWidth(QuestGuru_OptionsFrameSoundQuestCompleteButton, 200); |
UIDropDownMenu_Initialize(QuestGuru_OptionsFrameSoundQuestCompleteButton, QuestGuru_OptionsFrameSoundQuestCompleteDropDown_Initialize); |
end |
function QuestGuru_OptionsSaveColor() |
local r,g,b = ColorPickerFrame:GetColorRGB(); |
QuestGuru_Settings.Colorize[lastColorPick].Color.r = r; |
QuestGuru_Settings.Colorize[lastColorPick].Color.g = g; |
QuestGuru_Settings.Colorize[lastColorPick].Color.b = b; |
QuestGuru_OptionsFrameColorizePlayerNameColorSwatch:SetTexture(QuestGuru_Settings.Colorize.PlayerName.Color.r, QuestGuru_Settings.Colorize.PlayerName.Color.g, QuestGuru_Settings.Colorize.PlayerName.Color.b, 1.0); |
QuestGuru_OptionsFrameColorizeAreaNamesColorSwatch:SetTexture(QuestGuru_Settings.Colorize.AreaNames.Color.r, QuestGuru_Settings.Colorize.AreaNames.Color.g, QuestGuru_Settings.Colorize.AreaNames.Color.b, 1.0); |
QuestGuru_OptionsFrameColorizeNPCNamesColorSwatch:SetTexture(QuestGuru_Settings.Colorize.NPCNames.Color.r, QuestGuru_Settings.Colorize.NPCNames.Color.g, QuestGuru_Settings.Colorize.NPCNames.Color.b, 1.0); |
end |
function QuestGuru_OptionsSoundsLoadSettings() |
if (QuestGuru_Settings.Sounds == nil) then |
QuestGuru_Settings.Sounds = {}; |
end |
if (QuestGuru_Settings.Sounds.Enabled ~= false) then |
QuestGuru_Settings.Sounds.Enabled = true; |
end |
QuestGuru_OptionsFrameSoundToggle:SetChecked(QuestGuru_Settings.Sounds.Enabled); |
if (QuestGuru_Settings.Sounds.Progress == nil) then |
QuestGuru_Settings.Sounds.Progress = {}; |
end |
if (QuestGuru_Settings.Sounds.Progress.Enabled ~= false) then |
QuestGuru_Settings.Sounds.Progress.Enabled = true; |
end |
QuestGuru_OptionsFrameSoundProgressToggle:SetChecked(QuestGuru_Settings.Sounds.Progress.Enabled); |
if (QuestGuru_Settings.Sounds.Progress.Sound == nil) then |
QuestGuru_Settings.Sounds.Progress.Sound = "AuctionWindowOpen"; |
end |
UIDropDownMenu_SetText(QuestGuru_OptionsFrameSoundProgressButton, QuestGuru_Settings.Sounds.Progress.Sound); |
if (QuestGuru_Settings.Sounds.ObjComplete == nil) then |
QuestGuru_Settings.Sounds.ObjComplete = {}; |
end |
if (QuestGuru_Settings.Sounds.ObjComplete.Enabled ~= false) then |
QuestGuru_Settings.Sounds.ObjComplete.Enabled = true; |
end |
QuestGuru_OptionsFrameSoundObjCompleteToggle:SetChecked(QuestGuru_Settings.Sounds.ObjComplete.Enabled); |
if (QuestGuru_Settings.Sounds.ObjComplete.Sound == nil) then |
QuestGuru_Settings.Sounds.ObjComplete.Sound = "AuctionWindowClose"; |
end |
UIDropDownMenu_SetText(QuestGuru_OptionsFrameSoundObjCompleteButton, QuestGuru_Settings.Sounds.ObjComplete.Sound); |
if (QuestGuru_Settings.Sounds.QuestComplete == nil) then |
QuestGuru_Settings.Sounds.QuestComplete = {}; |
end |
if (QuestGuru_Settings.Sounds.QuestComplete.Enabled ~= false) then |
QuestGuru_Settings.Sounds.QuestComplete.Enabled = true; |
end |
QuestGuru_OptionsFrameSoundQuestCompleteToggle:SetChecked(QuestGuru_Settings.Sounds.QuestComplete.Enabled); |
if (QuestGuru_Settings.Sounds.QuestComplete.Sound == nil) then |
QuestGuru_Settings.Sounds.QuestComplete.Sound = "ReadyCheck"; |
end |
UIDropDownMenu_SetText(QuestGuru_OptionsFrameSoundQuestCompleteButton, QuestGuru_Settings.Sounds.QuestComplete.Sound); |
end |
function QuestGuru_SetGeneralDefaults() |
QuestGuru_Echo("Resetting General settings to defaults."); |
QuestGuru_Settings.AutoComplete = false; |
QuestGuru_OptionsFrameAutoCompleteToggle:SetChecked(QuestGuru_Settings.AutoComplete); |
QuestGuru_Settings.ShowObjItemIcons = false; |
QuestGuru_OptionsFrameShowObjItemIconsToggle:SetChecked(QuestGuru_Settings.ShowObjItemIcons); |
QuestGuru_Settings.DisableComm = false; |
QuestGuru_OptionsFrameDisableCommToggle:SetChecked(QuestGuru_Settings.DisableComm); |
QuestGuru_Settings.HeaderQuests = true; |
QuestGuru_OptionsFrameShowHeaderQuestsToggle:SetChecked(QuestGuru_Settings.HeaderQuests); |
QuestGuru_Settings.ShowLevels = {}; |
QuestGuru_Settings.ShowLevels.QuestLog = true; |
QuestGuru_OptionsFrameShowLevelsQuestLogToggle:SetChecked(QuestGuru_Settings.ShowLevels.QuestLog); |
end |
function QuestGuru_SetSoundDefaults() |
QuestGuru_Echo("Resetting Sound settings to defaults."); |
QuestGuru_Settings.Sounds.Progress.Enabled = true; |
QuestGuru_Settings.Sounds.QuestComplete.Sound = "ReadyCheck"; |
QuestGuru_Settings.Sounds.ObjComplete.Sound = "AuctionWindowClose"; |
QuestGuru_Settings.Sounds.Progress.Sound = "AuctionWindowOpen"; |
end |
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ |
..\FrameXML\UI.xsd"> |
<Button name="QuestLogObjectiveItemTemplate" inherits="QuestItemTemplate" virtual="true"> |
<Scripts> |
<OnEnter> |
if (( self:GetAlpha() > 0 ) and self.link) then |
GameTooltip:SetOwner(self, "ANCHOR_RIGHT"); |
GameTooltip:SetHyperlink(self.link); |
GameTooltip_ShowCompareItem(); |
end |
CursorUpdate(); |
</OnEnter> |
<OnUpdate> |
if (( self:GetAlpha() > 0 ) and self.link) then |
if (self.timerEnabled) then |
local name, link, itemRarity, itemLevel, itemMinLevel, itemType, itemSubType, itemStackCount, itemEquipLoc, texture = GetItemInfo(self.link); |
if (texture) then |
self.timerEnabled = nil; |
SetItemButtonTexture(self, texture); |
_G[self:GetName().."Name"]:SetText(name); |
self:Show(); |
end |
end |
end |
</OnUpdate> |
</Scripts> |
</Button> |
<Button name="QuestGuru_ColorPickerButtonTemplate" virtual="true"> |
<Size x="16" y="16"/> |
<Layers> |
<Layer level="ARTWORK"> |
<Texture name="$parentSwatch"> |
<Size x="12" y="12"/> |
<Anchors> |
<Anchor point="CENTER"> |
<Offset x="0" y="0"/> |
</Anchor> |
</Anchors> |
<Color r="1.0" g="1.0" b="1.0" a="1.0"/> |
</Texture> |
</Layer> |
</Layers> |
<Scripts> |
<OnEnter> |
if ( self.tooltipText ) then |
GameTooltip:SetOwner(self, "ANCHOR_RIGHT"); |
GameTooltip:SetText(self.tooltipText, nil, nil, nil, nil, 1); |
end |
if ( self.tooltipRequirement ) then |
GameTooltip:AddLine(self.tooltipRequirement, "", 1.0, 1.0, 1.0); |
GameTooltip:Show(); |
end |
</OnEnter> |
<OnLeave function="GameTooltip_Hide" /> |
</Scripts> |
</Button> |
<Button name="QuestGuru_QuestLogStartFinishTemplate" virtual="true"> |
<Size x="285" y="14"/> |
<Layers> |
<Layer level="BACKGROUND"> |
<FontString name="$parentLabel" inherits="QuestFont" justifyH="LEFT"> |
<Size x="0" y="0"/> |
<Anchors> |
<Anchor point="LEFT"> |
<Offset x="0" y="0"/> |
</Anchor> |
</Anchors> |
</FontString> |
<FontString name="$parentPos" inherits="QuestFontNormalSmall" justifyH="LEFT"> |
<Size x="0" y="0"/> |
<Anchors> |
<Anchor point="RIGHT"> |
<Offset x="0" y="0"/> |
</Anchor> |
</Anchors> |
</FontString> |
</Layer> |
</Layers> |
<Scripts> |
<OnLeave> |
QuestGuru_QuestStartInfoFrame:Hide(); |
</OnLeave> |
</Scripts> |
<ButtonText name="$parentNPCName" nonspacewrap="true"> |
<Size x="0" y="10"/> |
<Anchors> |
<Anchor point="LEFT" relativeTo="$parentLabel" relativePoint="RIGHT"> |
<Offset x="2" y="0"/> |
</Anchor> |
</Anchors> |
</ButtonText> |
<NormalFont style="QuestFontLeft" /> |
<HighlightFont style="QuestFontLeft" /> |
<DisabledFont style="QuestFontLeft" /> |
</Button> |
<CheckButton name="QuestGuru_InterfaceOptionsBaseCheckButtonTemplate" virtual="true"> |
<Size x="26" y="26"/> |
<HitRectInsets> |
<AbsInset left="0" right="-100" top="0" bottom="0"/> |
</HitRectInsets> |
<Scripts> |
<OnShow> |
self:SetHitRectInsets(0, -_G[self:GetName().."Text"]:GetWidth(), 0, 0); |
</OnShow> |
<OnMouseUp> |
if ( self:GetChecked() ) then |
PlaySound("igMainMenuOptionCheckBoxOn"); |
else |
PlaySound("igMainMenuOptionCheckBoxOff"); |
end |
</OnMouseUp> |
<OnEnter> |
if ( self.tooltipText ) then |
GameTooltip:SetOwner(self, "ANCHOR_RIGHT"); |
GameTooltip:SetText(self.tooltipText, nil, nil, nil, nil, 1); |
end |
if ( self.tooltipRequirement ) then |
GameTooltip:AddLine(self.tooltipRequirement, "", 1.0, 1.0, 1.0); |
GameTooltip:Show(); |
end |
</OnEnter> |
<OnLeave function="GameTooltip_Hide" /> |
</Scripts> |
<NormalTexture file="Interface\Buttons\UI-CheckBox-Up"/> |
<PushedTexture file="Interface\Buttons\UI-CheckBox-Down"/> |
<HighlightTexture file="Interface\Buttons\UI-CheckBox-Highlight" alphaMode="ADD"/> |
<CheckedTexture file="Interface\Buttons\UI-CheckBox-Check"/> |
<DisabledCheckedTexture file="Interface\Buttons\UI-CheckBox-Check-Disabled"/> |
</CheckButton> |
<CheckButton name="QuestGuru_InterfaceOptionsCheckButtonTemplate" virtual="true" inherits="QuestGuru_InterfaceOptionsBaseCheckButtonTemplate"> |
<Layers> |
<Layer level="ARTWORK"> |
<FontString name="$parentText" inherits="GameFontHighlight"> |
<Anchors> |
<Anchor point="LEFT" relativePoint="RIGHT"> |
<Offset x="0" y="1" /> |
</Anchor> |
</Anchors> |
</FontString> |
</Layer> |
</Layers> |
</CheckButton> |
<CheckButton name="QuestGuru_InterfaceOptionsSmallCheckButtonTemplate" virtual="true" inherits="QuestGuru_InterfaceOptionsBaseCheckButtonTemplate"> |
<Layers> |
<Layer level="ARTWORK"> |
<FontString name="$parentText" inherits="GameFontNormalSmall"> |
<Anchors> |
<Anchor point="LEFT" relativePoint="RIGHT"> |
<Offset x="0" y="1" /> |
</Anchor> |
</Anchors> |
</FontString> |
</Layer> |
</Layers> |
</CheckButton> |
</Ui> |
------------------------------------------------------------------------------- |
-- QuestGuru Chinese Localization(zhTW) By Silver Fox, fixed/updated By Player Lin -- |
------------------------------------------------------------------------------- |
if (GetLocale() == "zhTW") then |
QG_REP_GAIN = "é£ç (.*) çè²æå¢å äº ([%d]+)."; |
QG_REP_DEC = "é£ç (.*) çè²æéä½äº ([%d]+)."; |
QG_XP_GAIN = "ä½ ç²å¾ ([%d]+) ç¶é©å¼."; |
QG_QUEST_COMPLETE = "ä»»åå®æ!"; |
-- Default filler words used in various places |
QG_UNKNOWN = "æªç¥"; |
QG_NONE = "æ²æ"; |
-- Right click menu strings for Quest Log and Tracker |
QG_TRACK = "å å ¥è¿½è¹¤"; |
QG_UNTRACK = "åæ¶è¿½è¹¤"; |
QG_SHARE_QUEST = "å享任å"; |
QG_ABANDON_QUEST = "æ¾æ£ä»»å"; |
QG_DELETE_QUEST = "åªé¤ä»»å"; |
-- Quest Start and Finish information |
QG_QSTART_HEAD = "ä»»åéå§è©³ç´°èªªæ"; |
QG_QSTART_NPC = "éå§ç®æ¨:"; |
QG_QSTART_TIME = "éå§æé:"; |
QG_QSTART_LEVEL = "éå§çç´:"; |
QG_QFINISH_HEAD = "ä»»åå®æ詳細說æ"; |
QG_QFINISH_NPC = "çµæç®æ¨:"; |
QG_QFINISH_TIME = "çµææé:"; |
QG_QFINISH_LEVEL = "çµæçç´:"; |
QG_QABANDON = "æ¾æ£æé:"; |
-- Tab Text |
QG_TAB_CURRENT = "ç®åä»»å"; |
QG_TAB_HISTORY = "æ·å²ä»»å"; |
QG_TAB_ABANDON = "æ¾æ£ä»»å"; |
QG_TAB_GUILD = "å ¬æä»»å"; |
QG_TAB_PARTY = "éä¼ä»»å"; |
-- Party Info Tooltip strings |
QG_ABANDONED = "æ¾æ£" |
QG_INCOMPLETE = "æªå®"; |
QG_ACTIVE = "é²è¡"; |
QG_ALT_STATUS_HEAD = "------------- å身è§è²ä»»åçæ³ -------------"; |
QG_GUILD_STATUS_HEAD = "------------- å ¬ææå¡ä»»åçæ³ -------------"; |
-- User Interface Elements |
QG_EXPAND_HEADERS = "æ¶èµ·/å±éæææ¨é¡"; |
QG_OPTIONS = "é¸é "; |
QG_SEARCH = "æå°: "; |
QG_CLEAR_ABANDON = "æ¸ é¤æ¾æ£ä»»åå表"; |
-- Abandon Tab Strings |
QG_ABANDON_CLEAR = "æ¨ç¢ºå®è¦æ¸ é¤æ¾æ£ä»»åå表å?"; |
QG_ABANDON_DELETE = "å°ä»»å \"%s\" å¾æ¾æ£ä»»ååè¡¨æ¸ é¤å?"; -- %s is the name of the quest |
-- History Tab strings |
QG_HISTORY_DELETE = "å°ä»»å \"%s\" å¾æ·å²ä»»ååè¡¨æ¸ é¤å?"; -- %s is the name of the quest |
QG_HISTORY_NONE = "æ²æä»»ä½æ·å²ä»»å"; |
QG_HISTORY_EXPGAIN = "ç²å¾ç¶é©å¼: "; |
QG_HISTORY_REPGAIN = "ç²å¾è²æ:"; |
-- History Database strings |
QG_HISTORY_NOTLOADED = "æ·å²ä»»åè³æåæ²æè¼å ¥"; |
QG_HISTORY_CLICKTOLOAD = "|cff2040ffé»æè¼å ¥æ·å²ä»»åè³æ庫.|r"; |
QG_HISTORY_DBLOADDESC = "çºäºæ¸å°è¨æ¶é«ä½¿ç¨é,è³æ庫å å«éä»»åçç´ç¯åè³ææªå³æè¼å ¥."; |
-- Announcer |
QG_OPT_ANNOUNCE_HEAD = "QuestGuru Announcer é¸é "; |
QG_OPT_ANNOUNCE_DESC = "éäºé¸é å¯ä»¥æ¹è®å»£æçè¨å®."; |
QG_OPT_ANNOUNCE_PROGRESS = "廣æä»»åçé²è¡çæ³"; |
QG_OPT_ANNOUNCE_CHANNEL_HEAD = "使ç¨é »é:"; |
QG_OPT_ANNOUNCE_CHANNEL_SAY = "/s"; |
QG_OPT_ANNOUNCE_CHANNEL_SAY_DESC = "å¨ èªª é »éä¸å»£æ"; |
QG_OPT_ANNOUNCE_CHANNEL_PARTY = "/p"; |
QG_OPT_ANNOUNCE_CHANNEL_PARTY_DESC = "å¨ éä¼è天 é »éä¸å»£æ"; |
QG_OPT_ANNOUNCE_CHANNEL_GUILD = "/g"; |
QG_OPT_ANNOUNCE_CHANNEL_GUILD_DESC = "å¨ å ¬æè天 é »éä¸å»£æ"; |
QG_OPT_ANNOUNCE_CHANNEL_WHISPER = "/w"; |
QG_OPT_ANNOUNCE_CHANNEL_WHISPER_DESC = "å¨ ææ話 é »éä¸å»£æ"; |
QG_OPT_ANNOUNCE_CHANNEL_WHISPER_TO = "誰:"; |
QG_OPT_ANNOUNCE_ECHO = "å°è©±è¦çªæ示"; |
QG_OPT_ANNOUNCE_ECHO_DESC = "å¨ä½ çå°è©±è¦çªä¸é¡¯ç¤ºå»£æå §å®¹."; |
QG_OPT_ANNOUNCE_MESSAGES = "顯示è¨æ¯:"; |
QG_OPT_ANNOUNCE_HELP_DONE = "ç®åæ¶éçç©åææ¯éè¦æ®ºæ»çæªç©æ¸é"; |
QG_OPT_ANNOUNCE_HELP_NEEDED = "éè¦æ¶éçç©åææ¯éè¦æ®ºæ»çæªç©æ¸é"; |
QG_OPT_ANNOUNCE_HELP_NUMLEFT = "å°éæ¶éçç©åææ¯éè¦æ®ºæ»çæªç©æ¸é"; |
QG_OPT_ANNOUNCE_HELP_NAME = "ç©ä»¶å稱"; |
QG_OPT_ANNOUNCE_HELP_TITLE = "ä»»åå稱"; |
QG_OPT_ANNOUNCE_HELP_UITEXT = "顯示å¨è¢å¹ä¸çæå"; |
QG_OPT_ANNOUNCE_HELP_COMPLETE = "ä¸æåçä»»åå®æè¨æ¯: \""..COMPLETE.."\""; |
QG_OPT_ANNOUNCE_HELP_QLINK = "åå°å½±é¿çä»»åé£çµ"; |
QG_OPT_ANNOUNCE_ITEM_MSG = "廣ææ¶éç©åé²åº¦æ使ç¨éåè¨æ¯:"; |
QG_OPT_ANNOUNCE_MOB_MSG = "廣æ殺æ»æªç©é²åº¦æ使ç¨éåè¨æ¯:"; |
QG_OPT_ANNOUNCE_EVENT_MSG = "廣æäºä»¶å®æé²åº¦æ使ç¨éåè¨æ¯:"; |
QG_OPT_ANNOUNCE_COMPLETE_MSG = "廣æä»»åå®ææ使ç¨éåè¨æ¯:"; |
QG_OPT_ANNOUNCE_QUESTACCEPT_MSG = "廣ææ¥åæ°ä»»å"; |
QG_ANNOUNCE_ITEM_DEFAULT = "$questTitle éè¦æ¶éç©åï¼$nameï¼$doneï¼$needed."; |
QG_ANNOUNCE_MOB_DEFAULT = "$questTitle éè¦æ®ºæ»çç©ï¼$nameï¼$doneï¼$needed."; |
QG_ANNOUNCE_QUESTACCEPT_DEFAULT = "$qlink ä»»åå·²æ¥å."; |
QG_ANNOUNCE_RESET = "æ¢å¾©ææéæ¼å»£æçè¨å®çºé è¨å¼."; |
-- Options |
QG_OPT_OPTIONS_DESC = "éäºé¸é å¯ä»¥æ¹è®åºæ¬çè¨å®."; |
QG_OPT_COLORIZE_HEAD = "è¨å®é¡è²"; |
QG_OPT_COLORIZE_PLAYER = "ç©å®¶å§å"; |
QG_OPT_COLORIZE_AREA = "ååå稱"; |
QG_OPT_COLORIZE_NPC = "NPC å§å"; |
QG_OPT_LEVELS_HEAD = "顯示çç´"; |
QG_OPT_LEVELS_QUESTLOG = "ç®åä»»åå表ä¸"; |
QG_OPT_LEVELS_HISTORY = "æ·å²ä»»åå表ä¸"; |
QG_OPT_LEVELS_ABANDON = "æ¾æ£ä»»åå表ä¸"; |
QG_OPT_TOOLTIP_TEXT = "å¨ç©ååæªç©æ示è¨æ¯ä¸é¡¯ç¤º"; |
QG_OPT_AUTOCOMPLETE = "èªååè¦å·²å®æçä»»å"; |
QG_OPT_ALT_STATUS = "顯示å身è§è²ä»»åçæ³"; |
QG_OPT_GUILD_STATUS = "é¡¯ç¤ºå ¬ææå¡ä»»åçæ³"; |
QG_OPT_GUILD_SIMPLE = "ç°¡æå ¬ææå¡é¡¯ç¤º"; |
QG_OPT_OBJ_ICON = "å¨è¨éä¸é¡¯ç¤ºç©åå示"; |
QG_OPT_WORLDMAP_ICON = "å¨ä¸çå°åä¸é¡¯ç¤ºä»»åæä¾è çå示"; |
QG_OPT_HEADER_QUEST_NUM = "å¨ååæ¨é¡é¡¯ç¤ºä»»åæ¸é"; |
QG_OPT_DISABLE_COMM = "ééæææ件èæ件éçéè¨"; |
QG_OPT_SOUND_HEAD = "é³æé¸é "; |
QG_OPT_SOUND_DESC = "éäºé¸é å¯ä»¥æ¹è®é³æçè¨å®."; |
QG_OPT_SOUND_ENABLE = "éåé¡å¤çé³æåè½"; |
QG_OPT_SOUND_OBJ = "ä»»åé ç®é²è¡ä¸çé³æ:"; |
QG_OPT_SOUND_OBJ_DONE = "ä»»åé ç®å·²å®æçé³æ:"; |
QG_SOUND_QUEST_DONE = "ä»»åå ¨é¨å®ææçé³æ:"; |
-- Other strings that may or may not need localizing |
QG_ITEM_REQ_STR = "(.*):%s*([%d]+)%s*/%s*([%d]+)"; -- The format of the line when an item is required for a quest, an invalid format can cause many errors |
QG_DATETIME = "%m/%d/%Y %H:%M:%S"; -- The format that date/time values are stored and displayed for start/finish info |
end |
<?xml version="1.0" encoding="utf-8" ?> |
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ |
..\FrameXML\UI.xsd"> |
<Script file="QuestGuru.lua" /> |
<Frame name="QuestGuru_QuestLogTitleMenu" inherits="UIDropDownMenuTemplate" id="1"> |
<Scripts> |
<OnLoad> |
UIDropDownMenu_Initialize(self, QuestGuru_QuestLogTitleMenu_OnLoad, "MENU"); |
</OnLoad> |
</Scripts> |
</Frame> |
<Button name="QuestGuru_HistoryShowButton" inherits="UIPanelButtonTemplate" text="QG_SHOWHISTORY" parent="QuestLogFrame"> |
<Size x="100" y="22"/> |
<Anchors> |
<Anchor point="BOTTOMRIGHT"> |
<Offset x="-260" y="13"/> |
</Anchor> |
</Anchors> |
<Scripts> |
<OnClick> |
QuestGuru_ShowHistory(); |
</OnClick> |
</Scripts> |
</Button> |
<Button name="QuestGuru_QuestLogObjectiveItem1" inherits="QuestLogObjectiveItemTemplate" hidden="true" parent="QuestInfoObjectivesFrame"> |
<Anchors> |
<Anchor point="TOPLEFT"/> |
</Anchors> |
</Button> |
<Button name="QuestGuru_QuestLogObjectiveItem2" inherits="QuestLogObjectiveItemTemplate" hidden="true" parent="QuestInfoObjectivesFrame"> |
<Anchors> |
<Anchor point="TOPLEFT"/> |
</Anchors> |
</Button> |
<Button name="QuestGuru_QuestLogObjectiveItem3" inherits="QuestLogObjectiveItemTemplate" hidden="true" parent="QuestInfoObjectivesFrame"> |
<Anchors> |
<Anchor point="TOPLEFT"/> |
</Anchors> |
</Button> |
<Button name="QuestGuru_QuestLogObjectiveItem4" inherits="QuestLogObjectiveItemTemplate" hidden="true" parent="QuestInfoObjectivesFrame"> |
<Anchors> |
<Anchor point="TOPLEFT"/> |
</Anchors> |
</Button> |
<Button name="QuestGuru_QuestLogObjectiveItem5" inherits="QuestLogObjectiveItemTemplate" hidden="true" parent="QuestInfoObjectivesFrame"> |
<Anchors> |
<Anchor point="TOPLEFT"/> |
</Anchors> |
</Button> |
<Button name="QuestGuru_QuestLogObjectiveItem6" inherits="QuestLogObjectiveItemTemplate" hidden="true" parent="QuestInfoObjectivesFrame"> |
<Anchors> |
<Anchor point="TOPLEFT"/> |
</Anchors> |
</Button> |
<Button name="QuestGuru_QuestLogObjectiveItem7" inherits="QuestLogObjectiveItemTemplate" hidden="true" parent="QuestInfoObjectivesFrame"> |
<Anchors> |
<Anchor point="TOPLEFT"/> |
</Anchors> |
</Button> |
<Button name="QuestGuru_QuestLogObjectiveItem8" inherits="QuestLogObjectiveItemTemplate" hidden="true" parent="QuestInfoObjectivesFrame"> |
<Anchors> |
<Anchor point="TOPLEFT"/> |
</Anchors> |
</Button> |
<Button name="QuestGuru_QuestLogObjectiveItem9" inherits="QuestLogObjectiveItemTemplate" hidden="true" parent="QuestInfoObjectivesFrame"> |
<Anchors> |
<Anchor point="TOPLEFT"/> |
</Anchors> |
</Button> |
<Button name="QuestGuru_QuestLogObjectiveItem10" inherits="QuestLogObjectiveItemTemplate" hidden="true" parent="QuestInfoObjectivesFrame"> |
<Anchors> |
<Anchor point="TOPLEFT"/> |
</Anchors> |
</Button> |
</Ui> |
QUESTGURU_VERSION = GetAddOnMetadata("QuestGuru", "Version"); |
QuestGuru_Settings = {}; |
QuestGuru_Items = {}; |
QGC_Cache = {}; |
QGC_Active = {}; |
local QuestGuru_RealmName, QuestGuru_PlayerFaction; |
do |
local QuestGuru_Frame = CreateFrame("Frame", "QuestGuru_Frame", UIParent); |
QuestGuru_Frame:SetScript("OnEvent", |
function (self, event, arg1, arg2) |
QuestGuru_OnEvent(self, event, arg1, arg2); |
end); |
QuestGuru_Frame:RegisterEvent("QUEST_COMPLETE"); |
QuestGuru_Frame:RegisterEvent("QUEST_LOG_UPDATE"); |
QuestGuru_Frame:RegisterEvent("QUEST_PROGRESS"); |
QuestGuru_Frame:RegisterEvent("UI_INFO_MESSAGE"); |
QuestGuru_Frame:RegisterEvent("VARIABLES_LOADED"); |
QuestGuru_Frame:RegisterEvent("GOSSIP_SHOW"); |
QuestGuru_Frame:RegisterEvent("QUEST_DETAIL"); |
QuestGuru_Frame:RegisterEvent("QUEST_GREETING"); |
QuestGuru_Frame:RegisterEvent("QUEST_PROGRESS"); |
tinsert(UISpecialFrames, "QuestLogFrame"); |
QuestLogFrame:SetMovable(true) |
QuestLogFrame:EnableMouse(true) |
QuestLogFrame:RegisterForDrag("LeftButton") |
QuestLogFrame:SetScript("OnDragStart", QuestLogFrame.StartMoving) |
QuestLogFrame:SetScript("OnDragStop", QuestLogFrame.StopMovingOrSizing) |
end |
function QuestGuru_OnEvent(self, event, arg1, arg2) |
if (event == "UI_INFO_MESSAGE") then |
QuestGuru_UIInfoMessage(arg1); |
elseif (event == "VARIABLES_LOADED") then |
QuestLogTitleText:SetText(QuestLogTitleText:GetText().." - QuestGuru v"..QUESTGURU_VERSION); |
QuestGuru_LoadVariables(); |
QuestGuru_HistoryShowButton:Hide(); |
if IsAddOnLoaded("QuestCompletist") then QuestGuru_HistoryShowButton:Show(); end |
elseif (event=="QUEST_COMPLETE") then |
if (QuestGuru_Settings.AutoComplete and (GetNumQuestChoices() == 0)) then |
QuestRewardCompleteButton_OnClick(); |
end |
elseif (event=="QUEST_PROGRESS") then |
QuestGuru_QuestProgressShow(); |
if (QuestGuru_Settings.AutoComplete and IsQuestCompletable()) then |
CompleteQuest(); |
end |
elseif (event=="QUEST_LOG_UPDATE") then |
wipe(QGC_Active); |
local numEntries, numQuests = GetNumQuestLogEntries(); |
for i=1, numEntries do |
local qLink = GetQuestLink(i); |
if (qLink) then |
local qi, qj, questNum = string.find(qLink, (":(%d+):")); |
if (questNum) then QGC_Active[questNum]="true"; end |
end |
end |
elseif (event=="GOSSIP_SHOW") then |
QuestGuru_GossipShow(); |
elseif (event=="QUEST_GREETING") then |
QuestGuru_QuestFrameGreetingPanel_OnShow(); |
elseif (event=="QUEST_DETAIL") then |
QuestGuru_QuestDetailShow(); |
end |
end |
function QuestGuru_ShowHistory() |
-- Bring up any history addon that is installed but doesn't have it's own button |
if IsAddOnLoaded("QuestCompletist") then qcQuestCompletistUI:Show(); end |
end |
function QuestGuru_TitleButtonCheckBox_OnClick(self, button, down) |
local index = self:GetParent():GetID(); |
local questLogTitleText, level, questTag, suggestedGroup, isHeader, isCollapsed, isComplete, isDaily = GetQuestLogTitle(index); |
if (self:GetChecked()) then |
if (isHeader) then |
QuestGuru_AddQuestWatchHeader(questLogTitleText); |
else |
if (not AddQuestWatch(index)) then |
self:SetChecked(0); |
end |
end |
else |
if (isHeader) then |
QuestGuru_RemoveQuestWatchHeader(questLogTitleText); |
else |
RemoveQuestWatch(index); |
end |
end |
WatchFrame_Update(); |
QuestLog_Update(); |
end |
function QuestGuru_AddQuestWatchHeader(questHeader) |
local numEntries, numQuests = GetNumQuestLogEntries(); |
local inHeader = false; |
for questIndex=1, numEntries do |
local questLogTitleText, level, questTag, suggestedGroup, isHeader, isCollapsed, isComplete, isDaily = GetQuestLogTitle(questIndex); |
if (isHeader) then |
if (questLogTitleText == questHeader) then |
inHeader = true; |
else |
inHeader = false; |
end |
end |
if (inHeader and (not isHeader)) then |
AddQuestWatch(questIndex); |
end |
end |
end |
function IsHeaderWatched(questHeader) |
local numEntries, numQuests = GetNumQuestLogEntries(); |
local inHeader = false; |
local headerWatched = true; |
for questIndex=1, numEntries do |
local questLogTitleText, level, questTag, suggestedGroup, isHeader, isCollapsed, isComplete, isDaily = GetQuestLogTitle(questIndex); |
if (isHeader) then |
if (questLogTitleText == questHeader) then |
inHeader = true; |
else |
inHeader = false; |
end |
end |
if (inHeader and (not isHeader)) then |
headerWatched = (headerWatched and IsQuestWatched(questIndex)); |
end |
end |
return headerWatched; |
end |
function QuestGuru_RemoveQuestWatchHeader(questHeader) |
local numEntries, numQuests = GetNumQuestLogEntries(); |
local inHeader = false; |
for questIndex=1, numEntries do |
local questLogTitleText, level, questTag, suggestedGroup, isHeader, isCollapsed, isComplete, isDaily = GetQuestLogTitle(questIndex); |
if (isHeader) then |
if (questLogTitleText == questHeader) then |
inHeader = true; |
else |
inHeader = false; |
end |
end |
if (inHeader and (not isHeader)) then |
RemoveQuestWatch(questIndex); |
end |
end |
end |
local prevParent; |
local function QuestGuru_QuestLog_HighlightQuest(questLogTitle) |
if ( prevParent and prevParent ~= questLogTitle ) then |
-- set prev quest's colors back to normal |
prevParent.level:SetTextColor(prevParent.r, prevParent.g, prevParent.b); |
end |
if ( questLogTitle ) then |
-- highlight the quest's colors |
questLogTitle.level:SetTextColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b); |
end |
prevParent = questLogTitle; |
end |
function QuestGuru_SetSelection(questIndex) |
if ( questIndex == 0 ) then |
return; |
end |
-- find and highlight the selected quest |
local buttons = QuestLogScrollFrame.buttons; |
local numButtons = #buttons; |
local min = 1; |
local max = #buttons; |
local mid; |
local titleButton, id; |
while ( min <= max ) do |
mid = bit.rshift(min + max, 1); |
titleButton = buttons[mid]; |
id = titleButton:GetID(); |
if ( id == questIndex ) then |
QuestGuru_QuestLog_HighlightQuest(titleButton); |
break; |
end |
if ( id > questIndex ) then |
max = mid - 1; |
else |
min = mid + 1; |
end |
end |
end |
hooksecurefunc("QuestLog_SetSelection", QuestGuru_SetSelection); |
--local QG_QuestLogUpdate = QuestLog_Update; |
function QG_QuestLog_Update() |
-- QG_QuestLogUpdate(); |
local buttons = QuestLogScrollFrame.buttons; |
local numButtons = #buttons; |
local scrollOffset = HybridScrollFrame_GetOffset(QuestLogScrollFrame); |
local questLogSelection = GetQuestLogSelection(); |
local questIndex, questLogTitle, questTitleTag, questNumGroupMates, questNormalText, questCheck; |
local title, level, questTag, suggestedGroup, isHeader, isCollapsed, isComplete, isDaily; |
for i=1, numButtons do |
questLogTitle = buttons[i]; |
questIndex = questLogTitle:GetID(); |
title, level, questTag, suggestedGroup, isHeader, isCollapsed, isComplete, isDaily = GetQuestLogTitle(questIndex); |
questNumGroupMates = questLogTitle.groupMates; |
questNumGroupMates:SetPoint("LEFT", 6, 0); |
if (questLogTitle.level == nil) then |
questLogTitle.level = questLogTitle:CreateFontString(questLogTitle:GetName().."Level", "BACKGROUND", "GameFontNormalSmall"); |
questLogTitle.tag:SetFontObject("GameFontNormalSmall"); |
questLogTitle.level:SetPoint("LEFT", 28, 0); |
questLogTitle.level:SetWidth(32); |
questLogTitle.level:SetJustifyH("CENTER"); |
questLogTitle.level.parentKey = "level"; |
questLogTitle:HookScript("OnEnter", function(self) |
self.level:SetTextColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b); |
end); |
questLogTitle:HookScript("OnLeave", function(self) |
if ( self:GetID() ~= QuestLogFrame.selectedIndex ) then |
self.level:SetTextColor(self.r, self.g, self.b); |
end |
end); |
end |
if (questLogTitle.checkBox == nil) then |
questLogTitle.checkBox = CreateFrame("CheckButton", questLogTitle:GetName().."CheckBox", questLogTitle, "OptionsCheckButtonTemplate"); |
questLogTitle.checkBox:SetHeight(16); |
questLogTitle.checkBox:SetWidth(16); |
questLogTitle.checkBox:SetPoint("LEFT", 16, 0); |
questLogTitle.checkBox:SetHitRectInsets(0, 0, 0, 0); |
questLogTitle.checkBox:SetScript("OnClick", QuestGuru_TitleButtonCheckBox_OnClick); |
end |
questLogTitle.check:Hide(); |
questLevel = questLogTitle.level; |
if (isHeader) then |
questLevel:SetText(""); |
questLogTitle.normalText:SetPoint("LEFT", 32, 0); |
if (IsHeaderWatched(title)) then |
questLogTitle.checkBox:SetChecked(1); |
else |
questLogTitle.checkBox:SetChecked(0); |
end |
else |
local strLvl = level |
if (isDaily) then |
strLvl = strLvl.."Y"; |
end |
if (questTag ~= nil) then |
if ((questTag == "Group") and (suggestedGroup > 0)) then |
strLvl = strLvl.."G"..suggestedGroup; |
elseif (questTag == "Dungeon") then |
strLvl = strLvl.."D"; |
else |
strLvl = strLvl.."+" |
end |
else |
if (suggestedGroup > 0) then |
strLvl = strLvl.."G"..suggestedGroup; |
end |
end |
if (QuestGuru_Settings.ShowLevels == nil) then |
QuestGuru_Settings.ShowLevels = {}; |
end |
if (QuestGuru_Settings.ShowLevels.QuestLog) then |
questLevel:Show(); |
textLeft = 52; |
else |
questLevel:Hide(); |
textLeft = 32; |
end |
questLevel:SetText(strLvl); |
questLogTitle.normalText:SetPoint("LEFT", textLeft, 0); |
local color = GetQuestDifficultyColor(level); |
questLevel:SetTextColor(color.r, color.g, color.b); |
if ( questLogSelection == questIndex ) then |
QuestGuru_QuestLog_HighlightQuest(questLogTitle); |
end |
if (IsQuestWatched(questIndex)) then |
questLogTitle.checkBox:SetChecked(1); |
else |
questLogTitle.checkBox:SetChecked(0); |
end |
end |
QuestLogTitleButton_Resize(questLogTitle); |
end |
end |
hooksecurefunc("QuestLog_Update", QG_QuestLog_Update); |
QuestLogScrollFrame.update = function () QuestLog_Update(); end; |
function QuestGuru_ShowObjectives(template, parentFrame, acceptButton, material) |
local i, lastObjective; |
local numObjectives = GetNumQuestLeaderBoards(); |
for i=1, MAX_OBJECTIVES do |
_G["QuestGuru_QuestLogObjectiveItem"..i]:Hide(); |
_G["QuestGuru_QuestLogObjectiveItem"..i].timerEnabled = false; |
end |
if (QuestGuru_Settings.ShowObjItemIcons) then |
local currObjItem = 0; |
for i=1, numObjectives, 1 do |
local text, type, finished = GetQuestLogLeaderBoard(i); |
local count; |
if (type == "item") then |
local questObj = _G["QuestInfoObjective"..i]; |
if ( not text or strlen(text) == 0 ) then |
text = type; |
end |
if ( finished ) then |
questObj:SetTextColor(0.2, 0.2, 0.2); |
text = text.." ("..COMPLETE..")"; |
else |
questObj:SetTextColor(0, 0, 0); |
end |
questObj:SetText(text); |
questObj:Show(); |
questObj:SetAlpha(0); |
lastObjective = questObj; |
currObjItem = currObjItem + 1; |
local questItem = _G["QuestGuru_QuestLogObjectiveItem"..currObjItem]; |
questItem.type = "required"; |
local x, y, name, numItems, numNeeded = string.find(text, QG_ITEM_REQ_STR); |
local iiName, itemLink, itemRarity, itemLevel, itemMinLevel, itemType, itemSubType, itemStackCount, itemEquipLoc, texture = GetItemInfo(name); |
if ((not itemLink) and QuestGuru_Items[QuestGuru_RealmName][name]) then |
iiName, itemLink, itemRarity, itemLevel, itemMinLevel, itemType, itemSubType, itemStackCount, itemEquipLoc, texture = GetItemInfo(QuestGuru_Items[QuestGuru_RealmName][name]); |
end |
if (not itemLink) then |
texture = "Interface\\Icons\\INV_Misc_QuestionMark"; |
count = 0; |
SetItemButtonTextureVertexColor(questItem, 0.4, 0.4, 0.4); |
QuestGuru_CommSendPGMessage("0301", name); |
else |
if (texture == nil) then |
GameTooltip:SetHyperlink(itemLink); |
GameTooltip:Show(); |
GameTooltip:Hide(); |
questItem.timerEnabled = true; |
end |
count = GetItemCount(itemLink); |
SetItemButtonTextureVertexColor(questItem, 0.8, 0.8, 0.8); |
end |
questItem:SetID(currObjItem) |
-- For the tooltip |
questItem.rewardType = "item" |
questItem.link = itemLink; |
_G["QuestGuru_QuestLogObjectiveItem"..currObjItem.."Name"]:SetText(name); |
_G["QuestGuru_QuestLogObjectiveItem"..currObjItem.."Count"]:SetText(count.." /"..numNeeded); |
SetItemButtonTexture(questItem, texture); |
SetItemButtonNameFrameVertexColor(questItem, 1, 1, 1); |
if ( currObjItem > 1 ) then |
if ( mod(currObjItem ,2) == 1 ) then |
questItem:SetPoint("TOPLEFT", "QuestGuru_QuestLogObjectiveItem"..(currObjItem - 2), "BOTTOMLEFT", 0, -2); |
lastObjective = questItem; |
else |
questItem:SetPoint("TOPLEFT", "QuestGuru_QuestLogObjectiveItem"..(currObjItem - 1), "TOPRIGHT", 1, 0); |
lastObjective = _G["QuestGuru_QuestLogObjectiveItem"..(currObjItem)-1]; |
end |
else |
if (i > 1) then |
questItem:SetPoint("TOPLEFT", "QuestInfoObjective"..(i - 1), "BOTTOMLEFT", 0, -5); |
else |
questItem:SetPoint("TOPLEFT"); |
end |
lastObjective = questItem; |
end |
questItem:Show(); |
end |
end |
if ( lastObjective ) then |
QuestInfoObjectivesFrame:SetHeight(QuestInfoObjectivesFrame:GetTop() - lastObjective:GetTop() + lastObjective:GetHeight()); |
QuestInfoDescriptionHeader:SetPoint("TOPLEFT", QuestInfoObjectivesFrame, "BOTTOMLEFT"); |
end |
end |
end |
hooksecurefunc("QuestInfo_Display", QuestGuru_ShowObjectives); |
function QuestGuru_UIInfoMessage(arg1) |
local questID=0; |
local sound, announceText; |
local numEntries, numQuests = GetNumQuestLogEntries(); |
local i, ii, jj, itemName, numDone, numNeeded; |
local questLogTitleText, level, questTag, suggestedGroup, isHeader, isCollapsed, isComplete, isDaily; |
if (arg1 == nil) then return; end |
for questID=1, numEntries, 1 do |
questLogTitleText, level, questTag, suggestedGroup, isHeader, isCollapsed, isComplete, isDaily = GetQuestLogTitle(questID); |
local numObjectives = GetNumQuestLeaderBoards(questID); |
local currQuest = false; |
local questComplete = true; |
sound = nil; |
announceText = nil; |
if (numObjectives ~= nil) then |
for i=1, numObjectives, 1 do |
local text, type, finished = GetQuestLogLeaderBoard(i,questID); |
local qi, qj, qitemName, qnumDone, qnumNeeded = string.find(text, QG_ITEM_REQ_STR); |
if ((type == "item") or (type == "monster") or (type == "object")) then |
if (type == "object") then type = "item"; end |
ii, jj, itemName, numDone, numNeeded = string.find(arg1, QG_ITEM_REQ_STR); |
if ((itemName == qitemName) and (numNeeded == qnumNeeded)) then |
if (QuestGuru_Settings.Sounds.Progress.Enabled) then sound = QuestGuru_Settings.Sounds.Progress.Sound; end |
if (QuestGuru_Settings.Announce.item.Enabled and (type == "item")) then announceText = QuestGuru_Settings.Announce.item.Text; end |
if (QuestGuru_Settings.Announce.monster.Enabled and (type == "monster")) then announceText = QuestGuru_Settings.Announce.monster.Text; end |
if (numDone == numNeeded) then |
if (QuestGuru_Settings.Sounds.ObjComplete.Enabled) then sound = QuestGuru_Settings.Sounds.ObjComplete.Sound; end |
if (announceText) then announceText = announceText.." ($complete)"; end |
finished = true; |
end |
currQuest = true; |
end |
elseif (type == "event") then |
itemName = text; |
numDone=1; |
numNeeded=1; |
if (arg1 == text.." ("..COMPLETE..")") then |
if (QuestGuru_Settings.Sounds.ObjComplete.Enabled) then sound = QuestGuru_Settings.Sounds.ObjComplete.Sound; end |
if (QuestGuru_Settings.Announce.event.Enabled) then announceText = QuestGuru_Settings.Announce.event.Text; end |
currQuest = true; |
finished = true; |
end |
end |
if (not finished) then questComplete = false; end |
end |
end |
if (currQuest) then |
if (questComplete) then |
if (QuestGuru_Settings.Sounds.QuestComplete.Enabled) then sound = QuestGuru_Settings.Sounds.QuestComplete.Sound; end |
if (QuestGuru_Settings.Announce.Quest.Enabled) then announceText = QuestGuru_Settings.Announce.Quest.Text; end |
UIErrorsFrame:AddMessage(QG_QUEST_COMPLETE, 1, 1, 0, 1, 5); |
end |
QuestGuru_PlayExtraSound(sound); |
QuestGuru_DoAnnounce(announceText, numDone, numNeeded, itemName, questLogTitleText, arg1, questID); |
QuestGuru_CommAddTimer(1, 1, QuestGuru_SendQuestStatus, questID, false); |
end |
end |
end |
function QuestGuru_PlayExtraSound(sound) |
if (sound == nil) then return; end |
if (QuestGuru_Settings.Sounds.Enabled) then |
if ((string.sub(sound, -4) == ".wav") or (string.sub(sound, -4) == ".mp3")) then |
PlaySoundFile(sound); |
else |
PlaySound(sound); |
end |
end |
end |
function QuestGuru_QuestProgressShow() |
local questTitle = GetTitleText(); |
QuestGuru_UpdateProgressFrame(questTitle, GetGossipActiveQuests()); |
local i; |
for i=1, GetNumQuestItems() do |
local name, texture, numItems, quality, isUsable = GetQuestItemInfo("required", i); |
local link = GetQuestItemLink("required", i); |
if (name and link) then |
QuestGuru_Items[QuestGuru_RealmName][name] = link; |
_G["QuestProgressItem"..i].link = link; |
_G["QuestProgressItem"..i]:SetScript("OnEnter", function (self) |
GameTooltip:SetOwner(self, "ANCHOR_RIGHT"); |
GameTooltip:SetHyperlink(self.link); |
end); |
end |
end |
end |
function QuestGuru_UpdateProgressFrame(questTitle, ...) |
local i; |
for i=1, select("#", ...), 3 do |
if (select(i, ...) == questTitle) then |
QuestProgressTitleText:SetText("["..select(i+1, ...).."] "..questTitle); |
end |
end |
end |
function QuestGuru_LoadVariables() |
QuestGuru_Player = UnitName("player"); |
QuestGuru_PlayerFaction = UnitFactionGroup("player"); |
QuestGuru_RealmName = GetRealmName(); |
if (QuestGuru_Items == nil) then |
QuestGuru_Items = {}; |
end |
if (QuestGuru_Items[QuestGuru_RealmName] == nil) then |
QuestGuru_Items[QuestGuru_RealmName] = {}; |
end |
if (QuestGuru_Settings == nil) then |
QuestGuru_Settings = {}; |
end |
QuestGuru_QuestAnnounceLoadSettings(); |
QuestGuru_OptionsSoundsLoadSettings(); |
if (QuestGuru_Settings.AutoComplete ~= true) then |
QuestGuru_Settings.AutoComplete = false; |
end |
QuestGuru_OptionsFrameAutoCompleteToggle:SetChecked(QuestGuru_Settings.AutoComplete); |
if (QuestGuru_Settings.ShowObjItemIcons ~= true) then |
QuestGuru_Settings.ShowObjItemIcons = false; |
end |
QuestGuru_OptionsFrameShowObjItemIconsToggle:SetChecked(QuestGuru_Settings.ShowObjItemIcons); |
if (QuestGuru_Settings.DisableComm ~= true) then |
QuestGuru_Settings.DisableComm = false; |
end |
QuestGuru_OptionsFrameDisableCommToggle:SetChecked(QuestGuru_Settings.DisableComm); |
if (QuestGuru_Settings.HeaderQuests ~= false) then |
QuestGuru_Settings.HeaderQuests = true; |
end |
QuestGuru_OptionsFrameShowHeaderQuestsToggle:SetChecked(QuestGuru_Settings.HeaderQuests); |
if (QuestGuru_Settings.ShowLevels == nil) then |
QuestGuru_Settings.ShowLevels = {}; |
end |
if (QuestGuru_Settings.ShowLevels.QuestLog ~= false) then |
QuestGuru_Settings.ShowLevels.QuestLog = true; |
end |
QuestGuru_OptionsFrameShowLevelsQuestLogToggle:SetChecked(QuestGuru_Settings.ShowLevels.QuestLog); |
end |
function QuestGuru_Echo(msg, always) |
local info = ChatTypeInfo["SYSTEM"]; |
if (always or ((QuestGuru_Settings) and (QuestGuru_Settings.DebugLevel) and (QuestGuru_Settings.DebugLevel > 0))) then |
DEFAULT_CHAT_FRAME:AddMessage(msg, info.r, info.g, info.b, info.id); |
end |
end |
function QuestGuru_QuestFrameGreetingPanel_OnShow() |
local numActiveQuests = GetNumActiveQuests(); |
for i=1, numActiveQuests, 1 do |
local questTitleButton = _G["QuestTitleButton"..i]; |
local questTitleButtonIcon = _G[questTitleButton:GetName() .. "QuestIcon"]; |
local level = GetActiveLevel(i); |
if (level == -1) then level = "*"; end |
local title = GetActiveTitle(i); |
if ( IsActiveQuestTrivial(i) ) then |
questTitleButton:SetFormattedText(TRIVIAL_QUEST_DISPLAY, "["..level.."] "..title); |
else |
questTitleButton:SetFormattedText(NORMAL_QUEST_DISPLAY, "["..level.."] "..title); |
end |
if (QuestGuru_IsQuestComplete(title)) then |
SetDesaturation(questTitleButtonIcon, nil); |
else |
SetDesaturation(questTitleButtonIcon, 1); |
end |
end |
local numAvailableQuests = GetNumAvailableQuests(); |
for i=(numActiveQuests + 1), (numActiveQuests + numAvailableQuests), 1 do |
local questTitleButton = _G["QuestTitleButton"..i]; |
local questTitleButtonIcon = _G[questTitleButton:GetName() .. "QuestIcon"]; |
local level = GetAvailableLevel(i - numActiveQuests); |
if (level == -1) then level = "*"; end |
local title = GetAvailableTitle(i - numActiveQuests); |
if ( IsAvailableQuestTrivial(i - numActiveQuests) ) then |
questTitleButton:SetFormattedText(TRIVIAL_QUEST_DISPLAY, "["..level.."] "..title); |
questTitleButtonIcon:SetVertexColor(0.5,0.5,0.5); |
else |
questTitleButton:SetFormattedText(NORMAL_QUEST_DISPLAY, "["..level.."] "..title); |
questTitleButtonIcon:SetVertexColor(1,1,1); |
end |
end |
end |
function QuestGuru_QuestDetailShow() |
local questTitle = GetTitleText(); |
QuestGuru_UpdateDetailFrame(questTitle, GetGossipAvailableQuests()); |
end |
function QuestGuru_UpdateDetailFrame(questTitle, ...) |
local i; |
for i=1, select("#", ...), 5 do |
if (select(i, ...) == questTitle) then |
QuestInfoTitleHeader:SetText("["..select(i+1, ...).."] "..questTitle); |
end |
end |
end |
function QuestGuru_QuestProgressShow() |
local questTitle = GetTitleText(); |
QuestGuru_UpdateProgressFrame(questTitle, GetGossipActiveQuests()); |
local i; |
for i=1, GetNumQuestItems() do |
local name, texture, numItems, quality, isUsable = GetQuestItemInfo("required", i); |
local link = GetQuestItemLink("required", i); |
if (name and link) then |
QuestGuru_Items[QuestGuru_RealmName][name] = link; |
end |
end |
end |
function QuestGuru_UpdateProgressFrame(questTitle, ...) |
local i; |
for i=1, select("#", ...), 4 do |
if (select(i, ...) == questTitle) then |
QuestProgressTitleText:SetText("["..select(i+1, ...).."] "..questTitle); |
end |
end |
end |
function QuestGuru_GossipShow() |
local npc = UnitName("npc"); |
QuestGuru_UpdateGossipFrame(1, true, GetGossipAvailableQuests()); |
if (GetNumGossipAvailableQuests() > 0) then |
QuestGuru_UpdateGossipFrame(GetNumGossipAvailableQuests() + 2, false, GetGossipActiveQuests()); |
else |
QuestGuru_UpdateGossipFrame(1, false, GetGossipActiveQuests()); |
end |
end |
function QuestGuru_UpdateGossipFrame(currButton, availQuest, ...) |
local i; |
local j = 4; |
if (availQuest) then j=5; end |
for i=1, select("#", ...), j do |
local button = _G["GossipTitleButton"..currButton]; |
local buttonIcon = _G[button:GetName() .. "GossipIcon"]; |
local level = select(i+1, ...); |
if (level == -1) then level = "*"; end |
button:SetFormattedText("[%s] %s", level, select(i, ...)); |
if (QuestGuru_IsQuestComplete(select(i, ...)) or availQuest) then |
SetDesaturation(buttonIcon, nil); |
else |
SetDesaturation(buttonIcon, 1); |
end |
currButton = currButton + 1; |
end |
end |
function QuestGuru_IsQuestComplete(questTitle) |
local numEntries, numQuests = GetNumQuestLogEntries(); |
local i; |
for i=1, numEntries do |
local questLogTitleText, level, questTag, suggestedGroup, isHeader, isCollapsed, isComplete, isDaily = GetQuestLogTitle(i); |
local numObjectives = GetNumQuestLeaderBoards(i); |
if (questLogTitleText == questTitle) then return (isComplete or (numObjectives == 0)); end |
end |
return false; |
end |
local QuestLogFrameX, QuestLogFrameY; |
function QuestGuru_QuestLog_OnShow() |
QuestLog_OnShow(); |
if (QuestLogFrameX ~= nil and QuestLogFrameY ~= nil) then |
QuestLogFrame:SetPoint("TOPLEFT", QuestLogFrame:GetParent(), "BOTTOMLEFT", QuestLogFrameX, QuestLogFrameY); |
end |
end |
QuestLogFrame:SetScript("OnShow", QuestGuru_QuestLog_OnShow); |
function QuestGuru_QuestLog_OnHide() |
QuestLog_OnHide(); |
QuestLogFrameX = QuestLogFrame:GetLeft(); |
QuestLogFrameY = QuestLogFrame:GetTop(); |
end |
QuestLogFrame:SetScript("OnHide", QuestGuru_QuestLog_OnHide); |
QuestGuru ChangeLog |
=================== |
Version 2.2.5-40300 |
------------- |
* The History button call to QuestCompletist has been fixed. |
Version 2.2.4-40300 |
------------- |
* Fixed the TOC for 4.3 cata |
* MrObrien has asked that somebody pickup and work on the QuestGuru so I will try and do some updates as I can't play without this mod. |
Addon home is www.wowinterface.com and you can PM me there if you like. Gregity is the name. |
I will be making small changes to get used to the codebase before I try anything like a major update. |
Version 2.2.3 |
------------- |
* Fixes for when scrolling the quest log |
* The quest log frame will now remember where it was when moved |
Version 2.2.2 |
------------- |
* Tracker achievement bug fixes and flashing for completed remote quests |
Version 2.2.1 |
------------- |
* Tracker bug fix that was causing game crashes |
Version 2.2 |
----------- |
* Added quest levels to NPC dialogs where possible |
* Added "Sound\\Creature\\Peasant\\PeasantWhat3.wav" to the list of sound options |
Version 2.1 |
----------- |
* Removed the History, I recommend using Quest Completist |
* Fixes for Cataclysm |
* Special thanks to Dridzy and Cartman for their invaluable contributions |
Version 2.0 Beta 2 |
------------------ |
* QuestGuru now modifies the quest log to add quest level and checkboxes for tracking quests (like previous versions of QuestGuru) |
Version 2.0 Beta 1 |
------------------ |
* Incorporated History function, QuestGuru History is no longer a separate module |
* QuestGuru is now a modification of the built-in quest log, rather than a replacement |
* History is no longer stored on your computer but is retrieved from the server instead |
* Removed some features that were causing problems and slimmed down the addon to reduce memory usage |
* Upgraded to ChatThrottleLib v21 |