mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-31 09:33:47 +00:00
Merge branch 'azerothcore:master' into Playerbot
This commit is contained in:
@@ -3036,7 +3036,7 @@ bool Creature::SetSwim(bool enable)
|
||||
*/
|
||||
bool Creature::CanSwim() const
|
||||
{
|
||||
if (Unit::CanSwim())
|
||||
if (Unit::CanSwim() || (!Unit::CanSwim() && !CanFly()))
|
||||
return true;
|
||||
|
||||
if (IsPet())
|
||||
|
||||
@@ -728,7 +728,7 @@ void Item::AddToUpdateQueueOf(Player* player)
|
||||
if (IsInUpdateQueue())
|
||||
return;
|
||||
|
||||
ASSERT(player != nullptr);
|
||||
ASSERT(player);
|
||||
|
||||
if (player->GetGUID() != GetOwnerGUID())
|
||||
{
|
||||
@@ -748,7 +748,7 @@ void Item::RemoveFromUpdateQueueOf(Player* player)
|
||||
if (!IsInUpdateQueue())
|
||||
return;
|
||||
|
||||
ASSERT(player != nullptr);
|
||||
ASSERT(player);
|
||||
|
||||
if (player->GetGUID() != GetOwnerGUID())
|
||||
{
|
||||
|
||||
@@ -2266,7 +2266,7 @@ bool Player::IsGroupVisibleFor(Player const* p) const
|
||||
|
||||
bool Player::IsInSameGroupWith(Player const* p) const
|
||||
{
|
||||
return p == this || (GetGroup() != nullptr &&
|
||||
return p == this || (GetGroup() &&
|
||||
GetGroup() == p->GetGroup() &&
|
||||
GetGroup()->SameSubGroup(this, p));
|
||||
}
|
||||
@@ -3741,7 +3741,7 @@ void Player::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c
|
||||
{
|
||||
for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i)
|
||||
{
|
||||
if (m_items[i] == nullptr)
|
||||
if (!m_items[i])
|
||||
continue;
|
||||
|
||||
m_items[i]->BuildCreateUpdateBlockForPlayer(data, target);
|
||||
@@ -3749,14 +3749,14 @@ void Player::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c
|
||||
|
||||
for (uint8 i = INVENTORY_SLOT_BAG_START; i < BANK_SLOT_BAG_END; ++i)
|
||||
{
|
||||
if (m_items[i] == nullptr)
|
||||
if (!m_items[i])
|
||||
continue;
|
||||
|
||||
m_items[i]->BuildCreateUpdateBlockForPlayer(data, target);
|
||||
}
|
||||
for (uint8 i = KEYRING_SLOT_START; i < CURRENCYTOKEN_SLOT_END; ++i)
|
||||
{
|
||||
if (m_items[i] == nullptr)
|
||||
if (!m_items[i])
|
||||
continue;
|
||||
|
||||
m_items[i]->BuildCreateUpdateBlockForPlayer(data, target);
|
||||
@@ -3772,7 +3772,7 @@ void Player::DestroyForPlayer(Player* target, bool onDeath) const
|
||||
|
||||
for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i) // xinef: previously INVENTORY_SLOT_BAG_END
|
||||
{
|
||||
if (m_items[i] == nullptr)
|
||||
if (!m_items[i])
|
||||
continue;
|
||||
|
||||
m_items[i]->DestroyForPlayer(target);
|
||||
@@ -3782,14 +3782,14 @@ void Player::DestroyForPlayer(Player* target, bool onDeath) const
|
||||
{
|
||||
for (uint8 i = INVENTORY_SLOT_BAG_START; i < BANK_SLOT_BAG_END; ++i)
|
||||
{
|
||||
if (m_items[i] == nullptr)
|
||||
if (!m_items[i])
|
||||
continue;
|
||||
|
||||
m_items[i]->DestroyForPlayer(target);
|
||||
}
|
||||
for (uint8 i = KEYRING_SLOT_START; i < CURRENCYTOKEN_SLOT_END; ++i)
|
||||
{
|
||||
if (m_items[i] == nullptr)
|
||||
if (!m_items[i])
|
||||
continue;
|
||||
|
||||
m_items[i]->DestroyForPlayer(target);
|
||||
@@ -4978,7 +4978,7 @@ float Player::GetMeleeCritFromAgility()
|
||||
|
||||
GtChanceToMeleeCritBaseEntry const* critBase = sGtChanceToMeleeCritBaseStore.LookupEntry(pclass - 1);
|
||||
GtChanceToMeleeCritEntry const* critRatio = sGtChanceToMeleeCritStore.LookupEntry((pclass - 1) * GT_MAX_LEVEL + level - 1);
|
||||
if (critBase == nullptr || critRatio == nullptr)
|
||||
if (!critBase || !critRatio)
|
||||
return 0.0f;
|
||||
|
||||
float crit = critBase->base + GetStat(STAT_AGILITY) * critRatio->ratio;
|
||||
@@ -5026,7 +5026,7 @@ void Player::GetDodgeFromAgility(float& diminishing, float& nondiminishing)
|
||||
|
||||
// Dodge per agility is proportional to crit per agility, which is available from DBC files
|
||||
GtChanceToMeleeCritEntry const* dodgeRatio = sGtChanceToMeleeCritStore.LookupEntry((pclass - 1) * GT_MAX_LEVEL + level - 1);
|
||||
if (dodgeRatio == nullptr || pclass > MAX_CLASSES)
|
||||
if (!dodgeRatio || pclass > MAX_CLASSES)
|
||||
return;
|
||||
|
||||
// TODO: research if talents/effects that increase total agility by x% should increase non-diminishing part
|
||||
@@ -5048,7 +5048,7 @@ float Player::GetSpellCritFromIntellect()
|
||||
|
||||
GtChanceToSpellCritBaseEntry const* critBase = sGtChanceToSpellCritBaseStore.LookupEntry(pclass - 1);
|
||||
GtChanceToSpellCritEntry const* critRatio = sGtChanceToSpellCritStore.LookupEntry((pclass - 1) * GT_MAX_LEVEL + level - 1);
|
||||
if (critBase == nullptr || critRatio == nullptr)
|
||||
if (!critBase || !critRatio)
|
||||
return 0.0f;
|
||||
|
||||
float crit = critBase->base + GetStat(STAT_INTELLECT) * critRatio->ratio;
|
||||
@@ -5100,7 +5100,7 @@ float Player::OCTRegenHPPerSpirit()
|
||||
|
||||
GtOCTRegenHPEntry const* baseRatio = sGtOCTRegenHPStore.LookupEntry((pclass - 1) * GT_MAX_LEVEL + level - 1);
|
||||
GtRegenHPPerSptEntry const* moreRatio = sGtRegenHPPerSptStore.LookupEntry((pclass - 1) * GT_MAX_LEVEL + level - 1);
|
||||
if (baseRatio == nullptr || moreRatio == nullptr)
|
||||
if (!baseRatio || !moreRatio)
|
||||
return 0.0f;
|
||||
|
||||
// Formula from PaperDollFrame script
|
||||
@@ -5123,7 +5123,7 @@ float Player::OCTRegenMPPerSpirit()
|
||||
|
||||
// GtOCTRegenMPEntry const* baseRatio = sGtOCTRegenMPStore.LookupEntry((pclass-1)*GT_MAX_LEVEL + level-1);
|
||||
GtRegenMPPerSptEntry const* moreRatio = sGtRegenMPPerSptStore.LookupEntry((pclass - 1) * GT_MAX_LEVEL + level - 1);
|
||||
if (moreRatio == nullptr)
|
||||
if (!moreRatio)
|
||||
return 0.0f;
|
||||
|
||||
// Formula get from PaperDollFrame script
|
||||
@@ -6045,7 +6045,7 @@ bool Player::RewardHonor(Unit* uVictim, uint32 groupsize, int32 honor, bool awar
|
||||
}
|
||||
}
|
||||
|
||||
if (uVictim != nullptr)
|
||||
if (uVictim)
|
||||
{
|
||||
if (groupsize > 1)
|
||||
honor_f /= groupsize;
|
||||
@@ -9781,7 +9781,7 @@ void Player::DropModCharge(SpellModifier* mod, Spell* spell)
|
||||
|
||||
void Player::SetSpellModTakingSpell(Spell* spell, bool apply)
|
||||
{
|
||||
if (apply && m_spellModTakingSpell != nullptr)
|
||||
if (apply && m_spellModTakingSpell)
|
||||
{
|
||||
LOG_INFO("misc", "Player::SetSpellModTakingSpell (A1) - {}, {}", spell->m_spellInfo->Id, m_spellModTakingSpell->m_spellInfo->Id);
|
||||
return;
|
||||
@@ -11218,7 +11218,7 @@ void Player::SetSelection(ObjectGuid guid)
|
||||
|
||||
void Player::SetGroup(Group* group, int8 subgroup)
|
||||
{
|
||||
if (group == nullptr)
|
||||
if (!group)
|
||||
m_group.unlink();
|
||||
else
|
||||
{
|
||||
@@ -12762,7 +12762,7 @@ void Player::RemoveFromBattlegroundOrBattlefieldRaid()
|
||||
|
||||
void Player::SetOriginalGroup(Group* group, int8 subgroup)
|
||||
{
|
||||
if (group == nullptr)
|
||||
if (!group)
|
||||
m_originalGroup.unlink();
|
||||
else
|
||||
{
|
||||
@@ -13176,7 +13176,7 @@ void Player::StoreLootItem(uint8 lootSlot, Loot* loot)
|
||||
// Xinef: exploit protection, dont allow to loot normal items if player is not master loot and not below loot threshold
|
||||
// Xinef: only quest, ffa and conditioned items
|
||||
if (!item->is_underthreshold && loot->roundRobinPlayer && !GetLootGUID().IsItem() && GetGroup() && GetGroup()->GetLootMethod() == MASTER_LOOT && GetGUID() != GetGroup()->GetMasterLooterGuid())
|
||||
if (qitem == nullptr && ffaitem == nullptr && conditem == nullptr)
|
||||
if (!qitem && !ffaitem && !conditem)
|
||||
{
|
||||
SendLootRelease(GetLootGUID());
|
||||
return;
|
||||
|
||||
@@ -7331,7 +7331,7 @@ void Player::_SaveInventory(CharacterDatabaseTransaction trans)
|
||||
if (item->GetState() != ITEM_REMOVED)
|
||||
{
|
||||
Item* test = GetItemByPos(item->GetBagSlot(), item->GetSlot());
|
||||
if (test == nullptr)
|
||||
if (!test)
|
||||
{
|
||||
ObjectGuid::LowType bagTestGUID = 0;
|
||||
if (Item* test2 = GetItemByPos(INVENTORY_SLOT_BAG_0, item->GetBagSlot()))
|
||||
|
||||
@@ -8944,7 +8944,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
|
||||
|
||||
// All ok. Check current trigger spell
|
||||
SpellInfo const* triggerEntry = sSpellMgr->GetSpellInfo(trigger_spell_id);
|
||||
if (triggerEntry == nullptr)
|
||||
if (!triggerEntry)
|
||||
{
|
||||
// Don't cast unknown spell
|
||||
LOG_ERROR("entities.unit", "Unit::HandleProcTriggerSpell: Spell {} (effIndex: {}) has unknown TriggerSpell {}. Unhandled custom case?", auraSpellInfo->Id, triggeredByAura->GetEffIndex(), trigger_spell_id);
|
||||
@@ -9387,7 +9387,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
|
||||
}
|
||||
|
||||
// try detect target manually if not set
|
||||
if (target == nullptr)
|
||||
if (!target)
|
||||
target = !(procFlags & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS)) && triggerEntry->IsPositive() ? this : victim;
|
||||
|
||||
if (cooldown)
|
||||
@@ -13844,6 +13844,7 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
|
||||
if (Unit* critter = ObjectAccessor::GetUnit(*this, GetCritterGUID()))
|
||||
critter->UpdateSpeed(mtype, forced);
|
||||
}
|
||||
ToPlayer()->SetCanTeleport(true);
|
||||
}
|
||||
|
||||
switch (mtype)
|
||||
@@ -15778,7 +15779,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u
|
||||
continue;
|
||||
|
||||
// If not trigger by default and spellProcEvent == nullptr - skip
|
||||
if (!isTriggerAura[aurEff->GetAuraType()] && triggerData.spellProcEvent == nullptr)
|
||||
if (!isTriggerAura[aurEff->GetAuraType()] && !triggerData.spellProcEvent)
|
||||
continue;
|
||||
|
||||
switch (aurEff->GetAuraType())
|
||||
@@ -19185,6 +19186,10 @@ void Unit::ExitVehicle(Position const* /*exitPosition*/)
|
||||
return;
|
||||
|
||||
GetVehicleBase()->RemoveAurasByType(SPELL_AURA_CONTROL_VEHICLE, GetGUID());
|
||||
if (Player* player = ToPlayer())
|
||||
{
|
||||
player->SetCanTeleport(true);
|
||||
}
|
||||
//! The following call would not even be executed successfully as the
|
||||
//! SPELL_AURA_CONTROL_VEHICLE unapply handler already calls _ExitVehicle without
|
||||
//! specifying an exitposition. The subsequent call below would return on if (!m_vehicle).
|
||||
|
||||
Reference in New Issue
Block a user