vanilla-wow-addons – Rev 1
?pathlinks?
--[[----------------------------------------------------------------------
VanasKoS - Kill on Sight Management
------------------------------------------------------------------------]]
local DEFAULT_OPTIONS = {
notifyVisual = TRUE,
notifyChatframe = TRUE,
enableWarnFrame = TRUE,
NotifyTimerInterval = 60,
playSound = TRUE
};
local ScheduledActions = { };
local timeElapsed = 0;
local notifyAllowed = TRUE;
local nearbyKos = { };
local nearbyEnemys = { };
local nearbyFriendly = { };
local initialized = nil;
VanasKoS = AceAddon:new({
name = VANASKOS.NAME,
version = VANASKOS.VERSION,
releaseDate = "06-15-2006",
aceCompatible = "102",
author = "Vane of EU-Aegwynn",
email = "boredvana@gmail.com",
website = "http//www.curse-gaming.com",
category = "others",
db = AceDatabase:new("VanasKoSDB"),
defaults = DEFAULT_OPTIONS,
cmd = AceChatCmd:new(VANASKOS.COMMANDS, VANASKOS.CMD_OPTIONS),
});
--[[----------------------------------------------------------------------
ACE Functions
------------------------------------------------------------------------]]
function VanasKoS:Initialize()
self.GetOpt = function(var) return self.db:get(self.profilePath, var); end
self.SetOpt = function(var, val) self.db:set(self.profilePath, var, val); end
self.TogOpt = function(var) return self.db:toggle(self.profilePath, var); end
self.TogMsg = function(text, val) self.cmd:status(text, val, VANASKOS.MAP_ONOFF_COLOR); end
end
function VanasKoS:Enable()
-- Mouseover, Targetchanges
self:RegisterEvent("UPDATE_MOUSEOVER_UNIT");
self:RegisterEvent("PLAYER_TARGET_CHANGED");
-- Chat Messages
self:RegisterEvent("CHAT_MSG_HOSTILEPLAYER_BUFF", "ChatCombatMessageHandlerEnemy");
self:RegisterEvent("CHAT_MSG_HOSTILEPLAYER_DAMAGE", "ChatCombatMessageHandlerEnemy");
self:RegisterEvent("CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS", "ChatCombatMessageHandlerEnemy");
self:RegisterEvent("CHAT_MSG_COMBAT_HOSTILEPLAYER_MISSES", "ChatCombatMessageHandlerEnemy");
self:RegisterEvent("CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF", "ChatCombatMessageHandlerEnemy");
self:RegisterEvent("CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE", "ChatCombatMessageHandlerEnemy");
self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_BUFFS", "ChatCombatMessageHandlerEnemy");
self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE", "ChatCombatMessageHandlerEnemy");
-- Chat Messages Friendly - to gather messages & friendly targets
self:RegisterEvent("CHAT_MSG_FRIENDLYPLAYER_BUFF", "ChatCombatMessageHandlerFriendly");
self:RegisterEvent("CHAT_MSG_FRIENDLYPLAYER_DAMAGE", "ChatCombatMessageHandlerFriendly");
self:RegisterEvent("CHAT_MSG_COMBAT_FRIENDLYPLAYER_HITS", "ChatCombatMessageHandlerFriendly");
self:RegisterEvent("CHAT_MSG_COMBAT_FRIENDLYPLAYER_MISSES", "ChatCombatMessageHandlerFriendly");
self:RegisterEvent("CHAT_MSG_SPELL_FRIENDLYPLAYER_BUFF", "ChatCombatMessageHandlerFriendly");
self:RegisterEvent("CHAT_MSG_SPELL_FRIENDLYPLAYER_DAMAGE", "ChatCombatMessageHandlerFriendly");
self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_BUFFS", "ChatCombatMessageHandlerFriendly");
self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_DAMAGE", "ChatCombatMessageHandlerFriendly");
-- say, emotes
self:RegisterEvent("CHAT_MSG_SAY", "ChatMessageAndEmoteHandler");
self:RegisterEvent("CHAT_MSG_EMOTE", "ChatMessageAndEmoteHandler");
self:RegisterEvent("CHAT_MSG_TEXT_EMOTE", "ChatMessageAndEmoteHandler");
if(self.GetOpt("enableWarnFrame")) then
VanasKoS_WarnFrame:Show();
else
VanasKoS_WarnFrame:Hide();
end
end
function VanasKoS:Disable()
-- Mouseover, Targetchanges
self:UnregisterEvent("UPDATE_MOUSEOVER_UNIT");
self:UnregisterEvent("PLAYER_TARGET_CHANGED");
-- Chat Messages
self:UnregisterEvent("CHAT_MSG_HOSTILEPLAYER_BUFF");
self:UnregisterEvent("CHAT_MSG_HOSTILEPLAYER_DAMAGE");
self:UnregisterEvent("CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS");
self:UnregisterEvent("CHAT_MSG_COMBAT_HOSTILEPLAYER_MISSES");
self:UnregisterEvent("CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF");
self:UnregisterEvent("CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE");
self:UnregisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_BUFFS");
self:UnregisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE");
-- Chat Messages Friendly - to gather messages & friendly targets
self:UnregisterEvent("CHAT_MSG_FRIENDLYPLAYER_BUFF");
self:UnregisterEvent("CHAT_MSG_FRIENDLYPLAYER_DAMAGE");
self:UnregisterEvent("CHAT_MSG_COMBAT_FRIENDLYPLAYER_HITS");
self:UnregisterEvent("CHAT_MSG_COMBAT_FRIENDLYPLAYER_MISSES");
self:UnregisterEvent("CHAT_MSG_SPELL_FRIENDLYPLAYER_BUFF");
self:UnregisterEvent("CHAT_MSG_SPELL_FRIENDLYPLAYER_DAMAGE");
self:UnregisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_BUFFS");
self:UnregisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_DAMAGE");
-- say, emotes
self:UnregisterEvent("CHAT_MSG_SAY");
self:UnregisterEvent("CHAT_MSG_EMOTE");
self:UnregisterEvent("CHAT_MSG_TEXT_EMOTE");
VanasKoS_WarnFrame:Hide();
end
--[[----------------------------------------------------------------------
Main Functions
------------------------------------------------------------------------]]
function VanasKoS:OnUpdate()
if(getn(ScheduledActions) == 0) then
VanasKoS_CoreFrame:Hide();
return nil;
end
timeElapsed = timeElapsed + arg1;
if(timeElapsed >= 0.1 ) then
timeElapsed = timeElapsed - 0.1;
local currTime = GetTime();
for k,v in ScheduledActions do
if (currTime >= v[2]) then
tremove(ScheduledActions, k);
if(type(v[1]) == "function") then
v[1](v[3]);
else
getglobal(v[1])(v[3]);
end
end
end
end
end
function VanasKoS:ScheduleAction(nameOrFunction, timeUntilExecution, optParam)
tinsert(ScheduledActions, { nameOrFunction, GetTime()+timeUntilExecution, optParam });
VanasKoS_CoreFrame:Show();
end
function VanasKoS:UnscheduleAction(nameOrFunction, optParam)
for k,v in ScheduledActions do
if( v[1] == name and ( not optParam or v[3] == optParam ) ) then
tremove(ScheduledActions, k);
end
end
end
function VanasKoS:Tooltip_AddMessage(msg)
GameTooltip:AddLine(msg);
-- resize
local newWidth = 0;
local numlines = GameTooltip:NumLines();
GameTooltip:SetHeight((numlines*16) + 20);
for i = 1, numlines do
local checkText = getglobal("GameTooltipTextLeft"..i);
if (checkText and ((checkText:GetWidth() + 24) > newWidth)) then
newWidth = (checkText:GetWidth() + 24);
end
end
GameTooltip:SetWidth(newWidth);
end
function VanasKoS:IsKoSPlayer(name)
if(name == nil) then
return nil;
end
local result = self.db:get({"koslist", GetRealmName(), "players", string.lower(name)}, "reason");
if(result == nil or result == "") then
return nil;
else
return result;
end
end
function VanasKoS:IsKoSGuild(name)
if(name == nil) then
return nil;
end
local result = self.db:get({"koslist", GetRealmName(), "guilds", string.lower(name)}, "reason");
if(result == nil or result == "") then
return nil;
else
return result;
end
end
function VanasKoS:NotifyKoS(name, guild)
if (notifyAllowed ~= TRUE) then
return nil;
end
notifyAllowed = FALSE
-- Reallow Notifies in NotifyTimeInterval Time
self:ScheduleAction(function() notifyAllowed = TRUE end, self.GetOpt("NotifyTimerInterval"));
local msg = "";
msg = "Player: " .. name;
if(self:IsKoSPlayer(name)) then
msg = msg .. " (" .. self:IsKoSPlayer(name) .. ")";
end
if(guild) then
msg = msg .. " <" .. guild .. ">";
end
if(self:IsKoSGuild(guild)) then
msg = msg .. " (" .. self:IsKoSGuild(guild) .. ")";
end
if(self.GetOpt("notifyVisual")) then
UIErrorsFrame:AddMessage("KoS: " .. msg, 1.0, 1.0, 1.0, 1.0, UIERRORS_HOLD_TIME);
end
if(self.GetOpt("notifyChatframe")) then
self.cmd:msg(msg);
end
if(self.GetOpt("playSound")) then
PlaySound("igBonusBarOpen");
end
end
function VanasKoS:ListKoS()
self.cmd:msg(format(VANASKOS_TEXT_KOS_LIST_FOR_REALM, GetRealmName()));
-- Get KoS Players
local players = self.db:get({"koslist", GetRealmName()}, "players");
DEFAULT_CHAT_FRAME:AddMessage(VANASKOS_TEXT_PLAYERS_COLON);
if(players ~= nil) then
for index, value in players do
DEFAULT_CHAT_FRAME:AddMessage(" " .. index .. " (" .. value.reason .. ")");
end
end
-- Get KoS Guilds
local guilds = self.db:get({"koslist", GetRealmName()}, "guilds");
DEFAULT_CHAT_FRAME:AddMessage(VANASKOS_TEXT_GUILDS_COLON);
if(guilds ~= nil) then
for index, value in guilds do
DEFAULT_CHAT_FRAME:AddMessage(" " .. index .. " (" .. value.reason .. ")");
end
end
end
function VanasKoS:UpdateKoSDB(name, guild, level, class, race)
if(self:IsKoSPlayer(name)) then
self.db:set({"koslist", GetRealmName(), "players", string.lower(name)}, "displayname", name);
self.db:set({"koslist", GetRealmName(), "players", string.lower(name)}, "guild", guild);
self.db:set({"koslist", GetRealmName(), "players", string.lower(name)}, "level", level);
self.db:set({"koslist", GetRealmName(), "players", string.lower(name)}, "class", class);
self.db:set({"koslist", GetRealmName(), "players", string.lower(name)}, "race", race);
self:UpdateKoSLastSeen(name);
self:GUIOnUpdate();
end
if(self:IsKoSGuild(guild)) then
self.db:set({"koslist", GetRealmName(), "guilds", string.lower(guild)}, "displayname", guild);
self:GUIOnUpdate();
end
end
function VanasKoS:UpdateKoSLastSeen(name)
if(self:IsKoSPlayer(name)) then
self.db:set({"koslist", GetRealmName(), "players", string.lower(name)}, "lastseen", time());
end
end
--[[----------------------------------------------------------------------
Chat Command Handlers
------------------------------------------------------------------------]]
function VanasKoS:AddKoSPlayer(args)
local reason = "";
if (string.find(args, "reason") ~= nil) then
reason = string.sub(args, string.find(args, "reason") + 7, string.len(args));
args = string.sub(args, 0, string.find(args, " ") - 1);
end
self:AddKoSPlayerR(args, reason);
end
function VanasKoS:AddKoSPlayerR(player, reason)
if(reason == "") then
reason = VANASKOS.TEXT_REASON_UNKNOWN;
end
self.db:set({"koslist", GetRealmName(), "players", string.lower(player)}, "reason", reason);
self.cmd:result(format(VANASKOS_TEXT_PLAYER_ADDED, player, reason));
end
function VanasKoS:AddKoSGuild(args)
local reason = "";
if (string.find(args, "reason") ~= nil) then
reason = string.sub(args, string.find(args, "reason") + 7, string.len(args));
args = string.sub(args, 0, string.find(args, "reason") - 2);
else
reason = "";
end
self:AddKoSGuildR(args, reason);
end
function VanasKoS:AddKoSGuildR(name, reason)
if(reason == "") then
reason = VANASKOS.TEXT_REASON_UNKNOWN;
end
self.db:set({"koslist", GetRealmName(), "guilds", string.lower(name)}, "reason", reason);
self.cmd:result(format(VANASKOS_TEXT_GUILD_ADDED, name, reason));
end
function VanasKoS:RemoveKoSPlayer(name)
if(name == nil) then
return nil;
end;
self.db:set({"koslist", GetRealmName(), "players"}, string.lower(name));
self.cmd:result(format(VANASKOS_TEXT_PLAYER_REMOVED, name));
end
function VanasKoS:RemoveKoSGuild(name)
if(name == nil) then
return nil;
end;
self.db:set({"koslist", GetRealmName(), "guilds"}, string.lower(name));
self.cmd:result(format(VANASKOS_TEXT_GUILD_REMOVED, name));
end
function VanasKoS:ResetKoSList()
self.db:set({"koslist", GetRealmName()}, "players");
self.db:set({"koslist", GetRealmName()}, "guilds");
self.cmd:result(format(VANASKOS_TEXT_LIST_PURGED, GetRealmName()));
end
--[[----------------------------------------------------------------------
Import Functions
------------------------------------------------------------------------]]
function VanasKoS:ImportKoSListFromUBotD()
if(ubdKos == nil) then
self.cmd:result(VANASKOS_TEXT_UBOTD_IMPORT_FAILED);
return nil;
end
if(ubdKos.kos == nil) then
self.cmd:result(VANASKOS_TEXT_UBOTD_IMPORT_FAILED);
return nil;
end
for index, value in ubdKos.kos do
if(value.notes == "Unk") then
self:AddKoSPlayer(index);
self.cmd:result(index .. " " .. VANASKOS_TEXT_IMPORTED .. ".");
else
self:AddKoSPlayer(index .. " reason " .. value.notes);
self.cmd:result(index .. " (" .. value.notes .. ") " .. VANASKOS_TEXT_IMPORTED .. ".");
end
end
self.cmd:result(VANASKOS_TEXT_UBOTD_IMPORT_SUCCESS);
end
--[[----------------------------------------------------------------------
Configuration Commands
------------------------------------------------------------------------]]
function VanasKoS:ToggleNotifyVisual()
self.TogMsg(VANASKOS_TEXT_NOTIFY_UPPER, self.TogOpt("notifyVisual"));
end
function VanasKoS:ToggleWarnFrame()
self.TogMsg(VANASKOS_TEXT_WARN_FRAME, self.TogOpt("enableWarnFrame"));
if(VanasKoS_WarnFrame:IsVisible() and not self.GetOpt("enableWarnFrame")) then
VanasKoS_WarnFrame:Hide();
end
if(not VanasKoS_WarnFrame:IsVisible() and self.GetOpt("enableWarnFrame")) then
VanasKoS_WarnFrame:Show();
end
end
function VanasKoS:ToggleNotifyChatframe()
self.TogMsg(VANASKOS_TEXT_NOTIFY_CHATFRAME, self.TogOpt("notifyChatframe"));
end
function VanasKoS:ToggleNotifySound()
self.TogMsg(VANASKOS_TEXT_PLAY_SOUND, self.TogOpt("playSound"));
end
function VanasKoS:ConfigSetNotificationInterval(args)
if(tonumber(args) == self.GetOpt("NotifyTimerInterval")) then
return nil;
end
self.SetOpt("NotifyTimerInterval", tonumber(args));
self.cmd:status(VANASKOS_TEXT_NOTIFY_INTERVAL, self.GetOpt("NotifyTimerInterval"));
end
function VanasKoS:Report()
self.cmd:report({
{text = VANASKOS_TEXT_NOTIFY_UPPER, val = self.GetOpt("notifyVisual"), map = VANASKOS.MAP_ONOFF_COLOR},
{text = VANASKOS_TEXT_NOTIFY_CHATFRAME, val = self.GetOpt("notifyChatframe"), map = VANASKOS.MAP_ONOFF_COLOR},
{text = VANASKOS_TEXT_PLAY_SOUND, val = self.GetOpt("playSound"), map = VANASKOS.MAP_ONOFF_COLOR},
{text = VANASKOS_TEXT_WARN_FRAME, val = self.GetOpt("enableWarnFrame"), map = VANASKOS.MAP_ONOFF_COLOR},
{text = VANASKOS_TEXT_NOTIFY_INTERVAL, val = self.GetOpt("NotifyTimerInterval"), map = nil}
});
end
--[[----------------------------------------------------------------------
Event Handlers
------------------------------------------------------------------------]]
function VanasKoS:UPDATE_MOUSEOVER_UNIT()
if(UnitIsPlayer("mouseover")) then
local name = UnitName("mouseover");
local guild = GetGuildInfo("mouseover");
self:UpdateKoSDB(name, guild, UnitLevel("mouseover"), UnitClass("mouseover"), UnitRace("mouseover"));
if(self:IsKoSPlayer(name)) then
self:GUIWarnFrameAddPlayer(name, "kos");
self:Tooltip_AddMessage(VANASKOS_TEXT_KOS .. " " .. self:IsKoSPlayer(name));
if(self:IsKoSGuild(guild)) then
self:Tooltip_AddMessage(VANASKOS_TEXT_KOS_GUILD .. " " .. self:IsKoSGuild(guild));
end
self:NotifyKoS(name, guild);
else
if(self:IsKoSGuild(guild)) then
self:GUIWarnFrameAddPlayer(name, "kos");
self:Tooltip_AddMessage(VANASKOS_TEXT_KOS_GUILD .. " " .. self:IsKoSGuild(guild));
self:NotifyKoS(name, guild);
end
end
end
end
function VanasKoS:PLAYER_TARGET_CHANGED()
if(UnitIsPlayer("target")) then
local name = UnitName("target");
local guild = GetGuildInfo("target");
self:UpdateKoSDB(name, guild, UnitLevel("target"), UnitClass("target"), UnitRace("target"));
if(self:IsKoSPlayer(name)) then
TargetFrameTexture:SetVertexColor(1.0, 1.0, 1.0, TargetFrameTexture:GetAlpha());
TargetFrameTexture:SetVertexColor(1.0, 200.0, 1.0, TargetFrameTexture:GetAlpha());
TargetFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame-Elite");
self:NotifyKoS(name, guild);
self:GUIWarnFrameAddPlayer(name, "kos");
elseif(self:IsKoSGuild(guild)) then
TargetFrameTexture:SetVertexColor(1.0, 200.0, 1.0, TargetFrameTexture:GetAlpha());
TargetFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame-Rare");
TargetFrameTexture:SetVertexColor(1.0, 1.0, 1.0, TargetFrameTexture:GetAlpha());
self:GUIWarnFrameAddPlayer(name, "kos");
end
else
TargetFrameTexture:SetVertexColor(1.0, 1.0, 1.0, TargetFrameTexture:GetAlpha());
end
end
function VanasKoS:ChatMessageAndEmoteHandler()
if(self:IsKoSPlayer(arg2)) then
self:NotifyKoS(arg2, nil);
end
end
function VanasKoS:ChatCombatMessageHandlerFriendly()
self:ChatCombatMessageHandler("friendly");
end
function VanasKoS:ChatCombatMessageHandlerEnemy()
self:ChatCombatMessageHandler("enemy");
end
function VanasKoS:GetPlayerOfChatCombatMessage(message)
for index, value in VANASKOS.TargetMatch do
local s, e;
local results = {};
s, e, results[0], results[1], results[2], results[3], results[4] = string.find(arg1, value.pattern);
if(results[value.patternname] ~= nil) then
return results[value.patternname];
end
end
return nil;
end
function VanasKoS:ChatCombatMessageHandler(faction)
if(arg1) then
local name = self:GetPlayerOfChatCombatMessage(arg1);
if(name == nil) then
return nil;
end
if(self:IsKoSPlayer(name)) then
self:UpdateKoSLastSeen();
self:NotifyKoS(name, nil);
self:GUIWarnFrameAddPlayer(name, "kos");
end
if(faction == "enemy") then
self:GUIWarnFrameAddPlayer(name, "enemy");
end
if(faction == "friendly") then
self:GUIWarnFrameAddPlayer(name, "friendly");
end
end
end
--[[----------------------------------------------------------------------
GUI Functions
------------------------------------------------------------------------]]
VANASKOS.selectedEntry = nil;
function VanasKoS:ToggleMenu()
if(VanasKoSFrame:IsVisible()) then
VanasKoSFrame:Hide();
else
VanasKoSFrame:Show();
end
end
local VANASKOSFRAME_SUBFRAMES = { "VanasKoSPlayersListFrame", "VanasKoSGuildsListFrame", "VanasKoSConfigurationFrame", "VanasKoSAboutFrame" };
function VanasKoS:GUIFrame_ShowSubFrame(frameName)
for index, value in VANASKOSFRAME_SUBFRAMES do
if(value == frameName) then
getglobal(value):Show();
else
getglobal(value):Hide();
end
end
end
function VanasKoS:GUIShowChangeDialog()
local dialog = nil;
if(VANASKOS.selectedEntry) then
dialog = StaticPopup_Show("VANASKOS_CHANGE_ENTRY");
local name = self:GUIGetSelectedEntryName();
local reason = "";
if(VanasKoSFrame.showPlayersList) then
reason = self.db:get({"koslist", GetRealmName(), "players", string.lower(name)}, "reason");
else
reason = self.db:get({"koslist", GetRealmName(), "guilds", string.lower(name)}, "reason");
end
getglobal(dialog:GetName() .. "EditBox"):SetText(reason);
end
end
function VanasKoS:GUIChangeKoSReason(reason)
local name = self:GUIGetSelectedEntryName();
if(VanasKoSFrame.showPlayersList) then
self.db:set({"koslist", GetRealmName(), "players", string.lower(name)}, "reason", reason);
else
self.db:set({"koslist", GetRealmName(), "guilds", string.lower(name)}, "reason", reason);
end
self:GUIScrollUpdate();
end
function VanasKoS:GUIGetSelectedEntryName()
if(VANASKOS.selectedEntry) then
local listVar = nil;
local listIndex = 1;
if(not self.db.initialized) then
return nil;
end
if(VanasKoSFrame.showPlayersList) then
listVar = self.db:get({"koslist", GetRealmName()}, "players");
else
listVar = self.db:get({"koslist", GetRealmName()}, "guilds");
end
if(listVar == nil) then
self:GUIHideButtons(1, 10);
return nil;
end
for k,v in listVar do
if(listIndex == VANASKOS.selectedEntry) then
return k;
end
listIndex = listIndex + 1;
end
end
return nil;
end
function VanasKoS:GUIRemoveDialog()
if(VanasKoSFrame.showPlayersList) then
self:RemoveKoSPlayer(VanasKoS:GUIGetSelectedEntryName());
else
self:RemoveKoSGuild(VanasKoS:GUIGetSelectedEntryName());
end
self:GUIScrollUpdate()
end
function VanasKoS:GUIListButton_OnClick(button)
if(button == "LeftButton") then
VANASKOS.selectedEntry = this:GetID();
self:GUIScrollUpdate();
end
end
function VanasKoS:GUIHideButtons(minimum, maximum)
for i=minimum,maximum,1 do
local button = getglobal("VanasKoSListFrameListButton" .. i);
if(button ~= nil) then
button:Hide();
end
end
end
function VanasKoS:GUIShowButtons(minimum, maximum)
for i=minimum,maximum,1 do
local button = getglobal("VanasKoSListFrameListButton" .. i);
button:Show();
end
end
function VanasKoS:GUIScrollUpdate()
local listOffset = FauxScrollFrame_GetOffset(VanasKoSListScrollFrame);
local listVar = nil;
local listIndex = 1;
local buttonIndex = 1;
if(not self.db.initialized) then
return nil;
end
if(VanasKoSFrame.showPlayersList) then
listVar = self.db:get({"koslist", GetRealmName()}, "players");
else
listVar = self.db:get({"koslist", GetRealmName()}, "guilds");
end
if(listVar == nil) then
VANASKOS.selectedEntry = nil;
self:GUIHideButtons(1, 10);
return nil;
end
for k,v in listVar do
if((listIndex-1) < listOffset) then
else
if(buttonIndex <= 10) then
local buttonText1 = getglobal("VanasKoSListFrameListButton" .. buttonIndex .. "ButtonTextName");
local buttonText2 = getglobal("VanasKoSListFrameListButton" .. buttonIndex .. "ButtonTextReason");
local button = getglobal("VanasKoSListFrameListButton" .. buttonIndex);
if(v.displayname and VanasKoSFrame.showPlayersList) then
buttonText1:SetText(v.displayname .. VANASKOS_COLOR_WHITE .." Level " .. v.level .. " " .. v.race .. " " .. v.class .. VANASKOS_COLOR_END);
else
if(v.displayname and not VanasKoSFrame.showPlayersList) then
buttonText1:SetText(v.displayname);
else
buttonText1:SetText(string.Capitalize(k));
end
end
if(v.lastseen and VanasKoSFrame.showPlayersList) then
buttonText2:SetText(string.Capitalize(v.reason) .. " (" .. VANASKOS_TEXT_LAST_SEEN .. " " .. SecondsToTime(time() - v.lastseen) .. "ago)");
else
buttonText2:SetText(string.Capitalize(v.reason));
end
button:SetID(listIndex);
button:Show();
if(listIndex == VANASKOS.selectedEntry) then
button:LockHighlight();
else
button:UnlockHighlight();
end
buttonIndex = buttonIndex + 1;
end
end
listIndex = listIndex + 1;
end
if(listIndex <= 10) then
self:GUIHideButtons(listIndex, 10);
end
if(listIndex == 1) then
VANASKOS.selectedEntry = nil;
else
if(VANASKOS.selectedEntry == nil) then
VANASKOS.selectedEntry = 1;
self:GUIScrollUpdate();
end
if(VANASKOS.selectedEntry >= listIndex) then
VANASKOS.selectedEntry = 1;
self:GUIScrollUpdate();
end
end
-- 34 = Hoehe VanasKoSListFrameListButtonTemplate
-- scrollframe, maxnum, to_display, height
FauxScrollFrame_Update(VanasKoSListScrollFrame, listIndex-1, 10, 34);
end
function VanasKoS_GUIOnScroll()
VanasKoS:GUIScrollUpdate();
end
function VanasKoS:GUIOnUpdate()
if(not VanasKoSFrame:IsVisible()) then
return nil;
end
if(VanasKoSFrame.selectedTab == 1) then
VanasKoSFrameTopLeft:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-TopLeft");
VanasKoSFrameTopRight:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-TopRight");
VanasKoSFrameBottomLeft:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrame-BotLeft");
VanasKoSFrameBottomRight:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrame-BotRight");
VanasKoSListFrame:Show();
if(VanasKoSFrame.showPlayersList) then
self:GUIFrame_ShowSubFrame("VanasKoSPlayersListFrame");
VanasKoSFrameTitleText:SetText(VANASKOS.NAME .. " - " .. VANASKOS_TEXT_PLAYER_LIST);
self:GUIScrollUpdate();
else
self:GUIFrame_ShowSubFrame("VanasKoSGuildsListFrame");
VanasKoSFrameTitleText:SetText(VANASKOS.NAME .. " - " .. VANASKOS_TEXT_GUILDS_LIST);
self:GUIScrollUpdate();
end
end
if(VanasKoSFrame.selectedTab == 2) then
VanasKoSFrameTopLeft:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-TopLeft");
VanasKoSFrameTopRight:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-TopRight");
VanasKoSFrameBottomLeft:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-BottomLeft");
VanasKoSFrameBottomRight:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-BottomRight");
VanasKoSListFrame:Hide();
self:GUIFrame_ShowSubFrame("VanasKoSConfigurationFrame");
VanasKoSFrameTitleText:SetText(VANASKOS.NAME .. " - " .. VANASKOS_TEXT_CONFIGURATION);
end
if(VanasKoSFrame.selectedTab == 3) then
VanasKoSFrameTopLeft:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-TopLeft");
VanasKoSFrameTopRight:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-TopRight");
VanasKoSFrameBottomLeft:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-BottomLeft");
VanasKoSFrameBottomRight:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-BottomRight");
VanasKoSListFrame:Hide();
self:GUIFrame_ShowSubFrame("VanasKoSAboutFrame");
VanasKoSFrameTitleText:SetText(VANASKOS.NAME .. " - " .. VANASKOS_TEXT_ABOUT);
end
end
function VanasKoS_GUIWarnFrameRemovePlayer(name)
VanasKoS:GUIWarnFrameRemovePlayer(name);
end
function VanasKoS:GUIWarnFrameRemovePlayer(name)
for k,v in nearbyKos do
if(v[1] == name) then
tremove(nearbyKos, k);
end
end
for k,v in nearbyEnemys do
if(v[1] == name) then
tremove(nearbyEnemys, k);
end
end
for k,v in nearbyFriendly do
if(v[1] == name) then
tremove(nearbyFriendly, k);
end
end
VanasKoS:GUIUpdateWarnFrame();
end
function VanasKoS:GUIWarnFrameAddPlayer(name, faction)
if(name == VANASKOS.TEXT_UNKNOWN_ENTITY) then
return nil;
end
self:GUIWarnFrameRemovePlayer(name)
if(faction == "kos") then
tinsert(nearbyKos, { name, faction });
self:UnscheduleAction("VanasKoS_GUIWarnFrameRemovePlayer", name);
self:ScheduleAction("VanasKoS_GUIWarnFrameRemovePlayer", self.GetOpt("NotifyTimerInterval"), name);
VanasKoS:GUIUpdateWarnFrame();
return nil;
end
if(faction == "enemy") then
tinsert(nearbyEnemys, { name, faction });
end
if(faction == "friendly") then
tinsert(nearbyFriendly, { name, faction });
end
self:UnscheduleAction("VanasKoS_GUIWarnFrameRemovePlayer", name);
self:ScheduleAction("VanasKoS_GUIWarnFrameRemovePlayer", 10, name);
VanasKoS:GUIUpdateWarnFrame();
end
function VanasKoS:GUIDebugShowTables()
self.cmd:msg("showtables");
-- kos
for k, v in nearbyKos do
self.cmd:msg(v[1]);
end
-- enemy but not kos
for k, v in nearbyEnemys do
self.cmd:msg(v[1]);
end
-- friendly players
for k, v in nearbyFriendly do
self.cmd:msg(v[1]);
end
end
function VanasKoS:GUIUpdateWarnFrame()
-- +1, because it doesn't count you
if( (getn(nearbyKos)+getn(nearbyEnemys)) > (getn(nearbyFriendly)+1)) then
VanasKoS_WarnFrame:SetBackdropColor(1.0, 0.0, 0.0, 0.5);
end
if( (getn(nearbyKos)+getn(nearbyEnemys)) < (getn(nearbyFriendly)+1)) then
VanasKoS_WarnFrame:SetBackdropColor(0.0, 1.0, 0.0, 0.5);
end
if( getn(nearbyKos)+getn(nearbyEnemys) == 0 or (getn(nearbyKos)+getn(nearbyEnemys) == (getn(nearbyFriendly)+1)) ) then
VanasKoS_WarnFrame:SetBackdropColor(0.5, 0.5, 1.0, 0.5);
end
local counter = 0;
-- kos
for k, v in nearbyKos do
if (counter < 5) then
getglobal("VanasKoS_WarnFrameText" .. counter):SetTextColor(1.0, 0.0, 1.0);
getglobal("VanasKoS_WarnFrameText" .. counter):SetText(v[1]);
counter = counter + 1;
end
end
-- enemy but not kos
for k, v in nearbyEnemys do
if (counter < 5) then
getglobal("VanasKoS_WarnFrameText" .. counter):SetTextColor(1.0, 0.0, 0.0);
getglobal("VanasKoS_WarnFrameText" .. counter):SetText(v[1]);
counter = counter + 1;
end
end
-- friendly players
for k, v in nearbyFriendly do
if (counter < 5) then
getglobal("VanasKoS_WarnFrameText" .. counter):SetTextColor(0.0, 1.0, 0.0);
getglobal("VanasKoS_WarnFrameText" .. counter):SetText(v[1]);
counter = counter + 1;
end
end
if(counter < 5) then
for i=counter, 5, 1 do
getglobal("VanasKoS_WarnFrameText" .. counter):SetText("");
end
end
end
function VanasKoS:GUIUpdateConfigurationFrame()
if(VanasKoSConfigNotifyInterval:GetText() ~= "") then
self:ConfigSetNotificationInterval(VanasKoSConfigNotifyInterval:GetText());
end
VanasKoSConfigVisual:SetChecked(self.GetOpt("notifyVisual"));
VanasKoSConfigChatFrame:SetChecked(self.GetOpt("notifyChatframe"));
VanasKoSConfigWarnFrame:SetChecked(self.GetOpt("enableWarnFrame"))
VanasKoSConfigPlaySound:SetChecked(self.GetOpt("playSound"));
if(self.GetOpt("NotifyTimerInterval") == nil) then
VanasKoSConfigNotifyInterval:SetText("0");
else
VanasKoSConfigNotifyInterval:SetText(self.GetOpt("NotifyTimerInterval"));
end
end
function string.Capitalize( str )
return string.upper( string.sub( str, 1, 1 ) )..string.sub( str, 2 )
end
VanasKoS:RegisterForLoad();