vanilla-wow-addons – Blame information for rev 1
?pathlinks?
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(); |