From 219a16fb9dc33e50d800f3dafa48cb308b69adc7 Mon Sep 17 00:00:00 2001 From: "Johnny C. Lam" Date: Wed, 4 Jun 2014 20:24:01 +0000 Subject: [PATCH] "/ovale ping" requests Ovale versions from the group. git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@1515 d5049fe3-3747-40f7-a4b5-f36d6801af5f --- Ovale.lua | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- OvaleOptions.lua | 6 ++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/Ovale.lua b/Ovale.lua index fdcf6e6..aabd2f3 100644 --- a/Ovale.lua +++ b/Ovale.lua @@ -9,19 +9,22 @@ --]]---------------------------------------------------------------------- local addonName, addonTable = ... -Ovale = LibStub("AceAddon-3.0"):NewAddon(addonTable, addonName, "AceConsole-3.0", "AceEvent-3.0") +Ovale = LibStub("AceAddon-3.0"):NewAddon(addonTable, addonName, "AceConsole-3.0", "AceEvent-3.0", "AceSerializer-3.0", "AceTimer-3.0") -- local L = LibStub("AceLocale-3.0"):GetLocale(addonName) local OvaleOptions = nil local format = string.format +local next = next local pairs = pairs local select = select local tostring = tostring local wipe = table.wipe local API_GetTime = GetTime +local API_IsInGroup = IsInGroup local API_RegisterAddonMessagePrefix = RegisterAddonMessagePrefix +local API_SendAddonMessage = SendAddonMessage local API_UnitCanAttack = UnitCanAttack local API_UnitExists = UnitExists local API_UnitHasVehicleUI = UnitHasVehicleUI @@ -93,6 +96,7 @@ function Ovale:OnInitialize() end function Ovale:OnEnable() + self:RegisterEvent("CHAT_MSG_ADDON") self:RegisterEvent("PLAYER_REGEN_ENABLED") self:RegisterEvent("PLAYER_REGEN_DISABLED") self:RegisterEvent("PLAYER_TARGET_CHANGED") @@ -102,12 +106,55 @@ function Ovale:OnEnable() end function Ovale:OnDisable() + self:UnregisterEvent("CHAT_MSG_ADDON") self:UnregisterEvent("PLAYER_REGEN_ENABLED") self:UnregisterEvent("PLAYER_REGEN_DISABLED") self:UnregisterEvent("PLAYER_TARGET_CHANGED") self.frame:Hide() end +do + local versionReply = {} + local timer + + function Ovale:CHAT_MSG_ADDON(event, ...) + local prefix, message, channel, sender = ... + if prefix == OVALE_MSG_PREFIX then + local ok, msgType, version = self:Deserialize(message) + if ok then + if msgType == "V" then + local msg = self:Serialize("VR", self.version) + local channel = API_IsInGroup(LE_PARTY_CATEGORY_INSTANCE) and "INSTANCE_CHAT" or "RAID" + API_SendAddonMessage(OVALE_MSG_PREFIX, msg, channel) + elseif msgType == "VR" then + versionReply[sender] = version + end + end + end + end + + function Ovale:VersionCheck() + if not timer then + wipe(versionReply) + local message = "V" + local channel = API_IsInGroup(LE_PARTY_CATEGORY_INSTANCE) and "INSTANCE_CHAT" or "RAID" + API_SendAddonMessage(OVALE_MSG_PREFIX, message, channel) + timer = self:ScheduleTimer("PrintVersionCheck", 3) + end + end + + function Ovale:PrintVersionCheck() + if next(versionReply) then + for sender, version in pairs(versionReply) do + self:FormatPrint(">>> %s is using Ovale %s", sender, version) + end + else + self:Print(">>> No other Ovale users present.") + end + timer = nil + end +end + --Called when the player target change --Used to update the visibility e.g. if the user chose --to hide Ovale if a friendly unit is targeted diff --git a/OvaleOptions.lua b/OvaleOptions.lua index d61e0bf..cae6b02 100644 --- a/OvaleOptions.lua +++ b/OvaleOptions.lua @@ -709,6 +709,12 @@ local self_options = type = "execute", func = function() Ovale:Print(Ovale.version) end, }, + ping = { + order = -15, + name = "Ping for Ovale users in group", + type = "execute", + func = function() Ovale:VersionCheck() end, + }, }, }, }, -- 1.7.9.5