Mercurial > wow > ouroloot
changeset 136:434073f312e1 2.20.1
Stop shipping unused file.
author | Farmbuyer of US-Kilrogg <farmbuyer@gmail.com> |
---|---|
date | Fri, 31 Aug 2012 23:17:00 -0400 |
parents | feca7e0e1f89 |
children | aec6325c80b5 |
files | Ouro_Loot.toc mleqdkp.lua |
diffstat | 2 files changed, 0 insertions(+), 455 deletions(-) [+] |
line wrap: on
line diff
--- a/Ouro_Loot.toc Fri Aug 31 23:15:40 2012 -0400 +++ b/Ouro_Loot.toc Fri Aug 31 23:17:00 2012 -0400 @@ -52,5 +52,3 @@ bossmods.lua abbreviations.lua -#mleqdkp.lua slow, buggy, no way to verify output -
--- a/mleqdkp.lua Fri Aug 31 23:15:40 2012 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,461 +0,0 @@ --- This file is one gigantic exercise in abusing the garbage collector via --- string manipulation. A real XML-handling library would be cleaner, alas, --- we can't load third-party .so/.dll inside the WoW client. Life is hard. - -local addon = select(2,...) -local pairs, ipairs, tinsert, tremove, tconcat = pairs, ipairs, table.insert, table.remove, table.concat -local tostring, tonumber = tostring, tonumber - -local banner_formatted = "Formatted version (scroll down for unformatted):" -local banner_unformatted = "Unformatted version:" -local banner_sep = "===========================" - --- We keep some local state bundled up rather than trying to pass it around --- as paramters (which would have entailed creating a ton of closures). -local state = {} -local tag_lookup_handlers = {} -local do_tag_lookup_handler - - ---[[ -This is based on CT_RaidTracker 1.7.32, reconstructing the output from -code inspection. No official format documents are available on the web -without downloading and installing the EQDKP webserver package. Bah. - -Case of tag names shouldn't matter, but is preserved here from CT_RaidTracker -code for comparison of generated output. - -There is some waste adding newlines between elements here only to strip them -out later, but it's worth the extra cycles for debugging and verification. - -$TIMESTAMP,$ENDTIME MM/DD/YY HH:mm:ss except we don't have seconds available -$REALM GetRealmName() -$ZONE raw name, not snarky -$RAIDNOTE arbitrary text for the raid event -$PHAT_LEWTS all accumulated loot entries -]] -local XML = ([====[ -<RaidInfo> -<Version>1.4</Version> {In live output, this is missing due to scoping bug in ct_raidtracker.lua:3471} -<key>$TIMESTAMP</key> -<realm>$REALM</realm> -<start>$TIMESTAMP</start> {Same as the key, apparently?} -<end>$ENDTIME</end> {Set by the "end the raid" command in CTRT, here it is just the final entry time} -<zone>$ZONE</zone> {may be optional. first one on the list in case of multiple zones?} -{<difficulty>$DIFFICULTY</difficulty> {this scales badly in places like ICC. may be optional?}} - -<PlayerInfos> - $PLAYER_INFOS -</PlayerInfos> - -<BossKills> - $BOSS_KILLS -</BossKills> - -<Wipes> - $WIPES -</Wipes> -{<NextBoss>Baron Steamroller</NextBoss> {only one "next boss" for the whole - raid event? presumably where to pick up next time?}} - -<note><![CDATA[$RAIDNOTE - Zone: $ZONE]]></note> - -<Join> - $JOINS -</Join> -<Leave> - $LEAVES -</Leave> - -<Loot> - $PHAT_LEWTS -</Loot> -</RaidInfo>]====]):gsub('%b{}', "") - ---[[ -See the loot markup below. -]] -local boss_kills_xml = ([====[ - <key$N> - <name>$BOSS_NAME</name> - <time>$BOSS_TIME</time> - <attendees></attendees> {this is actually empty in the working example...} - <difficulty>$DIFFICULTY</difficulty> - </key$N> -]====]):gsub('%b{}', "") - -local function boss_kills_tag_lookup (tag) - if tag == 'N' then - return tostring(state.key) - elseif tag == 'BOSS_NAME' then - return state.entry.bosskill - elseif tag == 'BOSS_TIME' then - return do_tag_lookup_handler (state.index, state.entry, 'TIME') - else - return do_tag_lookup_handler (state.index, state.entry, tag) or 'NYI' - end -end - ---[[ -Handles the PlayerInfo, Join, and Leave tags. -]] -local joinleave_xml -local player_info_xml = ([====[ - <key$N> -$PLAYER_GRUNTWORK - </key$N> -]====]):gsub('%b{}', "") - -local function player_info_tag_lookup (tag) - if tag == 'N' then - return tostring(state.key) - elseif tag == 'NAME' then - return state.index - elseif tag == 'TIME' then - return state.time - end - local ltag = tag:lower() - if state.entry[ltag] then - -- handles race, guild, sex, class, level - return state.entry[ltag] - end - return "?" -end - -do - local pi_xml_save = player_info_xml - local gruntwork_tags = { - "name", "race", "guild", "sex", "class", "level" - } - for i,tag in ipairs(gruntwork_tags) do - gruntwork_tags[i] = (" <%s>$%s</%s>"):format(tag,tag:upper(),tag) - end - player_info_xml = player_info_xml:gsub('$PLAYER_GRUNTWORK', table.concat(gruntwork_tags,'\n')) - - -- The join/leave blocks use "player" instead of "name". They don't have a - -- guild tag, but they do have a time tag. - gruntwork_tags[1] = " <player>$NAME</player>" - gruntwork_tags[3] = " <time>$TIME</time>" - joinleave_xml = pi_xml_save:gsub('$PLAYER_GRUNTWORK', table.concat(gruntwork_tags,'\n')) -end - ---[[ -$N 1-based loop variable for key element -$ITEMNAME Without The Square Brackets of the Whale -$ITEMID Not the numeric ID, actually a full itemstring without the leading "item:" -$ICON Last component of texture path? -$CLASS,$SUBCLASS ItemType -$COLOR GetItemQualityColor, full 8-digit string -$COUNT,$BOSS,$ZONE, - $PLAYER all self-explanatory -$COSTS in DKP points... hmmm -$ITEMNOTE take the notes field for this one -$TIME another formatted timestamp -]] -local phat_lewt_xml = ([====[ - <key$N> -$LEWT_GRUNTWORK - <zone>$ZONE</zone> {may be optional} - <difficulty>$DIFFICULTY</difficulty> {this scales badly in places like ICC. may be optional?} - <Note><![CDATA[$ITEMNOTE - Zone: $ZONE - Boss: $BOSS - $COSTS DKP]]></Note> {zone can be followed by difficulty} - </key$N> -]====]):gsub('%b{}', "") - -local function phat_lewt_tag_lookup (tag) - if tag == 'N' then - return tostring(state.key) - elseif tag == 'COSTS' - then return '1' - else - return do_tag_lookup_handler (state.index, state.entry, tag) or 'NYI' - end -end - -do - local gruntwork_tags = { - "ItemName", "ItemID", "Icon", "Class", "SubClass", "Color", "Count", - "Player", "Costs", "Boss", "Time", - } - for i,tag in ipairs(gruntwork_tags) do - gruntwork_tags[i] = (" <%s>$%s</%s>"):format(tag,tag:upper(),tag) - end - phat_lewt_xml = phat_lewt_xml:gsub('$LEWT_GRUNTWORK', table.concat(gruntwork_tags,'\n')) -end - - -local function format_EQDKP_timestamp (day_entry, time_entry) - --assert(day_entry.kind == 'time', day_entry.kind .. " passed to MLEQDKP timestamp") - return addon:format_timestamp ("$M/$D/$Y $h:$m:00", day_entry, time_entry) -end - - --- Look up tag strings for a particular item, given index and entry table. -tag_lookup_handlers.ITEMNAME = - function (i, e) - return e.itemname - end - -tag_lookup_handlers.ITEMID = - function (i, e) - return e.itemlink:match("^|c%x+|H(item[%d:]+)|h%[") - end - -tag_lookup_handlers.ICON = - function (i, e) - local str = e.itexture - repeat - local s = str:find('\\') - if s then str = str:sub(s+1) end - until not s - return str - end - -tag_lookup_handlers.CLASS = - function (i, e) - return state.class - end - -tag_lookup_handlers.SUBCLASS = - function (i, e) - return state.subclass - end - -tag_lookup_handlers.COLOR = - function (i, e) - local q = select(4, GetItemQualityColor(e.quality)) - return q -- skip leading |c (no longer returned by GIQC after 4.2) - end - -tag_lookup_handlers.COUNT = - function (i, e) - return e.count and e.count:sub(2) or "1" -- skip the leading "x" - end - --- should combine these next two -tag_lookup_handlers.BOSS = - function (i, e) - while i > 0 and state.loot[i].kind ~= 'boss' do - i = i - 1 - end - if i == 0 then return "No Boss Entry Found, Unknown Boss" end - return state.loot[i].bosskill - end - -tag_lookup_handlers.ZONE = - function (i, e) - while i > 0 and state.loot[i].kind ~= 'boss' do - i = i - 1 - end - if i == 0 then return "No Boss Entry Found, Unknown Zone" end - return state.loot[i].instance - end - -tag_lookup_handlers.DIFFICULTY = - function (i, e) - local tag = tag_lookup_handlers.ZONE(i,e) - local N,h = tag:match("%((%d+)(h?)%)") - if not N then return "1" end -- maybe signal an error instead? - N = tonumber(N) - N = ( (N==10) and 1 or 2 ) + ( (h=='h') and 2 or 0 ) - return tostring(N) - end - -tag_lookup_handlers.PLAYER = - function (i, e) - return state.player - end - -tag_lookup_handlers.ITEMNOTE = - function (i, e) - return state.itemnote - end - -tag_lookup_handlers.TIME = - function (i, e) - local ti,tl = addon:find_previous_time_entry(i) - return format_EQDKP_timestamp(tl,e) - end - - -function do_tag_lookup_handler (index, entry, tag) - local h = tag_lookup_handlers[tag] - if h then - return h(index,entry) - else - error(("MLDKP tag lookup (index %d) on tag %s with no handler"):format(index,tag)) - end -end - - -local function generator (ttype, loot, last_printed, generated, cache) - -- Because it's XML, generated text is "grown" by shoving more crap into - -- the middle instead of appending to the end. Only easy way of doing that - -- here is regenerating it from scratch each time. - generated[ttype] = nil - - local _ - local text = XML - state.loot = loot - - -- TIMESTAMPs - do - local f,l -- first and last timestamps in the table - for i = 1, #loot do - if loot[i].kind == 'time' then - f = format_EQDKP_timestamp(loot[i]) - break - end - end - _,l = addon:find_previous_time_entry(#loot) -- latest timestamp - l = format_EQDKP_timestamp(l,loot[#loot]) - text = text:gsub('$TIMESTAMP', f):gsub('$ENDTIME', l) - end - - -- Loot - do - local all_lewts = {} - local lewt_template = phat_lewt_xml - - state.key = 1 - for i,e in addon:filtered_loot_iter('loot') do - state.index, state.entry = i, e - -- no sense doing repeated getiteminfo calls - state.class, state.subclass = select(6, GetItemInfo(e.id)) - - -- similar logic as text_tabs.lua: - -- assuming nobody names a toon "offspec" or "gvault" - local P, N - local disp = e.disposition or e.person - if disp == 'offspec' then - P,N = e.person, "offspec" - elseif disp == 'gvault' then - P,N = "guild vault", e.person - else - P,N = disp, "" - end - if e.extratext_byhand then - N = N .. " -- " .. e.extratext - end - state.player, state.itemnote = P, N - - all_lewts[#all_lewts+1] = lewt_template:gsub('%$([%w_]+)', - phat_lewt_tag_lookup) - state.key = state.key + 1 - end - - text = text:gsub('$PHAT_LEWTS', tconcat(all_lewts, '\n')) - end - - -- Player info, join times, leave times - do - local all_players, all_joins, all_leaves = {}, {}, {} - local player_template, joinleave_template = player_info_xml, joinleave_xml - local date = date - - state.key = 1 - if type(loot.raiders) == 'table' then for name,r in pairs(loot.raiders) do - state.index, state.entry = name, r - all_players[#all_players+1] = player_template:gsub('%$([%w_]+)', player_info_tag_lookup) - state.time = date ("%m/%d/%y %H:%M:00", r.join) - all_joins[#all_joins+1] = joinleave_template:gsub('%$([%w_]+)', player_info_tag_lookup) - state.time = date ("%m/%d/%y %H:%M:00", r.leave) - all_leaves[#all_leaves+1] = joinleave_template:gsub('%$([%w_]+)', player_info_tag_lookup) - state.key = state.key + 1 - end end - text = text:gsub('$PLAYER_INFOS', tconcat(all_players, '\n')) - :gsub('$JOINS', tconcat(all_joins, '\n')) - :gsub('$LEAVES', tconcat(all_leaves, '\n')) - end - - -- Bosses and wipes (does anybody really use the latter?) - do - local all_bosses, all_wipes = {}, {} - local boss_template = boss_kills_xml - - state.key = 1 - for i,e in addon:filtered_loot_iter('boss') do - if e.reason == 'kill' then - state.index, state.entry = i, e - all_bosses[#all_bosses+1] = boss_template:gsub('%$([%w_]+)', - boss_kills_tag_lookup) - state.key = state.key + 1 - elseif e.reason == 'wipe' then - all_wipes[#all_wipes+1] = ('<Wipe>%d</Wipe>'):format(e.stamp) - end - end - - text = text:gsub('$BOSS_KILLS', tconcat(all_bosses, '\n')) - :gsub('$WIPES', tconcat(all_wipes, '\n')) - end - - -- In addition to doing the top-level zone, this will also catch any - -- leftover $ZONE tags. There could be multiple places in the raid, so - -- we default to the first one we saw. - do - local iter = addon:filtered_loot_iter() -- HACK - local first_boss = iter('boss',0) - local zone = first_boss and loot[first_boss].instance or "Unknown" - text = text:gsub('$ZONE', zone) - end - - -- Misc - text = text:gsub('$REALM', (GetRealmName())) - --text = text:gsub('$DIFFICULTY', ) - text = text:gsub('$RAIDNOTE', "") - - cache[#cache+1] = banner_formatted - cache[#cache+1] = banner_sep - cache[#cache+1] = text - cache[#cache+1] = '\n' - - cache[#cache+1] = banner_unformatted - cache[#cache+1] = banner_sep - text = text:gsub('>%s+<', "><") - cache[#cache+1] = text - cache[#cache+1] = '\n' - - wipe(state) - return true -end - -local function specials (_, editbox, container, mkbutton) - local b = mkbutton("Highlight", - [[Highlight the unformatted copy for copy-and-pasting.]]) - b:SetFullWidth(true) - b:SetCallback("OnClick", function(_b) - local _,start,finish - local txt = editbox:GetText() - _,start = txt:find(banner_unformatted..'\n'..banner_sep..'\n') - _,finish = txt:find("</RaidInfo>", start) - editbox.editBox:HighlightText(start,finish) - editbox.editBox:SetCursorPosition(start) - end) - container:AddChild(b) - - local b = mkbutton("Re-Unformat", - [[Regenerate only the unformatted copy at the bottom <*from*> the formatted copy at the top.]]) - b:SetFullWidth(true) - b:SetCallback("OnClick", function(_b) - local _,start,finish - local txt = editbox:GetText() - _,start = txt:find(banner_formatted..'\n'..banner_sep..'\n', --[[init=]]1, --[[plain=]]true) - _,finish = txt:find("</RaidInfo>", start, true) - txt = txt:sub(start+1,finish) - txt = banner_formatted .. '\n' - .. banner_sep .. '\n' - .. txt .. '\n\n\n' - .. banner_unformatted .. '\n' - .. banner_sep .. '\n' - .. txt:gsub('>%s+<', "><") .. '\n' - -- This would normally screw up the cached version, but we're regenerating - -- everything on each new display for this tab anyhow. - editbox.editBox:SetText(txt) - _,start = txt:find(banner_unformatted..'\n'..banner_sep..'\n', --[[init=]]1, --[[plain=]]true) - editbox.editBox:SetCursorPosition(start) - end) - container:AddChild(b) -end - -addon:register_text_generator ("mleqdkp", [[ML/EQ-DKP]], [[MLdkp 1.1 EQDKP format]], generator, specials) - --- vim:noet