Giter Site home page Giter Site logo

swedgetimer's Introduction

SwedgeTimer

A heavily customisable Swing Timer addon for Wrath of the Lich King Classic, with specific implementations for every class in the game.

war6 hunt1

pal1 druid2

Class-dependent Settings

And rich features to track your latency, GCDs, buffs, and procs.

image

Highly customisable appearances

Change the look and feel of the timers however you want.

image

Install Instructions

It is recommended to install the addon from either Curseforge via the Curse Client, or from the Wago.io provider on the WoWUp Client:

This way, your addon will be automatically updated when a new release comes out.

If you want to install the addon manually, simply download the SwedgeTimer.zip file from the latest release on the releases page.

Usage Instructions

SwedgeTimer's config can be opened with the slashcommand \st in the chat box, or via the addon interface options in the WoW menu.

swedgetimer's People

Contributors

hypernormalisation avatar mullerdavid avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

terenberger

swedgetimer's Issues

Warrior shield bug

Long-standing issue with warrior shields lagging the UnitAttackSpeed API calls.

I could never replicate this in testing, turns out it's almost certainly something to do with ElvUI altering the UnitAttackSpeed calls?

At any rate, the following fix to the check_weapons func should fix:

function ST:check_weapons()
    -- Detect what weapon types are equipped.
    for hand in self:iter_hands() do
        local speed = SwingTimerInfo(hand)
        local speedMH, speedOH = UnitAttackSpeed("player")
        
        speedOH = speedOH or 0
        
        if hand == "mainhand" then
            speed = speedMH
        end
        if hand == "offhand" then
            speed = speedOH
        end
        
        if speed == 0 then
            self[hand].has_weapon = false
        else
            self[hand].has_weapon = true
        end
        -- self:Print(string.format("For hand %s, has_weapon = ", hand) .. tostring(self[hand].has_weapon))
    end
end

Let's isolate this and the glow bug and maybe do some improvements.

Lua Error after teleporting

I got the following message on my druid after taking a portal to Moonglade:

Message: ...\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:153: attempt to index field 'mainTimer' (a nil value)
Time: Fri Oct 21 09:34:57 2022
Count: 2
Stack: ...\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:153: attempt to index field 'mainTimer' (a nil value)
[string "@Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua"]:153: in function `SwingEnd'
[string "@Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua"]:97: in function <...\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:96>
[string "@Interface\SharedXML\C_TimerAugment.lua"]:16: in function <Interface\SharedXML\C_TimerAugment.lua:14>

Locals: self = <table> {
 PLAYER_ENTER_COMBAT = <function> defined @Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:467
 PLAYER_ENTERING_WORLD = <function> defined @Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:34
 offSpeed = 0
 lastMainSwing = 227750.298000
 skipNextAttackCount = 0
 skipNextAttackSpeedUpdateCount = 0
 preventSwingReset = false
 lastOffSwing = 227750.298000
 UNIT_SPELLCAST_SUCCEEDED = <function> defined @Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:343
 firstMainSwing = false
 RegisterCallback = <function> defined @Interface\AddOns\LibSharedMedia-3.0\CallbackHandler-1.0\CallbackHandler-1.0.lua:90
 UNIT_ATTACK_SPEED = <function> defined @Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:259
 UnregisterCallback = <function> defined @Interface\AddOns\LibSharedMedia-3.0\CallbackHandler-1.0\CallbackHandler-1.0.lua:153
 SwingEnd = <function> defined @Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:151
 CalculateDelta = <function> defined @Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:76
 Fire = <function> defined @Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:30
 lastRangedSwing = 227750.298000
 callbacks = <table> {
 }
 UNIT_SPELLCAST_START = <function> defined @Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:411
 isAttacking = false
 class = "DRUID"
 auraPreventSwingReset = false
 unitGUID = "Player-4440-029EB0A1"
 UNIT_SPELLCAST_INTERRUPTED_OR_FAILED = <function> defined @Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:308
 PLAYER_LEAVE_COMBAT = <function> defined @Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:478
 mainSpeed = 3.000000
 UnregisterAllCallbacks = <function> defined @Interface\AddOns\LibSharedMedia-3.0\CallbackHandler-1.0\CallbackHandler-1.0.lua:174
 PLAYER_EQUIPMENT_CHANGED = <function> defined @Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:456
 SwingTimerInfo = <function> defined @Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:176
 UNIT_SPELLCAST_CHANNEL_START = <function> defined @Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:435
 COMBAT_LOG_EVENT_UNFILTERED = <function> defined @Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:186
 rangedSpeed = 0
 rangedExpirationTime = 227750.298000
 UNIT_SPELLCAST_INTERRUPTED = <function> defined @Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:336
 offExpirationTime = 227753.298000
 channeling = false
 SwingStart = <function> defined @Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:82
 firstOffSwing = false
 mainExpirationTime = 227753.298000
 casting = false
 UNIT_SPELLCAST_CHANNEL_STOP = <function> defined @Interface\AddOns\SwedgeTimer\Libs\LibClassicSwingTimerAPI\LibClassicSwingTimerAPI.lua:441
 UNIT_SPELLCAST_FAILED = <function> defined @Interface\AddOns\SwedgeTimer\Lib

Option to enable/disable based on spec/equipped weapons

While very helpful for fury DPS, I find the swing timer rather distracting when I'm tanking. At the moment I'm manually enabling/disabling the swing timers when I change specs, but it would be nice if there was an option to enable/disable based on which spec is active.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.