|
Tercio@0
|
1 local floor = floor
|
|
Tercio@0
|
2 local min = min
|
|
Tercio@0
|
3 local UnitExists = UnitExists
|
|
Tercio@0
|
4 local GetPlayerMapPosition = GetPlayerMapPosition
|
|
Tercio@0
|
5 local UnitHealth = UnitHealth
|
|
Tercio@4
|
6 local GetNumGroupMembers = GetNumGroupMembers
|
|
Tercio@4
|
7 local abs = abs
|
|
Tercio@0
|
8
|
|
Tercio@0
|
9 local f = CreateFrame ("frame", "Hansgar_And_Franzok_Assist", UIParent)
|
|
Tercio@0
|
10 f:SetFrameStrata ("DIALOG")
|
|
Tercio@0
|
11
|
|
Tercio@4
|
12 local tframe = CreateFrame ("frame", "Hansgar_And_Franzok_Assist_PTrack", UIParent)
|
|
Tercio@4
|
13
|
|
Tercio@0
|
14 f:SetSize (155, 156)
|
|
Tercio@0
|
15 f:SetBackdrop ({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, insets = {left = -1, right = -1, top = -1, bottom = -1},
|
|
Tercio@0
|
16 edgeFile = "Interface\\AddOns\\Hansgar_And_Franzok_Assist\\border_2", edgeSize = 8})
|
|
Tercio@0
|
17 f:SetPoint ("center", UIParent, "center")
|
|
Tercio@0
|
18 f:SetBackdropColor (0, 0, 0, 0)
|
|
Tercio@0
|
19 f:SetBackdropBorderColor (0, 0, 0, 1)
|
|
Tercio@0
|
20 f:SetMovable (true)
|
|
Tercio@0
|
21 f:EnableMouse (true)
|
|
Tercio@0
|
22 f:Hide()
|
|
Tercio@0
|
23
|
|
Tercio@0
|
24 local title = f:CreateFontString (nil, "overlay", "GameFontNormal")
|
|
Tercio@0
|
25 title:SetText ("Hansgar & Franzok Assist")
|
|
Tercio@0
|
26 title:SetPoint ("center", f, "center")
|
|
Tercio@0
|
27 title:SetPoint ("bottom", f, "top", 0, 2)
|
|
Tercio@0
|
28
|
|
Tercio@0
|
29 --
|
|
Tercio@0
|
30 local frame_event = CreateFrame ("frame", "Hansgar_And_Franzok_AssistEvents", f)
|
|
Tercio@0
|
31 frame_event:RegisterEvent ("ENCOUNTER_START")
|
|
Tercio@0
|
32 frame_event:RegisterEvent ("ENCOUNTER_END")
|
|
Tercio@0
|
33 frame_event:RegisterEvent ("ADDON_LOADED")
|
|
Tercio@0
|
34
|
|
Tercio@0
|
35 --
|
|
Tercio@0
|
36 local player_bar = CreateFrame ("statusbar", "Hansgar_And_Franzok_AssistPlayerBar", f)
|
|
Tercio@0
|
37 player_bar:SetPoint ("topleft", f, "bottomleft", 0, -3)
|
|
Tercio@0
|
38 player_bar:SetPoint ("topright", f, "bottomright", 0, -3)
|
|
Tercio@0
|
39 player_bar:SetHeight (14)
|
|
Tercio@0
|
40 player_bar:SetStatusBarColor (0, 0, 0, 0)
|
|
Tercio@0
|
41 player_bar:SetMinMaxValues (0, 100)
|
|
Tercio@0
|
42 player_bar:SetValue (0)
|
|
Tercio@0
|
43 f.player_bar = player_bar
|
|
Tercio@0
|
44
|
|
Tercio@0
|
45 player_bar.texture = player_bar:CreateTexture (nil, "overlay")
|
|
Tercio@0
|
46 player_bar.texture:SetTexture ("Interface\\AddOns\\Hansgar_And_Franzok_Assist\\bar_skyline")
|
|
Tercio@0
|
47 player_bar:SetStatusBarTexture (player_bar.texture)
|
|
Tercio@0
|
48
|
|
Tercio@0
|
49 --
|
|
Tercio@0
|
50
|
|
Tercio@4
|
51 local player_pos_frame = CreateFrame ("frame", "Hansgar_And_Franzok_Assist_DanceBar", UIParent)
|
|
Tercio@4
|
52 player_pos_frame:SetPoint ("topleft", player_bar, "bottomleft", 0, -3)
|
|
Tercio@4
|
53 player_pos_frame:SetPoint ("topright", player_bar, "bottomright", 0, -3)
|
|
Tercio@4
|
54 player_pos_frame:SetHeight (14)
|
|
Tercio@4
|
55 player_pos_frame:SetBackdrop ({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, insets = {left = -1, right = -1, top = -1, bottom = -1},
|
|
Tercio@4
|
56 edgeFile = "Interface\\AddOns\\Hansgar_And_Franzok_Assist\\border_2", edgeSize = 8})
|
|
Tercio@4
|
57 player_pos_frame:SetBackdropColor (0, 0, 0, 1)
|
|
Tercio@4
|
58 player_pos_frame:Hide()
|
|
Tercio@4
|
59
|
|
Tercio@4
|
60 --red
|
|
Tercio@4
|
61 local t1 = player_pos_frame:CreateTexture (nil, "artwork")
|
|
Tercio@4
|
62 t1:SetPoint ("left", player_pos_frame, "left")
|
|
Tercio@4
|
63 t1:SetSize (player_pos_frame:GetWidth()*0.30, 14)
|
|
Tercio@4
|
64 t1:SetTexture (1, 1, 1)
|
|
Tercio@4
|
65 --t1:SetTexCoord (260/512, 430/512, 29/256, 82/256)
|
|
Tercio@4
|
66 t1:SetVertexColor (1, 0.2, 0.2, 0.4)
|
|
Tercio@4
|
67
|
|
Tercio@4
|
68 --green
|
|
Tercio@4
|
69 local t2 = player_pos_frame:CreateTexture (nil, "artwork")
|
|
Tercio@4
|
70 t2:SetPoint ("left", t1, "right")
|
|
Tercio@4
|
71 t2:SetSize (player_pos_frame:GetWidth()*0.15, 14)
|
|
Tercio@4
|
72 t2:SetTexture (0.2, 1, 0.2, 0.4)
|
|
Tercio@4
|
73
|
|
Tercio@4
|
74 --red
|
|
Tercio@4
|
75 local middle = player_pos_frame:CreateTexture (nil, "artwork")
|
|
Tercio@4
|
76 middle:SetPoint ("left", t2, "right")
|
|
Tercio@4
|
77 middle:SetSize (player_pos_frame:GetWidth()*0.10, 14)
|
|
Tercio@4
|
78 middle:SetTexture (1, 1, 1)
|
|
Tercio@4
|
79 --middle:SetTexCoord (260/512, 430/512, 29/256, 82/256)
|
|
Tercio@4
|
80 middle:SetVertexColor (1, 0.2, 0.2, 0.4)
|
|
Tercio@4
|
81
|
|
Tercio@4
|
82 --green
|
|
Tercio@4
|
83 local t3 = player_pos_frame:CreateTexture (nil, "artwork")
|
|
Tercio@4
|
84 t3:SetPoint ("left", middle, "right")
|
|
Tercio@4
|
85 t3:SetSize (player_pos_frame:GetWidth()*0.15, 14)
|
|
Tercio@4
|
86 t3:SetTexture (0.2, 1, 0.2, 0.4)
|
|
Tercio@4
|
87
|
|
Tercio@4
|
88 --red
|
|
Tercio@4
|
89 local t4 = player_pos_frame:CreateTexture (nil, "artwork")
|
|
Tercio@4
|
90 t4:SetPoint ("left", t3, "right")
|
|
Tercio@4
|
91 t4:SetSize (player_pos_frame:GetWidth()*0.30, 14)
|
|
Tercio@4
|
92 t4:SetTexture (1, 1, 1)
|
|
Tercio@4
|
93 --t4:SetTexCoord (260/512, 430/512, 29/256, 82/256)
|
|
Tercio@4
|
94 t4:SetVertexColor (1, 0.2, 0.2, 0.4)
|
|
Tercio@4
|
95
|
|
Tercio@4
|
96 local div = player_pos_frame:CreateTexture (nil, "overlay")
|
|
Tercio@4
|
97 div:SetPoint ("left", player_pos_frame, "left", 0, 0)
|
|
Tercio@4
|
98 div:SetTexture (1, 1, 1, 1)
|
|
Tercio@4
|
99 div:SetSize (1, 16)
|
|
Tercio@4
|
100 div:Hide()
|
|
Tercio@4
|
101 --
|
|
Tercio@4
|
102
|
|
Tercio@4
|
103 local AceTimer = LibStub:GetLibrary ("AceTimer-3.0")
|
|
Tercio@4
|
104 AceTimer:Embed (f)
|
|
Tercio@4
|
105 local AceComm = LibStub:GetLibrary ("AceComm-3.0")
|
|
Tercio@4
|
106 AceComm:Embed (f)
|
|
Tercio@4
|
107
|
|
Tercio@0
|
108 local db
|
|
Tercio@0
|
109
|
|
Tercio@4
|
110 f.block_tracker = {}
|
|
Tercio@4
|
111
|
|
Tercio@0
|
112 frame_event:SetFrameStrata ("FULLSCREEN")
|
|
Tercio@0
|
113
|
|
Tercio@0
|
114 frame_event:SetScript ("OnEvent", function (self, event, ...)
|
|
Tercio@0
|
115
|
|
Tercio@0
|
116 if (event == "ADDON_LOADED" and select (1, ...) == "Hansgar_And_Franzok_Assist") then
|
|
Tercio@0
|
117
|
|
Tercio@0
|
118 db = Hansgar_And_Franzok_DB
|
|
Tercio@0
|
119 if (not db) then
|
|
Tercio@0
|
120 db = {}
|
|
Tercio@0
|
121 Hansgar_And_Franzok_DB = db
|
|
Tercio@0
|
122 end
|
|
Tercio@4
|
123 --
|
|
Tercio@0
|
124 db.STAMPERS_DELAY = db.STAMPERS_DELAY or 5
|
|
Tercio@4
|
125 if (db.CD_NUMBER == nil) then
|
|
Tercio@4
|
126 db.CD_NUMBER = false
|
|
Tercio@4
|
127 end
|
|
Tercio@4
|
128 if (db.SHOW_DANCE == nil) then
|
|
Tercio@4
|
129 db.SHOW_DANCE = true
|
|
Tercio@4
|
130 end
|
|
Tercio@4
|
131 --
|
|
Tercio@0
|
132 SLASH_Hansgar_And_Franzok_Assist1, SLASH_Hansgar_And_Franzok_Assist2 = "/hansgar", "/franzok"
|
|
Tercio@0
|
133 function SlashCmdList.Hansgar_And_Franzok_Assist (msg, editbox)
|
|
Tercio@0
|
134
|
|
Tercio@0
|
135 local command, rest = msg:match ("^(%S*)%s*(.-)$")
|
|
Tercio@0
|
136
|
|
Tercio@0
|
137 if (command == "delay") then
|
|
Tercio@0
|
138 local t = tonumber (rest)
|
|
Tercio@0
|
139 if (t) then
|
|
Tercio@0
|
140 db.STAMPERS_DELAY = t
|
|
Tercio@0
|
141 print ("|cFFFFAA00Hansgar and Franzok Assist|r delay set to: ", t)
|
|
Tercio@0
|
142 else
|
|
Tercio@0
|
143 print ("|cFFFFAA00Hansgar and Franzok Assist|r invalid time.", t)
|
|
Tercio@0
|
144 end
|
|
Tercio@0
|
145
|
|
Tercio@0
|
146 elseif (command == "test" or command == "show") then
|
|
Tercio@0
|
147 if (f.StampersPhase) then
|
|
Tercio@4
|
148 f:EndTrackPlayerPosition()
|
|
Tercio@0
|
149 return f:StopTracking()
|
|
Tercio@0
|
150 end
|
|
Tercio@4
|
151
|
|
Tercio@0
|
152 f:StartTracking()
|
|
Tercio@4
|
153 f:StartTrackPlayerPosition()
|
|
Tercio@0
|
154
|
|
Tercio@0
|
155 elseif (command == "hide") then
|
|
Tercio@0
|
156 if (f.StampersPhase) then
|
|
Tercio@0
|
157 return f:StopTracking()
|
|
Tercio@0
|
158 end
|
|
Tercio@4
|
159 f:EndTrackPlayerPosition()
|
|
Tercio@0
|
160
|
|
Tercio@4
|
161 elseif (command == "dance") then
|
|
Tercio@4
|
162 db.SHOW_DANCE = not db.SHOW_DANCE
|
|
Tercio@4
|
163 if (db.SHOW_DANCE) then
|
|
Tercio@4
|
164 if (f.on_encounter) then
|
|
Tercio@4
|
165 f:StartTrackPlayerPosition()
|
|
Tercio@4
|
166 end
|
|
Tercio@4
|
167 print ("|cFFFFAA00Hansgar and Franzok Assist|r dance bars enabled.")
|
|
Tercio@4
|
168 else
|
|
Tercio@4
|
169 f:EndTrackPlayerPosition()
|
|
Tercio@4
|
170 print ("|cFFFFAA00Hansgar and Franzok Assist|r dance bars disabled.")
|
|
Tercio@4
|
171 end
|
|
Tercio@4
|
172
|
|
Tercio@4
|
173 elseif (command == "cooldown") then
|
|
Tercio@4
|
174 db.CD_NUMBER = not db.CD_NUMBER
|
|
Tercio@4
|
175 f:RefreshCooldownSettings()
|
|
Tercio@4
|
176
|
|
Tercio@0
|
177 else
|
|
Tercio@4
|
178 print ("|cFFFFAA00Hansgar and Franzok Assist|r |cFF00FF00v0.5|r Commands:")
|
|
Tercio@0
|
179 print ("|cFFFFFF00/hansgar delay <time>|r: time in seconds until the percentage goes from 0 to 100.")
|
|
Tercio@4
|
180 print ("|cFFFFFF00/hansgar cooldown|r: show the countdown for each stamper go back up to the ceiling.")
|
|
Tercio@4
|
181 --print ("|cFFFFFF00/hansgar dance|r: toggle dance bar (used to dodge regular stampers and searing plates).")
|
|
Tercio@0
|
182 print ("|cFFFFFF00/hansgar test|r: active the addon on test mode.")
|
|
Tercio@0
|
183 print ("|cFFFFFF00/hansgar show|r: show the window and start test mode.")
|
|
Tercio@0
|
184 print ("|cFFFFFF00/hansgar hide|r: hide the window.")
|
|
Tercio@0
|
185 end
|
|
Tercio@0
|
186 end
|
|
Tercio@0
|
187
|
|
Tercio@0
|
188 elseif (event == "ENCOUNTER_START" or event == "ENCOUNTER_END") then
|
|
Tercio@0
|
189
|
|
Tercio@0
|
190 local encounterID, encounterName, difficultyID, raidSize = select (1, ...)
|
|
Tercio@4
|
191
|
|
Tercio@4
|
192 if (encounterID == 1693) then
|
|
Tercio@4
|
193 if (event == "ENCOUNTER_START") then
|
|
Tercio@4
|
194 f.on_encounter = true
|
|
Tercio@4
|
195 elseif (event == "ENCOUNTER_END") then
|
|
Tercio@4
|
196 f.on_encounter = false
|
|
Tercio@4
|
197 end
|
|
Tercio@4
|
198 end
|
|
Tercio@4
|
199
|
|
Tercio@4
|
200 if (encounterID == 1693 and db.SHOW_DANCE) then
|
|
Tercio@4
|
201 if (event == "ENCOUNTER_START") then
|
|
Tercio@4
|
202 SetMapToCurrentZone()
|
|
Tercio@4
|
203 f:StartTrackPlayerPosition()
|
|
Tercio@4
|
204 elseif (event == "ENCOUNTER_END") then
|
|
Tercio@4
|
205 f:EndTrackPlayerPosition()
|
|
Tercio@4
|
206 end
|
|
Tercio@4
|
207 end
|
|
Tercio@4
|
208
|
|
Tercio@0
|
209 if (encounterID == 1693 and difficultyID == 16) then
|
|
Tercio@0
|
210
|
|
Tercio@0
|
211 if (event == "ENCOUNTER_START") then
|
|
Tercio@0
|
212
|
|
Tercio@0
|
213 print ("|cFFFFAA00Hansgar and Franzok Assist|r: addon enabled, good look!")
|
|
Tercio@0
|
214
|
|
Tercio@0
|
215 if (f.StampersPhase) then
|
|
Tercio@0
|
216 f:StopTracking()
|
|
Tercio@0
|
217 end
|
|
Tercio@0
|
218 f:RegisterEvent ("COMBAT_LOG_EVENT_UNFILTERED")
|
|
Tercio@0
|
219
|
|
Tercio@0
|
220 elseif (event == "ENCOUNTER_END") then
|
|
Tercio@0
|
221 f:UnregisterEvent ("COMBAT_LOG_EVENT_UNFILTERED")
|
|
Tercio@0
|
222
|
|
Tercio@0
|
223 if (f.StampersPhase) then
|
|
Tercio@0
|
224 f:StopTracking()
|
|
Tercio@0
|
225 end
|
|
Tercio@4
|
226
|
|
Tercio@4
|
227 f:EndTrackPlayerPosition()
|
|
Tercio@0
|
228 end
|
|
Tercio@0
|
229 end
|
|
Tercio@0
|
230 end
|
|
Tercio@0
|
231
|
|
Tercio@0
|
232 end)
|
|
Tercio@0
|
233
|
|
Tercio@0
|
234 --
|
|
Tercio@2
|
235 --f:RegisterEvent ("COMBAT_LOG_EVENT_UNFILTERED")
|
|
Tercio@0
|
236
|
|
Tercio@0
|
237 f:SetScript ("OnEvent", function (self, event, time, token, _, who_serial, who_name, who_flags, _, target_serial, target_name, target_flags, _, spellid, spellname, spellschool, buff_type, ...)
|
|
Tercio@0
|
238
|
|
Tercio@2
|
239 if (token == "SPELL_AURA_APPLIED" and spellid == 162124 and not f.StampersPhase) then
|
|
Tercio@0
|
240 f:StartTracking()
|
|
Tercio@0
|
241
|
|
Tercio@2
|
242 elseif (token == "SPELL_AURA_REMOVED" and spellid == 162124 and f.StampersPhase) then
|
|
Tercio@0
|
243 f:StopTracking()
|
|
Tercio@0
|
244
|
|
Tercio@0
|
245 end
|
|
Tercio@0
|
246
|
|
Tercio@0
|
247 end)
|
|
Tercio@0
|
248
|
|
Tercio@0
|
249 local frame_tracker = CreateFrame ("frame", "Hansgar_And_Franzok_AssistTracker", UIParent)
|
|
Tercio@0
|
250 local on_update_tracker = function (self, elapsed)
|
|
Tercio@0
|
251
|
|
Tercio@4
|
252 local raid_size = GetNumGroupMembers()
|
|
Tercio@4
|
253
|
|
Tercio@4
|
254 for i = 1, raid_size do
|
|
Tercio@0
|
255 local x, y = GetPlayerMapPosition ("raid"..i)
|
|
Tercio@0
|
256 if (UnitExists ("raid"..i) and UnitHealth ("raid"..i) > 1 and x and y) then
|
|
Tercio@0
|
257 local block = f:WhichBlock (x, y)
|
|
Tercio@0
|
258 if (block) then
|
|
Tercio@0
|
259 if (not f.block_tracker [block]) then --> was a clear block
|
|
Tercio@0
|
260 f.block_tracker [block] = GetTime()
|
|
Tercio@0
|
261 f:Paint (f.all_blocks [block])
|
|
Tercio@0
|
262 end
|
|
Tercio@0
|
263 end
|
|
Tercio@0
|
264 end
|
|
Tercio@0
|
265 end
|
|
Tercio@0
|
266
|
|
Tercio@0
|
267 local px, py = GetPlayerMapPosition ("player")
|
|
Tercio@0
|
268 local player_block = f:WhichBlock (px, py)
|
|
Tercio@4
|
269 if (player_block and raid_size > 0) then
|
|
Tercio@0
|
270
|
|
Tercio@0
|
271 local time_limit_at = f.block_tracker [player_block] + db.STAMPERS_DELAY
|
|
Tercio@0
|
272 local time_now = GetTime()
|
|
Tercio@0
|
273
|
|
Tercio@0
|
274 f.player_bar:SetValue ((time_limit_at - time_now) / db.STAMPERS_DELAY * 100)
|
|
Tercio@0
|
275 f.player_bar:Show()
|
|
Tercio@0
|
276
|
|
Tercio@0
|
277 local block_frame = f.all_blocks [player_block]
|
|
Tercio@0
|
278 f.player_loc_box:SetPoint ("center", block_frame, "center")
|
|
Tercio@0
|
279 f.player_loc_box:Show()
|
|
Tercio@0
|
280 player_bar:Show()
|
|
Tercio@0
|
281 else
|
|
Tercio@0
|
282 f.player_loc_box:Hide()
|
|
Tercio@0
|
283 f.player_bar:Hide()
|
|
Tercio@0
|
284 end
|
|
Tercio@0
|
285 end
|
|
Tercio@0
|
286
|
|
Tercio@0
|
287 function f:StartTracking()
|
|
Tercio@0
|
288
|
|
Tercio@0
|
289 print ("|cFFFFAA00Hansgar and Franzok Assist|r: Smart Stampers phase started.")
|
|
Tercio@0
|
290
|
|
Tercio@0
|
291 f.StampersPhase = true
|
|
Tercio@0
|
292
|
|
Tercio@0
|
293 if (not f.frames_built) then
|
|
Tercio@0
|
294 f:CreateWindow()
|
|
Tercio@0
|
295 end
|
|
Tercio@0
|
296
|
|
Tercio@0
|
297 f:ResetBlocks()
|
|
Tercio@0
|
298 f.player_loc_box:Hide()
|
|
Tercio@0
|
299
|
|
Tercio@0
|
300 f.block_tracker = f.block_tracker or {}
|
|
Tercio@0
|
301 table.wipe (f.block_tracker)
|
|
Tercio@0
|
302
|
|
Tercio@0
|
303 SetMapToCurrentZone()
|
|
Tercio@0
|
304
|
|
Tercio@0
|
305 frame_tracker:SetScript ("OnUpdate", on_update_tracker)
|
|
Tercio@0
|
306 f:Show()
|
|
Tercio@0
|
307 end
|
|
Tercio@0
|
308
|
|
Tercio@0
|
309 function f:StopTracking()
|
|
Tercio@0
|
310
|
|
Tercio@0
|
311 print ("|cFFFFAA00Hansgar and Franzok Assist|r: Smart Stampers phase ended.")
|
|
Tercio@0
|
312
|
|
Tercio@0
|
313 f.StampersPhase = false
|
|
Tercio@0
|
314 frame_tracker:SetScript ("OnUpdate", nil)
|
|
Tercio@0
|
315 table.wipe (f.block_tracker)
|
|
Tercio@0
|
316 f.player_loc_box:Hide()
|
|
Tercio@0
|
317 f:Hide()
|
|
Tercio@0
|
318 end
|
|
Tercio@0
|
319
|
|
Tercio@0
|
320 local on_mouse_down = function (self)
|
|
Tercio@0
|
321 if (not self.isMoving) then
|
|
Tercio@0
|
322 self.isMoving = true
|
|
Tercio@0
|
323 f:StartMoving()
|
|
Tercio@0
|
324 end
|
|
Tercio@0
|
325 end
|
|
Tercio@0
|
326 local on_mouse_up = function (self)
|
|
Tercio@0
|
327 if (self.isMoving) then
|
|
Tercio@0
|
328 self.isMoving = nil
|
|
Tercio@0
|
329 f:StopMovingOrSizing()
|
|
Tercio@0
|
330 end
|
|
Tercio@0
|
331 end
|
|
Tercio@0
|
332
|
|
Tercio@0
|
333 local painting = function (self, elapsed)
|
|
Tercio@0
|
334 self.step = self.step + elapsed
|
|
Tercio@0
|
335 self.total_time = self.total_time + elapsed
|
|
Tercio@0
|
336
|
|
Tercio@0
|
337 if (self.step > 0.2) then
|
|
Tercio@0
|
338 self.step = 0
|
|
Tercio@0
|
339 local percent = self.total_time / db.STAMPERS_DELAY * 100
|
|
Tercio@0
|
340
|
|
Tercio@0
|
341 percent = min (percent, 100)
|
|
Tercio@0
|
342
|
|
Tercio@0
|
343 local r, g, b = f:percent_color (percent, true)
|
|
Tercio@0
|
344 self:SetBackdropColor (r, g, b, 0.5)
|
|
Tercio@0
|
345
|
|
Tercio@0
|
346 self.number:SetText (floor (percent) .. "%")
|
|
Tercio@0
|
347 self.number:SetTextColor (1, 1, 1, 1)
|
|
Tercio@0
|
348
|
|
Tercio@0
|
349 if (percent == 100) then
|
|
Tercio@0
|
350 self:SetScript ("OnUpdate", nil)
|
|
Tercio@0
|
351 self.stamper_icon:Show()
|
|
Tercio@0
|
352 self.number:Hide()
|
|
Tercio@4
|
353 self.cooldown:SetCooldown (GetTime(), 37 - db.STAMPERS_DELAY, 0, 0)
|
|
Tercio@0
|
354 end
|
|
Tercio@0
|
355 end
|
|
Tercio@0
|
356 end
|
|
Tercio@4
|
357
|
|
Tercio@4
|
358 function f:UnPaint (block)
|
|
Tercio@4
|
359 f:ResetBlock (block)
|
|
Tercio@4
|
360 end
|
|
Tercio@0
|
361 function f:Paint (block)
|
|
Tercio@0
|
362 block.step = 0
|
|
Tercio@0
|
363 block.total_time = 0
|
|
Tercio@0
|
364 block:SetScript ("OnUpdate", painting)
|
|
Tercio@4
|
365 local unpaint = f:ScheduleTimer ("UnPaint", 37, block)
|
|
Tercio@4
|
366 block.unpaint_process = unpaint
|
|
Tercio@4
|
367 end
|
|
Tercio@4
|
368
|
|
Tercio@4
|
369 function f:ResetBlock (block)
|
|
Tercio@4
|
370 block:SetScript ("OnUpdate", nil)
|
|
Tercio@4
|
371 block:SetBackdropColor (.8, .8, .8, 0.5)
|
|
Tercio@4
|
372 block.number:SetText (block.id)
|
|
Tercio@4
|
373 block.number:SetTextColor (1, 1, 1, 0.5)
|
|
Tercio@4
|
374 block.number:Show()
|
|
Tercio@4
|
375 block.stamper_icon:Hide()
|
|
Tercio@4
|
376 block.cooldown:SetCooldown (0, 0, 0, 0)
|
|
Tercio@4
|
377
|
|
Tercio@4
|
378 f.block_tracker [block.id] = nil
|
|
Tercio@4
|
379 if (block.unpaint_process) then
|
|
Tercio@4
|
380 f:CancelTimer (block.unpaint_process)
|
|
Tercio@4
|
381 block.unpaint_process = nil
|
|
Tercio@4
|
382 end
|
|
Tercio@0
|
383 end
|
|
Tercio@0
|
384
|
|
Tercio@0
|
385 function f:ResetBlocks()
|
|
Tercio@0
|
386 for _, block in ipairs (f.all_blocks) do
|
|
Tercio@4
|
387 f:ResetBlock (block)
|
|
Tercio@4
|
388 end
|
|
Tercio@4
|
389 end
|
|
Tercio@4
|
390
|
|
Tercio@4
|
391 function f:RefreshCooldownSettings()
|
|
Tercio@4
|
392 for _, block in ipairs (f.all_blocks) do
|
|
Tercio@4
|
393 if (not db.CD_NUMBER) then
|
|
Tercio@4
|
394 block.cooldown:SetHideCountdownNumbers (true)
|
|
Tercio@4
|
395 block.cooldown:SetDrawEdge (false)
|
|
Tercio@4
|
396 else
|
|
Tercio@4
|
397 block.cooldown:SetHideCountdownNumbers (false)
|
|
Tercio@4
|
398 block.cooldown:SetDrawEdge (true)
|
|
Tercio@4
|
399 end
|
|
Tercio@0
|
400 end
|
|
Tercio@0
|
401 end
|
|
Tercio@0
|
402
|
|
Tercio@0
|
403 function f:CreateWindow()
|
|
Tercio@0
|
404 local x = 0
|
|
Tercio@0
|
405 local y = 0
|
|
Tercio@0
|
406
|
|
Tercio@0
|
407 f.player_loc_box = frame_event:CreateTexture (nil, "overlay")
|
|
Tercio@0
|
408 f.player_loc_box:SetSize (32, 40)
|
|
Tercio@0
|
409 f.player_loc_box:SetTexture ([[Interface\ContainerFrame\UI-Icon-QuestBorder]])
|
|
Tercio@0
|
410 f.player_loc_box:Hide()
|
|
Tercio@0
|
411
|
|
Tercio@0
|
412 f.all_blocks = {}
|
|
Tercio@0
|
413
|
|
Tercio@0
|
414 for i = 1, 20 do
|
|
Tercio@0
|
415
|
|
Tercio@0
|
416 local block = CreateFrame ("frame", "Hansgar_And_Franzok_Assist_Block" .. i, f)
|
|
Tercio@0
|
417 block:SetSize (30, 38)
|
|
Tercio@0
|
418 block:SetBackdrop ({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, insets = {left = 0, right = 0, top = 0, bottom = 0},
|
|
Tercio@0
|
419 })
|
|
Tercio@0
|
420 block:SetBackdropBorderColor (0, 0, 0, 1)
|
|
Tercio@0
|
421 block:SetBackdropColor (.8, .8, .8, 0.5)
|
|
Tercio@0
|
422 block:SetPoint ("TopLeft", f, "TopLeft", x, y)
|
|
Tercio@0
|
423
|
|
Tercio@0
|
424 block:SetScript ("OnMouseDown", on_mouse_down)
|
|
Tercio@0
|
425 block:SetScript ("OnMouseUp", on_mouse_up)
|
|
Tercio@0
|
426
|
|
Tercio@4
|
427 local cooldown = CreateFrame ("cooldown", "Hansgar_And_Franzok_Assist_BlockCooldown" .. i, block, "CooldownFrameTemplate")
|
|
Tercio@4
|
428 cooldown:SetAllPoints()
|
|
Tercio@4
|
429 cooldown:SetFrameLevel (block:GetFrameLevel()+2)
|
|
Tercio@4
|
430
|
|
Tercio@4
|
431 if (not db.CD_NUMBER) then
|
|
Tercio@4
|
432 cooldown:SetHideCountdownNumbers (true)
|
|
Tercio@4
|
433 cooldown:SetDrawEdge (false)
|
|
Tercio@4
|
434 end
|
|
Tercio@4
|
435
|
|
Tercio@4
|
436 block.cooldown = cooldown
|
|
Tercio@4
|
437
|
|
Tercio@0
|
438 block.id = i
|
|
Tercio@0
|
439
|
|
Tercio@0
|
440 local number = block:CreateFontString (nil, "artwork", "GameFontHighlight")
|
|
Tercio@0
|
441 number:SetPoint ("center", block, "center")
|
|
Tercio@0
|
442 number:SetText (i)
|
|
Tercio@0
|
443 number:SetTextColor (1, 1, 1, 0.5)
|
|
Tercio@0
|
444 block.number = number
|
|
Tercio@0
|
445
|
|
Tercio@0
|
446 local stamper_icon = block:CreateTexture (nil, "overlay")
|
|
Tercio@0
|
447 stamper_icon:SetTexture ([[Interface\ICONS\Warrior_talent_icon_LambsToTheSlaughter]])
|
|
Tercio@0
|
448 stamper_icon:SetTexCoord (4/64, 60/64, 4/64, 60/64)
|
|
Tercio@0
|
449 stamper_icon:SetSize (24, 24)
|
|
Tercio@0
|
450 stamper_icon:SetPoint ("center", block, "center")
|
|
Tercio@0
|
451 stamper_icon:Hide()
|
|
Tercio@0
|
452 block.stamper_icon = stamper_icon
|
|
Tercio@0
|
453
|
|
Tercio@0
|
454 x = x + 31
|
|
Tercio@0
|
455 if (x >= 155) then
|
|
Tercio@0
|
456 x = 0
|
|
Tercio@0
|
457 y = y - 40
|
|
Tercio@0
|
458 end
|
|
Tercio@0
|
459
|
|
Tercio@0
|
460 tinsert (f.all_blocks, block)
|
|
Tercio@0
|
461
|
|
Tercio@0
|
462 end
|
|
Tercio@0
|
463
|
|
Tercio@0
|
464 f.frames_built = true
|
|
Tercio@0
|
465
|
|
Tercio@0
|
466 end
|
|
Tercio@0
|
467
|
|
Tercio@4
|
468 local safe_track = {
|
|
Tercio@4
|
469 --space 1
|
|
Tercio@4
|
470 {
|
|
Tercio@4
|
471 block = {x1 = 0.50154542922974, x2 = 0.49563668874741},
|
|
Tercio@4
|
472 left = {x1 = 0.49963343143463, x2 = 0.49963343143463 - 0.000935000000000},
|
|
Tercio@4
|
473 right = {x1 = 0.49710285663605, x2 = 0.49710285663605 + 0.001012229919432},
|
|
Tercio@4
|
474 -- {x1 = 0.49963343143463, y1 = 0.73492467403412} -- {x1 = 0.49710285663605, y1 = 0.74445152282715}
|
|
Tercio@4
|
475 },
|
|
Tercio@4
|
476 --space 2
|
|
Tercio@4
|
477 {
|
|
Tercio@4
|
478 block = {x1 = 0.4858917593956, x2 = 0.48044270277023},
|
|
Tercio@4
|
479 left = {x1 = 0.48433673381805, x2 = 0.48433673381805 - 0.00091059207916},
|
|
Tercio@4
|
480 right = {x1 = 0.48206025362015, x2 = 0.48206025362015 + 0.00075059207916},
|
|
Tercio@4
|
481 -- {x1 = 0.48433673381805, y1 = 0.74292266368866} -- {x1 = 0.48206025362015, y1 = 0.78930181264877}
|
|
Tercio@4
|
482 },
|
|
Tercio@4
|
483 --space 3
|
|
Tercio@4
|
484 {
|
|
Tercio@4
|
485 block = {x1 = 0.47047740221024, x2 = 0.4648859500885},
|
|
Tercio@4
|
486 left = {x1 = 0.46893924474716, x2 = 0.46893924474716 - 0.001032948493956},
|
|
Tercio@4
|
487 right = {x1 = 0.46635687351227, x2 = 0.46635687351227 + 0.001032948493956},
|
|
Tercio@4
|
488 --{x1 = 0.46893924474716, y1 = 0.7981019616127} -- {x1 = 0.46635687351227, y1 = 0.73558133840561}
|
|
Tercio@4
|
489 },
|
|
Tercio@4
|
490 --space 4
|
|
Tercio@4
|
491 {
|
|
Tercio@4
|
492 block = {x1 = 0.45503282546997, x2 = 0.44976264238358},
|
|
Tercio@4
|
493 left = {x1 = 0.4533554315567, x2 = 0.4533554315567 - 0.000774573974608},
|
|
Tercio@4
|
494 right = {x1 = 0.45124399662018, x2 = 0.45124399662018 + 0.000770009999999},
|
|
Tercio@4
|
495 --{x1 = 0.4533554315567, y1 = 0.74078941345215} -- {x1 = 0.45124399662018, y1 = 0.74088287353516}
|
|
Tercio@4
|
496 }
|
|
Tercio@4
|
497 }
|
|
Tercio@4
|
498 Hansgar_safe_track = safe_track
|
|
Tercio@4
|
499
|
|
Tercio@4
|
500 -- /hansgar test
|
|
Tercio@4
|
501 -- /run Hansgar_safe_track [1].block.x1 = 0.50154542922974
|
|
Tercio@4
|
502
|
|
Tercio@4
|
503 local red_alpha_disabled = 0.15
|
|
Tercio@4
|
504 local red_alpha_enabled = 0.5
|
|
Tercio@4
|
505
|
|
Tercio@4
|
506 local green_alpha_disabled = 0.05
|
|
Tercio@4
|
507 local green_alpha_enabled = 0.9
|
|
Tercio@4
|
508
|
|
Tercio@4
|
509 local track_function = function (self, elapsed)
|
|
Tercio@4
|
510
|
|
Tercio@4
|
511 local x, _ = GetPlayerMapPosition ("player")
|
|
Tercio@4
|
512 local block
|
|
Tercio@4
|
513
|
|
Tercio@4
|
514 for i = 1, #safe_track do
|
|
Tercio@4
|
515 local loc = safe_track [i]
|
|
Tercio@4
|
516 if (x >= loc.block.x2 and x <= loc.block.x1) then
|
|
Tercio@4
|
517 block = i
|
|
Tercio@4
|
518 break
|
|
Tercio@4
|
519 end
|
|
Tercio@4
|
520 end
|
|
Tercio@4
|
521
|
|
Tercio@4
|
522 if (block) then
|
|
Tercio@4
|
523
|
|
Tercio@4
|
524 player_pos_frame:Show()
|
|
Tercio@4
|
525 block = safe_track [block]
|
|
Tercio@4
|
526
|
|
Tercio@4
|
527 if (x >= block.left.x2 and x <= block.left.x1) then
|
|
Tercio@4
|
528 t2:SetTexture (0.1, 1, 0.1, green_alpha_enabled)
|
|
Tercio@4
|
529 t3:SetTexture (0.2, 1, 0.2, green_alpha_disabled)
|
|
Tercio@4
|
530
|
|
Tercio@4
|
531 t1:SetVertexColor (1, 0.2, 0.2, red_alpha_disabled) --red
|
|
Tercio@4
|
532 t4:SetVertexColor (1, 0.2, 0.2, red_alpha_disabled) --red
|
|
Tercio@4
|
533 middle:SetVertexColor (1, 0.2, 0.2, red_alpha_disabled) --red
|
|
Tercio@4
|
534
|
|
Tercio@4
|
535 elseif (x <= block.right.x2 and x >= block.right.x1) then
|
|
Tercio@4
|
536 t3:SetTexture (0.1, 1, 0.1, green_alpha_enabled)
|
|
Tercio@4
|
537 t2:SetTexture (0.2, 1, 0.2, green_alpha_disabled)
|
|
Tercio@4
|
538
|
|
Tercio@4
|
539 t1:SetVertexColor (1, 0.2, 0.2, red_alpha_disabled) --red
|
|
Tercio@4
|
540 t4:SetVertexColor (1, 0.2, 0.2, red_alpha_disabled) --red
|
|
Tercio@4
|
541 middle:SetVertexColor (1, 0.2, 0.2, red_alpha_disabled) --red
|
|
Tercio@4
|
542
|
|
Tercio@4
|
543 else
|
|
Tercio@4
|
544 t1:SetVertexColor (1, 0.2, 0.2, red_alpha_enabled) --red
|
|
Tercio@4
|
545 t4:SetVertexColor (1, 0.2, 0.2, red_alpha_enabled) --red
|
|
Tercio@4
|
546 middle:SetVertexColor (1, 0.2, 0.2, red_alpha_enabled) --red
|
|
Tercio@4
|
547
|
|
Tercio@4
|
548 t2:SetTexture (0.2, 1, 0.2, green_alpha_disabled)
|
|
Tercio@4
|
549 t3:SetTexture (0.2, 1, 0.2, green_alpha_disabled)
|
|
Tercio@4
|
550
|
|
Tercio@4
|
551 end
|
|
Tercio@4
|
552
|
|
Tercio@4
|
553 --x = x - block.block.x2
|
|
Tercio@4
|
554 --local at = abs ((x / (block.block.x1 - block.block.x2) * 100) - 100)
|
|
Tercio@4
|
555 --div:SetPoint ("left", player_pos_frame, "left", self.width_pixel * at, 0)
|
|
Tercio@4
|
556
|
|
Tercio@4
|
557 else
|
|
Tercio@4
|
558 player_pos_frame:Hide()
|
|
Tercio@4
|
559 end
|
|
Tercio@4
|
560 end
|
|
Tercio@4
|
561
|
|
Tercio@4
|
562 function f:StartTrackPlayerPosition()
|
|
Tercio@4
|
563
|
|
Tercio@4
|
564 --> under development
|
|
Tercio@4
|
565 if (true) then
|
|
Tercio@4
|
566 return
|
|
Tercio@4
|
567 end
|
|
Tercio@4
|
568
|
|
Tercio@4
|
569 player_pos_frame:Show()
|
|
Tercio@4
|
570 tframe.width = player_pos_frame:GetWidth()
|
|
Tercio@4
|
571 tframe.width_pixel = tframe.width / 100
|
|
Tercio@4
|
572 tframe:SetScript ("OnUpdate", track_function)
|
|
Tercio@4
|
573 end
|
|
Tercio@4
|
574 function f:EndTrackPlayerPosition()
|
|
Tercio@4
|
575 player_pos_frame:Hide()
|
|
Tercio@4
|
576 tframe:SetScript ("OnUpdate", nil)
|
|
Tercio@4
|
577 end
|
|
Tercio@4
|
578
|
|
Tercio@0
|
579 local locs = {
|
|
Tercio@0
|
580 --block 1:
|
|
Tercio@1
|
581 {x1 = 0.51103663444519, y1 = 0.79726493358612, x2 = 0.50061076879501, y2 = 0.8241291642189},
|
|
Tercio@0
|
582 --block 2:
|
|
Tercio@1
|
583 {x1 = 0.49670505523682, y1 = 0.79692482948303, x2 = 0.48469054698944, y2 = 0.82489335536957},
|
|
Tercio@0
|
584 --block 3:
|
|
Tercio@1
|
585 {x1 = 0.48130965232849, y1 = 0.79742962121964, x2 = 0.46962946653366, y2 = 0.82453238964081},
|
|
Tercio@0
|
586 --block 4:
|
|
Tercio@1
|
587 {x1 = 0.46575212478638, y1 = 0.79766929149628, x2 = 0.45400339365005, y2 = 0.82176661491394},
|
|
Tercio@0
|
588 --block 5:
|
|
Tercio@1
|
589 {x1 = 0.45073217153549, y1 = 0.79751670360565, x2 = 0.43945103883743, y2 = 0.82504689693451},
|
|
Tercio@0
|
590
|
|
Tercio@0
|
591 --block 6
|
|
Tercio@1
|
592 {x1 = 0.51104211807251, y1 = 0.76532691717148, x2 = 0.50021582841873, y2 = 0.79546189308167},
|
|
Tercio@1
|
593 --block 7
|
|
Tercio@1
|
594 {x1 = 0.4964514374733, y1 = 0.76603573560715, x2 = 0.48449218273163, y2 = 0.79527854919434},
|
|
Tercio@1
|
595 --block 8
|
|
Tercio@1
|
596 {x1 = 0.48101079463959, y1 = 0.76503103971481, x2 = 0.46944016218185, y2 = 0.79543298482895},
|
|
Tercio@1
|
597 --block 9
|
|
Tercio@1
|
598 {x1 = 0.46541726589203, y1 = 0.7654857635498, x2 = 0.45369201898575, y2 = 0.79529416561127},
|
|
Tercio@1
|
599 --block 10
|
|
Tercio@1
|
600 {x1 = 0.45051556825638, y1 = 0.76583826541901, x2 = 0.43931984901428, y2 = 0.79570162296295},
|
|
Tercio@1
|
601
|
|
Tercio@1
|
602
|
|
Tercio@1
|
603 --block 11
|
|
Tercio@0
|
604 {x1 = 0.51104187965393, y1 = 0.73422884941101, x2 = 0.49990028142929, y2 = 0.76343530416489},
|
|
Tercio@1
|
605 --block 12
|
|
Tercio@0
|
606 {x1 = 0.49673527479172, y1 = 0.73338270187378, x2 = 0.48483556509018, y2 = 0.76356953382492},
|
|
Tercio@1
|
607 --block 13
|
|
Tercio@0
|
608 {x1 = 0.48133307695389, y1 = 0.73373115062714, x2 = 0.46920585632324, y2 = 0.76366758346558},
|
|
Tercio@1
|
609 --block 14
|
|
Tercio@0
|
610 {x1 = 0.46568286418915, y1 = 0.73440700769424, x2 = 0.45381307601929, y2 = 0.76358675956726},
|
|
Tercio@1
|
611 --block 15
|
|
Tercio@0
|
612 {x1 = 0.45046973228455, y1 = 0.73361301422119, x2 = 0.43929302692413, y2 = 0.76388084888458},
|
|
Tercio@0
|
613
|
|
Tercio@0
|
614 --block 16
|
|
Tercio@1
|
615 {x1 = 0.51104891300201, y1 = 0.70877063274384, x2 = 0.50024521350861, y2 = 0.73220580816269},
|
|
Tercio@0
|
616 --block 17
|
|
Tercio@1
|
617 {x1 = 0.49676024913788, y1 = 0.70914703607559, x2 = 0.48485481739044, y2 = 0.73210543394089},
|
|
Tercio@0
|
618 --block 18
|
|
Tercio@1
|
619 {x1 = 0.48142266273499, y1 = 0.70876735448837, x2 = 0.46925610303879, y2 = 0.73205661773682},
|
|
Tercio@0
|
620 --block 19
|
|
Tercio@1
|
621 {x1 = 0.46603119373322, y1 = 0.70929777622223, x2 = 0.45397216081619, y2 = 0.73167610168457},
|
|
Tercio@0
|
622 --block 20
|
|
Tercio@1
|
623 {x1 = 0.45079308748245, y1 = 0.70926278829575, x2 = 0.43927478790283, y2 = 0.73225915431976},
|
|
Tercio@0
|
624 }
|
|
Tercio@0
|
625
|
|
Tercio@0
|
626 function f:WhichBlock (x, y)
|
|
Tercio@0
|
627 for i = 1, #locs do
|
|
Tercio@0
|
628 local loc = locs [i]
|
|
Tercio@0
|
629 if (x >= loc.x2 and x <= loc.x1 and y >= loc.y1 and y <= loc.y2) then
|
|
Tercio@0
|
630 return i
|
|
Tercio@0
|
631 end
|
|
Tercio@0
|
632 end
|
|
Tercio@0
|
633 end
|
|
Tercio@0
|
634
|
|
Tercio@0
|
635 function f:percent_color (value, inverted)
|
|
Tercio@0
|
636 local r, g
|
|
Tercio@0
|
637 if (value < 50) then
|
|
Tercio@0
|
638 r = 255
|
|
Tercio@0
|
639 else
|
|
Tercio@0
|
640 r = floor ( 255 - (value * 2 - 100) * 255 / 100)
|
|
Tercio@0
|
641 end
|
|
Tercio@0
|
642
|
|
Tercio@0
|
643 if (value > 50) then
|
|
Tercio@0
|
644 g = 255
|
|
Tercio@0
|
645 else
|
|
Tercio@0
|
646 g = floor ( (value * 2) * 255 / 100)
|
|
Tercio@0
|
647 end
|
|
Tercio@0
|
648
|
|
Tercio@0
|
649 if (inverted) then
|
|
Tercio@0
|
650 return g/255, r/255, 0
|
|
Tercio@0
|
651 else
|
|
Tercio@0
|
652 return r/255, g/255, 0
|
|
Tercio@0
|
653 end
|
|
Tercio@0
|
654 end
|