fix(Core/Players): Fixed sending power regen update to nearby players. (#14043)

This commit is contained in:
UltraNix
2023-01-28 11:03:56 +01:00
committed by GitHub
parent 1441ae7d7c
commit 9ce8b8cf29
4 changed files with 38 additions and 9 deletions

View File

@@ -15449,16 +15449,28 @@ void Unit::SetMaxHealth(uint32 val)
SetHealth(val);
}
void Unit::SetPower(Powers power, uint32 val, bool withPowerUpdate /*= true*/)
void Unit::SetPower(Powers power, uint32 val, bool withPowerUpdate /*= true*/, bool fromRegenerate /* = false */)
{
if (GetPower(power) == val)
if (!fromRegenerate && GetPower(power) == val)
{
return;
}
uint32 maxPower = GetMaxPower(power);
if (maxPower < val)
{
val = maxPower;
}
SetStatInt32Value(static_cast<uint16>(UNIT_FIELD_POWER1) + power, val);
if (fromRegenerate)
{
UpdateUInt32Value(static_cast<uint16>(UNIT_FIELD_POWER1) + power, val);
AddToObjectUpdateIfNeeded();
}
else
{
SetStatInt32Value(static_cast<uint16>(UNIT_FIELD_POWER1) + power, val);
}
if (withPowerUpdate)
{
@@ -15474,10 +15486,14 @@ void Unit::SetPower(Powers power, uint32 val, bool withPowerUpdate /*= true*/)
{
Player* player = ToPlayer();
if (getPowerType() == power && player->NeedSendSpectatorData())
{
ArenaSpectator::SendCommand_UInt32Value(FindMap(), GetGUID(), "CPW", power == POWER_RAGE || power == POWER_RUNIC_POWER ? val / 10 : val);
}
if (player->GetGroup())
{
player->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_CUR_POWER);
}
}
else if (Pet* pet = ToCreature()->ToPet())
{
@@ -15485,12 +15501,16 @@ void Unit::SetPower(Powers power, uint32 val, bool withPowerUpdate /*= true*/)
{
Unit* owner = GetOwner();
if (owner && (owner->GetTypeId() == TYPEID_PLAYER) && owner->ToPlayer()->GetGroup())
{
owner->ToPlayer()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_CUR_POWER);
}
}
// Update the pet's character sheet with happiness damage bonus
if (pet->getPetType() == HUNTER_PET && power == POWER_HAPPINESS)
{
pet->UpdateDamagePhysical(BASE_ATTACK);
}
}
}