Compare with Previous | Blame | View Log
local E, C = unpack(select(2, ...)) if C["other"].loot ~= true then return end --local myname, ns = ... local locale = GetLocale() rollpairs = locale == "deDE" and { ["(.*) passt automatisch bei (.+), weil [ersi]+ den Gegenstand nicht benutzen kann.$"] = "pass", ["(.*) würfelt nicht für: (.+|r)$"] = "pass", ["(.*) hat für (.+) 'Gier' ausgew?hlt"] = "greed", ["(.*) hat für (.+) 'Bedarf' ausgew?hlt"] = "need", ["(.*) hat für '(.+)' Entzauberung gew?hlt."] = "disenchant", } or locale == "frFR" and { ["(.*) a passé pour?: (.+) parce qu'((il)|(elle)) ne peut pas ramasser cette objet.$"] = "pass", ["(.*) a passé pour?: (.+)"] = "pass", ["(.*) a choisi Cupidité pour?: (.+)"] = "greed", ["(.*) a choisi Besoin pour?: (.+)"] = "need", } or locale == "ruRU" and { ["(.*) авÑомаÑиÑеÑки пеÑÐµÐ´Ð°ÐµÑ Ð¿ÑÐµÐ´Ð¼ÐµÑ (.+), поÑколÑÐºÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ ÐµÐ³Ð¾ забÑаÑÑ"] = "pass", ["(.*) пÑопÑÑÐºÐ°ÐµÑ ÑозÑгÑÑÑ Ð¿ÑедмеÑа \"(.+)\", поÑколÑÐºÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ ÐµÐ³Ð¾ забÑаÑÑ"] = "pass", ["(.*) оÑказÑваеÑÑÑ Ð¾Ñ Ð¿ÑедмеÑа (.+)%."] = "pass", ["РазÑгÑÑваеÑÑÑ: (.+)%. (.*): \"Ðе оÑкажÑÑÑ\""] = "greed", ["РазÑгÑÑваеÑÑÑ: (.+)%. (.*): \"Ðне ÑÑо нÑжно\""] = "need", ["РазÑгÑÑваеÑÑÑ: (.+)%. (.*): \"РаÑпÑлиÑÑ\""] = "disenchant", } or locale == "zhTW" and { ["(.*)èªåæ¾æ£:(.+)ï¼å çº"] = "pass", ["(.*)æ¾æ£äº:(.+)"] = "pass", ["(.*)é¸æäºè²ªå©ªåªå :(.+)"] = "greed", ["(.*)é¸æäºéæ±åªå :(.+)"] = "need", ["(.*)é¸æå解:(.+)"] = "disenchant", } or locale == "zhCN" and { ["(.*)èªå¨æ¾å¼äº(.+)ï¼å 为ä»æ æ³æ¾å该ç©åã$"] = "pass", ["(.*)èªå¨æ¾å¼äº(.+)ï¼å 为她æ æ³æ¾å该ç©åã$"] = "pass", ["(.*)æ¾å¼äºï¼(.+)"] = "pass", ["(.*)éæ©äºè´ªå©ªååï¼(.+)"] = "greed", ["(.*)éæ©äºéæ±ååï¼(.+)"] = "need", ["(.*)éæ©äºå解ååï¼(.+)"] = "disenchant", } local backdrop = { bgFile = "Interface\\ChatFrame\\ChatFrameBackground", tile = true, tileSize = 16, edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", edgeSize = 16, insets = {left = 4, right = 4, top = 4, bottom = 4}, } local function ClickRoll(frame) RollOnLoot(frame.parent.rollid, frame.rolltype) end local function HideTip() GameTooltip:Hide() end local function HideTip2() GameTooltip:Hide(); ResetCursor() end local rolltypes = {"need", "greed", "disenchant", [0] = "pass"} local function SetTip(frame) GameTooltip:SetOwner(frame, "ANCHOR_RIGHT") GameTooltip:SetText(frame.tiptext) if frame:IsEnabled() == 0 then GameTooltip:AddLine("|cffff3333Cannot roll") frame:SetAlpha(0.4) else frame:SetAlpha(1) end -- if frame:IsEnabled() == 0 then GameTooltip:AddLine("|cffff3333Cannot roll") end for name,roll in pairs(frame.parent.rolls) do if roll == rolltypes[frame.rolltype] then GameTooltip:AddLine(name, 1, 1, 1) end end GameTooltip:Show() end local function SetButtonAlpha(frame) if frame:IsEnabled() == 0 then --frame:Hide() frame:SetAlpha(0.4) else frame:SetAlpha(1) end end local function SetItemTip(frame) if not frame.link then return end GameTooltip:SetOwner(frame, "ANCHOR_TOPLEFT") GameTooltip:SetHyperlink(frame.link) if IsShiftKeyDown() then GameTooltip_ShowCompareItem() end if IsModifiedClick("DRESSUP") then ShowInspectCursor() else ResetCursor() end end local function ItemOnUpdate(self) if IsShiftKeyDown() then GameTooltip_ShowCompareItem() end CursorOnUpdate(self) end local function LootClick(frame) if IsControlKeyDown() then DressUpItemLink(frame.link) elseif IsShiftKeyDown() then ChatEdit_InsertLink(frame.link) end end local cancelled_rolls = {} local function OnEvent(frame, event, rollid) cancelled_rolls[rollid] = true if frame.rollid ~= rollid then return end frame.rollid = nil frame.time = nil frame:Hide() end local function StatusUpdate(frame) local t = GetLootRollTimeLeft(frame.parent.rollid) local perc = t / frame.parent.time frame.spark:SetPoint("CENTER", frame, "LEFT", perc * frame:GetWidth(), 0) frame:SetValue(t) end local function CreateRollButton(parent, ntex, ptex, htex, rolltype, tiptext, ...) local f = CreateFrame("Button", nil, parent) f:SetPoint(...) f:SetWidth(28) f:SetHeight(28) f:SetNormalTexture(ntex) if ptex then f:SetPushedTexture(ptex) end f:SetHighlightTexture(htex) f.rolltype = rolltype f.parent = parent f.tiptext = tiptext f:SetScript("OnUpdate", SetButtonAlpha) f:SetScript("OnEnter", SetTip) f:SetScript("OnLeave", HideTip) f:SetScript("OnClick", ClickRoll) f:SetMotionScriptsWhileDisabled(true) local txt = f:CreateFontString(nil, nil, "GameFontHighlightSmallOutline") txt:SetPoint("CENTER", 0, rolltype == 2 and 1 or rolltype == 0 and -1.2 or 0) return f, txt end local function CreateRollFrame() local frame = CreateFrame("Frame", nil, UIParent) frame:SetWidth(328) frame:SetHeight(26) frame:SetBackdrop(backdrop) frame:SetBackdropColor(0, 0, 0, .9) frame:SetScript("OnEvent", OnEvent) frame:RegisterEvent("CANCEL_LOOT_ROLL") frame:Hide() local button = CreateFrame("Button", nil, frame) button:SetPoint("LEFT", 5, 0) button:SetWidth(24) button:SetHeight(24) button:SetNormalTexture("Interface\\Buttons\\UI-Quickslot2") button:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square") button:GetHighlightTexture():SetBlendMode("ADD") button:SetScript("OnEnter", SetItemTip) button:SetScript("OnLeave", HideTip2) button:SetScript("OnUpdate", ItemOnUpdate) button:SetScript("OnClick", LootClick) frame.button = button local buttonborder = CreateFrame("Frame", nil, button) buttonborder:SetWidth(32) buttonborder:SetHeight(32) buttonborder:SetPoint("CENTER", button, "CENTER") buttonborder:SetBackdrop(backdrop) buttonborder:SetBackdropColor(1, 1, 1, 0) frame.buttonborder = buttonborder local tfade = frame:CreateTexture(nil, "BORDER") tfade:SetPoint("TOPLEFT", frame, "TOPLEFT", 4, -4) tfade:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -4, 4) tfade:SetTexture("Interface\\ChatFrame\\ChatFrameBackground") tfade:SetBlendMode("ADD") tfade:SetGradientAlpha("VERTICAL", .1, .1, .1, 0, .25, .25, .25, 1) local status = CreateFrame("StatusBar", nil, frame) status:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -4, -4) status:SetPoint("BOTTOM", frame, "BOTTOM", 0, 4) status:SetPoint("LEFT", frame.button, "RIGHT", -1, 0) status:SetScript("OnUpdate", StatusUpdate) status:SetFrameLevel(status:GetFrameLevel()-1) status:SetStatusBarTexture("Interface\\AddOns\\teksLoot\\DarkBottom.tga") status:SetStatusBarColor(.8, .8, .8, .9) status.parent = frame frame.status = status local spark = frame:CreateTexture(nil, "OVERLAY") spark:SetWidth(14) spark:SetHeight(35) spark:SetTexture("Interface\\CastingBar\\UI-CastingBar-Spark") spark:SetBlendMode("ADD") status.spark = spark local need, needtext = CreateRollButton(frame, "Interface\\Buttons\\UI-GroupLoot-Dice-Up", "Interface\\Buttons\\UI-GroupLoot-Dice-Highlight", "Interface\\Buttons\\UI-GroupLoot-Dice-Down", 1, NEED, "LEFT", frame.button, "RIGHT", 5, -1) local greed, greedtext = CreateRollButton(frame, "Interface\\Buttons\\UI-GroupLoot-Coin-Up", "Interface\\Buttons\\UI-GroupLoot-Coin-Highlight", "Interface\\Buttons\\UI-GroupLoot-Coin-Down", 2, GREED, "LEFT", need, "RIGHT", 0, -1) local de, detext de, detext = CreateRollButton(frame, "Interface\\Buttons\\UI-GroupLoot-DE-Up", "Interface\\Buttons\\UI-GroupLoot-DE-Highlight", "Interface\\Buttons\\UI-GroupLoot-DE-Down", 3, ROLL_DISENCHANT, "LEFT", greed, "RIGHT", 0, -1) local pass, passtext = CreateRollButton(frame, "Interface\\Buttons\\UI-GroupLoot-Pass-Up", nil, "Interface\\Buttons\\UI-GroupLoot-Pass-Down", 0, PASS, "LEFT", de or greed, "RIGHT", 0, 2.2) frame.needbutt, frame.greedbutt, frame.disenchantbutt = need, greed, de frame.need, frame.greed, frame.pass, frame.disenchant = needtext, greedtext, passtext, detext local bind = frame:CreateFontString() bind:SetPoint("LEFT", pass, "RIGHT", 3, 1) bind:SetFont("Fonts\\FRIZQT__.TTF", 12, "THICKOUTLINE") frame.fsbind = bind local loot = frame:CreateFontString(nil, "ARTWORK", "GameFontNormalSmall") loot:SetPoint("LEFT", bind, "RIGHT", 0, .12) loot:SetPoint("RIGHT", frame, "RIGHT", -5, 0) loot:SetHeight(16) loot:SetJustifyH("LEFT") frame.fsloot = loot frame.rolls = {} return frame end local anchor = CreateFrame("Button", nil, UIParent) anchor:SetWidth(300) anchor:SetHeight(22) anchor:SetBackdrop(backdrop) anchor:SetBackdropColor(0.25, 0.25, 0.25, 1) local label = anchor:CreateFontString(nil, "ARTWORK", "GameFontNormalSmall") label:SetAllPoints(anchor) label:SetText("teksLoot") anchor:SetScript("OnClick", anchor.Hide) anchor:SetScript("OnDragStart", anchor.StartMoving) anchor:SetScript("OnDragStop", function(self) self:StopMovingOrSizing() self.db.x, self.db.y = self:GetCenter() end) anchor:SetMovable(true) anchor:EnableMouse(true) anchor:RegisterForDrag("LeftButton") anchor:RegisterForClicks("RightButtonUp") anchor:Hide() local frames = {} local f = CreateRollFrame() -- Create one for good measure f:SetPoint("TOPLEFT", next(frames) and frames[#frames] or anchor, "BOTTOMLEFT", 0, -4) table.insert(frames, f) local function GetFrame() for i,f in ipairs(frames) do if not f.rollid then return f end end local f = CreateRollFrame() f:SetPoint("TOPLEFT", next(frames) and frames[#frames] or anchor, "BOTTOMLEFT", 0, -4) table.insert(frames, f) return f end local function START_LOOT_ROLL(rollid, time) if cancelled_rolls[rollid] then return end local f = GetFrame() f.rollid = rollid f.time = time for i in pairs(f.rolls) do f.rolls[i] = nil end f.need:SetText(0) f.greed:SetText(0) f.pass:SetText(0) f.disenchant:SetText(0) local texture, name, count, quality, bop, canNeed, canGreed, canDisenchant = GetLootRollItemInfo(rollid) f.button:SetNormalTexture(texture) f.button.link = GetLootRollItemLink(rollid) if canNeed then f.needbutt:Enable() else f.needbutt:Disable() end if canGreed then f.greedbutt:Enable() else f.greedbutt:Disable() end if canDisenchant then f.disenchantbutt:Enable() else f.disenchantbutt:Disable() end SetDesaturation(f.needbutt:GetNormalTexture(), not canNeed) SetDesaturation(f.greedbutt:GetNormalTexture(), not canGreed) SetDesaturation(f.disenchantbutt:GetNormalTexture(), not canDisenchant) f.fsbind:SetText(bop and "æ¾ç»" or "è£ ç»") f.fsbind:SetVertexColor(bop and 1 or .3, bop and .3 or 1, bop and .1 or .3) local color = ITEM_QUALITY_COLORS[quality] f.fsloot:SetVertexColor(color.r, color.g, color.b) f.fsloot:SetText(name) f:SetBackdropBorderColor(color.r, color.g, color.b, 1) f.buttonborder:SetBackdropBorderColor(color.r, color.g, color.b, 1) f.status:SetStatusBarColor(color.r, color.g, color.b, .7) f.status:SetMinMaxValues(0, time) f.status:SetValue(time) f:SetPoint("CENTER", WorldFrame, "CENTER") f:Show() end local function ParseRollChoice(msg) for i,v in pairs(rollpairs) do local _, _, playername, itemname = string.find(msg, i) if playername and itemname and playername ~= "Everyone" then return playername, itemname, v end end end local in_soviet_russia = (GetLocale() == "ruRU") local function CHAT_MSG_LOOT(msg) local playername, itemname, rolltype = ParseRollChoice(msg) if playername and itemname and rolltype then if in_soviet_russia and rolltype ~= "pass" then itemname, playername = playername, itemname end for _,f in ipairs(frames) do if f.rollid and f.button.link == itemname and not f.rolls[playername] then f.rolls[playername] = rolltype f[rolltype]:SetText(tonumber(f[rolltype]:GetText()) + 1) return end end end end anchor:RegisterEvent("ADDON_LOADED") anchor:SetScript("OnEvent", function(frame, event, addon) -- if addon ~= "teksLoot" then return end anchor:UnregisterEvent("ADDON_LOADED") anchor:RegisterEvent("START_LOOT_ROLL") anchor:RegisterEvent("CHAT_MSG_LOOT") UIParent:UnregisterEvent("START_LOOT_ROLL") UIParent:UnregisterEvent("CANCEL_LOOT_ROLL") anchor:SetScript("OnEvent", function(frame, event, ...) if event == "CHAT_MSG_LOOT" then return CHAT_MSG_LOOT(...) else return START_LOOT_ROLL(...) end end) if not teksLootDB then teksLootDB = {} end anchor.db = teksLootDB anchor:SetPoint("CENTER", UIParent, anchor.db.x and "BOTTOMLEFT" or "CENTER", anchor.db.x or -200, anchor.db.y or 0) end) SlashCmdList["TEKSLOOT"] = function() if anchor:IsVisible() then anchor:Hide() else anchor:Show() end end SLASH_TEKSLOOT1 = "/teksloot"