vanilla-wow-addons – Rev 1
?pathlinks?
--[[
-- //////////////////////////////////////////////
-- Variables Init
-- //////////////////////////////////////////////
]]
local rpgoGP_TITLE ="GuildProfiler";
local rpgoGP_ABBR ="GP";
local rpgoGP_AUTHOR ="calvin";
local rpgoGP_EMAIL ="calvin@rpgoutfitter.com";
local rpgoGP_URL ="www.rpgoutfitter.com";
local rpgoGP_DATE ="March 29, 2006";
local rpgoGP_PROVIDER ="rpgo";
local rpgoGP_VERSION ="1.5.1";
local rpgoGP_PROFILEDB ="1.5.1";
-- //////////////////////////////////////////////
if(not rpgoColorTitle) then rpgoColorTitle="909090"; end
if(not rpgoColorGreen) then rpgoColorGreen="00cc00"; end
if(not rpgoColorRed) then rpgoColorRed ="ff0000"; end
-- //////////////////////////////////////////////
local rpgoAddonsInfoGP={
name=rpgoGP_TITLE,
description="Export Guild Profiles for use out-of-game",
version=rpgoGP_VERSION,
releaseDate=rpgoGP_DATE,
author=rpgoGP_AUTHOR,
email=rpgoGP_EMAIL,
website=rpgoGP_URL,
category=MYADDONS_CATEGORY_OTHERS,
frame="rpgoGPframe",
};
local rpgoAddonsHelpGP={
"GuildProfileris an addon that extracts guild profile info including roster and rank info. This information can then be uploaded to your website to display your guild info.\n\n",
};
local GPprefScan={Enabled=1,SmartScan=1,Lite=1,Debug=0};
local rpgoGPlock,rpgoGPserver,rpgoGPguild;
local rpgoGPstate={};
-- //////////////////////////////////////////////
-- //////////////////////////////////////////////
--[[//////////////////////////////////////////////
-- rpgoGP Core Functions
-- OnLoad,LoadVar,RegisterEvents,InitState,OnEvent
-- ////////////////////////////////////////////]]
--[[// OnLoad
-- ////////////////////////////////////////////]]
function rpgoGP_OnLoad()
this:RegisterEvent("ADDON_LOADED");
this:RegisterEvent("VARIABLES_LOADED");
SLASH_RPGOGP1="/gp";
SlashCmdList["RPGOGP"]=rpgoGP_ChatCommand;
DEFAULT_CHAT_FRAME:AddMessage(rpgo_ColorizeTitle(rpgoGP_PROVIDER,rpgoGP_TITLE).." [v" .. rpgoGP_VERSION .. "] loaded.");
rpgoGP_debug(rpgo_ColorizeTitle(rpgoGP_PROVIDER,rpgoGP_ABBR).." running in DEBUG MODE.");
end
--[[// LoadVar
-- ////////////////////////////////////////////]]
function rpgoGP_LoadVar(toggle)
rpgoGP_InitState();
rpgoGP_InitPrefs();
rpgoGP_RegisterEvents();
rpgoGPserver=GetCVar("realmName");
rpgoGPstate={}
rpgoGPstate["LoadedVar"]=1;
end
--[[// RegisterEvents
-- ////////////////////////////////////////////]]
function rpgoGP_RegisterEvents()
local flagMode=0;
if(rpgoGPpref["Enabled"]==1 and rpgoGPpref["SmartScan"]==1) then
flagMode=1;
end
if(flagMode==1)then
rpgoGPframe:RegisterEvent("GUILD_MOTD");
rpgoGPframe:RegisterEvent("GUILD_ROSTER_SHOW");
rpgoGPframe:RegisterEvent("GUILD_ROSTER_CLOSED");
rpgoGPframe:RegisterEvent("GUILD_ROSTER_UPDATE");
rpgoGP_debug("RegisterEvents");
else
rpgoGPframe:UnregisterEvent("GUILD_MOTD");
rpgoGPframe:UnregisterEvent("GUILD_ROSTER_SHOW");
rpgoGPframe:UnregisterEvent("GUILD_ROSTER_CLOSED");
rpgoGPframe:UnregisterEvent("GUILD_ROSTER_UPDATE");
rpgoGP_debug("UnregisterEvent");
end
--[[
event:GUILD_ROSTER_UPDATE
arg1:nil ==> system?
arg1:c ==> offline?
--]]
flagMode=nil;
end
--[[// EventHandler
-- ////////////////////////////////////////////]]
function rpgoGP_EventHandler(event,arg1)
if(rpgoDebugArg) then rpgoDebugArg(rpgoGP_ABBR,event,arg1); end
if(event=="ADDON_LOADED" and arg1==rpgoGP_TITLE) then
rpgo_myAddons(rpgoAddonsInfoGP,rpgoAddonsHelpGP);
rpgoGPframe:UnregisterEvent("ADDON_LOADED");
return;
elseif(event=="VARIABLES_LOADED") then
rpgoGP_LoadVar();
rpgoGPframe:UnregisterEvent("VARIABLES_LOADED");
return;
end
if(rpgoGPpref["Enabled"]==0) then return; end
--if(rpgoLiteScan(rpgoGPpref["Lite"])) then return; end
debugprofilestart();
if(event=="CHAT_MSG_SYSTEM") then
rpgoGP_ScanGuildInfo(arg1);
end
if(not rpgoGPlock and rpgoGPserver) then
rpgoGPlock=1;
if(not rpgoGPstate["Loaded"]) then
rpgoGP_InitProfile();
end
if(event=="RPGOGP_SCAN") then
rpgoGP_UpdateProfile();
elseif(event=="RPGOGP_EXPORT") then
rpgoGP_ForceExport();
end
rpgoGPlock=nil;
end
rpgoGP_debug("time: "..debugprofilestop().."ms");
end
--[[// InitState
-- ////////////////////////////////////////////]]
function rpgoGP_InitState(arg)
rpgoGPstate={};
rpgoGPstate["Loaded"]=nil;
rpgoGPstate["LoadedVar"]=arg;
rpgoGPstate["Guild"]=nil;
rpgoGPstate["GuildNum"]=nil;
rpgoGPstate["GuildInfo"]=nil;
rpgoGPstate["OfficerNote"]=nil;
end
--[[// InitPrefs
-- ////////////////////////////////////////////]]
function rpgoGP_InitPrefs()
local pref,val;
if(not rpgoGPpref) then
rpgoGPpref={};
end
for pref,val in GPprefScan do
if(not rpgoGPpref[pref]) then
rpgoGPpref[pref]=val;
end
end
--cleanup
for pref,val in rpgoGPpref do
if(not GPprefScan[pref]) then
rpgoGPpref[pref]=nil;
end
end
end
--[[//////////////////////////////////////////////
-- InitProfile
-- ////////////////////////////////////////////]]
function rpgoGP_InitProfile()
if (not rpgoGPstate["Loaded"]) then
if ( not myProfile ) then
myProfile={};
end
if ( not myProfile[rpgoGPserver] ) then
myProfile[rpgoGPserver]={};
end
end
rpgoGPstate["Loaded"]=1;
end
--[[//////////////////////////////////////////////
-- UpdateProfile
-- ////////////////////////////////////////////]]
function rpgoGP_UpdateProfile()
rpgoGP_InitProfile();
rpgoGP_InitProfile();
rpgoGP_GetGuildInfo();
end
--[[//////////////////////////////////////////////
-- ForceExport
-- ////////////////////////////////////////////]]
function rpgoGP_ForceExport()
rpgoGP_InitState(1);
rpgoGP_InitProfile();
rpgoGP_GetGuildInfo();
rpgoGP_Show();
end
--[[// ChatCommand
-- ////////////////////////////////////////////]]
function rpgoGP_ChatCommand(msg)
if(msg)then
msg=string.lower(msg);
if (msg=="off") then
rpgoGP_Toggle(0);
return;
elseif (msg=="on") then
rpgoGP_Toggle(1);
return;
elseif (msg=="show") then
rpgoGP_Show();
return;
elseif (msg=="export") then
rpgoGP_EventHandler('RPGOGP_EXPORT');
return;
elseif (msg=="smart on") then
rpgoGP_TogglePref("SmartScan",1);
return;
elseif (msg=="smart off") then
rpgoGP_TogglePref("SmartScan",0);
return;
elseif (msg=="debug") then
rpgoGP_Debug();
return;
end
end
DEFAULT_CHAT_FRAME:AddMessage(rpgo_ColorizeTitle(rpgoGP_PROVIDER,rpgoGP_TITLE).." Usage [v" .. rpgoGP_VERSION .. "]");
DEFAULT_CHAT_FRAME:AddMessage(" /gp -- This Message");
DEFAULT_CHAT_FRAME:AddMessage(" /gp on -- Turns GuildProfiler on");
DEFAULT_CHAT_FRAME:AddMessage(" /gp off -- Turns GuildProfiler off");
DEFAULT_CHAT_FRAME:AddMessage(" /gp show");
DEFAULT_CHAT_FRAME:AddMessage(" /gp export");
if(rpgoGPpref["Enabled"]==1) then
DEFAULT_CHAT_FRAME:AddMessage(rpgo_ColorizeTitle(rpgoGP_PROVIDER,rpgoGP_ABBR)..": currently "..rpgo_ColorizeMsg(rpgoColorGreen,"enabled"));
if(rpgoGPpref["SmartScan"]==1) then
DEFAULT_CHAT_FRAME:AddMessage(rpgo_ColorizeTitle(rpgoGP_PROVIDER,rpgoGP_ABBR)..": smart mode "..rpgo_ColorizeMsg(rpgoColorGreen,"enabled"));
else
DEFAULT_CHAT_FRAME:AddMessage(rpgo_ColorizeTitle(rpgoGP_PROVIDER,rpgoGP_ABBR)..": smart mode "..rpgo_ColorizeMsg(rpgoColorRed,"disabled"));
end
else
DEFAULT_CHAT_FRAME:AddMessage(rpgo_ColorizeTitle(rpgoGP_PROVIDER,rpgoGP_ABBR)..": currently "..rpgo_ColorizeMsg(rpgoColorRed,"disabled"));
end
end
--[[// Toggle
-- ////////////////////////////////////////////]]
function rpgoGP_Toggle(toggle)
rpgoGPpref["Enabled"]=toggle;
if(toggle==1) then
if (rpgoGPserver) then rpgoGPserver=GetCVar("realmName"); end
rpgoGP_InitState(1);
elseif(toggle==0) then
rpgoGPstate=nil;
end
if(rpgoGPpref["Enabled"]==1) then
DEFAULT_CHAT_FRAME:AddMessage(rpgo_ColorizeTitle(rpgoGP_PROVIDER,rpgoGP_ABBR)..": "..rpgo_ColorizeMsg(rpgoColorGreen,"enabled"));
if(rpgoGPpref["SmartScan"]==1) then
DEFAULT_CHAT_FRAME:AddMessage(rpgo_ColorizeTitle(rpgoGP_PROVIDER,rpgoGP_ABBR)..": smart mode "..rpgo_ColorizeMsg(rpgoColorGreen,"enabled"));
else
DEFAULT_CHAT_FRAME:AddMessage(rpgo_ColorizeTitle(rpgoGP_PROVIDER,rpgoGP_ABBR)..": smart mode "..rpgo_ColorizeMsg(rpgoColorRed,"disabled"));
end
else
DEFAULT_CHAT_FRAME:AddMessage(rpgo_ColorizeTitle(rpgoGP_PROVIDER,rpgoGP_ABBR)..": "..rpgo_ColorizeMsg(rpgoColorRed,"disabled"));
end
rpgoGP_RegisterEvents();
if ( (rpgoGPpref["Enabled"]==0) and myProfile["Guild"] ) then
myProfile[rpgoGPserver]["Guild"]=nil;
end
end
--[[// Toggle
-- ////////////////////////////////////////////]]
function rpgoGP_TogglePref(pref,toggle)
if(rpgoGPpref[pref] and toggle) then
rpgoGPpref[pref]=toggle;
end
if(rpgoGPpref and rpgoGPpref[pref]==1) then
DEFAULT_CHAT_FRAME:AddMessage(rpgo_ColorizeTitle(rpgoGP_PROVIDER,rpgoGP_ABBR)..": "..pref.." "..rpgo_ColorizeMsg(rpgoColorGreen,"on"));
else
DEFAULT_CHAT_FRAME:AddMessage(rpgo_ColorizeTitle(rpgoGP_PROVIDER,rpgoGP_ABBR)..": "..pref.." "..rpgo_ColorizeMsg(rpgoColorRed,"off"));
end
if(pref=="SmartScan") then
rpgoGP_RegisterEvents();
rpgoGP_Toggle(rpgoGPpref["Enabled"]);
end
end
--[[// Debug
-- ////////////////////////////////////////////]]
function rpgoGP_Debug()
if (rpgoGPpref["Debug"]==1) then
rpgoGPpref["Debug"]=0;
else
rpgoGPpref["Debug"]=1;
rpgoGP_debug("Debug Mode: enabled");
end
end
--[[// Show
-- ////////////////////////////////////////////]]
function rpgoGP_Show()
if( rpgoGPpref["Enabled"]==1) then
if(rpgoGPstate["Loaded"]==1 and rpgoGPstate["Guild"]) then
local msg="";
DEFAULT_CHAT_FRAME:AddMessage(rpgo_ColorizeTitle(rpgoGP_PROVIDER,rpgoGP_ABBR)..": guild info scanned this session");
if(rpgoGPstate["Guild"]==1) then
DEFAULT_CHAT_FRAME:AddMessage(" Profile for: '" .. rpgoGPguild .. "' on " .. rpgoGPserver);
if(rpgoGPstate["GuildNum"]) then
DEFAULT_CHAT_FRAME:AddMessage(" Members: " .. rpgoGPstate["GuildNum"]);
else
DEFAULT_CHAT_FRAME:AddMessage(" Members: not scanned");
end
else
DEFAULT_CHAT_FRAME:AddMessage(" you are not in a guild");
end
else
DEFAULT_CHAT_FRAME:AddMessage(rpgo_ColorizeTitle(rpgoGP_PROVIDER,rpgoGP_ABBR)..": "..rpgo_ColorizeMsg(rpgoColorRed," no guild info scanned this session"));
DEFAULT_CHAT_FRAME:AddMessage(" open your guild roster to scan guild information ('O'->'Guild')");
DEFAULT_CHAT_FRAME:AddMessage(" or force the export with '/gp export'");
end
else
DEFAULT_CHAT_FRAME:AddMessage(rpgo_ColorizeTitle(rpgoGP_PROVIDER,rpgoGP_ABBR)..": currently "..rpgo_ColorizeMsg(rpgoColorRed,"disabled"));
end
end
--[[//////////////////////////////////////////////
-- rpgoGP Extract functions
-- ////////////////////////////////////////////]]
function rpgoGP_GetGuildInfo()
GuildRoster();
local isGuildMember=IsInGuild();
local numGuildMembers=GetNumGuildMembers(true);
local showOfflineTemp=GetGuildRosterShowOffline();
SetGuildRosterShowOffline(true);
if(not isGuildMember) then
rpgoGPstate["Guild"]=0;
elseif(rpgoGPstate["Guild"]~=isGuildMember or rpgoGPstate["GuildNum"]~=numGuildMembers) then
rpgoGPstate["Guild"]=isGuildMember;
local currHour, currMinute=GetGameTime();
local pTime=GetTime();
local name, rank, rankIndex, level, class, zone, group, note, officernote, online;
local yearsOffline, monthsOffline, daysOffline, hoursOffline;
local guildName, guildRankName, guildRankIndex=GetGuildInfo("player");
local guildMemberTemp=nil;
local guildMemberNumTemp=nil;
if(myProfile[rpgoGPserver]["Guild"] and myProfile[rpgoGPserver]["Guild"]["Members"]) then
guildMemberTemp=myProfile[rpgoGPserver]["Guild"]["Members"];
guildMemberNumTemp=myProfile[rpgoGPserver]["Guild"]["NumMembers"];
end
myProfile[rpgoGPserver]["Guild"]= {};
myProfile[rpgoGPserver]["Guild"]["Version"]=rpgoGP_PROFILEDB;
myProfile[rpgoGPserver]["Guild"]["GPversion"]=rpgoGP_VERSION;
myProfile[rpgoGPserver]["Guild"]["GPprovider"]=rpgoGP_PROVIDER;
myProfile[rpgoGPserver]["Guild"]["DBversion"]=rpgoGP_PROFILEDB;
myProfile[rpgoGPserver]["Guild"]["Guild"]=guildName;
myProfile[rpgoGPserver]["Guild"]["Motd"]=GetGuildRosterMOTD();
myProfile[rpgoGPserver]["Guild"]["Info"]=GetGuildInfoText();
myProfile[rpgoGPserver]["Guild"]["Hour"]=currHour;
myProfile[rpgoGPserver]["Guild"]["Minute"]=currMinute;
myProfile[rpgoGPserver]["Guild"]["DateExtracted"]=date();
myProfile[rpgoGPserver]["Guild"]["Date"]=date();
myProfile[rpgoGPserver]["Guild"]["DateUTC"]=date("!%m/%d/%y %H:%M:%S");
myProfile[rpgoGPserver]["Guild"]["Locale"]=GetLocale();
myProfile[rpgoGPserver]["Guild"]["Members"]=guildMemberTemp;
local _,faction=UnitFactionGroup("player");
myProfile[rpgoGPserver]["Guild"]["Faction"]=faction;
if(numGuildMembers~=0) then
myProfile[rpgoGPserver]["Guild"]["NumMembers"]=numGuildMembers;
else
myProfile[rpgoGPserver]["Guild"]["NumMembers"]=guildMemberNumTemp;
end
guildMemberTemp=nil;
guildMemberNumTemp=nil;
rpgoGPguild=guildName;
rpgoGP_GetGuildMembers(numGuildMembers);
end
SetGuildRosterShowOffline(showOfflineTemp);
if(not rpgoGPstate["GuildInfo"]) then
rpgoGPframe:RegisterEvent("CHAT_MSG_SYSTEM");
GuildInfo();
rpgoGPstate["GuildInfo"]=1;
end
rpgoGP_GuildControl();
end
function rpgoGP_GuildControl()
myProfile[rpgoGPserver]["Guild"]["Ranks"]={};
myProfile[rpgoGPserver]["Guild"]["Ranks"]["Headers"]={};
for i=1,MAX_GUILDCONTROL_OPTIONS do
myProfile[rpgoGPserver]["Guild"]["Ranks"]["Headers"]["Control"..i]=getglobal("GUILDCONTROL_OPTION"..i);
end
myProfile[rpgoGPserver]["Guild"]["Ranks"]["Index"]={};
for i=1,GuildControlGetNumRanks() do
GuildControlSetRank(i);
myProfile[rpgoGPserver]["Guild"]["Ranks"]["Index"]["Rank"..i]={};
myProfile[rpgoGPserver]["Guild"]["Ranks"]["Index"]["Rank"..i]["Index"]=i;
myProfile[rpgoGPserver]["Guild"]["Ranks"]["Index"]["Rank"..i]["Title"]=GuildControlGetRankName(i);
myProfile[rpgoGPserver]["Guild"]["Ranks"]["Index"]["Rank"..i]["Control"]=rpgoGP_GuildControlFlags(GuildControlGetRankFlags());
end
end
function rpgoGP_GuildControlFlags(...)
local flags='';
for i=1,arg.n,1 do
if(i>1) then flags=flags..':'; end
if(arg[i]) then
flags=flags..arg[i];
else
flags=flags..0;
end
end
return(flags);
end
function rpgoGP_GetGuildMembers(numMembers)
rpgoGPstate["OfficerNote"]=CanViewOfficerNote();
if(numMembers > 0 and (rpgoGPstate["GuildNum"]~=numMembers)) then
rpgoGPstate["GuildNum"]=0;
local guildMemberTemp=nil;
if(myProfile[rpgoGPserver]["Guild"] and myProfile[rpgoGPserver]["Guild"]["Members"]) then
guildMemberTemp=myProfile[rpgoGPserver]["Guild"]["Members"];
end
myProfile[rpgoGPserver]["Guild"]["Members"]={};
for i=1,numMembers do
name,rank,rankIndex,level,class,zone,note,officernote,online,status=GetGuildRosterInfo(i);
yearsOffline,monthsOffline,daysOffline,hoursOffline=GetGuildRosterLastOnline(i);
if(name~=nil)then
myProfile[rpgoGPserver]["Guild"]["Members"][name]={};
myProfile[rpgoGPserver]["Guild"]["Members"][name]["Name"]=name;
myProfile[rpgoGPserver]["Guild"]["Members"][name]["Rank"]=rank;
myProfile[rpgoGPserver]["Guild"]["Members"][name]["RankIndex"]=rankIndex;
myProfile[rpgoGPserver]["Guild"]["Members"][name]["Level"]= level;
myProfile[rpgoGPserver]["Guild"]["Members"][name]["Class"]= class;
myProfile[rpgoGPserver]["Guild"]["Members"][name]["Zone"]= zone;
myProfile[rpgoGPserver]["Guild"]["Members"][name]["Group"]="no";
myProfile[rpgoGPserver]["Guild"]["Members"][name]["Status"]=status;
myProfile[rpgoGPserver]["Guild"]["Members"][name]["Note"]= note;
if(rpgoGPstate["OfficerNote"] and officernote~="") then
myProfile[rpgoGPserver]["Guild"]["Members"][name]["OfficerNote"]=officernote;
elseif((guildMemberTemp) and guildMemberTemp[name]) then
myProfile[rpgoGPserver]["Guild"]["Members"][name]["OfficerNote"]=guildMemberTemp[name]["OfficerNote"];
else
myProfile[rpgoGPserver]["Guild"]["Members"][name]["OfficerNote"]=officernote;
end
if(online) then
myProfile[rpgoGPserver]["Guild"]["Members"][name]["Online"]=online;
else
myProfile[rpgoGPserver]["Guild"]["Members"][name]["LastOnline"]= {};
myProfile[rpgoGPserver]["Guild"]["Members"][name]["LastOnline"]["Hour"]= hoursOffline;
myProfile[rpgoGPserver]["Guild"]["Members"][name]["LastOnline"]["Day"]= daysOffline;
myProfile[rpgoGPserver]["Guild"]["Members"][name]["LastOnline"]["Month"]= monthsOffline;
myProfile[rpgoGPserver]["Guild"]["Members"][name]["LastOnline"]["Year"]= yearsOffline;
end
rpgoGPstate["GuildNum"]=rpgoGPstate["GuildNum"]+1;
end
end
if(numMembers ~= rpgoGPstate["GuildNum"]) then
myProfile[rpgoGPserver]["Guild"]["Members"]=guildMemberTemp;
end
guildMemberTemp=nil;
end
end
function rpgoGP_ScanGuildInfo(msg)
rpgoGP_debug("scanGI "..msg);
local d,p,a;
if(msg) then
_,_,d,p,a=string.find(msg,"%w+ (%d+[-.]%d+[-.]%d+), (%d+) %w+, (%d+) %w+");
if(d and p and a) then
rpgoGP_debug("scanGI "..d.." "..p.." "..a);
myProfile[rpgoGPserver]["Guild"]["Created"]=d;
myProfile[rpgoGPserver]["Guild"]["NumAccounts"]=a;
rpgoGPframe:UnregisterEvent("CHAT_MSG_SYSTEM");
end
end
end
--[[//////////////////////////////////////////////
-- general functions
-- ////////////////////////////////////////////]]
function rpgoOfficerNote(oNote,oldNote)
if(rpgoGPstate["OfficerNote"]) then
return oNote;
elseif(oldNote) then
return oldNote;
else
return "";
end
end
--[[//////////////////////////////////////////////
-- general rpgo functions
-- ////////////////////////////////////////////]]
--[function] msg:string
function rpgoGP_debug(msg)
if(rpgoGPpref and rpgoGPpref["Debug"]==1) then
if(rpgoDebug) then rpgoDebug(rpgoGP_ABBR,msg);
else rpgo_VerboseMsg(rpgo_ColorizeTitle(rpgoGP_PROVIDER,rpgoGP_ABBR)..": ".."[" .. msg .. "]",1,0,0); end end
end
-- USAGE: rpgo_ColorizeTitle(provider,title)
if (not rpgo_ColorizeTitle) then rpgo_ColorizeTitle=function(provider,title) if(provider and title) then return rpgo_ColorizeMsg(rpgoColorTitle,provider.."-"..title); end end end
-- USAGE: rpgo_ColorizeMsg(color,msg)
if (not rpgo_ColorizeMsg) then rpgo_ColorizeMsg=function(color,msg) if(color and msg) then return "|cff"..color..msg.."|r"; end end end
-- Register the addon in myAddOns
if (not rpgo_myAddons) then rpgo_myAddons=function(info,help) if(myAddOnsFrame_Register) then myAddOnsFrame_Register(info, help); end end end