Compare with Previous | Blame | View Log
EEKarma = EERaidAdmin:NewModule("EEKarma", "AceConsole-3.0", "AceEvent-3.0", "AceComm-3.0") local L = LibStub("AceLocale-3.0"):GetLocale("EEKarma") --local EPGP = LibStub("EPGP"); local db local __IsDebugging = 0 local __raidActiveGroups = EERaidAdmin.__raidActiveGroups local __raidActivePlayers = EERaidAdmin.__raidActivePlayers local ServerDateTime = EERaidAdmin.ServerDateTime local SelectedMassTarget = 1 local dbkarma = nil -- 1 - item, 2 - periodic, 3 - special ---------- local function _debug(msg, fatal) if __IsDebugging == 1 or fatal then EEKarma:Print("|cffdd0000debug: "..msg.."|r") end end local function _color(r, g, b, msg) if type(r) == "table" then if r.r then r, g, b = r.r, r.g, r.b else r, g, b = unpack(r) end end t_color = string.format("|cff%02x%02x%02x", r*255, g*255, b*255) if msg ~= '' then return t_color..msg..'|r' else return t_color end end local function _message(msg, label) local output = "" output = _color(0,1,1, 'EEKarma: ') if label then output = output.._color(0,0.7,0.7, label..': ') end output = output..msg print(output) end local function __________() -- ignore, IDE cheat end function EEKarma:PLAYER_TARGET_CHANGED() if UnitExists("target") and UnitIsPlayer("target") then local _, class = UnitClass("target") self.ButtonSingleKarma:SetText("ÐÑдаÑÑ ".._color(RAID_CLASS_COLORS[class].r, RAID_CLASS_COLORS[class].g, RAID_CLASS_COLORS[class].b, UnitName("target"))) self.ButtonSingleKarma:Enable() else self.ButtonSingleKarma:SetText("ÐÐµÑ Ñели") self.ButtonSingleKarma:Disable() end local size = self.ButtonSingleKarma:GetTextWidth()+30 if size < 80 then size = 80 end self.ButtonSingleKarma:SetWidth(size) end local function __________() -- ignore, IDE cheat end function EEKarma:KarmaParseString(karmastring) _debug("KarmaParseString") if not karmastring then _debug("> ÐÐ»Ð¾Ñ Ð¾Ð¹ аÑгÑменÑ: karmastring", 1); return false; end if karmastring ~= 'dirty' then local t_date, t_type, t_karma, t_message = strsplit(";", karmastring, 4) t_type = tonumber(t_type) t_karma = tonumber(t_karma) return t_date, t_type, t_karma, t_message else return nil end end function EEKarma:KarmaGetTotal(player) _debug("KarmaGet") local ep, gp, main = EPGP:GetEPGP(player); if (not ep or not gp) then return 0; elseif (gp < 50) then return 1; else --_debug("KarmaGet: "..(floor(ep/gp)), 1) return floor(ep/gp); end; end function EEKarma:KarmaAdd(player, karma, karmatype, message, verbose) -- _debug("KarmaAdd for"..player.." karma: "..karma.."; message: "..message, 1) -- checks if not player then _debug("> ÐÐ»Ð¾Ñ Ð¾Ð¹ аÑгÑменÑ: player", 1); return false; end if not karma then _debug("> ÐÐ»Ð¾Ñ Ð¾Ð¹ аÑгÑменÑ: karma", 1); return false; end if not karmatype then _debug("> ÐÐ»Ð¾Ñ Ð¾Ð¹ аÑгÑменÑ: karmatype", 1); return false; end if not message then _debug("> ÐÐ»Ð¾Ñ Ð¾Ð¹ аÑгÑменÑ: message", 1); return false; end local player, karma, karmatype, message = strtrim(player), strtrim(karma), strtrim(karmatype), strtrim(message) if not string.find(karma, "^%s*[+-]*[%d]+%s*$") then _debug(">> каÑма должна бÑÑÑ ÑиÑлом", 1); return false; end if not string.find(karmatype, "^%s*[%d]+%s*$") then _debug(">> Ñип каÑÐ¼Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ ÑиÑлом", 1); return false; end if strlen(message) == 0 then _debug(">> комменÑаÑий обÑзаÑелен", 1); return false; end karma = tonumber(karma); karmatype = tonumber(karmatype); -- Saving EPGP record -- for ep,gp in gmatch(epgpString, "(%d+),(%d+)") do -- _debug("> find player "..player.." "..ep..":"..gp, 1) if (karmatype == 1) then -- NEED MAIN (Use GP) EPGP:IncGPBy(player, message, karma); elseif (karmatype == 2) then -- NEED OFF (Use EP) EPGP:IncEPBy(player, message, -karma); elseif (karmatype == 3) then -- DisEnchant -- ?? elseif (karmatype == 0 and not (karma == 0)) then -- Wrong GREED _message("wrong choise for non zero EP/GP for "..player, "Error") else -- GREED (Free) -- EPGP:IncEPBy(player, message, 0); end --local ep, gp, main = EPGP:GetEPGP(player); --_debug("> new player "..player.." EPGP is "..ep.."/"..gp) return true end function EEKarma:KarmaMassAdd(target, karma, karmatype, message) _debug("KarmaMassAdd") ---------- Validations if not target then _debug("> Ð¿Ð»Ð¾Ñ Ð¾Ð¹ аÑгÑменÑ: target", 1); return false; end if not karma then _debug("> Ð¿Ð»Ð¾Ñ Ð¾Ð¹ аÑгÑменÑ: karma", 1); return false; end if not karmatype then _debug("> Ð¿Ð»Ð¾Ñ Ð¾Ð¹ аÑгÑменÑ: karmatype", 1); return false; end if not message then _debug("> Ð¿Ð»Ð¾Ñ Ð¾Ð¹ аÑгÑменÑ: message", 1); return false; end local target = string.lower(target) local karma = karma local karmatype = karmatype local message = message if target ~= "guild" and target ~= "raid" then _debug("> invalid target", 1); return false; end if not string.find(karma, "^%s*[+-]*[%d]+%s*$") then _debug(">> каÑма должна бÑÑÑ ÑиÑлом", 1); return false; end if not string.find(karmatype, "^%s*[%d]+%s*$") then _debug(">> Ñип каÑÐ¼Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ ÑиÑлом", 1); return false; end if strlen(message) == 0 then _debug(">> комменÑаÑий обÑзаÑелен", 1); return false; end karma = tonumber(karma) karmatype = tonumber(karmatype) if target == "guild" then _message(target..", "..karma..", "..message, "ÐаÑма вÑдана") for i = 1, GetNumGuildMembers(true) do local name, _, _, _, _, _, _, _, online, status, _ = GetGuildRosterInfo(i) if online then -- OK OK and status ~= L["<AFK>"] self:KarmaAdd(name, karma, karmatype, message, false) end end else _message(target..", "..karma..", "..message, "ÐаÑма вÑдана") for i = 1, GetNumRaidMembers() do local name, _, _, _, _, _, _, online, _, _, _ = GetRaidRosterInfo(i) if online then self:KarmaAdd(name, karma, karmatype, message, false) end end end return true end function EEKarma:SendMassNotify(terget) _debug("SendMassNotify") if target~="guild" and target~="raid" then _debug("ÐевеÑÐ½Ð°Ñ ÑÐµÐ»Ñ Ð´Ð»Ñ Ð¼Ð°ÑÑ-оповеÑениÑ"); return false; end if target=="guild" then for i=1, GetNumGuildMembers(false) do local name, _, _, _, _, _, _, _, online, _, _ = GetGuildRosterInfo(i) if online then self:SendCommMessage("LSRA", "YOURKARMA;"..self:KarmaGetTotal(name), "WHISPER", name) end end elseif target=="raid" then if LSRaid:IsRaidActive() then for i=1, GetNumRaidMembers() do local name, _, _, _, _, _, _, online, _, _, _ = GetRaidRosterInfo(i) if online then self:SendCommMessage("LSRA", "YOURKARMA;"..self:KarmaGetTotal(name), "WHISPER", name) end end else _message("ÐÑ Ð½Ðµ в Ñейде.") end end end local function __________() -- ignore, IDE cheat end function EEKarma:DBCreate(name) return true end function EEKarma:DBUse(name) return true end function EEKarma:DBList() return true end function EEKarma:DBPrune(candidate) return true end function EEKarma:DBMigrate() return true end function EEKarma:DBCompact() return true end function EEKarma:DBActive() return true end local function __________() -- ignore, IDE cheat end function EEKarma:MassTarget_Select() _debug("MassTarget_Select") local ndb=this:GetID() UIDropDownMenu_SetSelectedID(self.MassTarget, ndb) SelectedMassTarget=ndb end function EEKarma:MassTarget_Initialize() _debug("MassTarget_Initialize") info = {} -- info.text = "Рейд" info.checked = 1 == SelectedMassTarget info.func = function() EEKarma:MassTarget_Select() end UIDropDownMenu_AddButton(info) -- info.text = "ÐилÑдиÑ" info.checked = 2 == SelectedMassTarget info.func = function() EEKarma:MassTarget_Select() end UIDropDownMenu_AddButton(info) end function EEKarma:CreateFrames() self.Anchor = CreateFrame("Frame", nil, UIParent) self.Anchor:SetScript("OnShow", function() EEKarma:OnShow() end ) self.Anchor:SetScript("OnHide", function() EEKarma:OnHide() end ) self.Anchor:SetFrameStrata("HIGH") local SingleKarmaLabel = self.Anchor:CreateFontString(nil,"ARTWORK","GameFontNormal") SingleKarmaLabel:SetText("ÐндивидÑалÑÐ½Ð°Ñ ÑаздаÑа") SingleKarmaLabel:SetPoint("TOPLEFT",self.Anchor,"TOPLEFT",30,-45) self.SingleKarma = CreateFrame("EditBox", "SingleKarma", self.Anchor, "InputBoxTemplate") self.SingleKarma:SetPoint("TOPLEFT", self.Anchor, "TOPLEFT", 30, -60) self.SingleKarma:SetWidth(40) self.SingleKarma:SetHeight(22) self.SingleKarma:SetAutoFocus(false) self.SingleKarma:ClearFocus() self.SingleMessage = CreateFrame("EditBox", "SingleMessage", self.Anchor, "InputBoxTemplate") self.SingleMessage:SetPoint("LEFT", self.SingleKarma, "RIGHT", 10, 0) self.SingleMessage:SetWidth(240) self.SingleMessage:SetHeight(22) self.SingleMessage:SetAutoFocus(false) self.SingleMessage:ClearFocus() self.ButtonSingleKarma = CreateFrame("Button",nil,self.Anchor,"OptionsButtonTemplate") self.ButtonSingleKarma:SetHeight(26) self.ButtonSingleKarma:SetScript("OnClick", function() EEKarma:KarmaAdd(UnitName("target"), EEKarma.SingleKarma:GetText(), "3", EEKarma.SingleMessage:GetText()) EEKarma.SingleKarma:SetText("") EEKarma.SingleMessage:SetText("") end ) self.ButtonSingleKarma:SetPoint("LEFT", self.SingleMessage, "RIGHT", 20, 0) local MassKarmaLabel = self.Anchor:CreateFontString(nil,"ARTWORK","GameFontNormal") MassKarmaLabel:SetText("ÐаÑÑÐ¾Ð²Ð°Ñ ÑаздаÑа") MassKarmaLabel:SetPoint("TOPLEFT", self.Anchor, "TOPLEFT", 30, -105) self.MassKarma = CreateFrame("EditBox", "MassKarma", self.Anchor, "InputBoxTemplate") self.MassKarma:SetPoint("TOPLEFT", self.Anchor, "TOPLEFT", 30, -120) self.MassKarma:SetWidth(40) self.MassKarma:SetHeight(22) self.MassKarma:SetAutoFocus(false) self.MassKarma:ClearFocus() self.MassMessage = CreateFrame("EditBox", "MassMessage", self.Anchor, "InputBoxTemplate") self.MassMessage:SetPoint("LEFT", self.MassKarma, "RIGHT", 10, 0) self.MassMessage:SetWidth(240) self.MassMessage:SetHeight(22) self.MassMessage:SetAutoFocus(false) self.MassMessage:ClearFocus() self.MassTarget = CreateFrame("Button","MassTarget",self.Anchor,"UIDropDownMenuTemplate") self.MassTarget:SetScript("OnShow", function() UIDropDownMenu_Initialize(self.MassTarget, self.MassTarget_Initialize) UIDropDownMenu_SetSelectedID(self.MassTarget, SelectedMassTarget) UIDropDownMenu_SetWidth(self.MassTarget, 90) end ) self.MassTarget:SetPoint("LEFT", self.MassMessage, "RIGHT", -10, -3) self.ButtonMassKarma = CreateFrame("Button",nil,self.Anchor, "OptionsButtonTemplate") self.ButtonMassKarma:SetHeight(26) self.ButtonMassKarma:SetText("ÐÑдаÑÑ") self.ButtonMassKarma:SetScript("OnClick", function() -- TODO: magic numbers :/ if SelectedMassTarget == 1 then EEKarma:KarmaMassAdd("raid", EEKarma.MassKarma:GetText(), "3", EEKarma.MassMessage:GetText()) else EEKarma:KarmaMassAdd("guild", EEKarma.MassKarma:GetText(), "3", EEKarma.MassMessage:GetText()) end EEKarma.MassKarma:SetText("") EEKarma.MassMessage:SetText("") end ) self.ButtonMassKarma:SetPoint("LEFT", self.MassMessage, "RIGHT", 135, 0) -- self.KarmaStartRaid = CreateFrame("Button", nil, self.Anchor, "OptionsButtonTemplate") -- self.KarmaStartRaid:SetWidth(120) -- self.KarmaStartRaid:SetHeight(26) -- self.KarmaStartRaid:SetText("ÐаÑало Ñейда") -- self.KarmaStartRaid:SetScript("OnClick", function() -- EEKarma.MassKarma:SetText("2") -- EEKarma.MassMessage:SetText("ÐаÑма за наÑало Ñейда: "..GetRealZoneText()) -- end ) -- self.KarmaStartRaid:SetPoint("TOPLEFT", self.Anchor, "TOPLEFT", 20, -170) -- -- self.KarmaStopRaid = CreateFrame("Button", nil, self.Anchor, "OptionsButtonTemplate") -- self.KarmaStopRaid:SetWidth(120) -- self.KarmaStopRaid:SetHeight(26) -- self.KarmaStopRaid:SetText("ÐÐ¾Ð½ÐµÑ Ñейда") -- self.KarmaStopRaid:SetScript("OnClick", function() -- EEKarma.MassKarma:SetText("2") -- EEKarma.MassMessage:SetText("ÐаÑма за ÐºÐ¾Ð½ÐµÑ Ñейда") -- end ) -- self.KarmaStopRaid:SetPoint("TOPLEFT", self.KarmaStartRaid, "BOTTOMLEFT", 0, -5) end function EEKarma:OnShow() _debug("OnShow") end function EEKarma:OnHide() _debug("OnHide") end function EEKarma:OnInitialize() _debug("OnInitialize") --self.db = EERaidAdmin:GetDatabaseNamespace("EERaidAdminDB") self.db = LibStub("AceDB-3.0"):New("EERaidAdminDB") db = self.db.global self:DBUse(db['ActiveDB']) self:RegisterComm("LSRC") self:RegisterEvent("PLAYER_TARGET_CHANGED") -- self:RegisterEvent("RAID_ROSTER_UPDATE") -- self:RegisterEvent("LOOT_OPENED") -- self:RegisterEvent("LOOT_CLOSED") -- self:RegisterEvent("LOOT_SLOT_CLEARED") -- self:RegisterEvent("CHAT_MSG_SYSTEM") self:CreateFrames() self:PLAYER_TARGET_CHANGED() self.Anchor:Hide() end function EEKarma:OnCommReceived(prefix, message, distribution, sender) _debug("OnCommReceived") local tokens = { strsplit(";", message) } if prefix == "LSRC" then if tokens[1] == "GETKARMA" then local lootmethod, masterlooterPartyID, _ = GetLootMethod(); -- check if ML if lootmethod == "master" and masterlooterPartyID == 0 and EERaid:IsRaidActive() then self:SendCommMessage("LSRA", "YOURKARMA;"..self:KarmaGetTotal(sender), "WHISPER", sender) end end end end function EEKarma:OnEnable() _debug("OnEnable") end function EEKarma:OnDisable() _debug("OnDisable") end