|
skeen@0
|
1 --
|
|
skeen@0
|
2 -- SkeenMelee
|
|
skeen@0
|
3 --
|
|
skeen@0
|
4
|
|
skeen@0
|
5 -- Local table (used to store functions, ect)
|
|
skeen@0
|
6 local SkeenMelee = {}
|
|
skeen@0
|
7
|
|
skeen@0
|
8 SkeenMelee.eventHandler = CreateFrame("Frame")
|
|
skeen@0
|
9 SkeenMelee.eventHandler:SetScript("OnEvent", function(this, event, ...) SkeenMelee.events[event](...) end)
|
|
skeen@0
|
10 --Events to listen to
|
|
skeen@0
|
11 SkeenMelee.eventHandler:RegisterEvent("PLAYER_TARGET_CHANGED")
|
|
skeen@0
|
12 SkeenMelee.eventHandler:RegisterEvent("ADDON_LOADED")
|
|
skeen@0
|
13 --EventHandler Functions
|
|
skeen@0
|
14 --by our eventHandler frame.
|
|
skeen@0
|
15 SkeenMelee.events = {}
|
|
skeen@0
|
16 --Player logged in
|
|
skeen@0
|
17 function SkeenMelee.events.ADDON_LOADED(addon)
|
|
skeen@0
|
18 if (addon ~= "SkeenMelee") then
|
|
skeen@0
|
19 return
|
|
skeen@0
|
20 end
|
|
skeen@0
|
21
|
|
skeen@0
|
22 SkeenMelee:PrepareDatabase()
|
|
skeen@0
|
23 SkeenMelee:CreateGUI()
|
|
skeen@0
|
24 SkeenMelee:UpdateDragability()
|
|
skeen@0
|
25 SkeenMelee:CreateOptionFrame()
|
|
skeen@0
|
26 end
|
|
skeen@0
|
27
|
|
skeen@0
|
28 -- Prepare the Normal database (settings database)
|
|
skeen@0
|
29 -- This is the maintained database, and isn't wiped on each login, like the active one is
|
|
skeen@0
|
30 function SkeenMelee:PrepareDatabase()
|
|
skeen@0
|
31
|
|
skeen@0
|
32 -- If there doesn't exist a database currently
|
|
skeen@7
|
33 if SkeenMeleeDatabase == nil then
|
|
skeen@0
|
34 SkeenMeleeDatabase = {} -- fresh start
|
|
skeen@7
|
35 end
|
|
skeen@7
|
36 if SkeenMeleeDatabase.update_interval == nil then
|
|
skeen@0
|
37 SkeenMeleeDatabase.update_interval = 0.1 -- Fill it with the default value of 0.1 seconds per interval
|
|
skeen@7
|
38 end
|
|
skeen@7
|
39 if SkeenMeleeDatabase.scale == nil then
|
|
skeen@0
|
40 SkeenMeleeDatabase.scale = 1 --100% size
|
|
skeen@7
|
41 end
|
|
skeen@7
|
42 if SkeenMeleeDatabase.locked == nil then
|
|
skeen@0
|
43 SkeenMeleeDatabase.locked = false --Not locked by default
|
|
skeen@7
|
44 end
|
|
skeen@0
|
45 end
|
|
skeen@0
|
46
|
|
skeen@0
|
47 -- Functions Section
|
|
skeen@0
|
48 function SkeenMelee_OnUpdate(self, elapsed)
|
|
skeen@0
|
49 self.TimeSinceLastUpdate = self.TimeSinceLastUpdate + elapsed;
|
|
skeen@0
|
50
|
|
skeen@0
|
51 if (self.TimeSinceLastUpdate > SkeenMeleeDatabase.update_interval) then
|
|
skeen@0
|
52 SkeenMelee:Update()
|
|
skeen@0
|
53 self.TimeSinceLastUpdate = 0;
|
|
skeen@0
|
54 end
|
|
skeen@0
|
55 end
|
|
skeen@0
|
56
|
|
skeen@0
|
57 function SkeenMelee.events.PLAYER_TARGET_CHANGED(...)
|
|
skeen@0
|
58 SkeenMelee:Update()
|
|
skeen@0
|
59 end
|
|
skeen@0
|
60
|
|
skeen@0
|
61 function SkeenMelee:Update()
|
|
skeen@0
|
62 local is_in_melee_range = nil
|
|
skeen@0
|
63 local unit = "target"
|
|
skeen@0
|
64 -- Test class and find a spell accordingly
|
|
skeen@0
|
65 local _, class = UnitClass("player");
|
|
skeen@0
|
66 local meleespell
|
|
skeen@0
|
67
|
|
skeen@0
|
68 -- Choose a melee spell for each class (if any)
|
|
skeen@7
|
69 if (class == "DEATHKNIGHT") then
|
|
skeen@0
|
70 meleespell = "Blood Strike"
|
|
skeen@0
|
71 elseif (class == "DRUID") then
|
|
skeen@0
|
72 meleespell = "Claw"
|
|
skeen@0
|
73 elseif (class == "HUNTER") then
|
|
skeen@0
|
74 meleespell = "Raptor Strike"
|
|
skeen@0
|
75 elseif (class == "PALADIN") then
|
|
skeen@0
|
76 meleespell = "Crusader Strike"
|
|
skeen@0
|
77 elseif (class == "ROGUE") then
|
|
skeen@0
|
78 meleespell = "Sinister Strike"
|
|
skeen@0
|
79 elseif (class == "SHAMAN") then
|
|
skeen@0
|
80 meleespell = "Primal Strike"
|
|
skeen@0
|
81 elseif (class == "WARRIOR") then
|
|
skeen@0
|
82 meleespell = "Strike"
|
|
skeen@0
|
83 else --mage, priest, warlock
|
|
skeen@0
|
84 SkeenMelee:HideFrame()
|
|
skeen@0
|
85 end
|
|
skeen@0
|
86
|
|
skeen@0
|
87 if UnitExists(unit) and UnitIsVisible(unit) then
|
|
skeen@0
|
88 is_in_melee_range = IsSpellInRange(meleespell, unit)
|
|
skeen@0
|
89 end
|
|
skeen@0
|
90 if (is_in_melee_range==1) then --Is in melee range
|
|
skeen@0
|
91 SkeenMelee.infoString:SetText("Melee")
|
|
skeen@0
|
92 SkeenMelee:ShowFrame()
|
|
skeen@0
|
93 elseif (is_in_melee_range==0) then --Is not in melee range
|
|
skeen@0
|
94 SkeenMelee.infoString:SetText("|cffff0000NOT MELEE|r")
|
|
skeen@0
|
95 SkeenMelee:ShowFrame()
|
|
skeen@0
|
96 else --Not even a melee target
|
|
skeen@0
|
97 SkeenMelee:HideFrame()
|
|
skeen@0
|
98 end
|
|
skeen@0
|
99 end
|
|
skeen@0
|
100
|
|
skeen@0
|
101 function SkeenMelee:CreateGUI()
|
|
skeen@11
|
102 local displayFrame = CreateFrame("Frame", nil, UIParent)
|
|
skeen@0
|
103 displayFrame:SetFrameStrata("BACKGROUND")
|
|
skeen@11
|
104 displayFrame:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 32,})
|
|
skeen@11
|
105 displayFrame:SetClampedToScreen(true)
|
|
skeen@11
|
106 displayFrame:SetMovable(true)
|
|
skeen@11
|
107 displayFrame:ClearAllPoints()
|
|
skeen@0
|
108 displayFrame:SetWidth(100)
|
|
skeen@0
|
109 displayFrame:SetHeight(30)
|
|
skeen@11
|
110
|
|
skeen@11
|
111 if SkeenMeleeDatabase.bottom == nil or SkeenMeleeDatabase.left == nil then
|
|
skeen@11
|
112 displayFrame:SetPoint("CENTER")
|
|
skeen@11
|
113 SkeenMeleeDatabase.locked = false
|
|
skeen@11
|
114 else
|
|
skeen@11
|
115 displayFrame:SetPoint("BOTTOMLEFT", SkeenMeleeDatabase.left, SkeenMeleeDatabase.bottom)
|
|
skeen@11
|
116 end
|
|
skeen@0
|
117
|
|
skeen@0
|
118 local infoString = displayFrame:CreateFontString("SkeenMelee_infoString","OVERLAY","GameFontNormal")
|
|
skeen@0
|
119 infoString:SetText("Unknown")
|
|
skeen@0
|
120 infoString:SetPoint("CENTER", 0, 0)
|
|
skeen@0
|
121
|
|
skeen@0
|
122 SkeenMelee.infoString = infoString
|
|
skeen@0
|
123 SkeenMelee.displayFrame = displayFrame
|
|
skeen@0
|
124
|
|
skeen@0
|
125 displayFrame:SetScale(SkeenMeleeDatabase.scale)
|
|
skeen@0
|
126 end
|
|
skeen@0
|
127
|
|
skeen@0
|
128 -- The optionsframe in interface
|
|
skeen@0
|
129 function SkeenMelee:CreateOptionFrame()
|
|
skeen@0
|
130
|
|
skeen@0
|
131 local panel = CreateFrame("FRAME", "SkeenMeleeOptions", UIParent);
|
|
skeen@0
|
132 panel.name = "SkeenMelee";
|
|
skeen@0
|
133
|
|
skeen@0
|
134 local fstring1 = panel:CreateFontString("SkeenMeleeOptions_string1","OVERLAY","GameFontNormal")
|
|
skeen@0
|
135 fstring1:SetText("Lock")
|
|
skeen@0
|
136 fstring1:SetPoint("TOPLEFT", 10, -10)
|
|
skeen@0
|
137
|
|
skeen@0
|
138 local checkbox1 = CreateFrame("CheckButton", "$parent_cb1", panel, "OptionsCheckButtonTemplate")
|
|
skeen@0
|
139 checkbox1:SetWidth(18)
|
|
skeen@0
|
140 checkbox1:SetHeight(18)
|
|
skeen@0
|
141 checkbox1:SetScript("OnClick", function() SkeenMelee:ToggleLocked() end)
|
|
skeen@0
|
142 checkbox1:SetPoint("TOPRIGHT", -10, -10)
|
|
skeen@0
|
143 checkbox1:SetChecked(SkeenMelee:GetLocked())
|
|
skeen@0
|
144
|
|
skeen@0
|
145 local fstring2 = panel:CreateFontString("SkeenMeleeOptions_string2","OVERLAY","GameFontNormal")
|
|
skeen@0
|
146 fstring2:SetText("GUI Scale")
|
|
skeen@0
|
147 fstring2:SetPoint("TOPLEFT", 10, -40)
|
|
skeen@0
|
148
|
|
skeen@0
|
149 local slider2 = CreateFrame("Slider", "$parent_sl2", panel, "OptionsSliderTemplate")
|
|
skeen@0
|
150 slider2:SetMinMaxValues(.5, 1.5)
|
|
skeen@0
|
151 slider2:SetValue(SkeenMelee:GetScale())
|
|
skeen@0
|
152 slider2:SetValueStep(.05)
|
|
skeen@11
|
153 --slider2:SetScript("OnValueChanged", function(self) SkeenMelee:SetScale(self:GetValue()); getglobal(self:GetName() .. "Text"):SetText(string.format("%.0f%%", self:GetValue()*100)) end)
|
|
skeen@11
|
154 --getglobal(slider2:GetName() .. "Low"):SetText("50%")
|
|
skeen@11
|
155 --getglobal(slider2:GetName() .. "High"):SetText("150%")
|
|
skeen@11
|
156 --getglobal(slider2:GetName() .. "Text"):SetText(string.format("%.0f%%", SkeenMelee:GetScale()*100))
|
|
skeen@0
|
157 slider2:SetPoint("TOPRIGHT", -10, -40)
|
|
skeen@0
|
158
|
|
skeen@0
|
159 local fstring3 = panel:CreateFontString("SkeenMeleeOptions_string3","OVERLAY","GameFontNormal")
|
|
skeen@0
|
160 fstring3:SetText("Update Interval (sec)")
|
|
skeen@0
|
161 fstring3:SetPoint("TOPLEFT", 10, -70)
|
|
skeen@0
|
162
|
|
skeen@0
|
163 local slider3 = CreateFrame("Slider", "$parent_sl3", panel, "OptionsSliderTemplate")
|
|
skeen@0
|
164 slider3:SetMinMaxValues(0, 1)
|
|
skeen@0
|
165 slider3:SetValue(SkeenMelee:GetUpdateInterval())
|
|
skeen@0
|
166 slider3:SetValueStep(.1)
|
|
skeen@11
|
167 --slider3:SetScript("OnValueChanged", function(self) SkeenMelee:SetUpdateInterval(self:GetValue()); getglobal(self:GetName() .. "Text"):SetText(string.format("%.1f", self:GetValue())) end)
|
|
skeen@11
|
168 --getglobal(slider3:GetName() .. "Low"):SetText("0")
|
|
skeen@11
|
169 --getglobal(slider3:GetName() .. "High"):SetText("1")
|
|
skeen@11
|
170 --getglobal(slider3:GetName() .. "Text"):SetText(string.format("%.1f", SkeenMelee:GetUpdateInterval()))
|
|
skeen@0
|
171 slider3:SetPoint("TOPRIGHT", -10, -70)
|
|
skeen@0
|
172
|
|
skeen@0
|
173 SkeenMelee.options = panel
|
|
skeen@0
|
174 panel.parent = "Skeen"
|
|
skeen@0
|
175
|
|
skeen@0
|
176 InterfaceOptions_AddCategory(panel);
|
|
skeen@0
|
177 end
|
|
skeen@0
|
178
|
|
skeen@0
|
179 function SkeenMelee:GetLocked()
|
|
skeen@0
|
180 return SkeenMeleeDatabase.locked
|
|
skeen@0
|
181 end
|
|
skeen@0
|
182
|
|
skeen@0
|
183 function SkeenMelee:ToggleLocked()
|
|
skeen@0
|
184 SkeenMeleeDatabase.locked = not SkeenMeleeDatabase.locked
|
|
skeen@0
|
185 SkeenMelee:UpdateDragability()
|
|
skeen@0
|
186 end
|
|
skeen@0
|
187
|
|
skeen@0
|
188 function SkeenMelee:GetScale()
|
|
skeen@0
|
189 return SkeenMeleeDatabase.scale
|
|
skeen@0
|
190 end
|
|
skeen@0
|
191
|
|
skeen@0
|
192 function SkeenMelee:SetScale(num)
|
|
skeen@0
|
193 SkeenMeleeDatabase.scale = num
|
|
skeen@0
|
194 SkeenMelee.displayFrame:SetScale(SkeenMeleeDatabase.scale)
|
|
skeen@0
|
195 end
|
|
skeen@0
|
196
|
|
skeen@0
|
197 function SkeenMelee:GetUpdateInterval()
|
|
skeen@0
|
198 return SkeenMeleeDatabase.update_interval
|
|
skeen@0
|
199 end
|
|
skeen@0
|
200
|
|
skeen@0
|
201 function SkeenMelee:SetUpdateInterval(num)
|
|
skeen@0
|
202 SkeenMeleeDatabase.update_interval = num
|
|
skeen@0
|
203 end
|
|
skeen@0
|
204
|
|
skeen@11
|
205 function SkeenMelee:UpdateDragability()
|
|
skeen@0
|
206 if SkeenMeleeDatabase.locked then
|
|
skeen@0
|
207 SkeenMelee.displayFrame:SetScript("OnMouseDown", nil)
|
|
skeen@0
|
208 SkeenMelee.displayFrame:SetScript("OnMouseUp", nil)
|
|
skeen@0
|
209 SkeenMelee.displayFrame:SetScript("OnDragStop", nil)
|
|
skeen@0
|
210 SkeenMelee.displayFrame:SetBackdropColor(0, 0, 0, 0)
|
|
skeen@0
|
211 SkeenMelee.displayFrame:EnableMouse(false)
|
|
skeen@0
|
212 else
|
|
skeen@0
|
213 SkeenMelee.displayFrame:SetScript("OnMouseDown", function(self) self:StartMoving() end)
|
|
skeen@11
|
214 SkeenMelee.displayFrame:SetScript("OnMouseUp", function(self) self:StopMovingOrSizing(); SkeenMeleeDatabase.bottom = SkeenMelee.displayFrame:GetBottom(); SkeenMeleeDatabase.left = SkeenMelee.displayFrame:GetLeft(); end)
|
|
skeen@11
|
215 SkeenMelee.displayFrame:SetScript("OnDragStop", function(self) self:StopMovingOrSizing(); SkeenMeleeDatabase.bottom = SkeenMelee.displayFrame:GetBottom(); SkeenMeleeDatabase.left = SkeenMelee.displayFrame:GetLeft(); end)
|
|
skeen@0
|
216 SkeenMelee.displayFrame:SetBackdropColor(0, 0, 0, .4)
|
|
skeen@0
|
217 SkeenMelee.displayFrame:EnableMouse(true)
|
|
skeen@0
|
218 end
|
|
skeen@0
|
219 end
|
|
skeen@0
|
220
|
|
skeen@0
|
221 function SkeenMelee:HideFrame()
|
|
skeen@0
|
222 SkeenMelee.displayFrame:Hide()
|
|
skeen@0
|
223 SkeenMelee.infoString:Hide()
|
|
skeen@0
|
224 end
|
|
skeen@0
|
225
|
|
skeen@0
|
226 function SkeenMelee:ShowFrame()
|
|
skeen@0
|
227 SkeenMelee.displayFrame:Show()
|
|
skeen@0
|
228 SkeenMelee.infoString:Show()
|
|
skeen@0
|
229 end
|