From b653f2f8198f7a620837fc6c8e80a80ce9b12ebe Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Wed, 22 Apr 2020 03:13:02 +0200 Subject: [PATCH] Core/Units: ported power type updates from master branch --- src/server/game/AI/CoreAI/UnitAI.cpp | 2 +- src/server/game/AI/PlayerAI/PlayerAI.cpp | 2 +- src/server/game/DataStores/DBCStores.cpp | 4 +- src/server/game/DataStores/DBCStores.h | 2 +- .../game/Entities/Creature/Creature.cpp | 44 +++---- src/server/game/Entities/Creature/Creature.h | 1 + .../game/Entities/Creature/TemporarySummon.h | 2 + src/server/game/Entities/Object/Object.cpp | 8 -- src/server/game/Entities/Pet/Pet.cpp | 50 ++++++-- src/server/game/Entities/Player/Player.cpp | 90 ++++----------- src/server/game/Entities/Player/Player.h | 1 + src/server/game/Entities/Unit/StatSystem.cpp | 38 +++++- src/server/game/Entities/Unit/Unit.cpp | 108 +++++++++++------- src/server/game/Entities/Unit/Unit.h | 8 +- src/server/game/Entities/Vehicle/Vehicle.cpp | 52 +-------- src/server/game/Handlers/GroupHandler.cpp | 16 +-- .../game/Spells/Auras/SpellAuraEffects.cpp | 15 +-- src/server/game/Spells/Spell.cpp | 6 +- src/server/game/Spells/SpellEffects.cpp | 12 +- .../boss_omnotron_defense_system.cpp | 2 +- .../BlackwingLair/boss_vaelastrasz.cpp | 2 +- .../Deadmines/boss_foe_reaper_5000.cpp | 2 +- .../Deadmines/instance_deadmines.cpp | 2 +- .../EasternKingdoms/Karazhan/boss_moroes.cpp | 2 +- .../BattleForMountHyjal/boss_kazrogal.cpp | 2 +- .../Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp | 2 +- .../boss_faction_champions.cpp | 6 +- .../TrialOfTheCrusader/boss_lord_jaraxxus.cpp | 2 +- .../ForgeOfSouls/boss_bronjahm.cpp | 2 +- .../boss_deathbringer_saurfang.cpp | 2 +- .../IcecrownCitadel/boss_sindragosa.cpp | 2 +- .../boss_valithria_dreamwalker.cpp | 2 +- .../Northrend/Naxxramas/boss_kelthuzad.cpp | 2 +- .../Auchindoun/SethekkHalls/boss_anzu.cpp | 2 +- .../Outland/zone_blades_edge_mountains.cpp | 2 +- .../scripts/Outland/zone_zangarmarsh.cpp | 2 +- src/server/scripts/Spells/spell_generic.cpp | 6 +- src/server/scripts/Spells/spell_item.cpp | 6 +- src/server/scripts/Spells/spell_priest.cpp | 2 +- src/server/scripts/World/duel_reset.cpp | 24 +--- 40 files changed, 259 insertions(+), 278 deletions(-) diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp index badfc9814c..bb04c4d56b 100644 --- a/src/server/game/AI/CoreAI/UnitAI.cpp +++ b/src/server/game/AI/CoreAI/UnitAI.cpp @@ -373,7 +373,7 @@ bool PowerUsersSelector::operator()(Unit const* target) const if (!_me || !target) return false; - if (target->getPowerType() != _power) + if (target->GetPowerType() != _power) return false; if (_playerOnly && target->GetTypeId() != TYPEID_PLAYER) diff --git a/src/server/game/AI/PlayerAI/PlayerAI.cpp b/src/server/game/AI/PlayerAI/PlayerAI.cpp index 7704044384..5fbb205268 100644 --- a/src/server/game/AI/PlayerAI/PlayerAI.cpp +++ b/src/server/game/AI/PlayerAI/PlayerAI.cpp @@ -823,7 +823,7 @@ PlayerAI::TargetedSpell SimpleCharmedPlayerAI::SelectAppropriateCastForSpec() VerifyAndPushSpellCast(spells, SPELL_FREEZING_ARROW, TARGET_VICTIM, 2); VerifyAndPushSpellCast(spells, SPELL_RAPID_FIRE, TARGET_NONE, 10); VerifyAndPushSpellCast(spells, SPELL_KILL_SHOT, TARGET_VICTIM, 10); - if (me->GetVictim() && me->GetVictim()->getPowerType() == POWER_MANA && !me->GetVictim()->GetAuraApplicationOfRankedSpell(SPELL_VIPER_STING, me->GetGUID())) + if (me->GetVictim() && me->GetVictim()->GetPowerType() == POWER_MANA && !me->GetVictim()->GetAuraApplicationOfRankedSpell(SPELL_VIPER_STING, me->GetGUID())) VerifyAndPushSpellCast(spells, SPELL_VIPER_STING, TARGET_VICTIM, 5); switch (GetSpec()) diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index 77b4d3fe02..a63bdf0b56 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -1078,9 +1078,9 @@ CharSectionsEntry const* DBCManager::GetCharSectionEntry(uint8 race, CharSection return nullptr; } -uint32 DBCManager::GetPowerIndexByClass(uint32 powerType, uint32 classId) +uint32 DBCManager::GetPowerIndexByClass(Powers power, uint32 classId) { - return PowersByClass[classId][powerType]; + return PowersByClass[classId][power]; } uint32 ScalingStatValuesEntry::GetStatMultiplier(uint32 inventoryType) const diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h index 43b5d1f56a..099eb8fd52 100644 --- a/src/server/game/DataStores/DBCStores.h +++ b/src/server/game/DataStores/DBCStores.h @@ -239,7 +239,7 @@ public: PvPDifficultyEntry const* GetBattlegroundBracketById(uint32 mapid, BattlegroundBracketId id); CharStartOutfitEntry const* GetCharStartOutfitEntry(uint8 race, uint8 class_, uint8 gender); CharSectionsEntry const* GetCharSectionEntry(uint8 race, CharSectionType genType, uint8 gender, uint8 type, uint8 color); - uint32 GetPowerIndexByClass(uint32 powerType, uint32 classId); + uint32 GetPowerIndexByClass(Powers power, uint32 classId); static bool IsInArea(uint32 objectAreaId, uint32 areaId); static LFGDungeonEntry const* GetLFGDungeon(uint32 mapId, Difficulty difficulty); std::vector const* GetPhasesForGroup(uint32 group); diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 1f966e602a..2d560d82b4 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -535,18 +535,25 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/, if (updateLevel) SelectLevel(); - UpdateLevelDependantStats(); + // Do not update guardian stats here - they are handled in Guardian::InitStatsForLevel() + if (!IsGuardian()) + { + uint32 previousHealth = GetHealth(); + UpdateLevelDependantStats(); + if (previousHealth > 0) + SetHealth(previousHealth); - SetMeleeDamageSchool(SpellSchools(cInfo->dmgschool)); - SetModifierValue(UNIT_MOD_RESISTANCE_HOLY, BASE_VALUE, float(cInfo->resistance[SPELL_SCHOOL_HOLY])); - SetModifierValue(UNIT_MOD_RESISTANCE_FIRE, BASE_VALUE, float(cInfo->resistance[SPELL_SCHOOL_FIRE])); - SetModifierValue(UNIT_MOD_RESISTANCE_NATURE, BASE_VALUE, float(cInfo->resistance[SPELL_SCHOOL_NATURE])); - SetModifierValue(UNIT_MOD_RESISTANCE_FROST, BASE_VALUE, float(cInfo->resistance[SPELL_SCHOOL_FROST])); - SetModifierValue(UNIT_MOD_RESISTANCE_SHADOW, BASE_VALUE, float(cInfo->resistance[SPELL_SCHOOL_SHADOW])); - SetModifierValue(UNIT_MOD_RESISTANCE_ARCANE, BASE_VALUE, float(cInfo->resistance[SPELL_SCHOOL_ARCANE])); + SetMeleeDamageSchool(SpellSchools(cInfo->dmgschool)); + SetModifierValue(UNIT_MOD_RESISTANCE_HOLY, BASE_VALUE, float(cInfo->resistance[SPELL_SCHOOL_HOLY])); + SetModifierValue(UNIT_MOD_RESISTANCE_FIRE, BASE_VALUE, float(cInfo->resistance[SPELL_SCHOOL_FIRE])); + SetModifierValue(UNIT_MOD_RESISTANCE_NATURE, BASE_VALUE, float(cInfo->resistance[SPELL_SCHOOL_NATURE])); + SetModifierValue(UNIT_MOD_RESISTANCE_FROST, BASE_VALUE, float(cInfo->resistance[SPELL_SCHOOL_FROST])); + SetModifierValue(UNIT_MOD_RESISTANCE_SHADOW, BASE_VALUE, float(cInfo->resistance[SPELL_SCHOOL_SHADOW])); + SetModifierValue(UNIT_MOD_RESISTANCE_ARCANE, BASE_VALUE, float(cInfo->resistance[SPELL_SCHOOL_ARCANE])); - SetCanModifyStats(true); - UpdateAllStats(); + SetCanModifyStats(true); + UpdateAllStats(); + } // checked and error show at loading templates if (FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(cInfo->faction)) @@ -783,7 +790,7 @@ void Creature::Update(uint32 diff) if (HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER)) { - if (getPowerType() == POWER_ENERGY) + if (GetPowerType() == POWER_ENERGY) Regenerate(POWER_ENERGY); else RegenerateMana(); @@ -1324,23 +1331,18 @@ void Creature::UpdateLevelDependantStats() switch (getClass()) { - case CLASS_WARRIOR: - setPowerType(POWER_RAGE); + case UNIT_CLASS_PALADIN: + case UNIT_CLASS_MAGE: + SetMaxPower(POWER_MANA, mana); + SetFullPower(POWER_MANA); break; - case CLASS_ROGUE: - setPowerType(POWER_ENERGY); - break; - default: - SetMaxPower(POWER_MANA, mana); // MAX Mana - SetPower(POWER_MANA, mana); + default: // We don't set max power here, 0 makes power bar hidden break; } SetModifierValue(UNIT_MOD_HEALTH, BASE_VALUE, (float)health); - SetModifierValue(UNIT_MOD_MANA, BASE_VALUE, (float)mana); // damage - float basedamage = stats->GenerateBaseDamage(cInfo); float weaponBaseMinDamage = basedamage; diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index cd3d9dd2a7..48a98ef4f4 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -143,6 +143,7 @@ class TC_GAME_API Creature : public Unit, public GridObject, public Ma void UpdateArmor() override; void UpdateMaxHealth() override; void UpdateMaxPower(Powers power) override; + uint32 GetPowerIndex(Powers power) const override; void UpdateAttackPowerAndDamage(bool ranged = false) override; void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float& minDamage, float& maxDamage) override; diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h index b617d246e9..f8b677ce78 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.h +++ b/src/server/game/Entities/Creature/TemporarySummon.h @@ -46,6 +46,7 @@ enum PetEntries // Death Knight Pet/Minions ENTRY_GHOUL = 26125, + ENTRY_RISEN_ALLY = 30230, ENTRY_BLOODWORM = 28017, ENTRY_RUNIC_WEAPON = 27893, ENTRY_GARGOYLE = 27829, @@ -108,6 +109,7 @@ class TC_GAME_API Minion : public TempSummon float GetFollowAngle() const override { return m_followAngle; } void SetFollowAngle(float angle) { m_followAngle = angle; } bool IsPetGhoul() const { return GetEntry() == ENTRY_GHOUL; } // Ghoul may be guardian or pet + bool IsRisenAlly() const { return GetEntry() == ENTRY_RISEN_ALLY; } bool IsSpiritWolf() const { return GetEntry() == ENTRY_SPIRIT_WOLF; } // Spirit wolf from feral spirits bool IsGuardianPet() const; bool IsWarlockMinion() const; diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 11d8fd8b52..54bc5c4f79 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2144,14 +2144,6 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert summon->SetHealth(health); } - // Initialize guardian stats - if (summon->HasUnitTypeMask(UNIT_MASK_GUARDIAN) && summoner) - { - ((Guardian*)summon)->UpdateAllStats(); - summon->SetPower(POWER_MANA, summon->GetMaxPower(POWER_MANA)); - summon->SetFullHealth(); - } - AddToMap(summon->ToCreature()); summon->InitSummon(); diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index b989ed7b3e..d021e983c2 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -218,7 +218,6 @@ bool Pet::LoadPetData(Player* owner, uint32 petEntry, uint32 petnumber, bool cur case HUNTER_PET: SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, CLASS_WARRIOR); SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, GENDER_NONE); - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_POWER_TYPE, POWER_FOCUS); SetSheath(SHEATH_STATE_MELEE); SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, playerPetData->Renamed ? UNIT_CAN_BE_ABANDONED : UNIT_CAN_BE_RENAMED | UNIT_CAN_BE_ABANDONED); SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); @@ -599,7 +598,7 @@ void Pet::Update(uint32 diff) m_petFocusRegenTimer -= diff; if (m_petFocusRegenTimer <= 0) { - if (getPowerType() == POWER_FOCUS) + if (GetPowerType() == POWER_FOCUS) Regenerate(POWER_FOCUS); m_petFocusRegenTimer += PetFocusRegenInterval; @@ -779,7 +778,6 @@ bool Pet::CreateBaseAtTamed(CreatureTemplate const* cinfo, Map* map) if (!Create(guid, map, cinfo->Entry, petId)) return false; - setPowerType(POWER_FOCUS); SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, 0); SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, 0); SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32(sObjectMgr->GetXPForLevel(getLevel()+1)*PET_XP_FACTOR)); @@ -790,7 +788,6 @@ bool Pet::CreateBaseAtTamed(CreatureTemplate const* cinfo, Map* map) SetUInt32Value(UNIT_FIELD_BYTES_0, 0x02020100); SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, CLASS_WARRIOR); SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, GENDER_NONE); - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_POWER_TYPE, POWER_FOCUS); SetSheath(SHEATH_STATE_MELEE); SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, UNIT_CAN_BE_RENAMED | UNIT_CAN_BE_ABANDONED); } @@ -866,8 +863,7 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) if (pInfo) // exist in DB { SetCreateHealth(pInfo->health); - if (petType != HUNTER_PET) //hunter pet use focus - SetCreateMana(pInfo->mana); + SetCreateMana(pInfo->mana); if (pInfo->armor > 0) SetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE, float(pInfo->armor)); @@ -877,11 +873,16 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) } else // not exist in DB, use some default fake data { + // remove elite bonuses included in DB values // remove elite bonuses included in DB values CreatureBaseStats const* stats = sObjectMgr->GetCreatureBaseStats(petlevel, cinfo->unit_class); - SetCreateHealth(stats->BaseHealth[cinfo->expansion]); - SetCreateMana(stats->BaseMana); + float healthmod = _GetHealthMod(cinfo->rank); + uint32 basehp = stats->GenerateHealth(cinfo); + uint32 health = uint32(basehp * healthmod); + uint32 mana = stats->GenerateMana(cinfo); + SetCreateHealth(health); + SetCreateMana(mana); SetCreateStat(STAT_STRENGTH, 22); SetCreateStat(STAT_AGILITY, 22); SetCreateStat(STAT_STAMINA, 25); @@ -892,6 +893,18 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4))); } + // Power + if (petType == HUNTER_PET) // Hunter pets have focus + SetPowerType(POWER_FOCUS); + else if (IsPetGhoul() || IsRisenAlly()) // DK pets have energy + { + SetPowerType(POWER_ENERGY); + SetFullPower(POWER_ENERGY); + } + else + SetPowerType(POWER_MANA); + + // Damage SetBonusDamage(0); switch (petType) { @@ -1066,10 +1079,31 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) if (!HasAura(62137)) // Avoidance CastSpell(this, 62137, true); break; + default: + { + /* ToDo: Check what 5f5d2028 broke/fixed and how much of Creature::UpdateLevelDependantStats() + * should be copied here (or moved to another method or if that function should be called here + * or not just for this default case) + */ + CreatureBaseStats const* stats = sObjectMgr->GetCreatureBaseStats(petlevel, cinfo->unit_class); + float basedamage = stats->GenerateBaseDamage(cinfo); + + float weaponBaseMinDamage = basedamage; + float weaponBaseMaxDamage = basedamage * 1.5f; + + SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, weaponBaseMinDamage); + SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, weaponBaseMaxDamage); + break; + } } break; } } + + UpdateAllStats(); + + SetFullHealth(); + SetPower(POWER_MANA, GetMaxPower(POWER_MANA)); return true; } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index a8463a0da1..4988aebb0e 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -558,19 +558,7 @@ bool Player::Create(ObjectGuid::LowType guidlow, CharacterCreateInfo* createInfo // apply original stats mods before spell loading or item equipment that call before equip _RemoveStatsMods() UpdateMaxHealth(); // Update max Health (for add bonus from stamina) SetFullHealth(); - if (getPowerType() == POWER_MANA) - { - UpdateMaxPower(POWER_MANA); // Update max Mana (for add bonus from intellect) - SetPower(POWER_MANA, GetMaxPower(POWER_MANA)); - } - - if (getPowerType() == POWER_RUNIC_POWER) - { - SetPower(POWER_RUNE, 8); - SetMaxPower(POWER_RUNE, 8); - SetPower(POWER_RUNIC_POWER, 0); - SetMaxPower(POWER_RUNIC_POWER, 1000); - } + SetFullPower(POWER_MANA); // original spells LearnDefaultSkills(); @@ -2051,17 +2039,17 @@ void Player::RegenerateHealth() void Player::ResetAllPowers() { - SetHealth(GetMaxHealth()); - switch (getPowerType()) + SetFullHealth(); + switch (GetPowerType()) { case POWER_MANA: - SetPower(POWER_MANA, GetMaxPower(POWER_MANA)); + SetFullPower(POWER_MANA); break; case POWER_RAGE: SetPower(POWER_RAGE, 0); break; case POWER_ENERGY: - SetPower(POWER_ENERGY, GetMaxPower(POWER_ENERGY)); + SetFullPower(POWER_ENERGY); break; case POWER_RUNIC_POWER: SetPower(POWER_RUNIC_POWER, 0); @@ -2483,11 +2471,7 @@ void Player::GiveLevel(uint8 level) // set current level health and mana/energy to maximum after applying all mods. SetFullHealth(); - SetPower(POWER_MANA, GetMaxPower(POWER_MANA)); - SetPower(POWER_ENERGY, GetMaxPower(POWER_ENERGY)); - if (GetPower(POWER_RAGE) > GetMaxPower(POWER_RAGE)) - SetPower(POWER_RAGE, GetMaxPower(POWER_RAGE)); - SetPower(POWER_FOCUS, 0); + SetFullPower(POWER_MANA); // update level to hunter/summon pet if (Pet* pet = GetPet()) @@ -2726,11 +2710,11 @@ void Player::InitStatsForLevel(bool reapplyMods) // set current level health and mana/energy to maximum after applying all mods. SetFullHealth(); - SetPower(POWER_MANA, GetMaxPower(POWER_MANA)); - SetPower(POWER_ENERGY, GetMaxPower(POWER_ENERGY)); + SetFullPower(POWER_MANA); + SetFullPower(POWER_ENERGY); if (GetPower(POWER_RAGE) > GetMaxPower(POWER_RAGE)) - SetPower(POWER_RAGE, GetMaxPower(POWER_RAGE)); - SetPower(POWER_FOCUS, GetMaxPower(POWER_FOCUS)); + SetFullPower(POWER_RAGE); + SetFullPower(POWER_FOCUS); SetPower(POWER_RUNIC_POWER, 0); // update level to hunter/summon pet @@ -17713,6 +17697,7 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder* holder) //mails are loaded only when needed ;-) - when player in game click on mailbox. //_LoadMail(); + UpdateDisplayPower(); _LoadTalents(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_TALENTS)); _LoadSpells(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_SPELLS)); @@ -17785,11 +17770,11 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder* holder) UpdateAllStats(); // restore remembered power/health values (but not more max values) - SetHealth(savedHealth > GetMaxHealth() ? GetMaxHealth() : savedHealth); + SetHealth(savedHealth); uint32 loadedPowers = 0; for (uint32 i = 0; i < MAX_POWERS; ++i) { - if (GetPowerIndex(i) != MAX_POWERS) + if (GetPowerIndex(Powers(i)) != MAX_POWERS) { uint32 savedPower = fields[52 + loadedPowers].GetUInt32(); uint32 maxPower = GetUInt32Value(UNIT_FIELD_MAXPOWER1 + loadedPowers); @@ -19669,7 +19654,7 @@ void Player::SaveToDB(CharacterDatabaseTransaction trans, bool create /* = false uint32 storedPowers = 0; for (uint32 i = 0; i < MAX_POWERS; ++i) { - if (GetPowerIndex(i) != MAX_POWERS) + if (GetPowerIndex(Powers(i)) != MAX_POWERS) { stmt->setUInt32(index++, GetUInt32Value(UNIT_FIELD_POWER1 + storedPowers)); if (++storedPowers >= MAX_POWERS_PER_CLASS) @@ -19809,7 +19794,7 @@ void Player::SaveToDB(CharacterDatabaseTransaction trans, bool create /* = false uint32 storedPowers = 0; for (uint32 i = 0; i < MAX_POWERS; ++i) { - if (GetPowerIndex(i) != MAX_POWERS) + if (GetPowerIndex(Powers(i)) != MAX_POWERS) { stmt->setUInt32(index++, GetUInt32Value(UNIT_FIELD_POWER1 + storedPowers)); if (++storedPowers >= MAX_POWERS_PER_CLASS) @@ -22073,29 +22058,7 @@ void Player::InitDataForForm(bool reapplyMods) else SetRegularAttackTime(); - switch (form) - { - case FORM_GHOUL: - case FORM_CAT: - { - if (getPowerType() != POWER_ENERGY) - setPowerType(POWER_ENERGY); - break; - } - case FORM_BEAR: - { - if (getPowerType() != POWER_RAGE) - setPowerType(POWER_RAGE); - break; - } - default: // 0, for example - { - ChrClassesEntry const* cEntry = sChrClassesStore.LookupEntry(getClass()); - if (cEntry && cEntry->DisplayPower < MAX_POWERS && uint32(getPowerType()) != cEntry->DisplayPower) - setPowerType(Powers(cEntry->DisplayPower)); - break; - } - } + UpdateDisplayPower(); // update auras at form change, ignore this at mods reapply (.reset stats/etc) when form not change. if (!reapplyMods) @@ -24873,21 +24836,17 @@ void Player::ResurrectUsingRequestData() return; } + uint32 resurrectHealth = _resurrectionData->Health; + uint32 resurrectMana = _resurrectionData->Mana; + ResurrectPlayer(0.0f, false); - if (GetMaxHealth() > _resurrectionData->Health) - SetHealth(_resurrectionData->Health); - else - SetFullHealth(); - - if (uint32(GetMaxPower(POWER_MANA)) > _resurrectionData->Mana) - SetPower(POWER_MANA, _resurrectionData->Mana); - else - SetPower(POWER_MANA, GetMaxPower(POWER_MANA)); + SetHealth(resurrectHealth); + SetPower(POWER_MANA, resurrectMana); SetPower(POWER_RAGE, 0); - SetPower(POWER_ENERGY, GetMaxPower(POWER_ENERGY)); - SetPower(POWER_FOCUS, GetMaxPower(POWER_FOCUS)); + SetFullPower(POWER_ENERGY); + SetFullPower(POWER_FOCUS); SetPower(POWER_ECLIPSE, 0); if (uint32 aura = _resurrectionData->Aura) @@ -27100,7 +27059,7 @@ void Player::ActivateSpec(uint8 spec) })); } - Powers pw = getPowerType(); + Powers pw = GetPowerType(); if (pw != POWER_MANA) SetPower(POWER_MANA, 0); // Mana must be 0 even if it isn't the active power type. @@ -27838,7 +27797,6 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy pet->SetCreatorGUID(GetGUID()); pet->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, GetFaction()); - pet->setPowerType(POWER_MANA); pet->SetUInt64Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); pet->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); pet->InitStatsForLevel(getLevel()); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index e24e1d61dc..6ce5211266 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1798,6 +1798,7 @@ class TC_GAME_API Player : public Unit, public GridObject void UpdateArmor() override; void UpdateMaxHealth() override; void UpdateMaxPower(Powers power) override; + uint32 GetPowerIndex(Powers power) const override; void UpdateAttackPowerAndDamage(bool ranged = false) override; void ApplySpellPowerBonus(int32 amount, bool apply); void UpdateSpellDamageAndHealingBonus(); diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index e371ea6c81..1f50a8acd8 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -306,8 +306,17 @@ void Player::UpdateMaxHealth() SetMaxHealth((uint32)value); } +uint32 Player::GetPowerIndex(Powers power) const +{ + return sDBCManager.GetPowerIndexByClass(power, getClass()); +} + void Player::UpdateMaxPower(Powers power) { + uint32 powerIndex = GetPowerIndex(power); + if (powerIndex == MAX_POWERS || powerIndex >= MAX_POWERS_PER_CLASS) + return; + UnitMods unitMod = UnitMods(UNIT_MOD_POWER_START + power); float bonusPower = (power == POWER_MANA && GetCreatePowers(power) > 0) ? GetManaBonusFromIntellect() : 0; @@ -317,7 +326,7 @@ void Player::UpdateMaxPower(Powers power) value += GetModifierValue(unitMod, TOTAL_VALUE) + bonusPower; value *= GetModifierValue(unitMod, TOTAL_PCT); - SetMaxPower(power, uint32(value)); + SetMaxPower(power, (int32)std::lroundf(value)); } void Player::UpdateAttackPowerAndDamage(bool ranged) @@ -880,12 +889,28 @@ void Creature::UpdateMaxHealth() SetMaxHealth(uint32(value)); } +uint32 Creature::GetPowerIndex(Powers power) const +{ + if (power == GetPowerType()) + return 0; + if (power == POWER_ALTERNATE_POWER) + return 1; + return MAX_POWERS; +} + void Creature::UpdateMaxPower(Powers power) { + if (GetPowerIndex(power) == MAX_POWERS) + return; + UnitMods unitMod = UnitMods(UNIT_MOD_POWER_START + power); - float value = GetTotalAuraModValue(unitMod); - SetMaxPower(power, uint32(value)); + float value = GetModifierValue(unitMod, BASE_VALUE) + GetCreatePowers(power); + value *= GetModifierValue(unitMod, BASE_PCT); + value += GetModifierValue(unitMod, TOTAL_VALUE); + value *= GetModifierValue(unitMod, TOTAL_PCT); + + SetMaxPower(power, uint32(std::lroundf(value))); } void Creature::UpdateAttackPowerAndDamage(bool ranged) @@ -1018,6 +1043,8 @@ bool Guardian::UpdateStats(Stats stat) bool Guardian::UpdateAllStats() { + UpdateMaxHealth(); + for (uint8 i = STAT_STRENGTH; i < MAX_STATS; ++i) UpdateStats(Stats(i)); @@ -1069,6 +1096,9 @@ void Guardian::UpdateMaxHealth() void Guardian::UpdateMaxPower(Powers power) { + if (GetPowerIndex(power) == MAX_POWERS) + return; + UnitMods unitMod = UnitMods(UNIT_MOD_POWER_START + power); float addValue = (power == POWER_MANA) ? GetStat(STAT_INTELLECT) - GetCreateStat(STAT_INTELLECT) : 0.0f; @@ -1079,7 +1109,7 @@ void Guardian::UpdateMaxPower(Powers power) value += GetModifierValue(unitMod, TOTAL_VALUE) + addValue * multiplicator; value *= GetModifierValue(unitMod, TOTAL_PCT); - SetMaxPower(power, uint32(value)); + SetMaxPower(power, int32(value)); } void Guardian::UpdateAttackPowerAndDamage(bool ranged) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 86be436b77..6ddfd30ad2 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -862,7 +862,7 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam } // Rage from Damage made (only from direct weapon damage) - if (cleanDamage && damagetype == DIRECT_DAMAGE && this != victim && getPowerType() == POWER_RAGE) + if (cleanDamage && damagetype == DIRECT_DAMAGE && this != victim && GetPowerType() == POWER_RAGE) { uint32 rage = uint32(GetAttackTime(cleanDamage->attackType) / 1000 * 6.5f); @@ -887,7 +887,7 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam if (!damage) { // Rage from absorbed damage - if (cleanDamage && cleanDamage->absorbed_damage && victim->getPowerType() == POWER_RAGE) + if (cleanDamage && cleanDamage->absorbed_damage && victim->GetPowerType() == POWER_RAGE) victim->RewardRage(cleanDamage->absorbed_damage, false); return 0; @@ -985,7 +985,7 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam } // Rage from damage received - if (this != victim && victim->getPowerType() == POWER_RAGE) + if (this != victim && victim->GetPowerType() == POWER_RAGE) { uint32 rage_damage = damage + (cleanDamage ? cleanDamage->absorbed_damage : 0); victim->RewardRage(rage_damage, false); @@ -5385,9 +5385,9 @@ void Unit::SendAttackStateUpdate(uint32 HitInfo, Unit* target, uint8 /*SwingType SendAttackStateUpdate(&dmgInfo); } -void Unit::setPowerType(Powers new_powertype) +void Unit::SetPowerType(Powers new_powertype) { - if (getPowerType() == new_powertype) + if (GetPowerType() == new_powertype) return; SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_POWER_TYPE, new_powertype); @@ -5407,30 +5407,74 @@ void Unit::setPowerType(Powers new_powertype) } } - float powerMultiplier = 1.0f; - if (!IsPet()) - if (Creature* creature = ToCreature()) - powerMultiplier = creature->GetCreatureTemplate()->ModMana; + // Update max power + UpdateMaxPower(new_powertype); + // Update current power switch (new_powertype) { - default: - case POWER_MANA: + case POWER_MANA: // Keep the same (druid form switching...) + case POWER_ENERGY: break; - case POWER_RAGE: - SetMaxPower(POWER_RAGE, uint32(std::ceil(GetCreatePowers(POWER_RAGE) * powerMultiplier))); + case POWER_RAGE: // Reset to zero SetPower(POWER_RAGE, 0); break; - case POWER_FOCUS: - SetMaxPower(POWER_FOCUS, uint32(std::ceil(GetCreatePowers(POWER_FOCUS) * powerMultiplier))); - SetPower(POWER_FOCUS, uint32(std::ceil(GetCreatePowers(POWER_FOCUS) * powerMultiplier))); + case POWER_FOCUS: // Make it full + SetFullPower(new_powertype); break; - case POWER_ENERGY: - SetMaxPower(POWER_ENERGY, uint32(std::ceil(GetCreatePowers(POWER_ENERGY) * powerMultiplier))); + default: break; } } +void Unit::UpdateDisplayPower() +{ + Powers displayPower = POWER_MANA; + switch (GetShapeshiftForm()) + { + case FORM_GHOUL: + case FORM_CAT: + displayPower = POWER_ENERGY; + break; + case FORM_BEAR: + displayPower = POWER_RAGE; + break; + case FORM_TRAVEL: + case FORM_GHOSTWOLF: + displayPower = POWER_MANA; + break; + default: + { + if (GetTypeId() == TYPEID_PLAYER) + { + ChrClassesEntry const* cEntry = sChrClassesStore.LookupEntry(getClass()); + if (cEntry && cEntry->DisplayPower < MAX_POWERS) + displayPower = Powers(cEntry->DisplayPower); + } + else if (GetTypeId() == TYPEID_UNIT) + { + if (Vehicle* vehicle = GetVehicleKit()) + { + if (PowerDisplayEntry const* powerDisplay = sPowerDisplayStore.LookupEntry(vehicle->GetVehicleInfo()->PowerDisplayID[0])) // To-do: 4.x has 3 power display id fields. + displayPower = Powers(powerDisplay->ActualType); + else if (getClass() == CLASS_ROGUE) + displayPower = POWER_ENERGY; + } + else if (Pet* pet = ToPet()) + { + if (pet->getPetType() == HUNTER_PET) // Hunter pets have focus + displayPower = POWER_FOCUS; + else if (pet->IsPetGhoul() || pet->IsRisenAlly()) // DK pets have energy + displayPower = POWER_ENERGY; + } + } + break; + } + } + + SetPowerType(displayPower); +} + FactionTemplateEntry const* Unit::GetFactionTemplateEntry() const { FactionTemplateEntry const* entry = sFactionTemplateStore.LookupEntry(GetFaction()); @@ -6117,14 +6161,10 @@ void Unit::SetMinion(Minion* minion, bool apply) // PvP, FFAPvP minion->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG)); - // Ghoul pets have energy instead of mana (is anywhere better place for this code?) - if (minion->IsPetGhoul()) - minion->setPowerType(POWER_ENERGY); - // Send infinity cooldown - client does that automatically but after relog cooldown needs to be set again SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(minion->GetUInt32Value(UNIT_CREATED_BY_SPELL)); - if (spellInfo && (spellInfo->IsCooldownStartedOnEvent())) + if (spellInfo && spellInfo->IsCooldownStartedOnEvent()) GetSpellHistory()->StartCooldown(spellInfo, 0, nullptr, true); } else @@ -9171,7 +9211,7 @@ void Unit::setDeathState(DeathState s) // without this when removing IncreaseMaxHealth aura player may stuck with 1 hp // do not why since in IncreaseMaxHealth currenthealth is checked SetHealth(0); - SetPower(getPowerType(), 0); + SetPower(GetPowerType(), 0); SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); // players in instance don't have ZoneScript, but they have InstanceScript @@ -10192,26 +10232,6 @@ void Unit::SetMaxPower(Powers power, int32 val) SetPower(power, val); } -uint32 Unit::GetPowerIndex(uint32 powerType) const -{ - /// This is here because hunter pets are of the warrior class. - /// With the current implementation, the core only gives them - /// POWER_RAGE, so we enforce the class to hunter so that they - /// effectively get focus power. - /// Also, Death Knight ghouls are of Mage class. - /// this is necessary so they get energy - uint32 classId = getClass(); - if (Pet const* pet = ToPet()) - { - if (pet->IsHunterPet()) - classId = CLASS_HUNTER; - else if (pet->IsPetGhoul()) - classId = CLASS_ROGUE; - } - - return sDBCManager.GetPowerIndexByClass(powerType, classId); -} - int32 Unit::GetCreatePowers(Powers power) const { switch (power) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index c222a45070..37b1ba7a3d 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1102,8 +1102,9 @@ class TC_GAME_API Unit : public WorldObject int32 ModifyHealth(int32 val); int32 GetHealthGain(int32 dVal); - Powers getPowerType() const { return Powers(GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_POWER_TYPE)); } - void setPowerType(Powers power); + Powers GetPowerType() const { return Powers(GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_POWER_TYPE)); } + void SetPowerType(Powers power); + void UpdateDisplayPower(); int32 GetPower(Powers power) const; int32 GetMinPower(Powers power) const { return power == POWER_ECLIPSE ? -100 : 0; } int32 GetMaxPower(Powers power) const; @@ -1111,6 +1112,7 @@ class TC_GAME_API Unit : public WorldObject void SetPower(Powers power, int32 val); void SetMaxPower(Powers power, int32 val); void SetPowerBarID(uint32 id) { _powerBarId = id; } + inline void SetFullPower(Powers power) { SetPower(power, GetMaxPower(power)); } // returns the change in power int32 ModifyPower(Powers power, int32 val); @@ -1575,7 +1577,6 @@ class TC_GAME_API Unit : public WorldObject uint32 GetCreateHealth() const { return GetUInt32Value(UNIT_FIELD_BASE_HEALTH); } void SetCreateMana(uint32 val) { SetUInt32Value(UNIT_FIELD_BASE_MANA, val); } uint32 GetCreateMana() const { return GetUInt32Value(UNIT_FIELD_BASE_MANA); } - uint32 GetPowerIndex(uint32 powerType) const; int32 GetCreatePowers(Powers power) const; float GetPosStat(Stats stat) const { return GetFloatValue(UNIT_FIELD_POSSTAT0+stat); } float GetNegStat(Stats stat) const { return GetFloatValue(UNIT_FIELD_NEGSTAT0+stat); } @@ -1648,6 +1649,7 @@ class TC_GAME_API Unit : public WorldObject virtual void UpdateArmor() = 0; virtual void UpdateMaxHealth() = 0; virtual void UpdateMaxPower(Powers power) = 0; + virtual uint32 GetPowerIndex(Powers power) const = 0; virtual void UpdateAttackPowerAndDamage(bool ranged = false) = 0; virtual void UpdateDamagePhysical(WeaponAttackType attType); float GetTotalAttackPowerValue(WeaponAttackType attType) const; diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index 388bddc984..9b4da2ec46 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -76,57 +76,7 @@ Vehicle::~Vehicle() void Vehicle::Install() { - if (_me->GetTypeId() == TYPEID_UNIT) - { - if (PowerDisplayEntry const* powerDisplay = sPowerDisplayStore.LookupEntry(_vehicleInfo->PowerDisplayID[0])) - _me->setPowerType(Powers(powerDisplay->ActualType)); - else if (_me->getClass() == CLASS_ROGUE) - _me->setPowerType(POWER_ENERGY); - } - - if (_me->IsCreature()) - { - switch (_vehicleInfo->PowerDisplayID[0]) - { - case POWER_STEAM: - case POWER_HEAT: - case POWER_BLOOD: - case POWER_OOZE: - case POWER_WRATH: - case POWER_ARCANE_ENERGY: - case POWER_LIFE_ENERGY: - case POWER_SUN_ENERGY: - case POWER_SWING_VELOCITY: - case POWER_SHADOWFLAME_ENERGY: - case POWER_ELECTRICAL_ENERGY: - case POWER_ARCANE_ENERGY_2: - case POWER_FUEL: - case POWER_SUN_POWER: - case POWER_TWILIGHT_ENERGY: - _me->SetMaxPower(POWER_ENERGY, 100); - _me->SetPower(POWER_ENERGY, 100); - break; - case POWER_BLUE_POWER: - case POWER_PURPLE_POWER: - case POWER_GREEN_POWER: - case POWER_ORANGE_POWER: - _me->SetMaxPower(POWER_ENERGY, 100); - _me->SetPower(POWER_ENERGY, 0); - break; - case POWER_PYRITE: - _me->SetMaxPower(POWER_ENERGY, 50); - _me->SetPower(POWER_ENERGY, 50); - break; - case POWER_WIND_POWER_1: - case POWER_WIND_POWER_2: - case POWER_WIND_POWER_3: - _me->SetMaxPower(POWER_MANA, 90); - _me->SetPower(POWER_MANA, 0); - break; - default: - break; - } - } + _me->UpdateDisplayPower(); _status = STATUS_INSTALLED; if (GetBase()->GetTypeId() == TYPEID_UNIT) diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index bafa9c71df..b55ee1a699 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -1030,7 +1030,7 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke if (mask & GROUP_UPDATE_FLAG_MAX_HP) *data << int32(player->GetMaxHealth()); - Powers powerType = player->getPowerType(); + Powers powerType = player->GetPowerType(); if (mask & GROUP_UPDATE_FLAG_POWER_TYPE) *data << uint8(powerType); @@ -1135,7 +1135,7 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke if (mask & GROUP_UPDATE_FLAG_PET_POWER_TYPE) { if (pet) - *data << uint8(pet->getPowerType()); + *data << uint8(pet->GetPowerType()); else *data << uint8(0); } @@ -1143,7 +1143,7 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke if (mask & GROUP_UPDATE_FLAG_PET_CUR_POWER) { if (pet) - *data << int16(pet->GetPower(pet->getPowerType())); + *data << int16(pet->GetPower(pet->GetPowerType())); else *data << int16(0); } @@ -1151,7 +1151,7 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke if (mask & GROUP_UPDATE_FLAG_PET_MAX_POWER) { if (pet) - *data << int16(pet->GetMaxPower(pet->getPowerType())); + *data << int16(pet->GetMaxPower(pet->GetPowerType())); else *data << int16(0); } @@ -1232,7 +1232,7 @@ void WorldSession::HandleRequestPartyMemberStatsOpcode(WorldPacket& recvData) } Pet* pet = player->GetPet(); - Powers powerType = player->getPowerType(); + Powers powerType = player->GetPowerType(); WorldPacket data(SMSG_PARTY_MEMBER_STATS_FULL, 4+2+2+2+1+2*6+8+1+8); data << uint8(0); // only for SMSG_PARTY_MEMBER_STATS_FULL, probably arena/bg related @@ -1336,13 +1336,13 @@ void WorldSession::HandleRequestPartyMemberStatsOpcode(WorldPacket& recvData) data << uint32(pet->GetMaxHealth()); if (updateFlags & GROUP_UPDATE_FLAG_PET_POWER_TYPE) - data << (uint8)pet->getPowerType(); + data << (uint8)pet->GetPowerType(); if (updateFlags & GROUP_UPDATE_FLAG_PET_CUR_POWER) - data << uint16(pet->GetPower(pet->getPowerType())); + data << uint16(pet->GetPower(pet->GetPowerType())); if (updateFlags & GROUP_UPDATE_FLAG_PET_MAX_POWER) - data << uint16(pet->GetMaxPower(pet->getPowerType())); + data << uint16(pet->GetMaxPower(pet->GetPowerType())); // GROUP_UPDATE_FLAG_PET_AURAS uint64 petAuraMask = 0; diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 35aed5580d..87dcf3f8bb 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -1849,8 +1849,8 @@ void AuraEffect::HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mo if (PowerType != POWER_MANA) { // reset power to default values only at power change - if (target->getPowerType() != PowerType) - target->setPowerType(PowerType); + if (target->GetPowerType() != PowerType) + target->SetPowerType(PowerType); if (form == FORM_CAT) target->SetPower(POWER_ENERGY, 0); @@ -1881,7 +1881,6 @@ void AuraEffect::HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mo target->SetShapeshiftForm(FORM_NONE); if (target->getClass() == CLASS_DRUID) { - target->setPowerType(POWER_MANA); // Remove movement impairing effects also when shifting out target->RemoveMovementImpairingAuras(); } @@ -1945,6 +1944,8 @@ void AuraEffect::HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mo target->ToPlayer()->InitDataForForm(); target->ToPlayer()->UpdateArmorSpecialization(); } + else + target->UpdateDisplayPower(); if (target->getClass() == CLASS_DRUID) { @@ -5938,7 +5939,7 @@ void AuraEffect::HandlePeriodicManaLeechAuraTick(Unit* target, Unit* caster) con { Powers powerType = Powers(GetMiscValue()); - if (!caster || !caster->IsAlive() || !target->IsAlive() || target->getPowerType() != powerType) + if (!caster || !caster->IsAlive() || !target->IsAlive() || target->GetPowerType() != powerType) return; if (target->HasUnitState(UNIT_STATE_ISOLATED) || target->IsImmunedToDamage(GetSpellInfo())) @@ -6002,7 +6003,7 @@ void AuraEffect::HandleObsModPowerAuraTick(Unit* target, Unit* caster) const { Powers powerType; if (GetMiscValue() == POWER_ALL) - powerType = target->getPowerType(); + powerType = target->GetPowerType(); else powerType = Powers(GetMiscValue()); @@ -6037,7 +6038,7 @@ void AuraEffect::HandlePeriodicEnergizeAuraTick(Unit* target, Unit* caster) cons { Powers powerType = Powers(GetMiscValue()); - if (target->GetTypeId() == TYPEID_PLAYER && target->getPowerType() != powerType && !m_spellInfo->HasAttribute(SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER)) + if (target->GetTypeId() == TYPEID_PLAYER && target->GetPowerType() != powerType && !m_spellInfo->HasAttribute(SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER)) return; if (!target->IsAlive() || !target->GetMaxPower(powerType)) @@ -6072,7 +6073,7 @@ void AuraEffect::HandlePeriodicPowerBurnAuraTick(Unit* target, Unit* caster) con { Powers powerType = Powers(GetMiscValue()); - if (!caster || !target->IsAlive() || target->getPowerType() != powerType) + if (!caster || !target->IsAlive() || target->GetPowerType() != powerType) return; if (target->HasUnitState(UNIT_STATE_ISOLATED) || target->IsImmunedToDamage(GetSpellInfo())) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 6038529a70..d22cc7ceca 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -5807,7 +5807,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint // Can be area effect, Check only for players and not check if target - caster (spell can have multiply drain/burn effects) if (m_caster->GetTypeId() == TYPEID_PLAYER) if (Unit* target = m_targets.GetUnitTarget()) - if (target != m_caster && target->getPowerType() != Powers(m_spellInfo->Effects[i].MiscValue)) + if (target != m_caster && target->GetPowerType() != Powers(m_spellInfo->Effects[i].MiscValue)) return SPELL_FAILED_BAD_TARGETS; break; } @@ -6191,9 +6191,9 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint if (m_caster->GetTypeId() != TYPEID_PLAYER || m_CastItem) break; - if (m_targets.GetUnitTarget() && m_targets.GetUnitTarget()->getPowerType() != POWER_MANA) + if (m_targets.GetUnitTarget() && m_targets.GetUnitTarget()->GetPowerType() != POWER_MANA) return SPELL_FAILED_BAD_TARGETS; - else if (!m_targets.GetUnitTarget() && m_caster->getPowerType() != POWER_MANA) + else if (!m_targets.GetUnitTarget() && m_caster->GetPowerType() != POWER_MANA) return SPELL_FAILED_BAD_TARGETS; break; diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index dc175d7435..4219500603 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -935,7 +935,7 @@ void Spell::EffectPowerDrain(SpellEffIndex effIndex) Powers powerType = Powers(m_spellInfo->Effects[effIndex].MiscValue); - if (!unitTarget || !unitTarget->IsAlive() || unitTarget->getPowerType() != powerType || damage < 0) + if (!unitTarget || !unitTarget->IsAlive() || unitTarget->GetPowerType() != powerType || damage < 0) return; // add spell damage bonus @@ -1011,7 +1011,7 @@ void Spell::EffectPowerBurn(SpellEffIndex effIndex) Powers powerType = Powers(m_spellInfo->Effects[effIndex].MiscValue); - if (!unitTarget || !unitTarget->IsAlive() || unitTarget->getPowerType() != powerType || damage < 0) + if (!unitTarget || !unitTarget->IsAlive() || unitTarget->GetPowerType() != powerType || damage < 0) return; // burn x% of target's mana, up to maximum of 2x% of caster's mana (Mana Burn) @@ -1433,7 +1433,7 @@ void Spell::EffectEnergize(SpellEffIndex effIndex) Powers power = Powers(m_spellInfo->Effects[effIndex].MiscValue); - if (unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->getPowerType() != power && m_spellInfo->SpellFamilyName != SPELLFAMILY_POTION + if (unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->GetPowerType() != power && m_spellInfo->SpellFamilyName != SPELLFAMILY_POTION && !m_spellInfo->HasAttribute(SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER)) return; @@ -1497,7 +1497,7 @@ void Spell::EffectEnergizePct(SpellEffIndex effIndex) Powers power = Powers(m_spellInfo->Effects[effIndex].MiscValue); - if (unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->getPowerType() != power && !m_spellInfo->HasAttribute(SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER)) + if (unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->GetPowerType() != power && !m_spellInfo->HasAttribute(SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER)) return; uint32 maxPower = unitTarget->GetMaxPower(power); @@ -2514,8 +2514,8 @@ void Spell::EffectSummonPet(SpellEffIndex effIndex) if (OldSummon->getPetType() == SUMMON_PET) { OldSummon->SetHealth(OldSummon->GetMaxHealth()); - OldSummon->SetPower(OldSummon->getPowerType(), - OldSummon->GetMaxPower(OldSummon->getPowerType())); + OldSummon->SetPower(OldSummon->GetPowerType(), + OldSummon->GetMaxPower(OldSummon->GetPowerType())); } if (owner->GetTypeId() == TYPEID_PLAYER && OldSummon->isControlled()) diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_omnotron_defense_system.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_omnotron_defense_system.cpp index 733f2f4dce..b5847ec9fd 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_omnotron_defense_system.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_omnotron_defense_system.cpp @@ -32,6 +32,7 @@ enum Spells { // Omnotron + SPELL_COUNCIL_ENERGY_DRAIN = 78725, SPELL_CONTROLLER_RECHARGE = 78696, SPELL_RECHARGING_ELECTRON = 78697, SPELL_RECHARGING_MAGMATRON = 78698, @@ -217,7 +218,6 @@ enum FailedAchievementCriteriaMask FAILED_CRITERIA_FLAMETHROWER = 0x8 }; - struct GolemInfo { uint8 ActivateTextId; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp index 80bc3227b8..c50626c1fd 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp @@ -193,7 +193,7 @@ public: { //selects a random target that isn't the current victim and is a mana user (selects mana users) but not pets //it also ignores targets who have the aura. We don't want to place the debuff on the same target twice. - if (Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 1, [&](Unit* u) { return u && !u->IsPet() && u->getPowerType() == POWER_MANA && !u->HasAura(SPELL_BURNINGADRENALINE); })) + if (Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 1, [&](Unit* u) { return u && !u->IsPet() && u->GetPowerType() == POWER_MANA && !u->HasAura(SPELL_BURNINGADRENALINE); })) { me->CastSpell(target, SPELL_BURNINGADRENALINE, true); } diff --git a/src/server/scripts/EasternKingdoms/Deadmines/boss_foe_reaper_5000.cpp b/src/server/scripts/EasternKingdoms/Deadmines/boss_foe_reaper_5000.cpp index b375ff4425..eaca3eade3 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/boss_foe_reaper_5000.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/boss_foe_reaper_5000.cpp @@ -124,7 +124,7 @@ class boss_foe_reaper_5000 : public CreatureScript { boss_foe_reaper_5000AI(Creature* creature) : BossAI(creature, DATA_FOE_REAPER_5000) { - me->setPowerType(POWER_ENERGY); + me->SetPowerType(POWER_ENERGY); me->SetMaxPower(POWER_ENERGY, 100); Initialize(); } diff --git a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp index 4d54de642f..e385c7b056 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp @@ -269,7 +269,7 @@ class instance_deadmines : public InstanceMapScript _ripsnarlNightareGuidSet.insert(creature->GetGUID()); break; case NPC_DEFIAS_SHADOWGUARD: - creature->setPowerType(POWER_ENERGY); + creature->SetPowerType(POWER_ENERGY); creature->SetMaxPower(POWER_ENERGY, 100); creature->SetPower(POWER_ENERGY, 100); break; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp index f4d6146bd1..539eb1e856 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp @@ -422,7 +422,7 @@ public: if (ManaBurn_Timer <= diff) { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - if (target->getPowerType() == POWER_MANA) + if (target->GetPowerType() == POWER_MANA) DoCast(target, SPELL_MANABURN); ManaBurn_Timer = 5000; // 3 sec cast } else ManaBurn_Timer -= diff; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp index 2df5350abe..52c515363e 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp @@ -175,7 +175,7 @@ class MarkTargetFilter bool operator()(WorldObject* target) const { if (Unit* unit = target->ToUnit()) - return unit->getPowerType() != POWER_MANA; + return unit->GetPowerType() != POWER_MANA; return false; } }; diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp index 052d4240a0..02ea27624e 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp @@ -150,7 +150,7 @@ class boss_moam : public CreatureScript { const std::list& threatlist = me->getThreatManager().getThreatList(); for (std::list::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) - if ((*itr)->getTarget()->GetTypeId() == TYPEID_PLAYER && (*itr)->getTarget()->getPowerType() == POWER_MANA) + if ((*itr)->getTarget()->GetTypeId() == TYPEID_PLAYER && (*itr)->getTarget()->GetPowerType() == POWER_MANA) targetList.push_back((*itr)->getTarget()); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp index b9f7467304..93803b4925 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp @@ -628,7 +628,7 @@ struct boss_faction_championsAI : public BossAI void UpdatePower() { - if (me->getPowerType() == POWER_MANA) + if (me->GetPowerType() == POWER_MANA) me->ModifyPower(POWER_MANA, me->GetMaxPower(POWER_MANA) / 3); } @@ -697,7 +697,7 @@ struct boss_faction_championsAI : public BossAI for (iter = tList.begin(); iter!=tList.end(); ++iter) { Unit* target = ObjectAccessor::GetUnit(*me, (*iter)->getUnitGuid()); - if (target && target->getPowerType() == POWER_MANA) + if (target && target->GetPowerType() == POWER_MANA) return target; } return nullptr; @@ -1849,7 +1849,7 @@ class npc_toc_rogue : public CreatureScript events.ScheduleEvent(EVENT_EVISCERATE, urand(20*IN_MILLISECONDS, 40*IN_MILLISECONDS)); events.ScheduleEvent(EVENT_WOUND_POISON, urand(5*IN_MILLISECONDS, 10*IN_MILLISECONDS)); SetEquipmentSlots(false, 47422, 49982, EQUIP_NO_CHANGE); - me->setPowerType(POWER_ENERGY); + me->SetPowerType(POWER_ENERGY); me->SetMaxPower(POWER_ENERGY, 100); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp index 46e76b270e..9c48ad134a 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp @@ -536,7 +536,7 @@ class MistressKissTargetSelector bool operator()(WorldObject* unit) const { if (unit->GetTypeId() == TYPEID_PLAYER) - if (unit->ToPlayer()->getPowerType() == POWER_MANA) + if (unit->ToPlayer()->GetPowerType() == POWER_MANA) return false; return true; diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp index 1137eb0dad..f0b607c9d6 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp @@ -271,7 +271,7 @@ class spell_bronjahm_magic_bane : public SpellScriptLoader void RecalculateDamage() { - if (GetHitUnit()->getPowerType() != POWER_MANA) + if (GetHitUnit()->GetPowerType() != POWER_MANA) return; int32 const maxDamage = GetCaster()->GetMap()->IsHeroic() ? 15000 : 10000; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index a7682cf000..b5f4b1ae67 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -1078,7 +1078,7 @@ class spell_deathbringer_blood_link_aura : public SpellScriptLoader void HandlePeriodicTick(AuraEffect const* /*aurEff*/) { PreventDefaultAction(); - if (GetUnitOwner()->getPowerType() == POWER_ENERGY && GetUnitOwner()->GetPower(POWER_ENERGY) == GetUnitOwner()->GetMaxPower(POWER_ENERGY)) + if (GetUnitOwner()->GetPowerType() == POWER_ENERGY && GetUnitOwner()->GetPower(POWER_ENERGY) == GetUnitOwner()->GetMaxPower(POWER_ENERGY)) if (Creature* saurfang = GetUnitOwner()->ToCreature()) saurfang->AI()->DoAction(ACTION_MARK_OF_THE_FALLEN_CHAMPION); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index d9c6c487c0..02ee1e8744 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -1152,7 +1152,7 @@ class UnchainedMagicTargetSelector bool operator()(WorldObject* object) const { if (Unit* unit = object->ToUnit()) - return unit->getPowerType() != POWER_MANA; + return unit->GetPowerType() != POWER_MANA; return true; } }; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index 16625d6129..d7c82c951c 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -168,7 +168,7 @@ struct ManaVoidSelector bool operator()(Unit* unit) const { - return unit->getPowerType() == POWER_MANA && _source->GetDistance(unit) > 15.0f; + return unit->GetPowerType() == POWER_MANA && _source->GetDistance(unit) > 15.0f; } WorldObject const* _source; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index 484c01b66c..c1a11fd54e 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -200,7 +200,7 @@ struct ManaUserTargetSelector { bool operator()(Unit const* target) const { - return target->GetTypeId() == TYPEID_PLAYER && target->getPowerType() == POWER_MANA; + return target->GetTypeId() == TYPEID_PLAYER && target->GetPowerType() == POWER_MANA; } }; diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp index 3b34c4ea1a..31e04b0f0c 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp @@ -145,7 +145,7 @@ class boss_anzu : public CreatureScript case EVENT_SPELL_BOMB: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) { - if (target->getPowerType() == POWER_MANA) + if (target->GetPowerType() == POWER_MANA) { DoCast(target, SPELL_SPELL_BOMB); Talk(SAY_SPELL_BOMB, target); diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index 93a855f749..8d6e2d29c9 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -209,7 +209,7 @@ public: if (ManaBurn_Timer <= diff) { Unit* target = me->GetVictim(); - if (target && target->getPowerType() == POWER_MANA) + if (target && target->GetPowerType() == POWER_MANA) DoCast(target, SPELL_MANA_BURN); ManaBurn_Timer = 8000 + rand32() % 8000; } else ManaBurn_Timer -= diff; diff --git a/src/server/scripts/Outland/zone_zangarmarsh.cpp b/src/server/scripts/Outland/zone_zangarmarsh.cpp index e0d3f7df3e..53138b1a0b 100644 --- a/src/server/scripts/Outland/zone_zangarmarsh.cpp +++ b/src/server/scripts/Outland/zone_zangarmarsh.cpp @@ -87,7 +87,7 @@ class npcs_ashyen_and_keleth : public CreatureScript ClearGossipMenuFor(player); if (action == GOSSIP_ACTION_INFO_DEF + 1) { - me->setPowerType(POWER_MANA); + me->SetPowerType(POWER_MANA); me->SetMaxPower(POWER_MANA, 200); //set a "fake" mana value, we can't depend on database doing it in this case me->SetPower(POWER_MANA, 200); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 0ff1fbe63d..a107a1cc7b 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -2783,7 +2783,7 @@ class spell_gen_pet_summoned : public SpellScriptLoader newPet->setDeathState(ALIVE); newPet->SetFullHealth(); - newPet->SetPower(newPet->getPowerType(), newPet->GetMaxPower(newPet->getPowerType())); + newPet->SetPower(newPet->GetPowerType(), newPet->GetMaxPower(newPet->GetPowerType())); switch (newPet->GetEntry()) { @@ -2904,7 +2904,7 @@ public: bool operator()(WorldObject* obj) const { if (Unit* target = obj->ToUnit()) - return target->getPowerType() != POWER_MANA; + return target->GetPowerType() != POWER_MANA; return true; } @@ -2960,7 +2960,7 @@ class spell_gen_replenishment : public SpellScriptLoader bool Load() override { - return GetUnitOwner()->getPowerType() == POWER_MANA; + return GetUnitOwner()->GetPowerType() == POWER_MANA; } void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index c702e9221f..021812d1e3 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -1203,7 +1203,7 @@ class spell_item_heartpierce : public SpellScriptLoader Unit* caster = eventInfo.GetActor(); uint32 spellId; - switch (caster->getPowerType()) + switch (caster->GetPowerType()) { case POWER_MANA: spellId = Mana; @@ -4253,7 +4253,7 @@ public: Unit* target = GetCaster(); - if (target->getPowerType() == POWER_MANA) + if (target->GetPowerType() == POWER_MANA) availableElixirs.push_back(28509); // Elixir of Major Mageblood (22840) uint32 chosenElixir = Trinity::Containers::SelectRandomContainerElement(availableElixirs); @@ -4328,7 +4328,7 @@ public: if (!target->IsInCombat()) availableElixirs.push_back(53753); // Potion of Nightmares (40081) - if (target->getPowerType() == POWER_MANA) + if (target->GetPowerType() == POWER_MANA) availableElixirs.push_back(43186); // Runic Mana Potion(33448) uint32 chosenElixir = Trinity::Containers::SelectRandomContainerElement(availableElixirs); diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 2f3d1e738f..d986b68130 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -128,7 +128,7 @@ class PowerCheck bool operator()(WorldObject* obj) const { if (Unit* target = obj->ToUnit()) - return target->getPowerType() != _power; + return target->GetPowerType() != _power; return true; } diff --git a/src/server/scripts/World/duel_reset.cpp b/src/server/scripts/World/duel_reset.cpp index 16767d73ce..c9c500d046 100644 --- a/src/server/scripts/World/duel_reset.cpp +++ b/src/server/scripts/World/duel_reset.cpp @@ -46,24 +46,12 @@ class DuelResetScript : public PlayerScript if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_HEALTH_MANA)) { player1->SaveHealthBeforeDuel(); - player1->SetHealth(player1->GetMaxHealth()); + player1->SaveManaBeforeDuel(); + player1->ResetAllPowers(); player2->SaveHealthBeforeDuel(); - player2->SetHealth(player2->GetMaxHealth()); - - // check if player1 class uses mana - if (player1->getPowerType() == POWER_MANA || player1->getClass() == CLASS_DRUID) - { - player1->SaveManaBeforeDuel(); - player1->SetPower(POWER_MANA, player1->GetMaxPower(POWER_MANA)); - } - - // check if player2 class uses mana - if (player2->getPowerType() == POWER_MANA || player2->getClass() == CLASS_DRUID) - { - player2->SaveManaBeforeDuel(); - player2->SetPower(POWER_MANA, player2->GetMaxPower(POWER_MANA)); - } + player2->SaveManaBeforeDuel(); + player2->ResetAllPowers(); } } @@ -90,11 +78,11 @@ class DuelResetScript : public PlayerScript loser->RestoreHealthAfterDuel(); // check if player1 class uses mana - if (winner->getPowerType() == POWER_MANA || winner->getClass() == CLASS_DRUID) + if (winner->GetPowerType() == POWER_MANA || winner->getClass() == CLASS_DRUID) winner->RestoreManaAfterDuel(); // check if player2 class uses mana - if (loser->getPowerType() == POWER_MANA || loser->getClass() == CLASS_DRUID) + if (loser->GetPowerType() == POWER_MANA || loser->getClass() == CLASS_DRUID) loser->RestoreManaAfterDuel(); } }