comparison core.lua @ 103:dc8a23a47b03

- Add 'chatprefix' function for building loot line jump links, and a 'PCFPrint' method which displays them. - Make use of them for local and remote notifications, boss kills, and manual insertions. - Document the additional slash commands and args feature from previous release. Oops. (Text mostly copied from webpage announcement.)
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Sun, 05 Aug 2012 07:26:06 +0000
parents fe04f5c4114a
children 04198c8d0717
comparison
equal deleted inserted replaced
102:fe04f5c4114a 103:dc8a23a47b03
279 bossmod_registered = nil 279 bossmod_registered = nil
280 bossmods = {} 280 bossmods = {}
281 281
282 requesting = nil -- prompting for additional rebroadcasters 282 requesting = nil -- prompting for additional rebroadcasters
283 283
284 lootjumps = {} -- maps hypertext idents to EOI line numbers
285
284 -- don't use NUM_ITEM_QUALITIES as the upper loop bound unless we expect 286 -- don't use NUM_ITEM_QUALITIES as the upper loop bound unless we expect
285 -- heirlooms to show up 287 -- heirlooms to show up
286 thresholds = {} 288 thresholds = {}
287 for i = 0,6 do 289 for i = 0,6 do
288 thresholds[i] = _G.ITEM_QUALITY_COLORS[i].hex .. _G["ITEM_QUALITY"..i.."_DESC"] .. "|r" 290 thresholds[i] = _G.ITEM_QUALITY_COLORS[i].hex .. _G["ITEM_QUALITY"..i.."_DESC"] .. "|r"
419 421
420 -- Hypertext support, inspired by DBM broadcast pizza timers 422 -- Hypertext support, inspired by DBM broadcast pizza timers
421 do 423 do
422 local hypertext_format_str = "|HOuroLoot:%d|h%s[%s]|r|h" 424 local hypertext_format_str = "|HOuroLoot:%d|h%s[%s]|r|h"
423 local func_map = {} --_G.setmetatable({}, {__mode = 'k'}) 425 local func_map = {} --_G.setmetatable({}, {__mode = 'k'})
424 local text_map = {} --_G.setmetatable({}, {__mode = 'kv'}) 426 local text_map = {} _G.setmetatable({}, {__mode = 'v'})
425 local base = _G.newproxy(true) 427 local base = _G.newproxy(true)
426 _G.getmetatable(base).__tostring = function(ud) return text_map[ud] end 428 _G.getmetatable(base).__tostring = function(ud) return text_map[ud] end
427 --@debug@ 429 --@debug@
428 -- collecting these tokens is an interesting micro-optimization but not yet 430 -- auto collecting these tokens is an interesting micro-optimization but not yet
431 _G.getmetatable(base).__index = {
432 ['done'] = function (ud)
433 text_map[ud] = nil
434 func_map[ud] = nil
435 end,
436 }
429 _G.getmetatable(base).__gc = function(ud) 437 _G.getmetatable(base).__gc = function(ud)
430 print("Collecting hyperlink object <",tostring(ud),">") 438 print("Collecting hyperlink object <",tostring(ud),">")
431 end 439 end
432 --@end-debug@ 440 --@end-debug@
433 441
858 -- frame-ness, which would slow down all printing and only rarely be useful. 866 -- frame-ness, which would slow down all printing and only rarely be useful.
859 -- 867 --
860 -- There is no ITEM_QUALITY_LEGENDARY constant. Sigh. 868 -- There is no ITEM_QUALITY_LEGENDARY constant. Sigh.
861 do 869 do
862 local AC = LibStub("AceConsole-3.0") 870 local AC = LibStub("AceConsole-3.0")
863 local chat_prefix = self.format_hypertext ("Ouro Loot", --[[legendary]]5, 871 function addon.chatprefix (code, arg)
864 --[[empty -> nil -> main tab]]'') 872 local f = '' -- empty -> BuildMainDisplay(empty) -> main tab
865 local chat_prefix_s = tostring(chat_prefix) 873 if code == "GoToLootLine" then
874 f = code
875 --elseif .....
876 end
877 local ret, num = self.format_hypertext ("Ouro Loot", --[[legendary]]5, f)
878 if code == "GoToLootLine" then
879 self.lootjumps[num] = arg
880 end
881 return ret, num
882 end
883 --local chat_prefix = self.format_hypertext ("Ouro Loot", --[[legendary]]5, '')
884 --local chat_prefix_s = tostring(chat_prefix)
885 local chat_prefix_s = tostring((addon.chatprefix()))
866 function addon:Print (str, ...) 886 function addon:Print (str, ...)
867 if type(str) == 'string' and str:find("%", nil, --[[plainmatch=]]true) then 887 if type(str) == 'string' and str:find("%", nil, --[[plainmatch=]]true) then
868 return AC:Print (chat_prefix_s, str:format(...)) 888 return AC:Print (chat_prefix_s, str:format(...))
869 else 889 else
870 return AC:Print (chat_prefix_s, str, ...) 890 return AC:Print (chat_prefix_s, str, ...)
874 assert(type(frame)=='table' and frame.AddMessage) 894 assert(type(frame)=='table' and frame.AddMessage)
875 if type(str) == 'string' and str:find("%", nil, --[[plainmatch=]]true) then 895 if type(str) == 'string' and str:find("%", nil, --[[plainmatch=]]true) then
876 return AC:Print (frame, chat_prefix_s, str:format(...)) 896 return AC:Print (frame, chat_prefix_s, str:format(...))
877 else 897 else
878 return AC:Print (frame, chat_prefix_s, str, ...) 898 return AC:Print (frame, chat_prefix_s, str, ...)
899 end
900 end
901 function addon:PCFPrint (frame, prefix, str, ...)
902 assert(type(frame)=='table' and frame.AddMessage)
903 if type(str) == 'string' and str:find("%", nil, --[[plainmatch=]]true) then
904 return AC:Print (frame, tostring(prefix), str:format(...))
905 else
906 return AC:Print (frame, tostring(prefix), str, ...)
879 end 907 end
880 end 908 end
881 end 909 end
882 910
883 -- Copy these over once, now that other addons have mostly loaded. Any 911 -- Copy these over once, now that other addons have mostly loaded. Any
1964 .. to_text .. "|r" 1992 .. to_text .. "|r"
1965 end 1993 end
1966 1994
1967 addon.dprint ('loot', "notification:", source, index, 1995 addon.dprint ('loot', "notification:", source, index,
1968 e.itemlink, from_text, to_text) 1996 e.itemlink, from_text, to_text)
1969 addon:CFPrint (chatframe, remote_chatty, source, index, 1997 local jumpprefix = addon.chatprefix ("GoToLootLine", index)
1998 addon:PCFPrint (chatframe, jumpprefix, remote_chatty, source, index,
1970 e.itemlink, from_text, to_text) 1999 e.itemlink, from_text, to_text)
1971 end 2000 end
1972 2001
1973 function _notify_about_change (sender, index, olddisp, from_whom, from_class) 2002 function _notify_about_change (sender, index, olddisp, from_whom, from_class)
1974 _notify (change_chatframe, sender, index, olddisp, from_whom, from_class) 2003 _notify (change_chatframe, sender, index, olddisp, from_whom, from_class)
2204 addon.dprint('loot', "added boss entry", bossi) 2233 addon.dprint('loot', "added boss entry", bossi)
2205 if boss.reason == 'kill' then 2234 if boss.reason == 'kill' then
2206 addon:RegisterEvent ("PLAYER_REGEN_DISABLED") 2235 addon:RegisterEvent ("PLAYER_REGEN_DISABLED")
2207 addon:_mark_boss_kill (bossi) 2236 addon:_mark_boss_kill (bossi)
2208 if opts.chatty_on_kill then 2237 if opts.chatty_on_kill then
2209 addon:Print("Registered kill for '%s' in %s!", boss.bossname, boss.instance) 2238 local jumpprefix = addon.chatprefix ("GoToLootLine", bossi)
2239 addon:PCFPrint(_G.DEFAULT_CHAT_FRAME, jumpprefix,
2240 "Registered kill for '%s' in %s!", boss.bossname, boss.instance)
2210 end 2241 end
2211 end 2242 end
2212 wipe(candidates) 2243 wipe(candidates)
2213 end 2244 end
2214 -- Ten seconds is a long time, but occasionally DBM takes for-EVAH to 2245 -- Ten seconds is a long time, but occasionally DBM takes for-EVAH to