From 6b53dc25630dc6a96c711085e52177a7309e2186 Mon Sep 17 00:00:00 2001 From: Peter Eliasson Date: Sun, 7 Aug 2016 14:45:37 +0200 Subject: [PATCH] Ask for guildInfo when we need it. Also take into account the realm of the guild when checking if a player is part of our guild. Previously, a player part of a guild with the same name, but on another realm, would have been seen as part of our guild. --- src/main.lua | 59 ++++++++++++++++++++++------------------------------------ 1 file changed, 22 insertions(+), 37 deletions(-) diff --git a/src/main.lua b/src/main.lua index 0aab9a7..c2f1faa 100644 --- a/src/main.lua +++ b/src/main.lua @@ -98,15 +98,24 @@ end -- Tests if a player with name playerName is in the same -- guild as the player running this addon. function addon:IsInMyGuild(playerName) + if not IsInGuild() then + return false; + end + if UnitIsUnit(playerName, "player") then -- We are always in our own guild - return true - elseif self.guildName then - local guildName, _, _ = GetGuildInfo(playerName) - return (guildName == self.guildName); - else - return false + return true; end + + local relation = UnitRealmRelationship(playerName) + if not (relation == LE_REALM_RELATION_SAME or relation == LE_REALM_RELATION_VIRTUAL) then + -- A player not on the same (connected) realm cannot be in our guild + return false; + end + + local myGuildName, _, _, myGuildRealm = GetGuildInfo("player"); + local otherGuildName, _, _, otherGuildRealm = GetGuildInfo(playerName); + return (myGuildName == otherGuildName and myGuildRealm == otherGuildRealm); end -- Tests if a zone is in the addon's tracked zones. @@ -114,21 +123,6 @@ function addon:IsTrackedZone(zoneId) return tContains(self.trackedZones, zoneId); end --- Function that updates the guild name of the player --- by quering the GetGuildInfo method for the player. -function addon:UpdateMyGuildName() - if IsInGuild() then - local guildName, _, _ = GetGuildInfo("player") - if guildName ~= nil then - self.guildName = guildName - end - else - self.guildName = nil - end - - self:Debug("UpdateMyGuildName", self.guildName) -end - -- Creates the "database" via AceDB function addon:SetupDatabase() self.db = LibStub("AceDB-3.0"):New("GuildSkadaHighScoreDB", addon.dbDefaults, true) @@ -152,12 +146,17 @@ function addon:OnEncounterEndSuccess(encounterId, encounterName, difficultyId, r return; end - local guildName = self.guildName; - if not guildName then + if not IsInGuild() then self:Debug("Not in a guild"); return; end + local guildName = GetGuildInfo("player"); + if not guildName then + self:Debug("Could not get the guild name of the player") + return; + end + -- Get the current zone and make sure it is a tracked zone local zoneName, _, _, _, _, _, _, zoneId = GetInstanceInfo(); if not zoneName then @@ -196,12 +195,6 @@ function addon:OnEncounterEndSuccess(encounterId, encounterName, difficultyId, r end); end -function addon:PLAYER_GUILD_UPDATE(evt, unitId) - if unitId == "player" then - self:UpdateMyGuildName() - end -end - function addon:ENCOUNTER_END(evt, encounterId, encounterName, difficultyId, raidSize, endStatus) self:Debug("ENCOUNTER_END", encounterId, encounterName, difficultyId, raidSize, endStatus) if endStatus == 1 then @@ -216,11 +209,8 @@ end function addon:OnEnable() self.trackedZones = getRaidZonesByExpansionId(GetExpansionLevel()) - self.guildName = nil; self:RegisterEvent("ENCOUNTER_END") - self:RegisterEvent("PLAYER_GUILD_UPDATE") - self:RegisterChatCommand("gshs", function(arg) if arg == "config" then self.options:ShowOptionsFrame(); @@ -229,8 +219,6 @@ function addon:OnEnable() end end) - self:UpdateMyGuildName(); - if self.options:GetPurgeEnabled() then local maxDaysAge = self.options:GetPurgeMaxParseAge(); local olderThanDate = time() - (maxDaysAge * 24 * 60 * 60); @@ -243,10 +231,7 @@ end function addon:OnDisable() self.trackedZones = nil; - self.guildName = nil; self:UnregisterEvent("ENCOUNTER_END") - self:UnregisterEvent("PLAYER_GUILD_UPDATE") - self:UnregisterChatCommand("gshs"); end -- 1.7.9.5