public uint CalculateRageRegen(ref UnitStructs.CalcDamageInfo damageinfo, bool isCrit, Unit victim, bool asPlayer) { uint rageToRegen = 0; if (asPlayer) { bool isMain = damageinfo.attackType == AttackTypes.BASE_ATTACK; float speed = ((Player)this).BaseAttackTime; if (!isMain) { Item offHand = ((Player)this).Inventory.Backpack.GetItem((byte)InventorySlots.SLOT_OFFHAND); if (offHand != null) { speed = offHand.Template.WeaponSpeed; } } rageToRegen = (uint)(((15 * damageinfo.damage) / (4 * FormulaData.RageConversionValue(this.Level))) + (((isMain ? 3.5 : 1.75) * (isCrit ? 2 : 1)) / 2)); } else { rageToRegen = (uint)(2.5 * (damageinfo.damage / FormulaData.RageConversionValue(victim.Level))); } return(rageToRegen < 1 ? 1 : rageToRegen); }