assert( oRA, "oRA not found!") ------------------------------ -- Are you local? -- ------------------------------ local L = AceLibrary("AceLocale-2.2"):new("oRAPReady") ---------------------------- -- Localization -- ---------------------------- L:RegisterTranslations("enUS", function() return { ["ready"] = true, ["readyparticipant"] = true, ["Options for ready checks and votes."] = true, ["sound"] = true, ["Sound"] = true, ["Toggle an audio warning upon a ready check or vote."] = true, ["Ready"] = true, ["Not Ready"] = true, ["Are you Ready?"] = true, ["Yes"] = true, ["No"] = true, ["Ready Check"] = true, ["check"] = true, ["Vote"] = true, ["vote"] = true, ["Perform a vote."] = true, ["Participant/Ready"] = true, ["Closing Vote"] = true, ["Closing Check"] = true, } end) L:RegisterTranslations("koKR", function() return { ["Options for ready checks and votes."] = "준비 확인과 투표 설정", ["Sound"] = "소리", ["Toggle an audio warning upon a ready check or vote."] = "투표나 준비 확인시 경고음 토글", ["Ready"] = "준비완료", ["Not Ready"] = "준비안됨", ["Are you Ready?"] = "준비 되셨습니까?", ["Yes"] = "예", ["No"] = "아니오", ["Ready Check"] = "준비 확인", ["check"] = "확인", ["Vote"] = "투표", ["Perform a vote."] = "투표를 실시합니다.", ["Participant/Ready"] = "부분/준비", ["Closing Vote"] = "투표 닫기", ["Closing Check"] = "확인 닫기", } end) L:RegisterTranslations("zhCN", function() return { ["ready"] = "准备", ["readyparticipant"] = "readyparticipant", ["Options for ready checks and votes."] = "准备检查和投票的选项", ["sound"] = "声音", ["Sound"] = "声音", ["Toggle an audio warning upon a ready check or vote."] = "准备检查或投票时发声", ["Ready"] = "准备就绪", ["Not Ready"] = "未准备好", ["Are you Ready?"] = "准备好了么?", ["Yes"] = "是", ["No"] = "否", ["Ready Check"] = "准备检查", ["check"] = "检查", ["Vote"] = "投票", ["vote"] = "投票", ["Perform a vote."] = "进行投票", ["Participant/Ready"] = "Participant/Ready", ["Closing Vote"] = "关闭投票", ["Closing Check"] = "关闭检查", } end) L:RegisterTranslations("zhTW", function() return { ["ready"] = "就位確認", ["readyparticipant"] = "readyparticipant", ["Options for ready checks and votes."] = "就位確認與投票選項", ["sound"] = "聲音", ["Sound"] = "聲音", ["Toggle an audio warning upon a ready check or vote."] = "就位確認與投票時播放音效", ["Ready"] = "已就緒", ["Not Ready"] = "未就緒", ["Are you Ready?"] = "準備好了嗎?", ["Yes"] = "是", ["No"] = "否", ["Ready Check"] = "就位確認", ["check"] = "檢查", ["Vote"] = "投票", ["vote"] = "投票", ["Perform a vote."] = "進行投票", ["Participant/Ready"] = "隊員/就位確認", ["Closing Vote"] = "關閉投票", ["Closing Check"] = "關閉檢查", } end) L:RegisterTranslations("frFR", function() return { --["ready"] = true, --["readyparticipant"] = true, ["Options for ready checks and votes."] = "Options concernant les appels et les votes.", --["sound"] = true, ["Sound"] = "Son", ["Toggle an audio warning upon a ready check or vote."] = "Joue ou non un avertissement sonore lors d'un appel ou d'un vote.", ["Ready"] = "Pr\195\170t", ["Not Ready"] = "Pas pr\195\170t", ["Are you Ready?"] = "\195\138tes-vous pr\195\170t ?", ["Yes"] = "Oui", ["No"] = "Non", ["Ready Check"] = "Appel", --["check"] = true, ["Vote"] = "Vote", --["vote"] = true, ["Perform a vote."] = "Soumet un vote.", ["Participant/Ready"] = "Participant/Appel", ["Closing Vote"] = "Cl\195\180ture du vote", ["Closing Check"] = "Cl\195\180ture de l'appel", } end) ---------------------------------- -- Module Declaration -- ---------------------------------- oRAPReady = oRA:NewModule(L["readyparticipant"], "CandyBar-2.0") oRAPReady.defaults = { sound = true, } oRAPReady.participant = true oRAPReady.name = L["Participant/Ready"] oRAPReady.consoleCmd = L["ready"] oRAPReady.consoleOptions = { type = "group", desc = L["Options for ready checks and votes."], name = L["Ready"], args = { [L["sound"]] = { name = L["Sound"], type = "toggle", desc = L["Toggle an audio warning upon a ready check or vote."], get = function() return oRAPReady.db.profile.sound end, set = function(v) oRAPReady.db.profile.sound = v end, }, } } ------------------------------ -- Initialization -- ------------------------------ function oRAPReady:OnEnable() self:RegisterCheck("CHECKREADY", "oRA_ReadyCheck") self:RegisterCheck("VOTE", "oRA_Vote") self:RegisterEvent( "oRA_BarTexture" ) self:SetupFrames() end function oRAPReady:OnDisable() self:UnregisterAllEvents() self:UnregisterCheck("CHECKREADY") self:UnregisterCheck("VOTE") end ------------------------- -- Command Handlers -- ------------------------- ------------------------- -- Event Handlers -- ------------------------- -- Handles an incoming ready check function oRAPReady:oRA_ReadyCheck(msg, author) if not self:IsValidRequest(author) then return end if UnitName("player") ~= author then if self.db.profile.sound then PlaySoundFile("Sound\\interface\\levelup2.wav") end self:ShowReady( author ) end end -- Handles an incoming vote function oRAPReady:oRA_Vote(msg, author) if not self:IsValidRequest(author) then return end msg = self:CleanMessage(msg) local _,_,question = string.find(msg, "^VOTE (.+)$") if not question then return end if UnitName("player") ~= author then if self.db.profile.sound then PlaySoundFile("Sound\\interface\\levelup2.wav") end self:ShowVote( author, question ) end end function oRAPReady:oRA_BarTexture( texture ) if self:CandyBarStatus( "oRAPReadyTimeOut" ) then self:SetCandyBarTexture( "oRAPReadyTimeOut", self.core.bartextures[texture] ) end end -------------------------- -- Core function -- -------------------------- function oRAPReady:Vote( answer ) if not answer then return end if answer=="yes" then self:SendMessage("VOTEYES") elseif answer=="no" then self:SendMessage("VOTENO") end end function oRAPReady:Ready( readystate ) if not readystate then return end if readystate == "ready" then self:SendMessage("READY") elseif readystate == "notready" then self:SendMessage("NOTREADY") end end ------------------------------------ -- Frame Setup and Handling -- ------------------------------------ function oRAPReady:ShowVote( author, question ) self.frames.cheader:SetText(L["Vote"]) self.frames.cinfo:SetText("|cffffffff"..author.. "|r: " .. question) self.frames.leftbuttontext:SetText(L["Yes"]) self.frames.rightbuttontext:SetText(L["No"]) self.frames.leftbutton:SetScript("OnClick", function() this.owner:Vote("yes") this.owner:StopCandyBar("oRAPReadyTimeOut") this.owner.frames.check:Hide() this.owner:CancelScheduledEvent("oRAPReady_HideCheck") end ) self.frames.rightbutton:SetScript("OnClick", function() this.owner:Vote("no") this.owner:StopCandyBar("oRAPReadyTimeOut") this.owner.frames.check:Hide() this.owner:CancelScheduledEvent("oRAPReady_HideCheck") end ) self.frames.check:Show() self:RegisterCandyBar( "oRAPReadyTimeOut", 30, L["Closing Vote"], nil, "green", "yellow", "orange", "red") self:SetCandyBarPoint( "oRAPReadyTimeOut", "BOTTOM", self.frames.check, "BOTTOM", 0, 7 ) self:SetCandyBarBackgroundColor( "oRAPReadyTimeOut", "black", 0 ) self:SetCandyBarTexture( "oRAPReadyTimeOut", self.core.bartextures[self.core.db.profile.bartexture] ) self:StartCandyBar( "oRAPReadyTimeOut", 1) self:ScheduleEvent( "oRAPReady_HideCheck", function() self.frames.check:Hide() end, 30) end function oRAPReady:ShowReady( author ) self.frames.cheader:SetText(L["Ready Check"]) self.frames.cinfo:SetText("|cffffffff"..author.. "|r: " .. L["Are you Ready?"] ) self.frames.leftbuttontext:SetText(L["Ready"]) self.frames.rightbuttontext:SetText(L["Not Ready"]) self.frames.leftbutton:SetScript("OnClick", function() this.owner:Ready("ready") this.owner:StopCandyBar("oRAPReadyTimeOut") this.owner.frames.check:Hide() this.owner:CancelScheduledEvent("oRAPReady_HideCheck") end ) self.frames.rightbutton:SetScript("OnClick", function() this.owner:Ready("notready") this.owner:StopCandyBar("oRAPReadyTimeOut") this.owner.frames.check:Hide() this.owner:CancelScheduledEvent("oRAPReady_HideCheck") end ) self.frames.check:Show() self:RegisterCandyBar( "oRAPReadyTimeOut", 30, L["Closing Check"], nil, "green", "yellow", "orange", "red") self:SetCandyBarPoint( "oRAPReadyTimeOut", "BOTTOM", self.frames.check, "BOTTOM", 0, 7 ) self:SetCandyBarBackgroundColor( "oRAPReadyTimeOut", "black", 0 ) self:SetCandyBarTexture( "oRAPReadyTimeOut", self.core.bartextures[self.core.db.profile.bartexture] ) self:StartCandyBar( "oRAPReadyTimeOut", 1) self:ScheduleEvent( "oRAPReady_HideCheck", function() self.frames.check:Hide() end, 30) end function oRAPReady:SetupFrames() local f, t f, _, _ = GameFontNormal:GetFont() self.frames = {} self.frames.check = CreateFrame("Frame", nil, UIParent) self.frames.check:Hide() self.frames.check:SetWidth(325) self.frames.check:SetHeight(125) self.frames.check:SetBackdrop({ bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", tile = true, tileSize = 16, edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", edgeSize = 16, insets = {left = 4, right = 4, top = 4, bottom = 4}, }) self.frames.check:SetBackdropBorderColor(.5, .5, .5) self.frames.check:SetBackdropColor(0,0,0) self.frames.check:ClearAllPoints() self.frames.check:SetPoint("CENTER", WorldFrame, "CENTER", 0, 0) self.frames.cfade = self.frames.check:CreateTexture(nil, "BORDER") self.frames.cfade:SetWidth(319) self.frames.cfade:SetHeight(25) self.frames.cfade:SetTexture("Interface\\ChatFrame\\ChatFrameBackground") self.frames.cfade:SetPoint("TOP", self.frames.check, "TOP", 0, -4) self.frames.cfade:SetBlendMode("ADD") self.frames.cfade:SetGradientAlpha("VERTICAL", .1, .1, .1, 0, .25, .25, .25, 1) self.frames.check.Fade = self.frames.fade self.frames.cheader = self.frames.check:CreateFontString(nil,"OVERLAY") self.frames.cheader:SetFont(f, 14) self.frames.cheader:SetWidth(300) self.frames.cheader:SetText("header") self.frames.cheader:SetTextColor(1, .8, 0) self.frames.cheader:ClearAllPoints() self.frames.cheader:SetPoint("TOP", self.frames.check, "TOP", 0, -10) self.frames.cinfo = self.frames.check:CreateFontString(nil,"OVERLAY") self.frames.cinfo:SetFont(f, 10) self.frames.cinfo:SetWidth(300) self.frames.cinfo:SetText("info") self.frames.cinfo:SetTextColor(1, .8, 0) self.frames.cinfo:ClearAllPoints() self.frames.cinfo:SetPoint("TOP", self.frames.cheader, "BOTTOM", 0, -10) self.frames.leftbutton = CreateFrame("Button", nil, self.frames.check) self.frames.leftbutton.owner = self self.frames.leftbutton:SetWidth(125) self.frames.leftbutton:SetHeight(32) self.frames.leftbutton:SetPoint("RIGHT", self.frames.check, "CENTER", -10, -20) t = self.frames.leftbutton:CreateTexture() t:SetWidth(125) t:SetHeight(32) t:SetPoint("CENTER", self.frames.leftbutton, "CENTER") t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Up") t:SetTexCoord(0, 0.625, 0, 0.6875) self.frames.leftbutton:SetNormalTexture(t) t = self.frames.leftbutton:CreateTexture(nil, "BACKGROUND") t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Down") t:SetTexCoord(0, 0.625, 0, 0.6875) t:SetAllPoints(self.frames.leftbutton) self.frames.leftbutton:SetPushedTexture(t) t = self.frames.leftbutton:CreateTexture() t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Highlight") t:SetTexCoord(0, 0.625, 0, 0.6875) t:SetAllPoints(self.frames.leftbutton) t:SetBlendMode("ADD") self.frames.leftbutton:SetHighlightTexture(t) self.frames.leftbuttontext = self.frames.leftbutton:CreateFontString(nil,"OVERLAY") self.frames.leftbuttontext:SetFontObject(GameFontHighlight) self.frames.leftbuttontext:SetText("left") self.frames.leftbuttontext:SetAllPoints(self.frames.leftbutton) self.frames.rightbutton = CreateFrame("Button", nil, self.frames.check) self.frames.rightbutton.owner = self self.frames.rightbutton:SetWidth(125) self.frames.rightbutton:SetHeight(32) self.frames.rightbutton:SetPoint("LEFT", self.frames.check, "CENTER", 10, -20) t = self.frames.rightbutton:CreateTexture() t:SetWidth(125) t:SetHeight(32) t:SetPoint("CENTER", self.frames.rightbutton, "CENTER") t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Up") t:SetTexCoord(0, 0.625, 0, 0.6875) self.frames.rightbutton:SetNormalTexture(t) t = self.frames.rightbutton:CreateTexture(nil, "BACKGROUND") t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Down") t:SetTexCoord(0, 0.625, 0, 0.6875) t:SetAllPoints(self.frames.rightbutton) self.frames.rightbutton:SetPushedTexture(t) t = self.frames.rightbutton:CreateTexture() t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Highlight") t:SetTexCoord(0, 0.625, 0, 0.6875) t:SetAllPoints(self.frames.rightbutton) t:SetBlendMode("ADD") self.frames.rightbutton:SetHighlightTexture(t) self.frames.rightbuttontext = self.frames.rightbutton:CreateFontString(nil,"OVERLAY") self.frames.rightbuttontext:SetFontObject(GameFontHighlight) self.frames.rightbuttontext:SetText("right") self.frames.rightbuttontext:SetAllPoints(self.frames.rightbutton) end