Abilities interrupting automatic weapons (and shooting in general)

My understanding from the documentation is that only one ability can be active at a time, regardless of the settings for "Can be prevent" and "Prevent other abilities". If an ability and weapon have those options set to false, they will still just interrupt each other. So it's a choice of interrupt or prevent, but never simultaneous.

So the question I have is if there is any way to get around this in the case of using weapons, particularly automatic weapons that a player holds down to continuously fire. Just a simple example for conceptualizing: an ability that makes the player run faster for 5 seconds. I don't see a way to let them activate that without interrupting firing, or fire while it's still active. I feel like I'm missing something because this system seems very limiting.

You get around this by instead listening for the "bindingPressedEvent" to check when a player presses a key as opposed to using an ability to listen for key presses. An example of this can be found here.

--Store a table of "bindingPressedEvent" lsiteners for each player
local eventListeners = {}

--This function will be called whenever a player presses a key
function OnButtonPress(player, bindingName)

    --If the left mouse button was pressed, print a message
    if(bindingName == "ability_primary") then

        print("Left Mouse Button was pressed")


--This function will be called whenever a player joins the game
function OnJoin(player)

    --Bind the "OnButtonPress" function to "bindingPressedEvent" of the new player and store the resultant listener

    --in the "eventListener" variable
    local eventListener = player.bindingPressedEvent:Connect(OnButtonPress)

    --Add "eventListener" to the "eventListeners" table
    eventListeners[player.id] = eventListener

--Bind the "OnJoin" function to the "playerJoinedEvent"


--This function will be called whenever a player leaves the game

function OnLeave(player)

    --Disconnect this player's "bindingPressedEventListener"

    if(eventListeners[player.id] ~= nil) then

        --Remove this entry from the "eventListeners" list
        eventListeners[player.id] = nil

--Bind the "OnLeave" function to the "playerLeftEvent"


There is a little overhead with managing event listeners that was used in the script above to prevent some nasty bugs when players rejoin games (more on this can be found in this Discord post and this video)