vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 if (not XPerl_GetUsage) then
2  
3 XPerl_Usage = {}
4 local lastSend = 0
5 local notifiedVersion = nil
6 local needToSend = {}
7 local responsePacket
8  
9 -- CheckForNewerVersion
10 local function CheckForNewerVersion(ver)
11 if (not strfind(strlower(ver), "beta")) then
12 --local _, _, a,b,c = strfind(ver, "(%d+).(%d+).(%d+)")
13 --local _, _, aa,bb,cc = strfind(XPerl_VersionNumber, "(%d+).(%d+).(%d+)")
14 --local vThem = a * 10000 + b * 100 + c
15 --local vMe = aa * 10000 + bb * 100 + cc
16 --if (vThem > vMe) then
17 if (ver > XPerl_VersionNumber) then
18 if (not notifiedVersion or notifiedVersion < ver) then
19 notifiedVersion = ver
20 DEFAULT_CHAT_FRAME:AddMessage(XPerl_ProductName.." |c00FFFFFF"..ver.."|r is available for download")
21 end
22 return true
23 end
24 end
25 end
26  
27 -- ProcessXPerlMessage
28 local function ProcessXPerlMessage(unitName, msg)
29 local myUsage = XPerl_Usage[unitName]
30 if (not myUsage) then
31 myUsage = {}
32 XPerl_Usage[unitName] = myUsage
33 end
34  
35 local rcv
36 if (msg == "R") then
37 -- It's a response packet, so don't reply
38 responsePacket = true
39 if (XPerlTest) then myUsage.responses = (myUsage.responses or 0) + 1 end
40  
41 elseif (strsub(msg, 1, 4) == "VER ") then
42 -- ChatFrame7:AddMessage(" Received info from "..unitName..", channel: "..arg3)
43 if (XPerlTest) then myUsage.packets = (myUsage.packets or 0) + 1 end
44  
45 local ver = strsub(msg, 5)
46 if (ver ~= XPerl_VersionNumber) then
47 myUsage.version = ver
48 CheckForNewerVersion(ver)
49 end
50 if (not responsePacket) then
51 rcv = true
52 end
53  
54 elseif (strsub(msg, 1, 4) == "MOD ") then
55 myUsage.mods = strsub(msg, 5)
56  
57 elseif (strsub(msg, 1, 4) == "LOC ") then
58 local loc = strsub(msg, 5)
59 if (loc ~= GetLocale()) then
60 myUsage.locale = loc
61 end
62  
63 elseif (strsub(msg, 1, 3) == "GC ") then
64 myUsage.gc = tonumber(strsub(msg, 4))
65 end
66  
67 if (rcv) then
68 if (unitName ~= UnitName("player")) then
69 -- Will send out our own version when we receive one, if it's been at least 2 minutes since the last send
70 XPerl_SendModules(arg3, true)
71 end
72 end
73 end
74  
75 -- GuildMateTooltip
76 local function GuildMateTooltip()
77 if (XPerlConfig.XPerlTooltipInfo == 0) then
78 return
79 end
80  
81 local name, rank, rankIndex, level, class, zone, note, officernote, online = GetGuildRosterInfo(this.guildIndex)
82 if (name) then
83 local xpUsage = XPerl_Usage[name]
84 if (xpUsage) then
85 local ver
86 if (xpUsage.version) then
87 ver = xpUsage.version
88 else
89 ver = XPerl_VersionNumber
90 end
91  
92 GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT")
93 GameTooltip:ClearLines()
94  
95 if (xpUsage.locale) then
96 GameTooltip:AddDoubleLine(XPerl_ProductName.." "..ver, xpUsage.locale, 1, 1, 1, 0.5, 0.5, 0.5)
97 else
98 GameTooltip:SetText(XPerl_ProductName.." "..ver, 1, 1, 1)
99 end
100  
101 if (xpUsage.version and CheckForNewerVersion(xpUsage.version)) then
102 GameTooltip:AddLine("*Newer version", 0.5, 1, 0.5)
103 end
104  
105 if (xpUsage.mods) then
106 local modList = XPerl_DecodeModuleList(xpUsage.mods)
107 if (modList) then
108 GameTooltip:AddLine("Modules: "..modList, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1)
109 end
110 end
111  
112 if (xpUsage.gc and IsShiftKeyDown()) then
113 GameTooltip:AddLine("UI Mem Max: "..xpUsage.gc, 0.8, 0.2, 0.2)
114 end
115  
116 GameTooltip:Show()
117 return
118 end
119 end
120  
121 GameTooltip:Hide()
122 end
123  
124 -- XPerl_UsageStartup
125 function XPerl_Usage_OnEvent()
126  
127 if (event == "PLAYER_ENTERING_WORLD") then
128 -- Hook the guild name list to show tooltip for X-Perl users
129 for i = 1,13 do
130 local f = getglobal("GuildFrameButton"..i)
131 if (f) then
132 f:SetScript("OnEnter", GuildMateTooltip)
133 f:SetScript("OnLeave", XPerl_PlayerTipHide)
134 end
135 f = getglobal("GuildFrameGuildStatusButton"..i)
136 if (f) then
137 f:SetScript("OnEnter", GuildMateTooltip)
138 f:SetScript("OnLeave", XPerl_PlayerTipHide)
139 end
140 end
141  
142 if (GetNumRaidMembers() > 0) then
143 needToSend.RAID = true
144 elseif (GetNumPartyMembers() > 0) then
145 needToSend.PARTY = true
146 end
147 XPerl_SendModules("GUILD")
148 else
149 if (arg1 == XPERL_COMMS_PREFIX) then
150 XPerl_ParseCTRA(arg4, arg2, ProcessXPerlMessage)
151 responsePacket = nil
152 elseif (arg1 == "CTRA") then
153 XPerl_SendToChannel() -- Check's to see if anything pending to send
154 end
155 end
156 end
157  
158 -- XPerl_SplitCTRAMessage
159 function XPerl_SplitCTRAMessage(msg, char)
160 local arr = { }
161 while (strfind(msg, char) ) do
162 local iStart, iEnd = strfind(msg, char)
163 tinsert(arr, strsub(msg, 1, iStart-1))
164 msg = strsub(msg, iEnd+1, strlen(msg))
165 end
166 if ( strlen(msg) > 0 ) then
167 tinsert(arr, msg)
168 end
169 return arr
170 end
171  
172 -- XPerl_ParseCTRA
173 function XPerl_ParseCTRA(nick, msg, func)
174 if (strfind(msg, "#")) then
175 local arr = XPerl_SplitCTRAMessage(msg, "#")
176 for i,subMsg in pairs(arr) do
177 func(nick, subMsg)
178 end
179 else
180 func(nick, msg)
181 end
182 end
183  
184 -- !!!!! Don't change the order of this list - EVER!!!!!
185 local xpModList = {"XPerl", "XPerl_Player", "XPerl_PlayerPet", "XPerl_Target", "XPerl_TargetTarget", "XPerl_Party", "XPerl_PartyPet", "XPerl_RaidFrames", "XPerl_RaidHelper", "XPerl_RaidAdmin"}
186 --------------------------------------------------------
187  
188 -- XPerl_SendModules
189 function XPerl_SendModules(chan, response)
190 if (not chan) then
191 chan = "RAID"
192 end
193 needToSend[chan] = true
194 XPerl_SendToChannel(response)
195 end
196  
197 -- MakePacket
198 local function MakePacket(response)
199  
200 local modules = ""
201 for k,v in pairs(xpModList) do
202 modules = modules..(tostring(IsAddOnLoaded(v) or 0))
203 end
204 local _, gc = gcinfo()
205  
206 local resp
207 if (response) then resp = "R#" else resp = "" end
208  
209 return resp.."VER "..XPerl_VersionNumber.."#GC "..gc.."#LOC "..GetLocale().."#MOD "..modules
210 end
211  
212 -- XPerl_SendToChannel
213 function XPerl_SendToChannel(response)
214 if (GetTime() < lastSend + 2*60) then
215 return
216 end
217 lastSend = GetTime()
218  
219 local packet
220 for k,v in pairs({"GUILD", "RAID", "PARTY", "BATTLEGROUND"}) do
221 if (needToSend[v]) then
222 if (IsInGuild() or v ~= "GUILD") then
223 if (not packet) then
224 packet = MakePacket(response)
225 end
226  
227 SendAddonMessage(XPERL_COMMS_PREFIX, packet, v)
228 needToSend[v] = nil
229 end
230 end
231 end
232 end
233  
234 -- XPerl_DecodeModuleList
235 function XPerl_DecodeModuleList(modList)
236 local nameList = {XPerl = "Core", XPerl_Player = "Player", XPerl_PlayerPet = "Player's Pet", XPerl_Target = "Target", XPerl_TargetTarget = "Target's Target", XPerl_Party = "Party", XPerl_PartyPet = "Party Pets", XPerl_RaidFrames = "Raid Frames", XPerl_RaidHelper = "Raid Helper", XPerl_RaidAdmin = "Raid Admin"}
237 local ret, sep, any = "", ""
238 for k,v in pairs(xpModList) do
239 if (strsub(modList, k, k) == "1") then
240 if (nameList[v]) then
241 ret = ret..sep..nameList[v]
242 else
243 ret = ret..sep..v
244 end
245 sep = ", "
246 any = true
247 end
248 end
249 if (any) then
250 return ret
251 end
252 end
253  
254 -- XPerl_GetUsage(unitName)
255 function XPerl_GetUsage(unitName)
256 return XPerl_Usage[unitName]
257 end
258  
259 if (not XPerl_UsageFrame) then
260 local f = CreateFrame("Frame", "XPerl_UsageFrame")
261 f:RegisterEvent("PLAYER_ENTERING_WORLD")
262 f:RegisterEvent("CHAT_MSG_ADDON")
263 f:SetScript("OnEvent", XPerl_Usage_OnEvent)
264 end
265  
266 end