vanilla-wow-addons – Rev 1
?pathlinks?
-- --
BuddySync = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0", "AceHook-2.0", "AceConsole-2.0", "AceDB-2.0", "AceModuleCore-2.0", "AceDebug-2.0")
-- --
local debugLevels = {"warn", "info", "notice", "off"}
-- --
BuddySync:RegisterDB("BuddySyncDB")
BuddySync:RegisterDefaults("profile", {Debug = nil})
-- --
function BuddySync:OnEnable()
--
this:RegisterEvent("CHAT_MSG_SYSTEM", "BS_onEVENT")
this:RegisterEvent("VARIABLES_LOADED", "BS_onEVENT")
this:RegisterEvent("FRIENDLIST_UPDATE", "BS_onEVENT")
--
self:HookScript(FriendsFrame, "OnShow", "BS_SET_SHOW")
self:HookScript(FriendsFrameAddFriendButton, "OnClick", "BS_ADD_FRIEND")
self:HookScript(FriendsFrameIgnorePlayerButton, "OnClick", "BS_ADD_IGNORE")
self:HookScript(FriendsFrameRemoveFriendButton, "OnClick", "BS_DELETE_FRIEND")
self:HookScript(FriendsFrameStopIgnoreButton, "OnClick", "BS_STOP_IGNORE")
self:HookScript(SendMailNameEditBox, "OnChar", "SendMailFrame_SendeeAutocomplete_EXPANDED")
--
end
-- --
function BuddySync:SendMailFrame_SendeeAutocomplete_EXPANDED()
--
local text = this:GetText();
local textlen = strlen(text);
local name;
--
if BuddySyncDB[BSR][TOON] then
if ( table.getn(BuddySyncDB[BSR][TOON]) > 0 ) then
for i=1, table.getn(BuddySyncDB[BSR][TOON]) do
name = BuddySyncDB[BSR][TOON][i];
if ( strfind(strupper(name), strupper(text), 1, 1) == 1 ) then
SendMailNameEditBox:SetText(name);
SendMailNameEditBox:HighlightText(textlen, -1);
return;
end
end
end
end
return self.hooks[SendMailNameEditBox]["OnChar"].orig()
--[[ the original part -- just to see how ...
local text = this:GetText();
local textlen = strlen(text);
local numFriends, name;
-- First check your friends list
numFriends = GetNumFriends();
if ( numFriends > 0 ) then
for i=1, numFriends do
name = GetFriendInfo(i);
if ( strfind(strupper(name), strupper(text), 1, 1) == 1 ) then
this:SetText(name);
this:HighlightText(textlen, -1);
return;
end
end
end
-- No match, check your guild list
numFriends = GetNumGuildMembers(true); -- true to include offline members
if ( numFriends > 0 ) then
for i=1, numFriends do
name = GetGuildRosterInfo(i);
if ( strfind(strupper(name), strupper(text), 1, 1) == 1 ) then
this:SetText(name);
this:HighlightText(textlen, -1);
return;
end
end
end
--]]
end
-- --
BuddySync:RegisterChatCommand({"/buddysync", "/bs"}, {
type = "group",
name = "BuddySync",
args = {
config = {
type = "execute",
name = "chat",
desc = "ChatOutput on/off",
func = function()
if (BuddySyncDB[BSR].OUTPUT == 0) then
BuddySyncDB[BSR].OUTPUT = 1;
else
BuddySyncDB[BSR].OUTPUT = 0;
end
end,
},
},
}, "BUDDYSYNC")
-- --
function BuddySync:BS_onEVENT(event)
--
if (event == "VARIABLES_LOADED") then
-- setting up some vars
BS_VER = "2.2.1";
BSR = GetRealmName();
pNAME = UnitName("player");
FRIEND = "FRIEND";
IGNORE = "IGNORE";
TOON = "TOON";
--
if (not BuddySyncDB[BSR].OUTPUT) then
BuddySyncDB[BSR].OUTPUT = 1;
end
--
if (not BuddySyncDB[BSR][TOON]) then
BuddySyncDB[BSR][TOON] = {};
end
--
for i=1, table.getn(BuddySyncDB[BSR][TOON]) do
if (BuddySyncDB[BSR][TOON][i] == pNAME) then
isIN = 1;
break;
else
isIN = nil;
end
end
--
if not isIN then
table.insert(BuddySyncDB[BSR][TOON], pNAME);
end
--
syncBTN = 0;
syncCOUNT = 0;
inamey = nil;
namey = nil;
IILT = 0;
BSFS = 0;
BSL = {};
iBSL = {};
i2BSL = {};
BSA = 0;
BSC = 0;
BSN = 0;
XDA = 0;
EFE = 0;
--
this:UnregisterEvent("VARIABLES_LOADED");
--
elseif (event == "FRIENDLIST_UPDATE" or event == "IGNORELIST_UPDATE") then
BuddySync:BS_FRIENDS();
elseif (event == "CHAT_MSG_SYSTEM") then
local BSX = BSSPLIT(getglobal("ERR_FRIEND_ADDED_S"), " ");
local BSY = BSSPLIT(getglobal("ERR_FRIEND_REMOVED_S"), " ");
local iBSX = BSSPLIT(getglobal("ERR_IGNORE_ADDED_S"), " ");
local iBSY = BSSPLIT(getglobal("ERR_IGNORE_REMOVED_S"), " ");
--
if (BSA == 0 and strfind(arg1, BSX[2]) and strfind(arg1, BSX[3]) and strfind(arg1, BSX[4]) or
strfind(arg1, BSY[2]) and strfind(arg1, BSY[3]) and strfind(arg1, BSY[4])) then
BuddySync:BS_CHECK(1);
elseif (BSA == 0 and strfind(arg1, iBSX[2]) and strfind(arg1, iBSX[3]) and strfind(arg1, iBSX[4])) then
local namex = BSSPLIT(arg1, " ");
local name = namex[1];
iBSL[name] = {}
iBSL[name].inIgnoreList = 1;
BuddySync:BS_onSYNC();
elseif (BSA == 0 and strfind(arg1, iBSY[2]) and strfind(arg1, iBSY[3]) and strfind(arg1, iBSY[4])) then
BuddySync:BS_onSYNC();
elseif (BSA == 1 and strfind(arg1, BSX[2]) and strfind(arg1, BSX[3]) and strfind(arg1, BSX[4])) then
local namex = BSSPLIT(arg1, " ");
local name = namex[1];
BSL[name] = {};
BSL[name].inFriendList = 1;
BuddySyncDB[BSR][FRIEND][name] = {};
BuddySyncDB[BSR][FRIEND][name].inFriendList = 1;
BuddySync:BS_CHECK(1);
elseif (BSA == 1 and strfind(arg1, iBSX[2]) and strfind(arg1, iBSX[3]) and strfind(arg1, iBSX[4])) then
local namex = BSSPLIT(arg1, " ");
local name = namex[1];
iBSL[name] = {};
iBSL[name].inIgnoreList = 1;
BuddySyncDB[BSR][IGNORE][name] = {};
BuddySyncDB[BSR][IGNORE][name].inIgnoreList = 1;
BuddySync:BS_onSYNC();
elseif (arg1 == getglobal("ERR_FRIEND_ERROR")) then
EFE = 1;
elseif (arg1 == getglobal("ERR_FRIEND_NOT_FOUND") and EFE == 0) then
BuddySync:BS_CHECK(0);
end
end
end
-- --
function BuddySync:BS_FRIENDS()
--
local numFriends = GetNumFriends();
local numIgnores = GetNumIgnores();
--
if (not BuddySyncDB or not BuddySyncDB[BS_VER]) then
BuddySyncDB = {};
BuddySyncDB[BS_VER] = 1;
end
--
if (not BuddySyncDB[BSR]) then
BuddySyncDB[BSR] = {};
BuddySyncDB[BSR][FRIEND] = {};
BuddySyncDB[BSR][IGNORE] = {};
end
--
for j = 1, numIgnores do
local name = GetIgnoreName(j);
if (name and name ~= getglobal("UNKNOWN")) then
if (not iBSL[name]) then
iBSL[name] = {};
iBSL[name].inIgnoreList = 1;
end
if (not BuddySyncDB[BSR][IGNORE][name]) then
BuddySyncDB[BSR][IGNORE][name] = {};
BuddySyncDB[BSR][IGNORE][name].inIgnoreList = 1;
end
end
end
--
for i = 1, numFriends do
local name = GetFriendInfo(i);
if (name and name ~= getglobal("UNKNOWN")) then
if (not BSL[name]) then
BSL[name] = {};
BSL[name].inFriendList = 1;
end
if (not BuddySyncDB[BSR][FRIEND][name]) then
BuddySyncDB[BSR][FRIEND][name] = {};
BuddySyncDB[BSR][FRIEND][name].inFriendList = 1;
end
end
end
--
if (XDA == 0) then
XDA = 1;
BuddySync:BS_onSYNC();
end
--
end
--
function BuddySync:BS_CHECK(BSN)
--
EFE = 0;
--
if (syncBTN == 0 and BSN == 0) then
if (BuddySyncDB[BSR]) then
if (BuddySyncDB[BSR][FRIEND]) then
if (BuddySyncDB[BSR][FRIEND][namey]) then
if (BuddySyncDB[BSR][FRIEND][namey].inFriendList == 1) then
DEFAULT_CHAT_FRAME:AddMessage("AddBuddy: |c00bfffff" .. namey .. "|r"..BS_PLAYER_NOT_FOUND_A..BSR..".", 1.0, 0.25, 0.0, 1.0);
DEFAULT_CHAT_FRAME:AddMessage("AddBuddy: "..BS_PLAYER_NOT_FOUND_B, 1.0, 0.25, 0.0, 1.0);
BuddySyncDB[BSR][FRIEND][namey] = nil;
end
end
end
end
elseif (syncBTN == 1 and BSN == 0) then
if (BuddySyncDB[BSR]) then
if (BuddySyncDB[BSR][IGNORE]) then
if (BuddySyncDB[BSR][IGNORE][inamey]) then
if (BuddySyncDB[BSR][IGNORE][inamey].inIgnoreList == 1 and i2BSL[inamey].Try == 0) then
if (BuddySyncDB[BSR].OUTPUT == 1) then
DEFAULT_CHAT_FRAME:AddMessage("AddIgnore: |c00bfffff" .. inamey .. "|r"..BS_PLAYER_NOT_FOUND_I..BSR..".", 1.0, 0.25, 0.0, 1.0);
end
syncCOUNT = 0;
i2BSL[inamey].Try = 1;
BuddySync:BS_onSYNC();
end
end
end
end
end
--
if (BSN == 1 and BuddySyncDB[BSR][FRIEND]) then
for i,j in BuddySyncDB[BSR][FRIEND] do
if (not BSL[i] and BuddySyncDB[BSR][FRIEND][i].inFriendList == 0) then
-- nothing
elseif (not BSL[i] and BuddySyncDB[BSR][FRIEND][i].inFriendList == 1) then
if (i ~= pNAME) then
namey = i;
BSL[i] = {};
BSL[i].inFriendList = 1;
AddFriend(i);
return namey;
end
elseif (BSL[i].inFriendList == 1 and BuddySyncDB[BSR][FRIEND][i].inFriendList == 0) then
namey = i;
BSL[i] = {};
BSL[i].inFriendList = 0;
RemoveFriend(i);
return namey;
end
end
end
--
end
--
function BuddySync:BS_onSYNC()
--
syncCOUNT = syncCOUNT + 1;
syncBTN = 1;
--
if (BuddySyncDB[BSR][IGNORE]) then
for ii,jj in BuddySyncDB[BSR][IGNORE] do
if (not i2BSL[ii] and ii) then
i2BSL[ii] = {};
i2BSL[ii].Try = 0;
elseif (syncCOUNT == 2 and ii) then
i2BSL = {};
i2BSL[ii] = {};
i2BSL[ii].Try = 0;
syncCOUNT = 0;
end
if (not iBSL[ii] and BuddySyncDB[BSR][IGNORE][ii].inIgnoreList == 0) then
XDA = 0;
syncCOUNT = 0;
inamey = ii;
iBSL[ii] = {};
iBSL[ii].inIgnoreList = 3;
BuddySync:BS_FRIENDS();
return inamey;
elseif (not iBSL[ii] and BuddySyncDB[BSR][IGNORE][ii].inIgnoreList == 1) then
if (i2BSL[ii].Try == 0) then
inamey = ii;
AddIgnore(ii);
return inamey;
end
elseif (iBSL[ii].inIgnoreList == 1 and BuddySyncDB[BSR][IGNORE][ii].inIgnoreList == 0) then
inamey = ii;
iBSL[ii] = {};
iBSL[ii].inIgnoreList = 0;
DelIgnore(ii);
return inamey;
end
end
end
--
end
--
function BuddySync:BS_SET_SHOW()
--
if (XDA == 1) then
syncBTN = 0;
BuddySync:BS_CHECK(1);
end
--
return self.hooks[FriendsFrame]["OnShow"].orig()
--
end
--
function BuddySync:BS_ADD_FRIEND()
--
BSA = 1;
--
return self.hooks[FriendsFrameAddFriendButton]["OnClick"].orig()
--
end
--
function BuddySync:BS_DELETE_FRIEND()
--
BSA = 0;
--
local BSS = GetSelectedFriend();
local name = GetFriendInfo(BSS);
--
BSL[name].inFriendList = 0;
BuddySyncDB[BSR][FRIEND][name].inFriendList = 0;
--
return self.hooks[FriendsFrameRemoveFriendButton]["OnClick"].orig()
--
end
--
function BuddySync:BS_ADD_IGNORE()
--
BSA = 1;
--
return self.hooks[FriendsFrameIgnorePlayerButton]["OnClick"].orig()
--
end
--
function BuddySync:BS_STOP_IGNORE()
--
BSA = 0;
--
local BSS = GetSelectedIgnore();
local name = GetIgnoreName(BSS);
--
iBSL[name].inIgnoreList = 0;
BuddySyncDB[BSR][IGNORE][name].inIgnoreList = 0;
--
return self.hooks[FriendsFrameStopIgnoreButton]["OnClick"].orig()
--
end
-- --
function BSSPLIT(text, separator, t, noPurge)
--
local value;
local mstart, mend = 1;
local oldn, numMatches = 0, 0;
local regexKey = "([^"..separator.."]+)";
local sfind = strfind;
--
if ( not t ) then
t = {};
else
oldn = table.getn(t);
end
--
mstart, mend, value = sfind(text, regexKey, mstart);
--
while (value) do
numMatches = numMatches + 1;
t[numMatches] = value
mstart = mend + 1;
mstart, mend, value = sfind(text, regexKey, mstart);
end
--
if ( not noPurge ) then
for i = numMatches+1, oldn do
t[i] = nil;
end
end
--
table.setn(t, numMatches);
return t;
end
Generated by GNU Enscript 1.6.5.90.