Mercurial > wow > raid-target-tactics
comparison Main.lua @ 11:d2cbfe498c4d
first beta
| author | Jay Bird <a4blank@yahoo.com> |
|---|---|
| date | Sat, 04 Dec 2010 05:53:52 +0300 |
| parents | f93b554bb7cf |
| children | cc98f28b1c7c |
comparison
equal
deleted
inserted
replaced
| 10:f93b554bb7cf | 11:d2cbfe498c4d |
|---|---|
| 1 | 1 |
| 2 | 2 |
| 3 RTT = LibStub("AceAddon-3.0"):NewAddon("RaidTargetTactics", "AceConsole-3.0") | 3 RTT = LibStub("AceAddon-3.0"):NewAddon("RaidTargetTactics", "AceConsole-3.0", "AceEvent-3.0") |
| 4 local _G = _G | |
| 4 local L = LibStub("AceLocale-3.0"):GetLocale("RaidTargetTactics") | 5 local L = LibStub("AceLocale-3.0"):GetLocale("RaidTargetTactics") |
| 5 | |
| 6 | |
| 7 local LDB = LibStub("LibDataBroker-1.1", true) | 6 local LDB = LibStub("LibDataBroker-1.1", true) |
| 8 local LDBIcon = LibStub("LibDBIcon-1.0", true) | 7 local LDBIcon = LibStub("LibDBIcon-1.0", true) |
| 9 local AceGUI = LibStub("AceGUI-3.0") | 8 local Completion = LibStub("AceGUI-3.0-Completing-EditBox"); |
| 9 | |
| 10 Completion:Register("Raid", -1, 0) | |
| 11 local GetAutoCompleteResults_original = _G.GetAutoCompleteResults | |
| 12 _G.GetAutoCompleteResults = function(text, include, exclude, results, position) | |
| 13 if include == -1 then -- special hack for Raid members and self | |
| 14 local users = RTT.partyInfo:GetUsers() | |
| 15 local result = {} | |
| 16 for _, name in ipairs(users) do | |
| 17 if name:find(text) == 1 then | |
| 18 table.insert(result, name) | |
| 19 end | |
| 20 if #result > results then | |
| 21 break | |
| 22 end | |
| 23 end | |
| 24 return unpack(result) | |
| 25 else | |
| 26 return GetAutoCompleteResults_original(text, include, exclude, results, position) | |
| 27 end | |
| 28 end | |
| 29 | |
| 10 | 30 |
| 11 local RTTIcon = LibStub("LibDataBroker-1.1"):NewDataObject("RTTIcon", { | 31 local RTTIcon = LibStub("LibDataBroker-1.1"):NewDataObject("RTTIcon", { |
| 12 type = "data source", | 32 type = "data source", |
| 13 text = "Raid Target Tactics", | 33 text = "Raid Target Tactics", |
| 14 icon = "Interface\\TARGETINGFRAME\\UI-RaidTargetingIcon_8", | 34 icon = "Interface\\TARGETINGFRAME\\UI-RaidTargetingIcon_8", |
| 15 OnClick = function() RTT:OnIconClick() end, | 35 OnClick = function(frame, button) RTT:OnIconClick(frame, button) end, |
| 16 OnTooltipShow = function(tooltip) | 36 OnTooltipShow = function(tooltip) |
| 17 tooltip:AddLine("Raid Target Tactics") | 37 tooltip:AddLine("Raid Target Tactics") |
| 18 tooltip:AddLine(L.Minimap_Icon_Tooltip) | 38 tooltip:AddLine(L.Minimap_Icon_Tooltip) |
| 19 end, | 39 end, |
| 20 }) | 40 }) |
| 23 profile = { | 43 profile = { |
| 24 visible = true, | 44 visible = true, |
| 25 minimap = { | 45 minimap = { |
| 26 hide = false, | 46 hide = false, |
| 27 }, | 47 }, |
| 48 setups = {}, | |
| 49 locked = false, | |
| 28 }, | 50 }, |
| 29 } | 51 } |
| 30 | 52 |
| 31 function RTT:OnInitialize() | 53 function RTT:OnInitialize() |
| 32 self.db = LibStub("AceDB-3.0"):New("TacticsSettings", defaults, true) | 54 self.db = LibStub("AceDB-3.0"):New("TacticsSettings", defaults, true) |
| 55 self.partyInfo = PartyInfo() | |
| 56 self.nameDialog = NameDialog(self:GetSetupNames()) | |
| 33 | 57 |
| 34 LDBIcon:Register("RTTIcon", RTTIcon, self.db.profile.minimap) | 58 LDBIcon:Register("RTTIcon", RTTIcon, self.db.profile.minimap) |
| 35 self:InitFrame() | 59 self:InitFrame() |
| 60 self:BindEvents() | |
| 61 self.nameDialog:InitDialog() | |
| 62 self.partyInfo:Update() | |
| 36 if self.f:IsShown() ~= self.db.profile.visible then | 63 if self.f:IsShown() ~= self.db.profile.visible then |
| 37 if self.db.profile.visible then | 64 if self.db.profile.visible then |
| 38 self:ShowFrame() | 65 self:ShowFrame() |
| 39 else | 66 else |
| 40 self:HideFrame() | 67 self:HideFrame() |
| 41 end | 68 end |
| 42 end | 69 end |
| 70 if self.db.profile.locked then | |
| 71 self.f:SetMovable(false) | |
| 72 self.f:EnableMouse(false) | |
| 73 end | |
| 74 end | |
| 75 | |
| 76 function RTT:GetSetupNames() | |
| 77 local result = {} | |
| 78 for name, _ in pairs(self.db.profile.setups) do | |
| 79 table.insert(result, name) | |
| 80 end | |
| 81 return result | |
| 82 end | |
| 83 | |
| 84 function RTT:BindEvents() | |
| 85 self:RegisterEvent("PARTY_MEMBERS_CHANGED") | |
| 86 self:RegisterEvent("RAID_ROSTER_UPDATE") | |
| 87 end | |
| 88 | |
| 89 function RTT:PARTY_MEMBERS_CHANGED() | |
| 90 self.partyInfo:Update() | |
| 91 end | |
| 92 | |
| 93 function RTT:RAID_ROSTER_UPDATE() | |
| 94 self.partyInfo:Update() | |
| 43 end | 95 end |
| 44 | 96 |
| 45 function RTT:InitFrame() | 97 function RTT:InitFrame() |
| 46 self.f = CreateFrame("Frame", nil, UIParent) | 98 self.f = CreateFrame("Frame", "__RTT_MAIN", UIParent) |
| 47 self.f:SetWidth(300) | 99 self.f:SetWidth(300) |
| 48 self.f:SetHeight(200) | 100 self.f:SetHeight(270) |
| 49 self.f:SetAlpha(0.8) | 101 self.f:SetAlpha(0.8) |
| 102 self.f:SetMovable(true) | |
| 103 self.f:EnableMouse(true) | |
| 104 self.f:RegisterForDrag("LeftButton") | |
| 105 self.f:SetScript("OnDragStart", self.f.StartMoving) | |
| 106 self.f:SetScript("OnDragStop", self.f.StopMovingOrSizing) | |
| 50 self.f:SetPoint("LEFT", UIParent, "LEFT", 10, 0) | 107 self.f:SetPoint("LEFT", UIParent, "LEFT", 10, 0) |
| 51 --[[self.f:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", | 108 --[[self.f:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", |
| 52 edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", | 109 edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", |
| 53 tile = true, tileSize = 16, edgeSize = 16, | 110 tile = true, tileSize = 16, edgeSize = 16, |
| 54 insets = { left = 4, right = 4, top = 4, bottom = 4 }}) | 111 insets = { left = 4, right = 4, top = 4, bottom = 4 }}) |
| 74 } | 131 } |
| 75 self.f:SetBackdrop(backdrop) | 132 self.f:SetBackdrop(backdrop) |
| 76 self.f:SetFrameStrata("HIGH") | 133 self.f:SetFrameStrata("HIGH") |
| 77 --self.f:SetBackdropColor(0, 0, 0, 0.5) | 134 --self.f:SetBackdropColor(0, 0, 0, 0.5) |
| 78 | 135 |
| 136 local str1 = self.f:CreateFontString() | |
| 137 str1:SetFontObject(GameFontHighlightSmall) | |
| 138 str1:SetPoint("TOPLEFT", 45, -15) | |
| 139 str1:SetText(L.Action .. ":") | |
| 140 str1:SetTextColor(YELLOW_FONT_COLOR.r, YELLOW_FONT_COLOR.g, YELLOW_FONT_COLOR.b) | |
| 141 str1:Show() | |
| 142 | |
| 143 local str1 = self.f:CreateFontString() | |
| 144 str1:SetFontObject(GameFontHighlightSmall) | |
| 145 str1:SetPoint("TOPLEFT", 175, -15) | |
| 146 str1:SetText(L.Player .. ":") | |
| 147 str1:SetTextColor(YELLOW_FONT_COLOR.r, YELLOW_FONT_COLOR.g, YELLOW_FONT_COLOR.b) | |
| 148 str1:Show() | |
| 149 | |
| 150 self.icons = {} | |
| 79 self.fields = {} | 151 self.fields = {} |
| 80 self.selects = {} | 152 self.selects = {} |
| 81 for num, icon in ipairs(RaidIcons) do | 153 for num, icon in ipairs(RaidIcons) do |
| 82 icon:draw(self.f, 20, num * -20) | 154 self.icons[num] = icon |
| 83 | 155 icon:draw(self.f, 16, (num - 1) * -25 - 30) |
| 84 local field = CreateFrame("EditBox", "__RTT_EditBox_" .. tostring(num), self.f, "InputBoxTemplate") | 156 |
| 85 field:SetAutoFocus(false) | 157 local field = RoleField() |
| 86 field:SetFontObject(ChatFontNormal) | 158 field:draw(self.f, 45, (num -1) * -25 - 30) |
| 87 field:SetWidth(100) | 159 self.fields[num] = field |
| 88 field:SetHeight(16) | 160 |
| 89 field:SetTextInsets(0, 0, 3, 3) | 161 local userSelect = UserSelect() |
| 90 field:SetPoint("TOPLEFT", 40, num * -20) | 162 userSelect:draw(self.f, 170, ((num - 1) * -25) - 30) |
| 91 table.insert(self.fields, field) | 163 self.selects[num] = userSelect |
| 92 field:Show() | 164 end |
| 93 | 165 self.talkButton = CreateFrame("Button", nil, self.f, "OptionsButtonTemplate") |
| 94 local userSelect = AceGUI:Create("Dropdown") | 166 self.talkButton:ClearAllPoints() |
| 95 userSelect.frame:SetParent(self.f) | 167 self.talkButton:SetText(L.Announce) |
| 96 local raid = {} | 168 self.talkButton:SetPoint("TOPLEFT", 170, -230) |
| 97 for i=1, GetNumRaidMembers() do | 169 self.talkButton:SetWidth(102) |
| 98 raid[i] = UnitName("raid" .. i) | 170 self.talkButton:SetScript("OnClick", function() RTT:Announce() end) |
| 99 end | 171 |
| 100 userSelect:SetList(raid) | 172 self.dropdown = CreateFrame("Frame", "__RTT_DROPDOWN", UIParent, "UIDropDownMenuTemplate"); |
| 101 userSelect:SetWidth(100) | 173 UIDropDownMenu_Initialize(self.dropdown, self.InitDropdown, "MENU"); |
| 102 userSelect:SetHeight(16) | 174 end |
| 103 userSelect:SetPoint("TOPLEFT", 160, num * -20) | 175 |
| 104 table.insert(self.selects, userSelect) | 176 function RTT:InitDropdown(level) |
| 105 userSelect.frame:Show() | 177 level = level or 1 |
| 106 end | 178 if (level == 1) then |
| 107 end | 179 local info = UIDropDownMenu_CreateInfo() |
| 108 | 180 info.hasArrow = false |
| 109 function RTT:OnIconClick() | 181 info.notCheckable = false |
| 110 if self.db.profile.visible then | 182 info.text = L.Lock |
| 111 self:HideFrame() | 183 info.func = function() RTT:ToggleMovable() end |
| 184 info.keepShownOnClick = true | |
| 185 info.checked = RTT.db.profile.locked | |
| 186 UIDropDownMenu_AddButton(info, level) | |
| 187 | |
| 188 info.hasArrow = true | |
| 189 info.notCheckable = true | |
| 190 info.text = L.Load | |
| 191 info.value = "load" | |
| 192 info.keepShownOnClick = false | |
| 193 UIDropDownMenu_AddButton(info, level) | |
| 194 | |
| 195 info.hasArrow = false | |
| 196 info.notCheckable = true | |
| 197 info.text = L.Save .. "…" | |
| 198 info.keepShownOnClick = false | |
| 199 local rows = RTT:GetFormData() | |
| 200 if #rows == 0 then | |
| 201 info.disabled = true | |
| 202 else | |
| 203 info.func = function() RTT:AskForSave() end | |
| 204 end | |
| 205 UIDropDownMenu_AddButton(info, level) | |
| 206 end | |
| 207 | |
| 208 if (level == 2 and UIDROPDOWNMENU_MENU_VALUE == "load") then | |
| 209 local info = UIDropDownMenu_CreateInfo(); | |
| 210 for key, setup in pairs(RTT.db.profile.setups) do | |
| 211 info.hasArrow = false | |
| 212 info.notCheckable = true | |
| 213 info.text = key | |
| 214 info.func = function() RTT:Load(key) end | |
| 215 UIDropDownMenu_AddButton(info, level); | |
| 216 end | |
| 217 end | |
| 218 end | |
| 219 | |
| 220 function RTT:AskForSave() | |
| 221 local this = self | |
| 222 self.nameDialog:Show() | |
| 223 self.nameDialog:OnNameChosen(function(name) this:Save(name) end) | |
| 224 end | |
| 225 | |
| 226 function RTT:Save(name) | |
| 227 self.db.profile.setups[name] = self:GetFormData(true) | |
| 228 self.nameDialog:SetInvalidNames(self:GetSetupNames()) | |
| 229 end | |
| 230 | |
| 231 function RTT:Load(name) | |
| 232 local data = self.db.profile.setups[name] | |
| 233 self:SetFormData(data) | |
| 234 end | |
| 235 | |
| 236 function RTT:OnIconClick(frame, button) | |
| 237 if button == "RightButton" then | |
| 238 -- context menu | |
| 239 ToggleDropDownMenu(1, nil, self.dropdown, LDBIcon.objects["RTTIcon"], 0, 0) | |
| 112 else | 240 else |
| 113 self:ShowFrame() | 241 if self.db.profile.visible then |
| 114 end | 242 self:HideFrame() |
| 115 self.db.profile.visible = not self.db.profile.visible | 243 else |
| 244 self:ShowFrame() | |
| 245 end | |
| 246 self.db.profile.visible = not self.db.profile.visible | |
| 247 end | |
| 116 end | 248 end |
| 117 | 249 |
| 118 function RTT:HideFrame() | 250 function RTT:HideFrame() |
| 119 self.f:Hide() | 251 self.f:Hide() |
| 120 end | 252 end |
| 121 | 253 |
| 122 function RTT:ShowFrame() | 254 function RTT:ShowFrame() |
| 123 self.f:Show() | 255 self.f:Show() |
| 124 end | 256 end |
| 125 | 257 |
| 126 | 258 function RTT:ToggleMovable() |
| 127 | 259 if self.f:IsMovable() then |
| 128 | 260 self.f:SetMovable(false) |
| 261 self.f:EnableMouse(false) | |
| 262 self.db.profile.locked = true | |
| 263 else | |
| 264 self.f:SetMovable(true) | |
| 265 self.f:EnableMouse(true) | |
| 266 self.db.profile.locked = false | |
| 267 end | |
| 268 end | |
| 269 | |
| 270 function RTT:GetDefaultChatChannel() | |
| 271 if self.partyInfo.is_in_raid then | |
| 272 return "RAID" | |
| 273 end | |
| 274 if self.partyInfo.is_in_party then | |
| 275 return "PARTY" | |
| 276 end | |
| 277 return nil | |
| 278 end | |
| 279 | |
| 280 function RTT:SetFormData(data) | |
| 281 for idx, row in ipairs(data) do | |
| 282 self.fields[idx]:SetText(row[2]) | |
| 283 self.selects[idx]:SetText(row[3]) | |
| 284 end | |
| 285 end | |
| 286 | |
| 287 function RTT:GetFormData(with_empty) | |
| 288 local result = {} | |
| 289 for idx, icon in ipairs(self.icons) do | |
| 290 local action = strtrim(self.fields[idx]:GetText()) | |
| 291 local player = strtrim(self.selects[idx]:GetText()) | |
| 292 -- Either we want empty rows (for save) | |
| 293 -- Or action or player are filled | |
| 294 if with_empty or (#action > 0 or #player > 0) then | |
| 295 table.insert(result, {icon:GetChatCommand(), | |
| 296 action, | |
| 297 player}) | |
| 298 end | |
| 299 end | |
| 300 return result | |
| 301 end | |
| 302 | |
| 303 function RTT:Announce() | |
| 304 local channel = self:GetDefaultChatChannel() | |
| 305 if channel then | |
| 306 for _, data in ipairs(self:GetFormData()) do | |
| 307 local str = table.concat(data, " — ") | |
| 308 SendChatMessage(str, channel) | |
| 309 end | |
| 310 if UnitName("player") == "Герадд" then | |
| 311 SendChatMessage("Герадд любит тебя!", channel) | |
| 312 end | |
| 313 end | |
| 314 end | |
| 315 | |
| 316 |
