Core/Units: Power handling improvements

* Don't include creature_template power multipliers in CreateMana updatefield
* Allow NPCs to have power types other than mana
* Add missing Essence config regeneration rate
* Fixed demon hunter powers not decaying immediately after combat
* Fixed some powers decaying immediately out of combat after energizing (for example holy power)
* Replace hardcoded list of powers to set to full on levelup with a db2 flag check
* Updated Creature::GetPowerIndex for 10.1 new power types
Port From (https://github.com/TrinityCore/TrinityCore/commit/1325e0c4b279d590acbcbb05d6abdf5fdb66a882)
This commit is contained in:
hondacrx
2023-05-23 05:44:42 -04:00
parent 06f99fda8b
commit d55f4f836f
13 changed files with 191 additions and 62 deletions
+9
View File
@@ -1172,6 +1172,15 @@ namespace Game.Entities
public void EnergizeBySpell(Unit victim, SpellInfo spellInfo, int damage, PowerType powerType)
{
Player player = victim.ToPlayer();
if (player != null)
{
var powerTypeEntry = Global.DB2Mgr.GetPowerTypeEntry(powerType);
if (powerTypeEntry != null)
if (powerTypeEntry.GetFlags().HasFlag(PowerTypeFlags.UseRegenInterrupt))
player.InterruptPowerRegen(powerType);
}
int gain = victim.ModifyPower(powerType, damage, false);
int overEnergize = damage - gain;
+9 -8
View File
@@ -1662,7 +1662,7 @@ namespace Game.Entities
}
}
public void UpdateDisplayPower()
public PowerType CalculateDisplayPowerType()
{
PowerType displayPower = PowerType.Mana;
switch (GetShapeshiftForm())
@@ -1686,22 +1686,18 @@ namespace Game.Entities
AuraEffect powerTypeAura = powerTypeAuras.First();
displayPower = (PowerType)powerTypeAura.GetMiscValue();
}
else if (GetTypeId() == TypeId.Player)
else
{
ChrClassesRecord cEntry = CliDB.ChrClassesStorage.LookupByKey(GetClass());
if (cEntry != null && cEntry.DisplayPower < PowerType.Max)
displayPower = cEntry.DisplayPower;
}
else if (GetTypeId() == TypeId.Unit)
{
Vehicle vehicle = GetVehicleKit();
if (vehicle)
{
PowerDisplayRecord powerDisplay = CliDB.PowerDisplayStorage.LookupByKey(vehicle.GetVehicleInfo().PowerDisplayID[0]);
if (powerDisplay != null)
displayPower = (PowerType)powerDisplay.ActualType;
else if (GetClass() == Class.Rogue)
displayPower = PowerType.Energy;
}
else
{
@@ -1719,7 +1715,12 @@ namespace Game.Entities
}
}
SetPowerType(displayPower);
return displayPower;
}
public void UpdateDisplayPower()
{
SetPowerType(CalculateDisplayPowerType());
}
public void SetSheath(SheathState sheathed)