vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 --[[----------------------------------------------------------------------
2 VanasKoS - Kill on Sight Management
3 ------------------------------------------------------------------------]]
4  
5 local DEFAULT_OPTIONS = {
6 notifyVisual = TRUE,
7 notifyChatframe = TRUE,
8 enableWarnFrame = TRUE,
9 NotifyTimerInterval = 60,
10 playSound = TRUE
11 };
12  
13 local ScheduledActions = { };
14 local timeElapsed = 0;
15 local notifyAllowed = TRUE;
16  
17 local nearbyKos = { };
18 local nearbyEnemys = { };
19 local nearbyFriendly = { };
20  
21 local initialized = nil;
22  
23 VanasKoS = AceAddon:new({
24 name = VANASKOS.NAME,
25 version = VANASKOS.VERSION,
26 releaseDate = "06-15-2006",
27 aceCompatible = "102",
28 author = "Vane of EU-Aegwynn",
29 email = "boredvana@gmail.com",
30 website = "http//www.curse-gaming.com",
31 category = "others",
32 db = AceDatabase:new("VanasKoSDB"),
33 defaults = DEFAULT_OPTIONS,
34 cmd = AceChatCmd:new(VANASKOS.COMMANDS, VANASKOS.CMD_OPTIONS),
35 });
36  
37 --[[----------------------------------------------------------------------
38 ACE Functions
39 ------------------------------------------------------------------------]]
40 function VanasKoS:Initialize()
41 self.GetOpt = function(var) return self.db:get(self.profilePath, var); end
42 self.SetOpt = function(var, val) self.db:set(self.profilePath, var, val); end
43 self.TogOpt = function(var) return self.db:toggle(self.profilePath, var); end
44 self.TogMsg = function(text, val) self.cmd:status(text, val, VANASKOS.MAP_ONOFF_COLOR); end
45 end
46  
47 function VanasKoS:Enable()
48 -- Mouseover, Targetchanges
49 self:RegisterEvent("UPDATE_MOUSEOVER_UNIT");
50 self:RegisterEvent("PLAYER_TARGET_CHANGED");
51  
52 -- Chat Messages
53 self:RegisterEvent("CHAT_MSG_HOSTILEPLAYER_BUFF", "ChatCombatMessageHandlerEnemy");
54 self:RegisterEvent("CHAT_MSG_HOSTILEPLAYER_DAMAGE", "ChatCombatMessageHandlerEnemy");
55 self:RegisterEvent("CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS", "ChatCombatMessageHandlerEnemy");
56 self:RegisterEvent("CHAT_MSG_COMBAT_HOSTILEPLAYER_MISSES", "ChatCombatMessageHandlerEnemy");
57 self:RegisterEvent("CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF", "ChatCombatMessageHandlerEnemy");
58 self:RegisterEvent("CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE", "ChatCombatMessageHandlerEnemy");
59 self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_BUFFS", "ChatCombatMessageHandlerEnemy");
60 self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE", "ChatCombatMessageHandlerEnemy");
61  
62 -- Chat Messages Friendly - to gather messages & friendly targets
63 self:RegisterEvent("CHAT_MSG_FRIENDLYPLAYER_BUFF", "ChatCombatMessageHandlerFriendly");
64 self:RegisterEvent("CHAT_MSG_FRIENDLYPLAYER_DAMAGE", "ChatCombatMessageHandlerFriendly");
65 self:RegisterEvent("CHAT_MSG_COMBAT_FRIENDLYPLAYER_HITS", "ChatCombatMessageHandlerFriendly");
66 self:RegisterEvent("CHAT_MSG_COMBAT_FRIENDLYPLAYER_MISSES", "ChatCombatMessageHandlerFriendly");
67 self:RegisterEvent("CHAT_MSG_SPELL_FRIENDLYPLAYER_BUFF", "ChatCombatMessageHandlerFriendly");
68 self:RegisterEvent("CHAT_MSG_SPELL_FRIENDLYPLAYER_DAMAGE", "ChatCombatMessageHandlerFriendly");
69 self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_BUFFS", "ChatCombatMessageHandlerFriendly");
70 self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_DAMAGE", "ChatCombatMessageHandlerFriendly");
71  
72 -- say, emotes
73 self:RegisterEvent("CHAT_MSG_SAY", "ChatMessageAndEmoteHandler");
74 self:RegisterEvent("CHAT_MSG_EMOTE", "ChatMessageAndEmoteHandler");
75 self:RegisterEvent("CHAT_MSG_TEXT_EMOTE", "ChatMessageAndEmoteHandler");
76  
77 if(self.GetOpt("enableWarnFrame")) then
78 VanasKoS_WarnFrame:Show();
79 else
80 VanasKoS_WarnFrame:Hide();
81 end
82 end
83  
84 function VanasKoS:Disable()
85 -- Mouseover, Targetchanges
86 self:UnregisterEvent("UPDATE_MOUSEOVER_UNIT");
87 self:UnregisterEvent("PLAYER_TARGET_CHANGED");
88  
89 -- Chat Messages
90 self:UnregisterEvent("CHAT_MSG_HOSTILEPLAYER_BUFF");
91 self:UnregisterEvent("CHAT_MSG_HOSTILEPLAYER_DAMAGE");
92 self:UnregisterEvent("CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS");
93 self:UnregisterEvent("CHAT_MSG_COMBAT_HOSTILEPLAYER_MISSES");
94 self:UnregisterEvent("CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF");
95 self:UnregisterEvent("CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE");
96 self:UnregisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_BUFFS");
97 self:UnregisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE");
98  
99 -- Chat Messages Friendly - to gather messages & friendly targets
100 self:UnregisterEvent("CHAT_MSG_FRIENDLYPLAYER_BUFF");
101 self:UnregisterEvent("CHAT_MSG_FRIENDLYPLAYER_DAMAGE");
102 self:UnregisterEvent("CHAT_MSG_COMBAT_FRIENDLYPLAYER_HITS");
103 self:UnregisterEvent("CHAT_MSG_COMBAT_FRIENDLYPLAYER_MISSES");
104 self:UnregisterEvent("CHAT_MSG_SPELL_FRIENDLYPLAYER_BUFF");
105 self:UnregisterEvent("CHAT_MSG_SPELL_FRIENDLYPLAYER_DAMAGE");
106 self:UnregisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_BUFFS");
107 self:UnregisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_DAMAGE");
108  
109 -- say, emotes
110 self:UnregisterEvent("CHAT_MSG_SAY");
111 self:UnregisterEvent("CHAT_MSG_EMOTE");
112 self:UnregisterEvent("CHAT_MSG_TEXT_EMOTE");
113  
114 VanasKoS_WarnFrame:Hide();
115 end
116  
117 --[[----------------------------------------------------------------------
118 Main Functions
119 ------------------------------------------------------------------------]]
120 function VanasKoS:OnUpdate()
121 if(getn(ScheduledActions) == 0) then
122 VanasKoS_CoreFrame:Hide();
123 return nil;
124 end
125 timeElapsed = timeElapsed + arg1;
126 if(timeElapsed >= 0.1 ) then
127 timeElapsed = timeElapsed - 0.1;
128 local currTime = GetTime();
129 for k,v in ScheduledActions do
130 if (currTime >= v[2]) then
131 tremove(ScheduledActions, k);
132 if(type(v[1]) == "function") then
133 v[1](v[3]);
134 else
135 getglobal(v[1])(v[3]);
136 end
137 end
138 end
139 end
140 end
141  
142 function VanasKoS:ScheduleAction(nameOrFunction, timeUntilExecution, optParam)
143 tinsert(ScheduledActions, { nameOrFunction, GetTime()+timeUntilExecution, optParam });
144 VanasKoS_CoreFrame:Show();
145 end
146  
147 function VanasKoS:UnscheduleAction(nameOrFunction, optParam)
148 for k,v in ScheduledActions do
149 if( v[1] == name and ( not optParam or v[3] == optParam ) ) then
150 tremove(ScheduledActions, k);
151 end
152 end
153 end
154  
155 function VanasKoS:Tooltip_AddMessage(msg)
156 GameTooltip:AddLine(msg);
157  
158 -- resize
159 local newWidth = 0;
160 local numlines = GameTooltip:NumLines();
161 GameTooltip:SetHeight((numlines*16) + 20);
162  
163 for i = 1, numlines do
164 local checkText = getglobal("GameTooltipTextLeft"..i);
165 if (checkText and ((checkText:GetWidth() + 24) > newWidth)) then
166 newWidth = (checkText:GetWidth() + 24);
167 end
168 end
169 GameTooltip:SetWidth(newWidth);
170 end
171  
172 function VanasKoS:IsKoSPlayer(name)
173 if(name == nil) then
174 return nil;
175 end
176  
177 local result = self.db:get({"koslist", GetRealmName(), "players", string.lower(name)}, "reason");
178  
179 if(result == nil or result == "") then
180 return nil;
181 else
182 return result;
183 end
184 end
185  
186 function VanasKoS:IsKoSGuild(name)
187 if(name == nil) then
188 return nil;
189 end
190  
191 local result = self.db:get({"koslist", GetRealmName(), "guilds", string.lower(name)}, "reason");
192  
193 if(result == nil or result == "") then
194 return nil;
195 else
196 return result;
197 end
198 end
199  
200 function VanasKoS:NotifyKoS(name, guild)
201 if (notifyAllowed ~= TRUE) then
202 return nil;
203 end
204  
205 notifyAllowed = FALSE
206 -- Reallow Notifies in NotifyTimeInterval Time
207 self:ScheduleAction(function() notifyAllowed = TRUE end, self.GetOpt("NotifyTimerInterval"));
208  
209 local msg = "";
210 msg = "Player: " .. name;
211 if(self:IsKoSPlayer(name)) then
212 msg = msg .. " (" .. self:IsKoSPlayer(name) .. ")";
213 end
214 if(guild) then
215 msg = msg .. " <" .. guild .. ">";
216 end
217 if(self:IsKoSGuild(guild)) then
218 msg = msg .. " (" .. self:IsKoSGuild(guild) .. ")";
219 end
220  
221 if(self.GetOpt("notifyVisual")) then
222 UIErrorsFrame:AddMessage("KoS: " .. msg, 1.0, 1.0, 1.0, 1.0, UIERRORS_HOLD_TIME);
223 end
224 if(self.GetOpt("notifyChatframe")) then
225 self.cmd:msg(msg);
226 end
227 if(self.GetOpt("playSound")) then
228 PlaySound("igBonusBarOpen");
229 end
230 end
231  
232 function VanasKoS:ListKoS()
233 self.cmd:msg(format(VANASKOS_TEXT_KOS_LIST_FOR_REALM, GetRealmName()));
234  
235 -- Get KoS Players
236 local players = self.db:get({"koslist", GetRealmName()}, "players");
237 DEFAULT_CHAT_FRAME:AddMessage(VANASKOS_TEXT_PLAYERS_COLON);
238 if(players ~= nil) then
239 for index, value in players do
240 DEFAULT_CHAT_FRAME:AddMessage(" " .. index .. " (" .. value.reason .. ")");
241 end
242 end
243  
244 -- Get KoS Guilds
245 local guilds = self.db:get({"koslist", GetRealmName()}, "guilds");
246 DEFAULT_CHAT_FRAME:AddMessage(VANASKOS_TEXT_GUILDS_COLON);
247 if(guilds ~= nil) then
248 for index, value in guilds do
249 DEFAULT_CHAT_FRAME:AddMessage(" " .. index .. " (" .. value.reason .. ")");
250 end
251 end
252 end
253  
254 function VanasKoS:UpdateKoSDB(name, guild, level, class, race)
255 if(self:IsKoSPlayer(name)) then
256 self.db:set({"koslist", GetRealmName(), "players", string.lower(name)}, "displayname", name);
257 self.db:set({"koslist", GetRealmName(), "players", string.lower(name)}, "guild", guild);
258 self.db:set({"koslist", GetRealmName(), "players", string.lower(name)}, "level", level);
259 self.db:set({"koslist", GetRealmName(), "players", string.lower(name)}, "class", class);
260 self.db:set({"koslist", GetRealmName(), "players", string.lower(name)}, "race", race);
261 self:UpdateKoSLastSeen(name);
262 self:GUIOnUpdate();
263 end
264 if(self:IsKoSGuild(guild)) then
265 self.db:set({"koslist", GetRealmName(), "guilds", string.lower(guild)}, "displayname", guild);
266 self:GUIOnUpdate();
267 end
268 end
269  
270 function VanasKoS:UpdateKoSLastSeen(name)
271 if(self:IsKoSPlayer(name)) then
272 self.db:set({"koslist", GetRealmName(), "players", string.lower(name)}, "lastseen", time());
273 end
274 end
275  
276 --[[----------------------------------------------------------------------
277 Chat Command Handlers
278 ------------------------------------------------------------------------]]
279 function VanasKoS:AddKoSPlayer(args)
280 local reason = "";
281  
282 if (string.find(args, "reason") ~= nil) then
283 reason = string.sub(args, string.find(args, "reason") + 7, string.len(args));
284 args = string.sub(args, 0, string.find(args, " ") - 1);
285 end
286  
287 self:AddKoSPlayerR(args, reason);
288 end
289  
290 function VanasKoS:AddKoSPlayerR(player, reason)
291 if(reason == "") then
292 reason = VANASKOS.TEXT_REASON_UNKNOWN;
293 end
294 self.db:set({"koslist", GetRealmName(), "players", string.lower(player)}, "reason", reason);
295 self.cmd:result(format(VANASKOS_TEXT_PLAYER_ADDED, player, reason));
296 end
297  
298 function VanasKoS:AddKoSGuild(args)
299 local reason = "";
300  
301 if (string.find(args, "reason") ~= nil) then
302 reason = string.sub(args, string.find(args, "reason") + 7, string.len(args));
303 args = string.sub(args, 0, string.find(args, "reason") - 2);
304 else
305 reason = "";
306 end
307  
308 self:AddKoSGuildR(args, reason);
309 end
310  
311 function VanasKoS:AddKoSGuildR(name, reason)
312 if(reason == "") then
313 reason = VANASKOS.TEXT_REASON_UNKNOWN;
314 end
315 self.db:set({"koslist", GetRealmName(), "guilds", string.lower(name)}, "reason", reason);
316  
317 self.cmd:result(format(VANASKOS_TEXT_GUILD_ADDED, name, reason));
318 end
319  
320 function VanasKoS:RemoveKoSPlayer(name)
321 if(name == nil) then
322 return nil;
323 end;
324 self.db:set({"koslist", GetRealmName(), "players"}, string.lower(name));
325 self.cmd:result(format(VANASKOS_TEXT_PLAYER_REMOVED, name));
326 end
327  
328 function VanasKoS:RemoveKoSGuild(name)
329 if(name == nil) then
330 return nil;
331 end;
332 self.db:set({"koslist", GetRealmName(), "guilds"}, string.lower(name));
333 self.cmd:result(format(VANASKOS_TEXT_GUILD_REMOVED, name));
334 end
335  
336 function VanasKoS:ResetKoSList()
337 self.db:set({"koslist", GetRealmName()}, "players");
338 self.db:set({"koslist", GetRealmName()}, "guilds");
339 self.cmd:result(format(VANASKOS_TEXT_LIST_PURGED, GetRealmName()));
340 end
341  
342 --[[----------------------------------------------------------------------
343 Import Functions
344 ------------------------------------------------------------------------]]
345  
346 function VanasKoS:ImportKoSListFromUBotD()
347 if(ubdKos == nil) then
348 self.cmd:result(VANASKOS_TEXT_UBOTD_IMPORT_FAILED);
349 return nil;
350 end
351 if(ubdKos.kos == nil) then
352 self.cmd:result(VANASKOS_TEXT_UBOTD_IMPORT_FAILED);
353 return nil;
354 end
355 for index, value in ubdKos.kos do
356 if(value.notes == "Unk") then
357 self:AddKoSPlayer(index);
358 self.cmd:result(index .. " " .. VANASKOS_TEXT_IMPORTED .. ".");
359 else
360 self:AddKoSPlayer(index .. " reason " .. value.notes);
361 self.cmd:result(index .. " (" .. value.notes .. ") " .. VANASKOS_TEXT_IMPORTED .. ".");
362 end
363 end
364 self.cmd:result(VANASKOS_TEXT_UBOTD_IMPORT_SUCCESS);
365 end
366  
367 --[[----------------------------------------------------------------------
368 Configuration Commands
369 ------------------------------------------------------------------------]]
370 function VanasKoS:ToggleNotifyVisual()
371 self.TogMsg(VANASKOS_TEXT_NOTIFY_UPPER, self.TogOpt("notifyVisual"));
372 end
373  
374 function VanasKoS:ToggleWarnFrame()
375 self.TogMsg(VANASKOS_TEXT_WARN_FRAME, self.TogOpt("enableWarnFrame"));
376  
377 if(VanasKoS_WarnFrame:IsVisible() and not self.GetOpt("enableWarnFrame")) then
378 VanasKoS_WarnFrame:Hide();
379 end
380 if(not VanasKoS_WarnFrame:IsVisible() and self.GetOpt("enableWarnFrame")) then
381 VanasKoS_WarnFrame:Show();
382 end
383 end
384  
385 function VanasKoS:ToggleNotifyChatframe()
386 self.TogMsg(VANASKOS_TEXT_NOTIFY_CHATFRAME, self.TogOpt("notifyChatframe"));
387 end
388  
389 function VanasKoS:ToggleNotifySound()
390 self.TogMsg(VANASKOS_TEXT_PLAY_SOUND, self.TogOpt("playSound"));
391 end
392  
393 function VanasKoS:ConfigSetNotificationInterval(args)
394 if(tonumber(args) == self.GetOpt("NotifyTimerInterval")) then
395 return nil;
396 end
397 self.SetOpt("NotifyTimerInterval", tonumber(args));
398 self.cmd:status(VANASKOS_TEXT_NOTIFY_INTERVAL, self.GetOpt("NotifyTimerInterval"));
399 end
400  
401 function VanasKoS:Report()
402 self.cmd:report({
403 {text = VANASKOS_TEXT_NOTIFY_UPPER, val = self.GetOpt("notifyVisual"), map = VANASKOS.MAP_ONOFF_COLOR},
404 {text = VANASKOS_TEXT_NOTIFY_CHATFRAME, val = self.GetOpt("notifyChatframe"), map = VANASKOS.MAP_ONOFF_COLOR},
405 {text = VANASKOS_TEXT_PLAY_SOUND, val = self.GetOpt("playSound"), map = VANASKOS.MAP_ONOFF_COLOR},
406 {text = VANASKOS_TEXT_WARN_FRAME, val = self.GetOpt("enableWarnFrame"), map = VANASKOS.MAP_ONOFF_COLOR},
407 {text = VANASKOS_TEXT_NOTIFY_INTERVAL, val = self.GetOpt("NotifyTimerInterval"), map = nil}
408 });
409 end
410  
411 --[[----------------------------------------------------------------------
412 Event Handlers
413 ------------------------------------------------------------------------]]
414 function VanasKoS:UPDATE_MOUSEOVER_UNIT()
415 if(UnitIsPlayer("mouseover")) then
416 local name = UnitName("mouseover");
417 local guild = GetGuildInfo("mouseover");
418  
419 self:UpdateKoSDB(name, guild, UnitLevel("mouseover"), UnitClass("mouseover"), UnitRace("mouseover"));
420  
421 if(self:IsKoSPlayer(name)) then
422 self:GUIWarnFrameAddPlayer(name, "kos");
423 self:Tooltip_AddMessage(VANASKOS_TEXT_KOS .. " " .. self:IsKoSPlayer(name));
424 if(self:IsKoSGuild(guild)) then
425 self:Tooltip_AddMessage(VANASKOS_TEXT_KOS_GUILD .. " " .. self:IsKoSGuild(guild));
426 end
427 self:NotifyKoS(name, guild);
428 else
429 if(self:IsKoSGuild(guild)) then
430 self:GUIWarnFrameAddPlayer(name, "kos");
431 self:Tooltip_AddMessage(VANASKOS_TEXT_KOS_GUILD .. " " .. self:IsKoSGuild(guild));
432 self:NotifyKoS(name, guild);
433 end
434 end
435 end
436 end
437  
438 function VanasKoS:PLAYER_TARGET_CHANGED()
439 if(UnitIsPlayer("target")) then
440 local name = UnitName("target");
441 local guild = GetGuildInfo("target");
442  
443 self:UpdateKoSDB(name, guild, UnitLevel("target"), UnitClass("target"), UnitRace("target"));
444 if(self:IsKoSPlayer(name)) then
445 TargetFrameTexture:SetVertexColor(1.0, 1.0, 1.0, TargetFrameTexture:GetAlpha());
446 TargetFrameTexture:SetVertexColor(1.0, 200.0, 1.0, TargetFrameTexture:GetAlpha());
447 TargetFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame-Elite");
448 self:NotifyKoS(name, guild);
449 self:GUIWarnFrameAddPlayer(name, "kos");
450 elseif(self:IsKoSGuild(guild)) then
451 TargetFrameTexture:SetVertexColor(1.0, 200.0, 1.0, TargetFrameTexture:GetAlpha());
452 TargetFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame-Rare");
453 TargetFrameTexture:SetVertexColor(1.0, 1.0, 1.0, TargetFrameTexture:GetAlpha());
454 self:GUIWarnFrameAddPlayer(name, "kos");
455 end
456 else
457 TargetFrameTexture:SetVertexColor(1.0, 1.0, 1.0, TargetFrameTexture:GetAlpha());
458 end
459 end
460  
461 function VanasKoS:ChatMessageAndEmoteHandler()
462 if(self:IsKoSPlayer(arg2)) then
463 self:NotifyKoS(arg2, nil);
464 end
465 end
466  
467 function VanasKoS:ChatCombatMessageHandlerFriendly()
468 self:ChatCombatMessageHandler("friendly");
469 end
470  
471 function VanasKoS:ChatCombatMessageHandlerEnemy()
472 self:ChatCombatMessageHandler("enemy");
473 end
474  
475 function VanasKoS:GetPlayerOfChatCombatMessage(message)
476 for index, value in VANASKOS.TargetMatch do
477 local s, e;
478 local results = {};
479 s, e, results[0], results[1], results[2], results[3], results[4] = string.find(arg1, value.pattern);
480 if(results[value.patternname] ~= nil) then
481 return results[value.patternname];
482 end
483 end
484 return nil;
485 end
486  
487 function VanasKoS:ChatCombatMessageHandler(faction)
488 if(arg1) then
489 local name = self:GetPlayerOfChatCombatMessage(arg1);
490 if(name == nil) then
491 return nil;
492 end
493 if(self:IsKoSPlayer(name)) then
494 self:UpdateKoSLastSeen();
495 self:NotifyKoS(name, nil);
496 self:GUIWarnFrameAddPlayer(name, "kos");
497 end
498 if(faction == "enemy") then
499 self:GUIWarnFrameAddPlayer(name, "enemy");
500 end
501 if(faction == "friendly") then
502 self:GUIWarnFrameAddPlayer(name, "friendly");
503 end
504 end
505 end
506  
507 --[[----------------------------------------------------------------------
508 GUI Functions
509 ------------------------------------------------------------------------]]
510  
511 VANASKOS.selectedEntry = nil;
512  
513  
514 function VanasKoS:ToggleMenu()
515 if(VanasKoSFrame:IsVisible()) then
516 VanasKoSFrame:Hide();
517 else
518 VanasKoSFrame:Show();
519 end
520 end
521  
522 local VANASKOSFRAME_SUBFRAMES = { "VanasKoSPlayersListFrame", "VanasKoSGuildsListFrame", "VanasKoSConfigurationFrame", "VanasKoSAboutFrame" };
523 function VanasKoS:GUIFrame_ShowSubFrame(frameName)
524 for index, value in VANASKOSFRAME_SUBFRAMES do
525 if(value == frameName) then
526 getglobal(value):Show();
527 else
528 getglobal(value):Hide();
529 end
530 end
531 end
532  
533 function VanasKoS:GUIShowChangeDialog()
534 local dialog = nil;
535 if(VANASKOS.selectedEntry) then
536 dialog = StaticPopup_Show("VANASKOS_CHANGE_ENTRY");
537 local name = self:GUIGetSelectedEntryName();
538 local reason = "";
539 if(VanasKoSFrame.showPlayersList) then
540 reason = self.db:get({"koslist", GetRealmName(), "players", string.lower(name)}, "reason");
541 else
542 reason = self.db:get({"koslist", GetRealmName(), "guilds", string.lower(name)}, "reason");
543 end
544 getglobal(dialog:GetName() .. "EditBox"):SetText(reason);
545 end
546 end
547  
548 function VanasKoS:GUIChangeKoSReason(reason)
549 local name = self:GUIGetSelectedEntryName();
550 if(VanasKoSFrame.showPlayersList) then
551 self.db:set({"koslist", GetRealmName(), "players", string.lower(name)}, "reason", reason);
552 else
553 self.db:set({"koslist", GetRealmName(), "guilds", string.lower(name)}, "reason", reason);
554 end
555 self:GUIScrollUpdate();
556 end
557  
558 function VanasKoS:GUIGetSelectedEntryName()
559 if(VANASKOS.selectedEntry) then
560 local listVar = nil;
561 local listIndex = 1;
562  
563 if(not self.db.initialized) then
564 return nil;
565 end
566  
567 if(VanasKoSFrame.showPlayersList) then
568 listVar = self.db:get({"koslist", GetRealmName()}, "players");
569 else
570 listVar = self.db:get({"koslist", GetRealmName()}, "guilds");
571 end
572  
573 if(listVar == nil) then
574 self:GUIHideButtons(1, 10);
575 return nil;
576 end
577  
578 for k,v in listVar do
579 if(listIndex == VANASKOS.selectedEntry) then
580 return k;
581 end
582 listIndex = listIndex + 1;
583 end
584  
585 end
586 return nil;
587 end
588  
589 function VanasKoS:GUIRemoveDialog()
590 if(VanasKoSFrame.showPlayersList) then
591 self:RemoveKoSPlayer(VanasKoS:GUIGetSelectedEntryName());
592 else
593 self:RemoveKoSGuild(VanasKoS:GUIGetSelectedEntryName());
594 end
595 self:GUIScrollUpdate()
596 end
597  
598 function VanasKoS:GUIListButton_OnClick(button)
599 if(button == "LeftButton") then
600 VANASKOS.selectedEntry = this:GetID();
601 self:GUIScrollUpdate();
602 end
603 end
604  
605 function VanasKoS:GUIHideButtons(minimum, maximum)
606 for i=minimum,maximum,1 do
607 local button = getglobal("VanasKoSListFrameListButton" .. i);
608 if(button ~= nil) then
609 button:Hide();
610 end
611 end
612 end
613  
614 function VanasKoS:GUIShowButtons(minimum, maximum)
615 for i=minimum,maximum,1 do
616 local button = getglobal("VanasKoSListFrameListButton" .. i);
617 button:Show();
618 end
619 end
620  
621 function VanasKoS:GUIScrollUpdate()
622 local listOffset = FauxScrollFrame_GetOffset(VanasKoSListScrollFrame);
623 local listVar = nil;
624 local listIndex = 1;
625 local buttonIndex = 1;
626  
627 if(not self.db.initialized) then
628 return nil;
629 end
630  
631 if(VanasKoSFrame.showPlayersList) then
632 listVar = self.db:get({"koslist", GetRealmName()}, "players");
633 else
634 listVar = self.db:get({"koslist", GetRealmName()}, "guilds");
635 end
636  
637 if(listVar == nil) then
638 VANASKOS.selectedEntry = nil;
639 self:GUIHideButtons(1, 10);
640 return nil;
641 end
642  
643 for k,v in listVar do
644 if((listIndex-1) < listOffset) then
645 else
646 if(buttonIndex <= 10) then
647 local buttonText1 = getglobal("VanasKoSListFrameListButton" .. buttonIndex .. "ButtonTextName");
648 local buttonText2 = getglobal("VanasKoSListFrameListButton" .. buttonIndex .. "ButtonTextReason");
649 local button = getglobal("VanasKoSListFrameListButton" .. buttonIndex);
650  
651 if(v.displayname and VanasKoSFrame.showPlayersList) then
652 buttonText1:SetText(v.displayname .. VANASKOS_COLOR_WHITE .." Level " .. v.level .. " " .. v.race .. " " .. v.class .. VANASKOS_COLOR_END);
653 else
654 if(v.displayname and not VanasKoSFrame.showPlayersList) then
655 buttonText1:SetText(v.displayname);
656 else
657 buttonText1:SetText(string.Capitalize(k));
658 end
659 end
660 if(v.lastseen and VanasKoSFrame.showPlayersList) then
661 buttonText2:SetText(string.Capitalize(v.reason) .. " (" .. VANASKOS_TEXT_LAST_SEEN .. " " .. SecondsToTime(time() - v.lastseen) .. "ago)");
662 else
663 buttonText2:SetText(string.Capitalize(v.reason));
664 end
665 button:SetID(listIndex);
666 button:Show();
667  
668 if(listIndex == VANASKOS.selectedEntry) then
669 button:LockHighlight();
670 else
671 button:UnlockHighlight();
672 end
673 buttonIndex = buttonIndex + 1;
674 end
675 end
676 listIndex = listIndex + 1;
677 end
678  
679 if(listIndex <= 10) then
680 self:GUIHideButtons(listIndex, 10);
681 end
682  
683 if(listIndex == 1) then
684 VANASKOS.selectedEntry = nil;
685 else
686 if(VANASKOS.selectedEntry == nil) then
687 VANASKOS.selectedEntry = 1;
688 self:GUIScrollUpdate();
689 end
690 if(VANASKOS.selectedEntry >= listIndex) then
691 VANASKOS.selectedEntry = 1;
692 self:GUIScrollUpdate();
693 end
694 end
695  
696 -- 34 = Hoehe VanasKoSListFrameListButtonTemplate
697 -- scrollframe, maxnum, to_display, height
698 FauxScrollFrame_Update(VanasKoSListScrollFrame, listIndex-1, 10, 34);
699 end
700  
701 function VanasKoS_GUIOnScroll()
702 VanasKoS:GUIScrollUpdate();
703 end
704  
705 function VanasKoS:GUIOnUpdate()
706 if(not VanasKoSFrame:IsVisible()) then
707 return nil;
708 end
709 if(VanasKoSFrame.selectedTab == 1) then
710 VanasKoSFrameTopLeft:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-TopLeft");
711 VanasKoSFrameTopRight:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-TopRight");
712 VanasKoSFrameBottomLeft:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrame-BotLeft");
713 VanasKoSFrameBottomRight:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrame-BotRight");
714 VanasKoSListFrame:Show();
715  
716 if(VanasKoSFrame.showPlayersList) then
717 self:GUIFrame_ShowSubFrame("VanasKoSPlayersListFrame");
718 VanasKoSFrameTitleText:SetText(VANASKOS.NAME .. " - " .. VANASKOS_TEXT_PLAYER_LIST);
719 self:GUIScrollUpdate();
720 else
721 self:GUIFrame_ShowSubFrame("VanasKoSGuildsListFrame");
722 VanasKoSFrameTitleText:SetText(VANASKOS.NAME .. " - " .. VANASKOS_TEXT_GUILDS_LIST);
723 self:GUIScrollUpdate();
724 end
725 end
726 if(VanasKoSFrame.selectedTab == 2) then
727 VanasKoSFrameTopLeft:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-TopLeft");
728 VanasKoSFrameTopRight:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-TopRight");
729 VanasKoSFrameBottomLeft:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-BottomLeft");
730 VanasKoSFrameBottomRight:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-BottomRight");
731 VanasKoSListFrame:Hide();
732 self:GUIFrame_ShowSubFrame("VanasKoSConfigurationFrame");
733 VanasKoSFrameTitleText:SetText(VANASKOS.NAME .. " - " .. VANASKOS_TEXT_CONFIGURATION);
734 end
735 if(VanasKoSFrame.selectedTab == 3) then
736 VanasKoSFrameTopLeft:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-TopLeft");
737 VanasKoSFrameTopRight:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-TopRight");
738 VanasKoSFrameBottomLeft:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-BottomLeft");
739 VanasKoSFrameBottomRight:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-BottomRight");
740 VanasKoSListFrame:Hide();
741 self:GUIFrame_ShowSubFrame("VanasKoSAboutFrame");
742 VanasKoSFrameTitleText:SetText(VANASKOS.NAME .. " - " .. VANASKOS_TEXT_ABOUT);
743 end
744 end
745  
746 function VanasKoS_GUIWarnFrameRemovePlayer(name)
747 VanasKoS:GUIWarnFrameRemovePlayer(name);
748 end
749  
750 function VanasKoS:GUIWarnFrameRemovePlayer(name)
751 for k,v in nearbyKos do
752 if(v[1] == name) then
753 tremove(nearbyKos, k);
754 end
755 end
756 for k,v in nearbyEnemys do
757 if(v[1] == name) then
758 tremove(nearbyEnemys, k);
759 end
760 end
761 for k,v in nearbyFriendly do
762 if(v[1] == name) then
763 tremove(nearbyFriendly, k);
764 end
765 end
766  
767 VanasKoS:GUIUpdateWarnFrame();
768 end
769  
770 function VanasKoS:GUIWarnFrameAddPlayer(name, faction)
771 if(name == VANASKOS.TEXT_UNKNOWN_ENTITY) then
772 return nil;
773 end
774  
775 self:GUIWarnFrameRemovePlayer(name)
776 if(faction == "kos") then
777 tinsert(nearbyKos, { name, faction });
778 self:UnscheduleAction("VanasKoS_GUIWarnFrameRemovePlayer", name);
779 self:ScheduleAction("VanasKoS_GUIWarnFrameRemovePlayer", self.GetOpt("NotifyTimerInterval"), name);
780 VanasKoS:GUIUpdateWarnFrame();
781  
782 return nil;
783 end
784 if(faction == "enemy") then
785 tinsert(nearbyEnemys, { name, faction });
786 end
787 if(faction == "friendly") then
788 tinsert(nearbyFriendly, { name, faction });
789 end
790  
791 self:UnscheduleAction("VanasKoS_GUIWarnFrameRemovePlayer", name);
792 self:ScheduleAction("VanasKoS_GUIWarnFrameRemovePlayer", 10, name);
793 VanasKoS:GUIUpdateWarnFrame();
794 end
795  
796 function VanasKoS:GUIDebugShowTables()
797 self.cmd:msg("showtables");
798 -- kos
799 for k, v in nearbyKos do
800 self.cmd:msg(v[1]);
801 end
802  
803 -- enemy but not kos
804 for k, v in nearbyEnemys do
805 self.cmd:msg(v[1]);
806 end
807  
808 -- friendly players
809 for k, v in nearbyFriendly do
810 self.cmd:msg(v[1]);
811 end
812 end
813  
814 function VanasKoS:GUIUpdateWarnFrame()
815 -- +1, because it doesn't count you
816 if( (getn(nearbyKos)+getn(nearbyEnemys)) > (getn(nearbyFriendly)+1)) then
817 VanasKoS_WarnFrame:SetBackdropColor(1.0, 0.0, 0.0, 0.5);
818 end
819 if( (getn(nearbyKos)+getn(nearbyEnemys)) < (getn(nearbyFriendly)+1)) then
820 VanasKoS_WarnFrame:SetBackdropColor(0.0, 1.0, 0.0, 0.5);
821 end
822 if( getn(nearbyKos)+getn(nearbyEnemys) == 0 or (getn(nearbyKos)+getn(nearbyEnemys) == (getn(nearbyFriendly)+1)) ) then
823 VanasKoS_WarnFrame:SetBackdropColor(0.5, 0.5, 1.0, 0.5);
824 end
825  
826 local counter = 0;
827  
828 -- kos
829 for k, v in nearbyKos do
830 if (counter < 5) then
831 getglobal("VanasKoS_WarnFrameText" .. counter):SetTextColor(1.0, 0.0, 1.0);
832 getglobal("VanasKoS_WarnFrameText" .. counter):SetText(v[1]);
833 counter = counter + 1;
834 end
835 end
836  
837 -- enemy but not kos
838 for k, v in nearbyEnemys do
839 if (counter < 5) then
840 getglobal("VanasKoS_WarnFrameText" .. counter):SetTextColor(1.0, 0.0, 0.0);
841 getglobal("VanasKoS_WarnFrameText" .. counter):SetText(v[1]);
842 counter = counter + 1;
843 end
844 end
845  
846 -- friendly players
847 for k, v in nearbyFriendly do
848 if (counter < 5) then
849 getglobal("VanasKoS_WarnFrameText" .. counter):SetTextColor(0.0, 1.0, 0.0);
850 getglobal("VanasKoS_WarnFrameText" .. counter):SetText(v[1]);
851 counter = counter + 1;
852 end
853 end
854  
855 if(counter < 5) then
856 for i=counter, 5, 1 do
857 getglobal("VanasKoS_WarnFrameText" .. counter):SetText("");
858 end
859 end
860  
861 end
862  
863 function VanasKoS:GUIUpdateConfigurationFrame()
864 if(VanasKoSConfigNotifyInterval:GetText() ~= "") then
865 self:ConfigSetNotificationInterval(VanasKoSConfigNotifyInterval:GetText());
866 end
867 VanasKoSConfigVisual:SetChecked(self.GetOpt("notifyVisual"));
868 VanasKoSConfigChatFrame:SetChecked(self.GetOpt("notifyChatframe"));
869 VanasKoSConfigWarnFrame:SetChecked(self.GetOpt("enableWarnFrame"))
870 VanasKoSConfigPlaySound:SetChecked(self.GetOpt("playSound"));
871 if(self.GetOpt("NotifyTimerInterval") == nil) then
872 VanasKoSConfigNotifyInterval:SetText("0");
873 else
874 VanasKoSConfigNotifyInterval:SetText(self.GetOpt("NotifyTimerInterval"));
875 end
876  
877 end
878  
879 function string.Capitalize( str )
880 return string.upper( string.sub( str, 1, 1 ) )..string.sub( str, 2 )
881 end
882  
883  
884 VanasKoS:RegisterForLoad();