annotate Hansgar_And_Franzok_Assist.lua @ 6:3121ac72fcda

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