From cb42d6e48db13655a78a3a880292e1620226a2b9 Mon Sep 17 00:00:00 2001 From: Robin Date: Wed, 13 Jan 2021 16:14:31 +0100 Subject: [PATCH] Init --- .gitmodules | 3 ++ Common | 1 + core.lua | 135 +++++++++++++++++++++++++++++++++++++++++++++++++ icon2.tga | Bin 0 -> 2682 bytes license.txt | 6 +++ pack.xml | 3 ++ zz_Friends.toc | 14 +++++ 7 files changed, 162 insertions(+) create mode 100644 .gitmodules create mode 160000 Common create mode 100644 core.lua create mode 100644 icon2.tga create mode 100644 license.txt create mode 100644 pack.xml create mode 100644 zz_Friends.toc diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..34950ac --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "Common"] + path = Common + url = https://git.grml.de/rilgamon/Common.git diff --git a/Common b/Common new file mode 160000 index 0000000..762c59c --- /dev/null +++ b/Common @@ -0,0 +1 @@ +Subproject commit 762c59c6c6abc6ecaa71f3e36bb2c6dd16b8e0ed diff --git a/core.lua b/core.lua new file mode 100644 index 0000000..1f2074c --- /dev/null +++ b/core.lua @@ -0,0 +1,135 @@ +local name, addon = ... +local parentName = addon['parentName'] or "BrokerPack" +local childName = "zz_Friends" +local crealm = GetRealmName() +local defaults = { +} +local options = { +} +local roster,friendroster,bnetroster = {}, {}, {} +local GuildRoster = GuildRoster +if(C_GuildInfo) then + if(C_GuildInfo.GuildRoster) then + GuildRoster = C_GuildInfo.GuildRoster + end +end +local updateDelay = 15 +local fmt = "|c0000ff00%s|r |c00ffffff%s|r" +local db = {} +local ldbicon = LibStub:GetLibrary("LibDBIcon-1.0") +local function anymod() + return IsShiftKeyDown() or IsControlKeyDown() or IsAltKeyDown() +end + +local function ldbOnClick(self, button) + if(IsInGuild() and not anymod() and button == "LeftButton") then + ToggleGuildFrame() + elseif(not anymod() and (button == "LeftButton" or button == "RightButton")) then + ToggleFriendsFrame() + elseif(IsShiftKeyDown() and button == "LeftButton") then + addon['db']['global']['ldbicons'][childName]['hide'] = not addon['db']['global']['ldbicons'][childName]['hide'] + if(ldbicon) then + if(addon['db']['global']['ldbicons'][childName]['hide']) then + ldbicon:Hide(childName) + else + ldbicon:Show(childName) + end + end + end +end + +local function OnTooltipShow(tip) + tip:AddLine(childName) + tip:AddLine("") + tip:AddLine(format(fmt,"Leftclick","Toggles Guild or Friendframe")) + tip:AddLine(format(fmt,"Rightclick","Toggles Friendframe")) + tip:AddLine(format(fmt,"Shift+Leftclick","Toggles minimap icon")) +end + +local function OnText(message) + addon:OnText(childName, message) +end + +local function count(v) + local c = 0 + for _ in pairs(v) do + c = c + 1 + end + return c +end +local function checkRoster(self, event, ...) + local newroster = {} + local rostername, online, _ + local dontShow = false + + if(event == "GUILD_ROSTER_UPDATE") then + for i=1,GetNumGuildMembers() do + rostername, _, _, _, _, _, _, _, online = GetGuildRosterInfo(i) + if(online and rostername) then + newroster[rostername]=true + end + end + roster = newroster + elseif(event == "FRIENDLIST_UPDATE") then + for i = 1, C_FriendList.GetNumFriends() do + local res = C_FriendList.GetFriendInfoByIndex(i) + if(res) then + if(res['connected'] and res['name']) then + newroster[res['name']] = true + end + end + end + friendroster = newroster + elseif(event == "BN_FRIEND_INFO_CHANGED") then + local _, numOnline = BNGetNumFriends() + local presenceID, isFriend,client,accid + for i = 1, numOnline do + local res = C_BattleNet.GetFriendAccountInfo(i) + if(res) then + local aci = res['gameAccountInfo'] + dontShow = false + if(aci) then + if(aci['clientProgram'] == BNET_CLIENT_WOW) then + if(aci['realmName'] == crealm and friendroster[aci['characterName']]) then + dontShow = true + end + end + if(aci['isOnline'] and aci['characterName'] and not dontShow) then + newroster[aci['characterName']] = true + end + end + end + end + bnetroster = newroster + end + local afkmsg = "" + if(UnitIsAFK("player")) then + afkmsg = " AFK" + elseif(UnitIsDND("player")) then + afkmsg = " DND" + end + OnText(format("|c0000ff00%i|r/|c0000ffff%i|r|c00ff0000%s|r", count(roster),count(friendroster)+count(bnetroster),afkmsg)) +end + +local function OnUpdate() + GuildRoster() + checkRoster(nil, "FRIENDLIST_UPDATE") + checkRoster(nil, "BN_FRIEND_INFO_CHANGED") + C_Timer.After(updateDelay, OnUpdate) +end + +local function init() + options = addon:InitConfig(childName, true, { + ['name'] = childName, + ['type'] = "data source", + ['OnTooltipShow'] = OnTooltipShow, + ['OnClick'] = ldbOnClick, + }) + db = addon['db']['profile'][childName] + crealm = GetRealmName() + addon:RegisterFunc({"GUILD_ROSTER_UPDATE","FRIENDLIST_UPDATE","CHAT_MSG_CHANNEL_JOIN","CHAT_MSG_CHANNEL_LEAVE","PLAYER_FLAGS_CHANGED","UNIT_FLAGS","BN_FRIEND_INFO_CHANGED"},"OnEvent", checkRoster) + C_Timer.After(updateDelay, OnUpdate) + C_FriendList.ShowFriends() +end + +addon:startup(name, childName, init, true, defaults) diff --git a/icon2.tga b/icon2.tga new file mode 100644 index 0000000000000000000000000000000000000000..0a4689dd7091f7608e7bd2088fa04842a5c4df1d GIT binary patch literal 2682 zcmY*b30O^A8{XB)>6AZL5vkuv{N^cL>f&CdcEHe`+s}i=RW*O-T|ib@KAjc9xyEFp6gIT1`=;97#BPGTH2cVdSmWc?$6R4ml_aG?BtdKHHA*!f( z)OSCAnJQ<B5$;v8gI0%NR213RafQlZB_XK+cE0X_D)k#IpV!;YDQJy zj(1{V!Ys|#gqfR~hOJp` z9A;v;BFuRC@-Ra^y-+R9Nymv1O>8*KS66QUD4YN|04ih~mblsIJLDOJ*e6%Zf+dKW`ne-3P3s zmz{8{7x>VD?&c2Jt-=#>;5h=PhNc!==xTn7h z@hf&Cez^rgjt0Z45eQ6pjr2u!NM5)H;WN!}>|8ibNr&N_H3;XtL7Ymc$Gz(}@Up5B zJF_lan%%UgJYsJ)W19;%QD6N>d*|8W)4~>*08GH3XYi8~X^=m@(QC-GjYZ z%a1~0cnGP#+C#F*0ryR;5#XN*?>fMz`%WUj0>ylbh$i`r^578l}4auPCbUPsF1VB8P#!=l+Ub_iJ; z>{8c1n7{hW$I>nCD6w`&k(~!pw;Y3SN+-lM!1;RM&XE`-Xskz|C>B9YfIE?&F9Cuo zfq+`TFRcl=ccbyTt^~0+Ucud+3|P>B&iZP!Rac^wUcs}HBIGB;Au-SoQ5W35XiiXB z!ufEbkUvJtV%Dl~Zwu$1yNCP{b?h?ys)0*{9MDSZ;Bpy!#v6Y*cp)A^4Zwv`AcWfQ zQCrzZz&Gs~tZW@opP!Djgck@78b-sDYP8o>ptY(3Efr-DHIM9r(ZeR(ywQiIvNAlc{>I%*{GH8>=xT4lk=@&Gv8r>@(^Z2p zbjW3_@ANVU9)j7E454cwJaYencisR_NPA(N-VK>UH!;@k8h$SyM9M3`BfSY)Hi2L) zJTUq2Rm?dPhp4!_kfydG(7zAO6)brKro3-K$Aj_ z(OzNAYz^;Z_9hH5HmOi?$bx6?X9ScJ$zw9t6N-WXO!3G7t-}S^<={`+&E@ z4-@Spq30ukvHv49H$B6Lw}Ysw>cw#HU+8-I98WSIz6$m6zPHV6t*zE1)fsLqvpR)5 zqxs`vMrV^PV|BBMu}OnTXdNQSY3_yOEMjFX9#jRG$9F*HYzBV#Edu;)Vkqnj#TfhB znCB&dQA8yc9u3I5QqcA}Fpu7QZVM9I24FApiy;nWPnM0NRAYpC7V_RTuubel2$|ZO zH7~)((h`5z4xB0(!f59Q;P3K>;*nS=Io*erSPK1!T8!Hzx~H;WrSs{Go?(%626HO>ZG*P6z0BX8u9kq{Oa%L~a`enW0nV(Km z*y)v{Y<)gLZobjlF_W~7L`e-@q2z2YQh`;%hn#*PuWMk+Y+cK5H0g=nX}^yG>G;G&#RZ+SrPaqyB)k@$hIE;$jbtg2EnwL&3`)= z{QuyxO2?y$lp{K!a=jf>;{L$hmO-=;a9`gD_BRhfu^W(Ev%!)Rm)l#mIr>T>S^)nF z;0n$97W>tp6rxDno!(KUl*9yf|6#a%1j>7TuWF|BV{*!$P=C}9^Wp)#=^2K9TOR~n zBanOf_7$V7tiln{eC3R`pO5QLBpIWg(ZX-04YCc$e@n8`hkj?6bcC5OCzRk7IDD>9 z;OnkhJvATrPyQEZlcUvX=)%T+@VdW%0l-}FcHw#|GMc)V^qgZLA&DfEao%g%iD{1E zIZfE$dIQt<{*EylU4|He@{(@^JmQm4bH5!dq&&v;0E&Hph((rRq|y{>RpRnz|7~Pt zm+j0}-XDhO+K;FuDGT2WW4CWS6pRi-Zj}RO*j~h(qgTNEYtl~~1*aDKlO)4G~2YV2X20DI;8@&v`F^?JCcx3TMjdnmNhoTevCwvfWi~_6ievKFW)2 f{q_&Z*4Sf{h2^TvrW;Mo*3a9z+H~!z`ON +