mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-23 13:46:24 +00:00
fix(Core/Achievements): Fixed showing achievement statistics of inspected player. (#8093)
* fix(Core/Spells): Implemented SPELL_ATTR0_CU_NO_PVP_FLAG. Fixes #7938 * fix(Core/Achievements): Fixed showing achievement statistics of inspected player. Fixes #7979
This commit is contained in:
@@ -2320,44 +2320,40 @@ void AchievementMgr::SendAllAchievementData() const
|
||||
|
||||
void AchievementMgr::SendRespondInspectAchievements(Player* player) const
|
||||
{
|
||||
WorldPacket data(SMSG_RESPOND_INSPECT_ACHIEVEMENTS, 9 + m_completedAchievements.size() * 8 + 4 + 4);
|
||||
WorldPacket data(SMSG_RESPOND_INSPECT_ACHIEVEMENTS, 9 + m_completedAchievements.size() * 8 + 4 + m_criteriaProgress.size() * 38 + 4);
|
||||
data << GetPlayer()->GetPackGUID();
|
||||
BuildAllDataPacket(&data, true);
|
||||
BuildAllDataPacket(&data);
|
||||
player->GetSession()->SendPacket(&data);
|
||||
}
|
||||
|
||||
/**
|
||||
* used by SMSG_RESPOND_INSPECT_ACHIEVEMENT and SMSG_ALL_ACHIEVEMENT_DATA
|
||||
*/
|
||||
void AchievementMgr::BuildAllDataPacket(WorldPacket* data, bool inspect) const
|
||||
void AchievementMgr::BuildAllDataPacket(WorldPacket* data) const
|
||||
{
|
||||
if (!m_completedAchievements.empty())
|
||||
for (CompletedAchievementMap::const_iterator iter = m_completedAchievements.begin(); iter != m_completedAchievements.end(); ++iter)
|
||||
{
|
||||
AchievementEntry const* achievement = nullptr;
|
||||
for (CompletedAchievementMap::const_iterator iter = m_completedAchievements.begin(); iter != m_completedAchievements.end(); ++iter)
|
||||
{
|
||||
// Skip hidden achievements
|
||||
achievement = sAchievementStore.LookupEntry(iter->first);
|
||||
if (!achievement || achievement->flags & ACHIEVEMENT_FLAG_HIDDEN)
|
||||
continue;
|
||||
// Skip hidden achievements
|
||||
AchievementEntry const* achievement = sAchievementStore.LookupEntry(iter->first);
|
||||
if (!achievement || achievement->flags & ACHIEVEMENT_FLAG_HIDDEN)
|
||||
continue;
|
||||
|
||||
*data << uint32(iter->first);
|
||||
data->AppendPackedTime(iter->second.date);
|
||||
}
|
||||
*data << uint32(iter->first);
|
||||
data->AppendPackedTime(iter->second.date);
|
||||
}
|
||||
|
||||
*data << int32(-1);
|
||||
|
||||
if (!inspect && !m_criteriaProgress.empty())
|
||||
for (CriteriaProgressMap::const_iterator iter = m_criteriaProgress.begin(); iter != m_criteriaProgress.end(); ++iter)
|
||||
{
|
||||
*data << uint32(iter->first);
|
||||
data->appendPackGUID(iter->second.counter);
|
||||
*data << GetPlayer()->GetPackGUID();
|
||||
*data << uint32(0);
|
||||
data->AppendPackedTime(iter->second.date);
|
||||
*data << uint32(0);
|
||||
*data << uint32(0);
|
||||
}
|
||||
for (CriteriaProgressMap::const_iterator iter = m_criteriaProgress.begin(); iter != m_criteriaProgress.end(); ++iter)
|
||||
{
|
||||
*data << uint32(iter->first);
|
||||
data->appendPackGUID(iter->second.counter);
|
||||
*data << GetPlayer()->GetPackGUID();
|
||||
*data << uint32(0);
|
||||
data->AppendPackedTime(iter->second.date);
|
||||
*data << uint32(0);
|
||||
*data << uint32(0);
|
||||
}
|
||||
|
||||
*data << int32(-1);
|
||||
}
|
||||
|
||||
@@ -304,7 +304,7 @@ private:
|
||||
bool IsCompletedCriteria(AchievementCriteriaEntry const* achievementCriteria, AchievementEntry const* achievement);
|
||||
bool IsCompletedAchievement(AchievementEntry const* entry);
|
||||
bool CanUpdateCriteria(AchievementCriteriaEntry const* criteria, AchievementEntry const* achievement);
|
||||
void BuildAllDataPacket(WorldPacket* data, bool inspect = false) const;
|
||||
void BuildAllDataPacket(WorldPacket* data) const;
|
||||
|
||||
Player* m_player;
|
||||
CriteriaProgressMap m_criteriaProgress;
|
||||
|
||||
@@ -2743,7 +2743,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
|
||||
// if target is fallged for pvp also flag caster if a player
|
||||
// xinef: do not flag spells with aura bind sight (no special attribute)
|
||||
if (effectUnit->IsPvP() && effectUnit != m_caster && effectUnit->GetOwnerGUID() != m_caster->GetGUID() &&
|
||||
m_caster->GetTypeId() == TYPEID_PLAYER && !m_spellInfo->HasAura(SPELL_AURA_BIND_SIGHT))
|
||||
m_caster->GetTypeId() == TYPEID_PLAYER && !m_spellInfo->HasAttribute(SPELL_ATTR0_CU_NO_PVP_FLAG))
|
||||
{
|
||||
m_caster->ToPlayer()->UpdatePvP(true);
|
||||
}
|
||||
@@ -2830,7 +2830,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA
|
||||
if (unit->HasUnitState(UNIT_STATE_ATTACK_PLAYER))
|
||||
{
|
||||
m_caster->SetContestedPvP();
|
||||
if (m_caster->GetTypeId() == TYPEID_PLAYER && !m_spellInfo->HasAura(SPELL_AURA_BIND_SIGHT))
|
||||
if (m_caster->GetTypeId() == TYPEID_PLAYER && !m_spellInfo->HasAttribute(SPELL_ATTR0_CU_NO_PVP_FLAG))
|
||||
m_caster->ToPlayer()->UpdatePvP(true);
|
||||
}
|
||||
|
||||
|
||||
@@ -180,7 +180,7 @@ enum SpellCustomAttributes
|
||||
SPELL_ATTR0_CU_NO_INITIAL_THREAT = 0x00000010,
|
||||
SPELL_ATTR0_CU_AURA_CC = 0x00000020,
|
||||
SPELL_ATTR0_CU_DONT_BREAK_STEALTH = 0x00000040,
|
||||
SPELL_ATTR0_CU_NONE3 = 0x00000080, // UNUSED
|
||||
SPELL_ATTR0_CU_NO_PVP_FLAG = 0x00000080,
|
||||
SPELL_ATTR0_CU_DIRECT_DAMAGE = 0x00000100,
|
||||
SPELL_ATTR0_CU_CHARGE = 0x00000200,
|
||||
SPELL_ATTR0_CU_PICKPOCKET = 0x00000400,
|
||||
|
||||
@@ -2856,6 +2856,11 @@ void SpellMgr::LoadSpellCustomAttr()
|
||||
case SPELL_AURA_MOD_STUN:
|
||||
spellInfo->AttributesCu |= SPELL_ATTR0_CU_AURA_CC;
|
||||
break;
|
||||
case SPELL_AURA_BIND_SIGHT:
|
||||
spellInfo->AttributesCu |= SPELL_ATTR0_CU_NO_PVP_FLAG;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch (spellInfo->Effects[j].Effect)
|
||||
@@ -3269,6 +3274,9 @@ void SpellMgr::LoadSpellCustomAttr()
|
||||
case 6197: // Eagle Eye
|
||||
spellInfo->AttributesCu |= SPELL_ATTR0_CU_NO_INITIAL_THREAT;
|
||||
break;
|
||||
case 50315: // Disco Ball
|
||||
spellInfo->AttributesCu |= SPELL_ATTR0_CU_NO_PVP_FLAG;
|
||||
break;
|
||||
|
||||
// Xinef: NOT CUSTOM, cant add in DBC CORRECTION because i need to swap effects, too much work to do there
|
||||
// Envenom
|
||||
|
||||
Reference in New Issue
Block a user