No, it is still a problem as character speed/turn speed/anim speed is measured in seconds, not frames. Using a frame-by-frame timer is only acceptable for events that need to be triggered
actual frames apart, like for example scripts relying on objects that take 1-2 frames to load into the cell, or that can't be called within a few frames of another action taking place.
if(isBursting) set timer to timer + getsecondspassed if(timer > 0.05) Player.FireWeapon H52BurstFire set timer to timer -0.05 set isBursting to isBursting -1 endifelse If Player.GetAnimAction == 2 && Player.GetEquipped H52BurstFire set isBursting to 3 set timer to 0 endifendif
Is a lot neater, more efficient, and easier to edit in future. In the stuff I've done I've replaced GetEquipped with stuff in OnEquip blocks, as otherwise it'll keep checking the player's anim action each frame even if he's not got your gun equipped.
You can rework it so it'll work for NPCs by using a reference for the person firing the gun you find in the equip blocks. Since equip blocks don't fire for NPCs who spawn with the weapon already equipped, you can check for them too.
ref Gunmanshort Equippedshort isBurstingfloat Timerbegin onequipset Equipped to 1set Gunman to getcontainerendbegin onunequipset Equipped to 0endbegin ondropset Equipped to 0set Gunman to 0endbegin gamemodeif(Gunman) if(Equipped) if(isBursting) set timer to timer + getsecondspassed if(timer > 0.05) Gunman.FireWeapon H52BurstFire set timer to timer -0.05 set isBursting to isBursting -1 endif else If Gunman.GetAnimAction == 2 set isBursting to 3 set timer to 0 endif endif endifelse set Gunman to getContainer if(Gunman) set Equipped to Gunman.getEquipped ThisWeaponID endifendifend