vanilla-wow-addons – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | -- -- |
2 | BuddySync = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0", "AceHook-2.0", "AceConsole-2.0", "AceDB-2.0", "AceModuleCore-2.0", "AceDebug-2.0") |
||
3 | -- -- |
||
4 | local debugLevels = {"warn", "info", "notice", "off"} |
||
5 | -- -- |
||
6 | BuddySync:RegisterDB("BuddySyncDB") |
||
7 | BuddySync:RegisterDefaults("profile", {Debug = nil}) |
||
8 | -- -- |
||
9 | function BuddySync:OnEnable() |
||
10 | -- |
||
11 | this:RegisterEvent("CHAT_MSG_SYSTEM", "BS_onEVENT") |
||
12 | this:RegisterEvent("VARIABLES_LOADED", "BS_onEVENT") |
||
13 | this:RegisterEvent("FRIENDLIST_UPDATE", "BS_onEVENT") |
||
14 | -- |
||
15 | self:HookScript(FriendsFrame, "OnShow", "BS_SET_SHOW") |
||
16 | self:HookScript(FriendsFrameAddFriendButton, "OnClick", "BS_ADD_FRIEND") |
||
17 | self:HookScript(FriendsFrameIgnorePlayerButton, "OnClick", "BS_ADD_IGNORE") |
||
18 | self:HookScript(FriendsFrameRemoveFriendButton, "OnClick", "BS_DELETE_FRIEND") |
||
19 | self:HookScript(FriendsFrameStopIgnoreButton, "OnClick", "BS_STOP_IGNORE") |
||
20 | self:HookScript(SendMailNameEditBox, "OnChar", "SendMailFrame_SendeeAutocomplete_EXPANDED") |
||
21 | -- |
||
22 | end |
||
23 | -- -- |
||
24 | function BuddySync:SendMailFrame_SendeeAutocomplete_EXPANDED() |
||
25 | -- |
||
26 | local text = this:GetText(); |
||
27 | local textlen = strlen(text); |
||
28 | local name; |
||
29 | -- |
||
30 | if BuddySyncDB[BSR][TOON] then |
||
31 | if ( table.getn(BuddySyncDB[BSR][TOON]) > 0 ) then |
||
32 | for i=1, table.getn(BuddySyncDB[BSR][TOON]) do |
||
33 | name = BuddySyncDB[BSR][TOON][i]; |
||
34 | if ( strfind(strupper(name), strupper(text), 1, 1) == 1 ) then |
||
35 | SendMailNameEditBox:SetText(name); |
||
36 | SendMailNameEditBox:HighlightText(textlen, -1); |
||
37 | return; |
||
38 | end |
||
39 | end |
||
40 | end |
||
41 | end |
||
42 | return self.hooks[SendMailNameEditBox]["OnChar"].orig() |
||
43 | --[[ the original part -- just to see how ... |
||
44 | local text = this:GetText(); |
||
45 | local textlen = strlen(text); |
||
46 | local numFriends, name; |
||
47 | |||
48 | -- First check your friends list |
||
49 | numFriends = GetNumFriends(); |
||
50 | if ( numFriends > 0 ) then |
||
51 | for i=1, numFriends do |
||
52 | name = GetFriendInfo(i); |
||
53 | if ( strfind(strupper(name), strupper(text), 1, 1) == 1 ) then |
||
54 | this:SetText(name); |
||
55 | this:HighlightText(textlen, -1); |
||
56 | return; |
||
57 | end |
||
58 | end |
||
59 | end |
||
60 | |||
61 | -- No match, check your guild list |
||
62 | numFriends = GetNumGuildMembers(true); -- true to include offline members |
||
63 | if ( numFriends > 0 ) then |
||
64 | for i=1, numFriends do |
||
65 | name = GetGuildRosterInfo(i); |
||
66 | if ( strfind(strupper(name), strupper(text), 1, 1) == 1 ) then |
||
67 | this:SetText(name); |
||
68 | this:HighlightText(textlen, -1); |
||
69 | return; |
||
70 | end |
||
71 | end |
||
72 | end |
||
73 | --]] |
||
74 | end |
||
75 | -- -- |
||
76 | BuddySync:RegisterChatCommand({"/buddysync", "/bs"}, { |
||
77 | type = "group", |
||
78 | name = "BuddySync", |
||
79 | args = { |
||
80 | config = { |
||
81 | type = "execute", |
||
82 | name = "chat", |
||
83 | desc = "ChatOutput on/off", |
||
84 | func = function() |
||
85 | if (BuddySyncDB[BSR].OUTPUT == 0) then |
||
86 | BuddySyncDB[BSR].OUTPUT = 1; |
||
87 | else |
||
88 | BuddySyncDB[BSR].OUTPUT = 0; |
||
89 | end |
||
90 | end, |
||
91 | }, |
||
92 | }, |
||
93 | }, "BUDDYSYNC") |
||
94 | -- -- |
||
95 | function BuddySync:BS_onEVENT(event) |
||
96 | -- |
||
97 | if (event == "VARIABLES_LOADED") then |
||
98 | -- setting up some vars |
||
99 | BS_VER = "2.2.1"; |
||
100 | BSR = GetRealmName(); |
||
101 | pNAME = UnitName("player"); |
||
102 | FRIEND = "FRIEND"; |
||
103 | IGNORE = "IGNORE"; |
||
104 | TOON = "TOON"; |
||
105 | -- |
||
106 | if (not BuddySyncDB[BSR].OUTPUT) then |
||
107 | BuddySyncDB[BSR].OUTPUT = 1; |
||
108 | end |
||
109 | -- |
||
110 | if (not BuddySyncDB[BSR][TOON]) then |
||
111 | BuddySyncDB[BSR][TOON] = {}; |
||
112 | end |
||
113 | -- |
||
114 | for i=1, table.getn(BuddySyncDB[BSR][TOON]) do |
||
115 | if (BuddySyncDB[BSR][TOON][i] == pNAME) then |
||
116 | isIN = 1; |
||
117 | break; |
||
118 | else |
||
119 | isIN = nil; |
||
120 | end |
||
121 | end |
||
122 | -- |
||
123 | if not isIN then |
||
124 | table.insert(BuddySyncDB[BSR][TOON], pNAME); |
||
125 | end |
||
126 | -- |
||
127 | syncBTN = 0; |
||
128 | syncCOUNT = 0; |
||
129 | inamey = nil; |
||
130 | namey = nil; |
||
131 | IILT = 0; |
||
132 | BSFS = 0; |
||
133 | BSL = {}; |
||
134 | iBSL = {}; |
||
135 | i2BSL = {}; |
||
136 | BSA = 0; |
||
137 | BSC = 0; |
||
138 | BSN = 0; |
||
139 | XDA = 0; |
||
140 | EFE = 0; |
||
141 | -- |
||
142 | this:UnregisterEvent("VARIABLES_LOADED"); |
||
143 | -- |
||
144 | elseif (event == "FRIENDLIST_UPDATE" or event == "IGNORELIST_UPDATE") then |
||
145 | BuddySync:BS_FRIENDS(); |
||
146 | elseif (event == "CHAT_MSG_SYSTEM") then |
||
147 | local BSX = BSSPLIT(getglobal("ERR_FRIEND_ADDED_S"), " "); |
||
148 | local BSY = BSSPLIT(getglobal("ERR_FRIEND_REMOVED_S"), " "); |
||
149 | local iBSX = BSSPLIT(getglobal("ERR_IGNORE_ADDED_S"), " "); |
||
150 | local iBSY = BSSPLIT(getglobal("ERR_IGNORE_REMOVED_S"), " "); |
||
151 | -- |
||
152 | if (BSA == 0 and strfind(arg1, BSX[2]) and strfind(arg1, BSX[3]) and strfind(arg1, BSX[4]) or |
||
153 | strfind(arg1, BSY[2]) and strfind(arg1, BSY[3]) and strfind(arg1, BSY[4])) then |
||
154 | BuddySync:BS_CHECK(1); |
||
155 | elseif (BSA == 0 and strfind(arg1, iBSX[2]) and strfind(arg1, iBSX[3]) and strfind(arg1, iBSX[4])) then |
||
156 | local namex = BSSPLIT(arg1, " "); |
||
157 | local name = namex[1]; |
||
158 | iBSL[name] = {} |
||
159 | iBSL[name].inIgnoreList = 1; |
||
160 | BuddySync:BS_onSYNC(); |
||
161 | elseif (BSA == 0 and strfind(arg1, iBSY[2]) and strfind(arg1, iBSY[3]) and strfind(arg1, iBSY[4])) then |
||
162 | BuddySync:BS_onSYNC(); |
||
163 | elseif (BSA == 1 and strfind(arg1, BSX[2]) and strfind(arg1, BSX[3]) and strfind(arg1, BSX[4])) then |
||
164 | local namex = BSSPLIT(arg1, " "); |
||
165 | local name = namex[1]; |
||
166 | BSL[name] = {}; |
||
167 | BSL[name].inFriendList = 1; |
||
168 | BuddySyncDB[BSR][FRIEND][name] = {}; |
||
169 | BuddySyncDB[BSR][FRIEND][name].inFriendList = 1; |
||
170 | BuddySync:BS_CHECK(1); |
||
171 | elseif (BSA == 1 and strfind(arg1, iBSX[2]) and strfind(arg1, iBSX[3]) and strfind(arg1, iBSX[4])) then |
||
172 | local namex = BSSPLIT(arg1, " "); |
||
173 | local name = namex[1]; |
||
174 | iBSL[name] = {}; |
||
175 | iBSL[name].inIgnoreList = 1; |
||
176 | BuddySyncDB[BSR][IGNORE][name] = {}; |
||
177 | BuddySyncDB[BSR][IGNORE][name].inIgnoreList = 1; |
||
178 | BuddySync:BS_onSYNC(); |
||
179 | elseif (arg1 == getglobal("ERR_FRIEND_ERROR")) then |
||
180 | EFE = 1; |
||
181 | elseif (arg1 == getglobal("ERR_FRIEND_NOT_FOUND") and EFE == 0) then |
||
182 | BuddySync:BS_CHECK(0); |
||
183 | end |
||
184 | end |
||
185 | end |
||
186 | -- -- |
||
187 | function BuddySync:BS_FRIENDS() |
||
188 | -- |
||
189 | local numFriends = GetNumFriends(); |
||
190 | local numIgnores = GetNumIgnores(); |
||
191 | -- |
||
192 | if (not BuddySyncDB or not BuddySyncDB[BS_VER]) then |
||
193 | BuddySyncDB = {}; |
||
194 | BuddySyncDB[BS_VER] = 1; |
||
195 | end |
||
196 | -- |
||
197 | if (not BuddySyncDB[BSR]) then |
||
198 | BuddySyncDB[BSR] = {}; |
||
199 | BuddySyncDB[BSR][FRIEND] = {}; |
||
200 | BuddySyncDB[BSR][IGNORE] = {}; |
||
201 | end |
||
202 | -- |
||
203 | for j = 1, numIgnores do |
||
204 | local name = GetIgnoreName(j); |
||
205 | if (name and name ~= getglobal("UNKNOWN")) then |
||
206 | if (not iBSL[name]) then |
||
207 | iBSL[name] = {}; |
||
208 | iBSL[name].inIgnoreList = 1; |
||
209 | end |
||
210 | if (not BuddySyncDB[BSR][IGNORE][name]) then |
||
211 | BuddySyncDB[BSR][IGNORE][name] = {}; |
||
212 | BuddySyncDB[BSR][IGNORE][name].inIgnoreList = 1; |
||
213 | end |
||
214 | end |
||
215 | end |
||
216 | -- |
||
217 | for i = 1, numFriends do |
||
218 | local name = GetFriendInfo(i); |
||
219 | if (name and name ~= getglobal("UNKNOWN")) then |
||
220 | if (not BSL[name]) then |
||
221 | BSL[name] = {}; |
||
222 | BSL[name].inFriendList = 1; |
||
223 | end |
||
224 | if (not BuddySyncDB[BSR][FRIEND][name]) then |
||
225 | BuddySyncDB[BSR][FRIEND][name] = {}; |
||
226 | BuddySyncDB[BSR][FRIEND][name].inFriendList = 1; |
||
227 | end |
||
228 | end |
||
229 | end |
||
230 | -- |
||
231 | if (XDA == 0) then |
||
232 | XDA = 1; |
||
233 | BuddySync:BS_onSYNC(); |
||
234 | end |
||
235 | -- |
||
236 | end |
||
237 | -- |
||
238 | function BuddySync:BS_CHECK(BSN) |
||
239 | -- |
||
240 | EFE = 0; |
||
241 | -- |
||
242 | if (syncBTN == 0 and BSN == 0) then |
||
243 | if (BuddySyncDB[BSR]) then |
||
244 | if (BuddySyncDB[BSR][FRIEND]) then |
||
245 | if (BuddySyncDB[BSR][FRIEND][namey]) then |
||
246 | if (BuddySyncDB[BSR][FRIEND][namey].inFriendList == 1) then |
||
247 | DEFAULT_CHAT_FRAME:AddMessage("AddBuddy: |c00bfffff" .. namey .. "|r"..BS_PLAYER_NOT_FOUND_A..BSR..".", 1.0, 0.25, 0.0, 1.0); |
||
248 | DEFAULT_CHAT_FRAME:AddMessage("AddBuddy: "..BS_PLAYER_NOT_FOUND_B, 1.0, 0.25, 0.0, 1.0); |
||
249 | BuddySyncDB[BSR][FRIEND][namey] = nil; |
||
250 | end |
||
251 | end |
||
252 | end |
||
253 | end |
||
254 | elseif (syncBTN == 1 and BSN == 0) then |
||
255 | if (BuddySyncDB[BSR]) then |
||
256 | if (BuddySyncDB[BSR][IGNORE]) then |
||
257 | if (BuddySyncDB[BSR][IGNORE][inamey]) then |
||
258 | if (BuddySyncDB[BSR][IGNORE][inamey].inIgnoreList == 1 and i2BSL[inamey].Try == 0) then |
||
259 | if (BuddySyncDB[BSR].OUTPUT == 1) then |
||
260 | DEFAULT_CHAT_FRAME:AddMessage("AddIgnore: |c00bfffff" .. inamey .. "|r"..BS_PLAYER_NOT_FOUND_I..BSR..".", 1.0, 0.25, 0.0, 1.0); |
||
261 | end |
||
262 | syncCOUNT = 0; |
||
263 | i2BSL[inamey].Try = 1; |
||
264 | BuddySync:BS_onSYNC(); |
||
265 | end |
||
266 | end |
||
267 | end |
||
268 | end |
||
269 | end |
||
270 | -- |
||
271 | if (BSN == 1 and BuddySyncDB[BSR][FRIEND]) then |
||
272 | for i,j in BuddySyncDB[BSR][FRIEND] do |
||
273 | if (not BSL[i] and BuddySyncDB[BSR][FRIEND][i].inFriendList == 0) then |
||
274 | -- nothing |
||
275 | elseif (not BSL[i] and BuddySyncDB[BSR][FRIEND][i].inFriendList == 1) then |
||
276 | if (i ~= pNAME) then |
||
277 | namey = i; |
||
278 | BSL[i] = {}; |
||
279 | BSL[i].inFriendList = 1; |
||
280 | AddFriend(i); |
||
281 | return namey; |
||
282 | end |
||
283 | elseif (BSL[i].inFriendList == 1 and BuddySyncDB[BSR][FRIEND][i].inFriendList == 0) then |
||
284 | namey = i; |
||
285 | BSL[i] = {}; |
||
286 | BSL[i].inFriendList = 0; |
||
287 | RemoveFriend(i); |
||
288 | return namey; |
||
289 | end |
||
290 | end |
||
291 | end |
||
292 | -- |
||
293 | end |
||
294 | -- |
||
295 | function BuddySync:BS_onSYNC() |
||
296 | -- |
||
297 | syncCOUNT = syncCOUNT + 1; |
||
298 | syncBTN = 1; |
||
299 | -- |
||
300 | if (BuddySyncDB[BSR][IGNORE]) then |
||
301 | for ii,jj in BuddySyncDB[BSR][IGNORE] do |
||
302 | if (not i2BSL[ii] and ii) then |
||
303 | i2BSL[ii] = {}; |
||
304 | i2BSL[ii].Try = 0; |
||
305 | elseif (syncCOUNT == 2 and ii) then |
||
306 | i2BSL = {}; |
||
307 | i2BSL[ii] = {}; |
||
308 | i2BSL[ii].Try = 0; |
||
309 | syncCOUNT = 0; |
||
310 | end |
||
311 | if (not iBSL[ii] and BuddySyncDB[BSR][IGNORE][ii].inIgnoreList == 0) then |
||
312 | XDA = 0; |
||
313 | syncCOUNT = 0; |
||
314 | inamey = ii; |
||
315 | iBSL[ii] = {}; |
||
316 | iBSL[ii].inIgnoreList = 3; |
||
317 | BuddySync:BS_FRIENDS(); |
||
318 | return inamey; |
||
319 | elseif (not iBSL[ii] and BuddySyncDB[BSR][IGNORE][ii].inIgnoreList == 1) then |
||
320 | if (i2BSL[ii].Try == 0) then |
||
321 | inamey = ii; |
||
322 | AddIgnore(ii); |
||
323 | return inamey; |
||
324 | end |
||
325 | elseif (iBSL[ii].inIgnoreList == 1 and BuddySyncDB[BSR][IGNORE][ii].inIgnoreList == 0) then |
||
326 | inamey = ii; |
||
327 | iBSL[ii] = {}; |
||
328 | iBSL[ii].inIgnoreList = 0; |
||
329 | DelIgnore(ii); |
||
330 | return inamey; |
||
331 | end |
||
332 | end |
||
333 | end |
||
334 | -- |
||
335 | end |
||
336 | -- |
||
337 | function BuddySync:BS_SET_SHOW() |
||
338 | -- |
||
339 | if (XDA == 1) then |
||
340 | syncBTN = 0; |
||
341 | BuddySync:BS_CHECK(1); |
||
342 | end |
||
343 | -- |
||
344 | return self.hooks[FriendsFrame]["OnShow"].orig() |
||
345 | -- |
||
346 | end |
||
347 | -- |
||
348 | function BuddySync:BS_ADD_FRIEND() |
||
349 | -- |
||
350 | BSA = 1; |
||
351 | -- |
||
352 | return self.hooks[FriendsFrameAddFriendButton]["OnClick"].orig() |
||
353 | -- |
||
354 | end |
||
355 | -- |
||
356 | function BuddySync:BS_DELETE_FRIEND() |
||
357 | -- |
||
358 | BSA = 0; |
||
359 | -- |
||
360 | local BSS = GetSelectedFriend(); |
||
361 | local name = GetFriendInfo(BSS); |
||
362 | -- |
||
363 | BSL[name].inFriendList = 0; |
||
364 | BuddySyncDB[BSR][FRIEND][name].inFriendList = 0; |
||
365 | -- |
||
366 | return self.hooks[FriendsFrameRemoveFriendButton]["OnClick"].orig() |
||
367 | -- |
||
368 | end |
||
369 | -- |
||
370 | function BuddySync:BS_ADD_IGNORE() |
||
371 | -- |
||
372 | BSA = 1; |
||
373 | -- |
||
374 | return self.hooks[FriendsFrameIgnorePlayerButton]["OnClick"].orig() |
||
375 | -- |
||
376 | end |
||
377 | -- |
||
378 | function BuddySync:BS_STOP_IGNORE() |
||
379 | -- |
||
380 | BSA = 0; |
||
381 | -- |
||
382 | local BSS = GetSelectedIgnore(); |
||
383 | local name = GetIgnoreName(BSS); |
||
384 | -- |
||
385 | iBSL[name].inIgnoreList = 0; |
||
386 | BuddySyncDB[BSR][IGNORE][name].inIgnoreList = 0; |
||
387 | -- |
||
388 | return self.hooks[FriendsFrameStopIgnoreButton]["OnClick"].orig() |
||
389 | -- |
||
390 | end |
||
391 | -- -- |
||
392 | function BSSPLIT(text, separator, t, noPurge) |
||
393 | -- |
||
394 | local value; |
||
395 | local mstart, mend = 1; |
||
396 | local oldn, numMatches = 0, 0; |
||
397 | local regexKey = "([^"..separator.."]+)"; |
||
398 | local sfind = strfind; |
||
399 | -- |
||
400 | if ( not t ) then |
||
401 | t = {}; |
||
402 | else |
||
403 | oldn = table.getn(t); |
||
404 | end |
||
405 | -- |
||
406 | mstart, mend, value = sfind(text, regexKey, mstart); |
||
407 | -- |
||
408 | while (value) do |
||
409 | numMatches = numMatches + 1; |
||
410 | t[numMatches] = value |
||
411 | mstart = mend + 1; |
||
412 | mstart, mend, value = sfind(text, regexKey, mstart); |
||
413 | end |
||
414 | -- |
||
415 | if ( not noPurge ) then |
||
416 | for i = numMatches+1, oldn do |
||
417 | t[i] = nil; |
||
418 | end |
||
419 | end |
||
420 | -- |
||
421 | table.setn(t, numMatches); |
||
422 | return t; |
||
423 | end |