You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
255 lines
8.0 KiB
255 lines
8.0 KiB
|
|
-- module independent variables --
|
|
----------------------------------
|
|
local addon, ns = ...
|
|
local C, L, I = ns.LC.color, ns.L, ns.I
|
|
if ns.client_version<3 then return end
|
|
|
|
|
|
-- module own local variables and local cached functions --
|
|
-----------------------------------------------------------
|
|
local name = "GuildLog" -- L["GuildLog"] L["ModDesc-GuildLog"]
|
|
local ttName,ttColumns,tt,module = name.."TT",4
|
|
local type2locale = {
|
|
["invite"] = C("cyan",CALENDAR_STATUS_INVITED),
|
|
["join"] = C("green",LFG_LIST_APP_INVITE_ACCEPTED),
|
|
["promote"] = C("yellow",L["Promoted"]),
|
|
["demote"] = C("orange",L["Demoted"]),
|
|
["remove"] = C("red",L["Removed"]),
|
|
["quit"] = C("red",L["Left the guild"]),
|
|
}
|
|
local logs = {};
|
|
|
|
|
|
-- register icon names and default files --
|
|
-------------------------------------------
|
|
I[name] = {iconfile="Interface\\icons\\inv_misc_note_05",coords={0.05,0.95,0.05,0.95}} --IconName::GuildLog--
|
|
|
|
|
|
-- some local functions --
|
|
--------------------------
|
|
local function createTooltip(tt)
|
|
if not (tt and tt.key and tt.key==ttName) then return end -- don't override other LibQTip tooltips...
|
|
local doHide = {
|
|
["join"] = ns.profile[name].hideJoin==true,
|
|
["quit"] = ns.profile[name].hideLeave==true,
|
|
["invite"] = ns.profile[name].hideInvite==true,
|
|
["promote"] = ns.profile[name].hidePromote==true,
|
|
["demote"] = ns.profile[name].hideDemote==true,
|
|
["remove"] = ns.profile[name].hideRemove==true
|
|
}
|
|
|
|
local limit,nolimit,tLimit = tonumber(ns.profile[name].max_entries),false;
|
|
tLimit = limit;
|
|
if (limit==0) then limit = #logs; nolimit=true; end
|
|
if (limit > #logs) then limit = #logs; end
|
|
|
|
if tt.lines~=nil then tt:Clear(); end
|
|
if (ns.profile[name].displayMode=="NORMAL") then
|
|
|
|
local l=tt:AddHeader(C("dkyellow",L[name]));
|
|
if(not nolimit)then
|
|
tt:SetCell(l,2,C("dkyellow","(" .. L["latest %d entries"]:format(tLimit) .. ")"),nil,"RIGHT",ttColumns-1);
|
|
end
|
|
l=nil;
|
|
|
|
tt:AddSeparator(4,0,0,0,0);
|
|
tt:AddLine(
|
|
C("ltblue",L["Action"]),
|
|
C("ltblue",CHARACTER),
|
|
C("ltblue",L["By"]),
|
|
C("ltblue",L["Recently"])
|
|
);
|
|
tt:AddSeparator();
|
|
|
|
|
|
for num=1, limit do
|
|
if (not doHide[logs[num].type]) then
|
|
local act = type2locale[logs[num].type];
|
|
if (logs[num].type=="promote" or logs[num].type=="demote") then
|
|
act = act .. " ("..logs[num].rank..")";
|
|
end
|
|
local Name,Realm,_ = strsplit("-", logs[num].char ,2);
|
|
local byName,byRealm;
|
|
if logs[num].by then
|
|
byName,byRealm = strsplit("-", logs[num].by ,2);
|
|
end
|
|
tt:AddLine(
|
|
act,
|
|
Name .. ns.showRealmName(name,Realm),
|
|
(byName) and byName .. ns.showRealmName(name,byRealm) or "",
|
|
logs[num].recent
|
|
);
|
|
end
|
|
end
|
|
elseif (ns.profile[name].displayMode=="SPLIT") then
|
|
local actions,_ = {"invite","join","promote","demote","remove","quit"};
|
|
tt:AddHeader(C("dkyellow",L[name]));
|
|
|
|
for _,action in ipairs(actions) do
|
|
if (not doHide[action]) then
|
|
tt:AddSeparator(4,0,0,0,0);
|
|
tt:AddHeader(type2locale[action] .. ((not nolimit) and " ("..L["latest %d entries"]:format(tLimit)..")" or ""));
|
|
if (action=="demote") or (action=="promote") then
|
|
tt:AddLine(
|
|
C("ltblue",CHARACTER),
|
|
C("ltblue",L["By"]),
|
|
C("ltblue",L["New rank"]),
|
|
C("ltblue",L["Recently"])
|
|
);
|
|
else
|
|
tt:AddLine(
|
|
C("ltblue",CHARACTER),
|
|
(action~="quit" and action~="join") and C("ltblue",L["By"]) or "",
|
|
"",
|
|
C("ltblue",L["Recently"])
|
|
);
|
|
end
|
|
tt:AddSeparator();
|
|
local c = 0;
|
|
for num=1, #logs do
|
|
if (logs[num].type==action) and (c<limit) then
|
|
local Name,Realm = strsplit("-",logs[num].char,2);
|
|
local byName,byRealm;
|
|
if logs[num].by then
|
|
byName,byRealm = strsplit("-",logs[num].by,2);
|
|
end
|
|
tt:AddLine(
|
|
Name .. ns.showRealmName(name,Realm),
|
|
(byName) and byName .. ns.showRealmName(name,byRealm) or "",
|
|
(logs[num].type=="promote" or logs[num].type=="demote") and logs[num].rank or "",
|
|
logs[num].recent
|
|
);
|
|
c=c+1;
|
|
end
|
|
end
|
|
if (c==0) then
|
|
ns.AddSpannedLine(tt,L["No log entries found..."]);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if (ns.profile.GeneralOptions.showHints) then
|
|
tt:AddSeparator(4,0,0,0,0)
|
|
ns.ClickOpts.ttAddHints(tt,name);
|
|
end
|
|
ns.roundupTooltip(tt);
|
|
end
|
|
|
|
|
|
-- module functions and variables --
|
|
------------------------------------
|
|
module = {
|
|
events = {
|
|
"PLAYER_LOGIN",
|
|
"GUILD_ROSTER_UPDATE",
|
|
"GUILD_EVENT_LOG_UPDATE"
|
|
-- guild roster update or so...
|
|
},
|
|
config_defaults = {
|
|
enabled = false,
|
|
max_entries = 0,
|
|
displayMode = "NORMAL",
|
|
hideJoin = false,
|
|
hideLeave = false,
|
|
hideRemove = false,
|
|
hideInvite = false,
|
|
hidePromote = false,
|
|
hideDemote = false,
|
|
showRealmNames = true
|
|
},
|
|
clickOptionsRename = {
|
|
["guild"] = "1_open_guild",
|
|
["menu"] = "2_open_menu"
|
|
},
|
|
clickOptions = {
|
|
["guild"] = "Guild",
|
|
["menu"] = "OptionMenu"
|
|
}
|
|
|
|
}
|
|
|
|
ns.ClickOpts.addDefaults(module,{
|
|
guild = "_LEFT",
|
|
menu = "_RIGHT"
|
|
});
|
|
|
|
function module.options()
|
|
return {
|
|
broker = nil,
|
|
tooltip = {
|
|
hideInvite={ type="toggle", order=1, name=L["Hide invites"], desc=L["Hide all entries with 'Invite' as action."] },
|
|
hideJoin={ type="toggle", order=2, name=L["Hide joins"], desc=L["Hide all entries with 'Join' as action."] },
|
|
hidePromote={ type="toggle", order=3, name=L["Hide promotions"], desc=L["Hide all entries with 'Promote' as action."] },
|
|
hideDemote={ type="toggle", order=4, name=L["Hide demotions"], desc=L["Hide all entries with 'Demote' as action."] },
|
|
hideLeave={ type="toggle", order=5, name=L["Hide leaves"], desc=L["Hide all entries with 'Leave' as action."] },
|
|
hideRemove={ type="toggle", order=6, name=L["Hide removes"], desc=L["Hide all entries with 'Remove' as action."] },
|
|
--separator=true,
|
|
showRealmNames=7,
|
|
max_entries={ type="range", order=8, name=L["Show max. entries"], desc=L["Select the maximum number of entries from the guild log, otherwise drag to 'All'."], min = 0, max = 100, step = 1},
|
|
displayMode={ type="select", order=9, name=L["Display mode"], desc=L["Change the list style."], width="double",
|
|
values = {
|
|
["NORMAL"] = L["Normal list of log entries"],
|
|
["SPLIT"] = L["Separate tables by actions and 'Show max. entries' used per table."],
|
|
},
|
|
},
|
|
},
|
|
misc = nil,
|
|
}
|
|
end
|
|
|
|
-- function module.init() end
|
|
|
|
function module.onevent(self,event,msg)
|
|
if event=="PLAYER_LOGIN" or event=="GUILD_ROSTER_UPDATE" then
|
|
QueryGuildEventLog();
|
|
elseif event=="BE_UPDATE_CFG" then
|
|
ns.ClickOpts.update(name);
|
|
elseif event=="GUILD_EVENT_LOG_UPDATE" then
|
|
wipe(logs);
|
|
local numEvents = GetNumGuildEvents();
|
|
local cY,cM,cD,cH = strsplit(".",date("%Y.%m.%d.%H"));
|
|
local type, player1, player2, rank, year, month, day, hour,key;
|
|
for i = numEvents, 1, -1 do
|
|
type, player1, player2, rank, year, month, day, hour = GetGuildEventInfo(i);
|
|
|
|
if (type=="join") or (type=="quit") then
|
|
tinsert(logs,{
|
|
type = type,
|
|
char = player1 or UNKNOWN,
|
|
recent = RecentTimeDate(year, month, day, hour),
|
|
time = time({year=cY-year,month=cM-month,day=cD-day,hour=cH-hour,min=0,sec=0})
|
|
});
|
|
else
|
|
tinsert(logs,{
|
|
type = type,
|
|
char = player2 or UNKNOWN,
|
|
by = player1 or UNKNOWN,
|
|
rank = rank,
|
|
recent = RecentTimeDate(year, month, day, hour),
|
|
time = time({year=cY-year,month=cM-month,day=cD-day,hour=cH-hour,min=0,sec=0})
|
|
});
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- function module.optionspanel(panel) end
|
|
-- function module.onmousewheel(self,direction) end
|
|
-- function module.ontooltip(tt) end
|
|
|
|
function module.onenter(self)
|
|
if (ns.tooltipChkOnShowModifier(false)) then return; end
|
|
tt = ns.acquireTooltip({ttName, ttColumns, "LEFT", "LEFT", "LEFT", "RIGHT"},{false},{self});
|
|
createTooltip(tt);
|
|
end
|
|
|
|
-- function module.onleave(self) end
|
|
-- function module.onclick(self,button) end
|
|
-- function module.ondblclick(self,button) end
|
|
|
|
|
|
-- final module registration --
|
|
-------------------------------
|
|
ns.modules[name] = module;
|
|
|