aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-04-15 12:32:36 +0200
committerShauren <shauren.trinity@gmail.com>2017-04-15 12:32:36 +0200
commitadbdb64301b5048914e58131479a07e31304e019 (patch)
tree79403f90d1f9f70aea792aabbc0c4368ede93dfe /src
parente88a5e4d6d34a7d319cf8a18d3522017bc9101c0 (diff)
Core/PacketIO: Updated server packet structures to 7.2.0
Diffstat (limited to 'src')
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.cpp8
-rw-r--r--src/server/game/DataStores/DBCEnums.h2
-rw-r--r--src/server/game/Entities/Creature/GossipDef.cpp4
-rw-r--r--src/server/game/Entities/Item/Item.cpp12
-rw-r--r--src/server/game/Entities/Item/Item.h4
-rw-r--r--src/server/game/Entities/Player/Player.cpp13
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp25
-rw-r--r--src/server/game/Entities/Unit/Unit.h5
-rw-r--r--src/server/game/Garrison/Garrison.cpp1
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp6
-rw-r--r--src/server/game/Groups/Group.cpp1
-rw-r--r--src/server/game/Handlers/ArtifactHandler.cpp16
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp1
-rw-r--r--src/server/game/Handlers/CollectionsHandler.cpp2
-rw-r--r--src/server/game/Quests/QuestDef.cpp21
-rw-r--r--src/server/game/Quests/QuestDef.h2
-rw-r--r--src/server/game/Server/Packets/ArtifactPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/ArtifactPackets.h2
-rw-r--r--src/server/game/Server/Packets/CombatLogPackets.cpp11
-rw-r--r--src/server/game/Server/Packets/CombatLogPackets.h4
-rw-r--r--src/server/game/Server/Packets/EquipmentSetPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/EquipmentSetPackets.h1
-rw-r--r--src/server/game/Server/Packets/GarrisonPackets.cpp13
-rw-r--r--src/server/game/Server/Packets/GarrisonPackets.h1
-rw-r--r--src/server/game/Server/Packets/GuildPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/LootPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/LootPackets.h2
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp17
-rw-r--r--src/server/game/Server/Packets/NPCPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/NPCPackets.h1
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp17
-rw-r--r--src/server/game/Server/Packets/QuestPackets.h11
-rw-r--r--src/server/game/Server/Packets/ScenarioPackets.h2
-rw-r--r--src/server/game/Server/Packets/SocialPackets.cpp10
-rw-r--r--src/server/game/Server/Packets/SpellPackets.cpp12
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h8
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp4
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp8
-rw-r--r--src/server/game/Spells/Spell.cpp7
-rw-r--r--src/server/game/Spells/SpellEffects.cpp2
-rw-r--r--src/server/game/Spells/SpellMgr.cpp2
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp5
-rw-r--r--src/server/scripts/Spells/spell_warlock.cpp2
43 files changed, 141 insertions, 132 deletions
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp
index 7173e32d96a..5e90cf4bcb0 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp
@@ -127,7 +127,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
"JOIN guild_rank gr ON g.guildid = gr.guildid AND gm.rank = gr.rid WHERE gm.guid = ?", CONNECTION_BOTH);
PrepareStatement(CHAR_SEL_CHARACTER_ACHIEVEMENTS, "SELECT achievement, date FROM character_achievement WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_CHARACTER_CRITERIAPROGRESS, "SELECT criteria, counter, date FROM character_achievement_progress WHERE guid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_SEL_CHARACTER_EQUIPMENTSETS, "SELECT setguid, setindex, name, iconname, ignore_mask, item0, item1, item2, item3, item4, item5, item6, item7, item8, "
+ PrepareStatement(CHAR_SEL_CHARACTER_EQUIPMENTSETS, "SELECT setguid, setindex, name, iconname, ignore_mask, AssignedSpecIndex, item0, item1, item2, item3, item4, item5, item6, item7, item8, "
"item9, item10, item11, item12, item13, item14, item15, item16, item17, item18 FROM character_equipmentsets WHERE guid = ? ORDER BY setindex", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_CHARACTER_TRANSMOG_OUTFITS, "SELECT setguid, setindex, name, iconname, ignore_mask, appearance0, appearance1, appearance2, appearance3, appearance4, "
"appearance5, appearance6, appearance7, appearance8, appearance9, appearance10, appearance11, appearance12, appearance13, appearance14, appearance15, appearance16, "
@@ -276,12 +276,12 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_DEL_OLD_CHANNELS, "DELETE FROM channels WHERE ownership = 1 AND lastUsed + ? < UNIX_TIMESTAMP()", CONNECTION_ASYNC);
// Equipmentsets
- PrepareStatement(CHAR_UPD_EQUIP_SET, "UPDATE character_equipmentsets SET name=?, iconname=?, ignore_mask=?, item0=?, item1=?, item2=?, item3=?, "
+ PrepareStatement(CHAR_UPD_EQUIP_SET, "UPDATE character_equipmentsets SET name=?, iconname=?, ignore_mask=?, AssignedSpecIndex=?, item0=?, item1=?, item2=?, item3=?, "
"item4=?, item5=?, item6=?, item7=?, item8=?, item9=?, item10=?, item11=?, item12=?, item13=?, item14=?, item15=?, item16=?, "
"item17=?, item18=? WHERE guid=? AND setguid=? AND setindex=?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_INS_EQUIP_SET, "INSERT INTO character_equipmentsets (guid, setguid, setindex, name, iconname, ignore_mask, item0, item1, item2, item3, "
+ PrepareStatement(CHAR_INS_EQUIP_SET, "INSERT INTO character_equipmentsets (guid, setguid, setindex, name, iconname, ignore_mask, AssignedSpecIndex, item0, item1, item2, item3, "
"item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14, item15, item16, item17, item18) "
- "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_EQUIP_SET, "DELETE FROM character_equipmentsets WHERE setguid=?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_TRANSMOG_OUTFIT, "UPDATE character_transmog_outfits SET name=?, iconname=?, ignore_mask=?, appearance0=?, appearance1=?, appearance2=?, appearance3=?, "
"appearance4=?, appearance5=?, appearance6=?, appearance7=?, appearance8=?, appearance9=?, appearance10=?, appearance11=?, appearance12=?, appearance13=?, appearance14=?, "
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h
index 24549418075..29bedcfc0a0 100644
--- a/src/server/game/DataStores/DBCEnums.h
+++ b/src/server/game/DataStores/DBCEnums.h
@@ -479,7 +479,7 @@ enum CriteriaTypes
// 204 - Special criteria type to award players for some external events? Comes with what looks like an identifier, so guessing it's not unique.
};
-#define CRITERIA_TYPE_TOTAL 205
+#define CRITERIA_TYPE_TOTAL 207
enum CriteriaTreeFlags : uint16
{
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index 93d2f070127..2c2d7699706 100644
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -365,9 +365,8 @@ void PlayerMenu::SendQuestGiverQuestList(ObjectGuid guid)
AddQuestLevelToTitle(title, quest->GetQuestLevel());
bool repeatable = false; // NYI
- bool ignored = false; // NYI
- questList.GossipTexts.push_back(WorldPackets::Quest::GossipTextData(questID, questMenuItem.QuestIcon, quest->GetQuestLevel(), quest->GetFlags(), quest->GetFlagsEx(), repeatable, ignored, title));
+ questList.GossipTexts.emplace_back(questID, questMenuItem.QuestIcon, quest->GetQuestLevel(), quest->GetFlags(), quest->GetFlagsEx(), repeatable, title);
}
}
@@ -577,6 +576,7 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
packet.Info.QuestCompletionLog = questCompletionLog;
packet.Info.AllowableRaces = quest->GetAllowableRaces();
packet.Info.QuestRewardID = quest->GetRewardId();
+ packet.Info.Expansion = quest->GetExpansion();
for (QuestObjective const& questObjective : quest->GetObjectives())
{
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index da124487cc7..58be06c21bf 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -528,7 +528,7 @@ void Item::SaveToDB(SQLTransaction& trans)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_INSTANCE_ARTIFACT);
stmt->setUInt64(0, GetGUID().GetCounter());
- stmt->setUInt32(1, GetUInt32Value(ITEM_FIELD_ARTIFACT_XP));
+ stmt->setUInt64(1, GetUInt64Value(ITEM_FIELD_ARTIFACT_XP));
stmt->setUInt32(2, GetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID));
trans->Append(stmt);
@@ -784,10 +784,10 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie
return true;
}
-void Item::LoadArtifactData(uint32 xp, uint32 artifactAppearanceId, std::vector<ItemDynamicFieldArtifactPowers>& powers)
+void Item::LoadArtifactData(uint64 xp, uint32 artifactAppearanceId, std::vector<ItemDynamicFieldArtifactPowers>& powers)
{
InitArtifactPowers(GetTemplate()->GetArtifactID());
- SetUInt32Value(ITEM_FIELD_ARTIFACT_XP, xp);
+ SetUInt64Value(ITEM_FIELD_ARTIFACT_XP, xp);
SetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID, artifactAppearanceId);
if (ArtifactAppearanceEntry const* artifactAppearance = sArtifactAppearanceStore.LookupEntry(artifactAppearanceId))
SetAppearanceModId(artifactAppearance->AppearanceModID);
@@ -2407,7 +2407,7 @@ void Item::CopyArtifactDataFromParent(Item* parent)
SetAppearanceModId(parent->GetAppearanceModId());
}
-void Item::GiveArtifactXp(int32 amount, Item* sourceItem, uint32 artifactCategoryId)
+void Item::GiveArtifactXp(uint64 amount, Item* sourceItem, uint32 artifactCategoryId)
{
Player* owner = GetOwner();
if (!owner)
@@ -2423,7 +2423,7 @@ void Item::GiveArtifactXp(int32 amount, Item* sourceItem, uint32 artifactCategor
else
artifactKnowledgeLevel = owner->GetCurrency(artifactCategory->ArtifactKnowledgeCurrencyID);
- amount = int32(amount * sDB2Manager.GetCurveValueAt(artifactCategory->ArtifactKnowledgeMultiplierCurveID, artifactKnowledgeLevel));
+ amount = uint64(amount * sDB2Manager.GetCurveValueAt(artifactCategory->ArtifactKnowledgeMultiplierCurveID, artifactKnowledgeLevel));
if (amount >= 5000)
amount = 50 * (amount / 50);
else if (amount >= 1000)
@@ -2433,7 +2433,7 @@ void Item::GiveArtifactXp(int32 amount, Item* sourceItem, uint32 artifactCategor
}
}
- ApplyModInt32Value(ITEM_FIELD_ARTIFACT_XP, amount, true);
+ SetUInt64Value(ITEM_FIELD_ARTIFACT_XP, GetUInt64Value(ITEM_FIELD_ARTIFACT_XP) + amount);
WorldPackets::Artifact::ArtifactXpGain artifactXpGain;
artifactXpGain.ArtifactGUID = GetGUID();
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index 14260eb6b36..d3e50ec5291 100644
--- a/src/server/game/Entities/Item/Item.h
+++ b/src/server/game/Entities/Item/Item.h
@@ -336,7 +336,7 @@ class TC_GAME_API Item : public Object
bool IsBoundByEnchant() const;
virtual void SaveToDB(SQLTransaction& trans);
virtual bool LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fields, uint32 entry);
- void LoadArtifactData(uint32 xp, uint32 artifactAppearanceId, std::vector<ItemDynamicFieldArtifactPowers>& powers); // must be called after LoadFromDB to have gems (relics) initialized
+ void LoadArtifactData(uint64 xp, uint32 artifactAppearanceId, std::vector<ItemDynamicFieldArtifactPowers>& powers); // must be called after LoadFromDB to have gems (relics) initialized
void AddBonuses(uint32 bonusListID);
@@ -515,7 +515,7 @@ class TC_GAME_API Item : public Object
void ApplyArtifactPowerEnchantmentBonuses(uint32 enchantId, bool apply, Player* owner);
void CopyArtifactDataFromParent(Item* parent);
- void GiveArtifactXp(int32 amount, Item* sourceItem, uint32 artifactCategoryId);
+ void GiveArtifactXp(uint64 amount, Item* sourceItem, uint32 artifactCategoryId);
protected:
BonusData _bonusData;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index ad44cf6e9fa..b211074b74c 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -16803,7 +16803,7 @@ bool Player::IsQuestObjectiveComplete(QuestObjective const& objective) const
GetName().c_str(), GetGUID().ToString().c_str(), objective.QuestID, objective.Type);
return false;
}
-
+
return true;
}
@@ -17084,7 +17084,7 @@ void Player::_LoadArenaTeamInfo(PreparedQueryResult result)
void Player::_LoadEquipmentSets(PreparedQueryResult result)
{
- // SetPQuery(PLAYER_LOGIN_QUERY_LOADEQUIPMENTSETS, "SELECT setguid, setindex, name, iconname, ignore_mask, item0, item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14, item15, item16, item17, item18 FROM character_equipmentsets WHERE guid = '%u' ORDER BY setindex", GUID_LOPART(m_guid));
+ // SetPQuery(PLAYER_LOGIN_QUERY_LOADEQUIPMENTSETS, "SELECT setguid, setindex, name, iconname, ignore_mask, AssignedSpecIndex, item0, item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14, item15, item16, item17, item18 FROM character_equipmentsets WHERE guid = '%u' ORDER BY setindex", GUID_LOPART(m_guid));
if (!result)
return;
@@ -17099,10 +17099,11 @@ void Player::_LoadEquipmentSets(PreparedQueryResult result)
eqSet.Data.SetName = fields[2].GetString();
eqSet.Data.SetIcon = fields[3].GetString();
eqSet.Data.IgnoreMask = fields[4].GetUInt32();
+ eqSet.Data.AssignedSpecIndex = fields[5].GetInt32();
eqSet.State = EQUIPMENT_SET_UNCHANGED;
for (uint32 i = 0; i < EQUIPMENT_SLOT_END; ++i)
- if (ObjectGuid::LowType guid = fields[5 + i].GetUInt64())
+ if (ObjectGuid::LowType guid = fields[6 + i].GetUInt64())
eqSet.Data.Pieces[i] = ObjectGuid::Create<HighGuid::Item>(guid);
eqSet.Data.Appearances.fill(0);
@@ -18270,14 +18271,14 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti
// 0 1 2 3 4
// SELECT a.itemGuid, a.xp, a.artifactAppearanceId, ap.artifactPowerId, ap.purchasedRank FROM item_instance_artifact_powers ap LEFT JOIN item_instance_artifact a ON ap.itemGuid = a.itemGuid INNER JOIN character_inventory ci ON ci.item = ap.guid WHERE ci.guid = ?
- std::unordered_map<ObjectGuid, std::tuple<uint32, uint32, std::vector<ItemDynamicFieldArtifactPowers>>> artifactData;
+ std::unordered_map<ObjectGuid, std::tuple<uint64, uint32, std::vector<ItemDynamicFieldArtifactPowers>>> artifactData;
if (artifactsResult)
{
do
{
Field* fields = artifactsResult->Fetch();
auto& artifactDataEntry = artifactData[ObjectGuid::Create<HighGuid::Item>(fields[0].GetUInt64())];
- std::get<0>(artifactDataEntry) = fields[1].GetUInt32();
+ std::get<0>(artifactDataEntry) = fields[1].GetUInt64();
std::get<1>(artifactDataEntry) = fields[2].GetUInt32();
ItemDynamicFieldArtifactPowers artifactPowerData;
artifactPowerData.ArtifactPowerId = fields[3].GetUInt32();
@@ -26111,6 +26112,7 @@ void Player::_SaveEquipmentSets(SQLTransaction& trans)
stmt->setString(j++, eqSet.Data.SetName);
stmt->setString(j++, eqSet.Data.SetIcon);
stmt->setUInt32(j++, eqSet.Data.IgnoreMask);
+ stmt->setInt32(j++, eqSet.Data.AssignedSpecIndex);
for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i)
stmt->setUInt64(j++, eqSet.Data.Pieces[i].GetCounter());
stmt->setUInt64(j++, GetGUID().GetCounter());
@@ -26147,6 +26149,7 @@ void Player::_SaveEquipmentSets(SQLTransaction& trans)
stmt->setString(j++, eqSet.Data.SetName);
stmt->setString(j++, eqSet.Data.SetIcon);
stmt->setUInt32(j++, eqSet.Data.IgnoreMask);
+ stmt->setInt32(j++, eqSet.Data.AssignedSpecIndex);
for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i)
stmt->setUInt64(j++, eqSet.Data.Pieces[i].GetCounter());
}
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 561963e0217..af72c9e4c31 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -235,8 +235,8 @@ ProcEventInfo::ProcEventInfo(Unit* actor, Unit* actionTarget, Unit* procTarget,
_damageInfo(damageInfo), _healInfo(healInfo)
{ }
-SpellNonMeleeDamage::SpellNonMeleeDamage(Unit* _attacker, Unit* _target, uint32 _SpellID, uint32 _schoolMask, ObjectGuid _castId)
- : target(_target), attacker(_attacker), castId(_castId), SpellID(_SpellID), damage(0), schoolMask(_schoolMask),
+SpellNonMeleeDamage::SpellNonMeleeDamage(Unit* _attacker, Unit* _target, uint32 _SpellID, uint32 _SpellXSpellVisualID, uint32 _schoolMask, ObjectGuid _castId)
+ : target(_target), attacker(_attacker), castId(_castId), SpellID(_SpellID), SpellXSpellVisualID(_SpellXSpellVisualID), damage(0), schoolMask(_schoolMask),
absorb(0), resist(0), periodicLog(false), blocked(0), HitInfo(0), cleanDamage(0), preHitHealth(_target->GetHealth())
{
}
@@ -1860,7 +1860,7 @@ void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffe
uint32 split_absorb = 0;
DealDamageMods(caster, splitDamage, &split_absorb);
- SpellNonMeleeDamage log(this, caster, (*itr)->GetSpellInfo()->Id, schoolMask, (*itr)->GetBase()->GetCastGUID());
+ SpellNonMeleeDamage log(this, caster, (*itr)->GetSpellInfo()->Id, (*itr)->GetBase()->GetSpellXSpellVisualId(), schoolMask, (*itr)->GetBase()->GetCastGUID());
CleanDamage cleanDamage = CleanDamage(splitDamage, 0, BASE_ATTACK, MELEE_HIT_NORMAL);
DealDamage(caster, splitDamage, &cleanDamage, DIRECT_DAMAGE, schoolMask, (*itr)->GetSpellInfo(), false);
log.damage = splitDamage;
@@ -6083,7 +6083,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
{
uint32 procDmg = damage / 2;
- SpellNonMeleeDamage log(pPet, pPet->GetVictim(), procSpell->Id, procSpell->GetSchoolMask());
+ SpellNonMeleeDamage log(pPet, pPet->GetVictim(), procSpell->Id, procSpell->GetSpellXSpellVisualId(pPet), procSpell->GetSchoolMask());
log.damage = procDmg;
pPet->DealDamage(pPet->GetVictim(), procDmg, NULL, SPELL_DIRECT_DAMAGE, procSpell->GetSchoolMask(), procSpell, true);
pPet->SendSpellNonMeleeDamageLog(&log);
@@ -7714,26 +7714,28 @@ int32 Unit::HealBySpell(Unit* victim, SpellInfo const* spellInfo, uint32 addHeal
return gain;
}
-void Unit::SendEnergizeSpellLog(Unit* victim, uint32 spellId, int32 damage, Powers powerType)
+void Unit::SendEnergizeSpellLog(Unit* victim, uint32 spellID, int32 damage, int32 overEnergize, Powers powertype)
{
WorldPackets::CombatLog::SpellEnergizeLog data;
data.CasterGUID = GetGUID();
data.TargetGUID = victim->GetGUID();
- data.SpellID = spellId;
- data.Type = powerType;
+ data.SpellID = spellID;
+ data.Type = powertype;
data.Amount = damage;
+ data.OverEnergize = overEnergize;
data.LogData.Initialize(victim);
SendCombatLogMessage(&data);
}
void Unit::EnergizeBySpell(Unit* victim, uint32 spellId, int32 damage, Powers powerType)
{
- victim->ModifyPower(powerType, damage);
+ int32 gain = victim->ModifyPower(powerType, damage);
+ int32 overEnergize = damage - gain;
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
victim->getHostileRefManager().threatAssist(this, float(damage) * 0.5f, spellInfo);
- SendEnergizeSpellLog(victim, spellId, damage, powerType);
+ SendEnergizeSpellLog(victim, spellId, damage, overEnergize, powerType);
}
uint32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uint32 pdamage, DamageEffectType damagetype, SpellEffectInfo const* effect, uint32 stack) const
@@ -12883,6 +12885,7 @@ void Unit::Kill(Unit* victim, bool durabilityLoss)
{
WorldPackets::Loot::LootList lootList;
lootList.Owner = creature->GetGUID();
+ lootList.LootObj = creature->loot.GetGUID();
player->SendMessageToSet(lootList.Write(), true);
}
@@ -13976,8 +13979,8 @@ void Unit::SendMoveKnockBack(Player* player, float speedXY, float speedZ, float
WorldPackets::Movement::MoveKnockBack moveKnockBack;
moveKnockBack.MoverGUID = GetGUID();
moveKnockBack.SequenceIndex = m_movementCounter++;
- moveKnockBack.HorzSpeed = speedXY;
- moveKnockBack.VertSpeed = speedZ;
+ moveKnockBack.Speeds.HorzSpeed = speedXY;
+ moveKnockBack.Speeds.VertSpeed = speedZ;
moveKnockBack.Direction.x = vcos;
moveKnockBack.Direction.y = vsin;
player->GetSession()->SendPacket(moveKnockBack.Write());
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 37d7c7290bd..674e3025017 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1072,12 +1072,13 @@ struct CalcDamageInfo
// Spell damage info structure based on structure sending in SMSG_SPELLNONMELEEDAMAGELOG opcode
struct TC_GAME_API SpellNonMeleeDamage
{
- SpellNonMeleeDamage(Unit* _attacker, Unit* _target, uint32 _SpellID, uint32 _schoolMask, ObjectGuid _castId = ObjectGuid::Empty);
+ SpellNonMeleeDamage(Unit* _attacker, Unit* _target, uint32 _SpellID, uint32 _SpellXSpellVisualID, uint32 _schoolMask, ObjectGuid _castId = ObjectGuid::Empty);
Unit *target;
Unit *attacker;
ObjectGuid castId;
uint32 SpellID;
+ uint32 SpellXSpellVisualID;
uint32 damage;
uint32 schoolMask;
uint32 absorb;
@@ -1653,7 +1654,7 @@ class TC_GAME_API Unit : public WorldObject
void SendHealSpellLog(Unit* victim, uint32 spellID, uint32 health, uint32 overHeal, uint32 absorbed, bool crit = false);
int32 HealBySpell(Unit* victim, SpellInfo const* spellInfo, uint32 addHealth, bool critical = false);
- void SendEnergizeSpellLog(Unit* victim, uint32 spellID, int32 damage, Powers powertype);
+ void SendEnergizeSpellLog(Unit* victim, uint32 spellID, int32 damage, int32 overEnergize, Powers powertype);
void EnergizeBySpell(Unit* victim, uint32 SpellID, int32 Damage, Powers powertype);
void CastSpell(SpellCastTargets const& targets, SpellInfo const* spellInfo, CustomSpellValues const* value, TriggerCastFlags triggerFlags = TRIGGERED_NONE, Item* castItem = NULL, AuraEffect const* triggeredByAura = NULL, ObjectGuid originalCaster = ObjectGuid::Empty);
diff --git a/src/server/game/Garrison/Garrison.cpp b/src/server/game/Garrison/Garrison.cpp
index 3e1eee27ef5..318f2b8b207 100644
--- a/src/server/game/Garrison/Garrison.cpp
+++ b/src/server/game/Garrison/Garrison.cpp
@@ -543,6 +543,7 @@ void Garrison::SendInfo()
garrison.GarrSiteID = _siteLevel->SiteID;
garrison.GarrSiteLevelID = _siteLevel->ID;
garrison.NumFollowerActivationsRemaining = _followerActivationsRemainingToday;
+ garrison.FollowerSoftCap = 20;
for (auto& p : _plots)
{
Plot& plot = p.second;
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 2fac5c9e630..dacbc519e13 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -3894,9 +3894,9 @@ void ObjectMgr::LoadQuests()
"RewardFactionID5, RewardFactionValue5, RewardFactionOverride5, RewardFactionCapIn5, RewardFactionFlags, "
//92 93 94 95 96 97 98 99
"RewardCurrencyID1, RewardCurrencyQty1, RewardCurrencyID2, RewardCurrencyQty2, RewardCurrencyID3, RewardCurrencyQty3, RewardCurrencyID4, RewardCurrencyQty4, "
- //100 101 102 103 104 105
- "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, QuestRewardID, "
- //106 107 108 109 110 111 112 113 114
+ //100 101 102 103 104 105 106
+ "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, QuestRewardID, Expansion, "
+ //107 108 109 110 111 112 113 114 115
"LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog"
" FROM quest_template");
if (!result)
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index 6b522cea06a..c9edc24e392 100644
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -964,6 +964,7 @@ void Group::SendLooter(Creature* creature, Player* groupLooter)
WorldPackets::Loot::LootList lootList;
lootList.Owner = creature->GetGUID();
+ lootList.LootObj = creature->loot.GetGUID();
if (GetLootMethod() == MASTER_LOOT && creature->loot.hasOverThresholdItem())
lootList.Master = GetMasterLooterGuid();
diff --git a/src/server/game/Handlers/ArtifactHandler.cpp b/src/server/game/Handlers/ArtifactHandler.cpp
index 58fc03ec7e7..e4a7afba5f0 100644
--- a/src/server/game/Handlers/ArtifactHandler.cpp
+++ b/src/server/game/Handlers/ArtifactHandler.cpp
@@ -33,11 +33,11 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow
if (!artifact)
return;
- int32 xpCost = 0;
+ uint64 xpCost = 0;
if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(artifact->GetTotalPurchasedArtifactPowers() + 1))
- xpCost = int32(cost->XP);
+ xpCost = uint64(cost->XP);
- if (xpCost > artifact->GetInt32Value(ITEM_FIELD_ARTIFACT_XP))
+ if (xpCost > artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP))
return;
if (artifactAddPower.PowerChoices.empty())
@@ -111,7 +111,7 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow
}
}
- artifact->ApplyModInt32Value(ITEM_FIELD_ARTIFACT_XP, xpCost, false);
+ artifact->SetUInt64Value(ITEM_FIELD_ARTIFACT_XP, artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP) - xpCost);
artifact->SetState(ITEM_CHANGED, _player);
}
@@ -172,13 +172,13 @@ void WorldSession::HandleConfirmArtifactRespec(WorldPackets::Artifact::ConfirmAr
if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(artifact->GetTotalPurchasedArtifactPowers() + 1))
xpCost = uint32(cost->XP);
- if (xpCost > artifact->GetUInt32Value(ITEM_FIELD_ARTIFACT_XP))
+ if (xpCost > artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP))
return;
- uint32 newAmount = artifact->GetUInt32Value(ITEM_FIELD_ARTIFACT_XP) - xpCost;
+ uint64 newAmount = artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP) - xpCost;
for (uint32 i = 0; i <= artifact->GetTotalPurchasedArtifactPowers(); ++i)
if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(i))
- newAmount += uint32(cost->XP);
+ newAmount += uint64(cost->XP);
for (ItemDynamicFieldArtifactPowers const& artifactPower : artifact->GetArtifactPowers())
{
@@ -213,6 +213,6 @@ void WorldSession::HandleConfirmArtifactRespec(WorldPackets::Artifact::ConfirmAr
_player->ApplyArtifactPowerRank(artifact, scaledArtifactPowerRank, false);
}
- artifact->SetUInt32Value(ITEM_FIELD_ARTIFACT_XP, newAmount);
+ artifact->SetUInt64Value(ITEM_FIELD_ARTIFACT_XP, newAmount);
artifact->SetState(ITEM_CHANGED, _player);
}
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 78469746ff9..09f7347b631 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -1776,6 +1776,7 @@ void WorldSession::HandleUseEquipmentSet(WorldPackets::EquipmentSet::UseEquipmen
}
WorldPackets::EquipmentSet::UseEquipmentSetResult result;
+ result.GUID = useEquipmentSet.GUID;
result.Reason = 0; // 4 - equipment swap failed - inventory is full
SendPacket(result.Write());
}
diff --git a/src/server/game/Handlers/CollectionsHandler.cpp b/src/server/game/Handlers/CollectionsHandler.cpp
index cd1c8656354..c3b1e122368 100644
--- a/src/server/game/Handlers/CollectionsHandler.cpp
+++ b/src/server/game/Handlers/CollectionsHandler.cpp
@@ -24,7 +24,7 @@ void WorldSession::HandleCollectionItemSetFavorite(WorldPackets::Collections::Co
switch (collectionItemSetFavorite.Type)
{
case WorldPackets::Collections::TOYBOX:
- GetCollectionMgr()->ToySetFavorite(collectionItemSetFavorite.ID, packet.IsFavorite);
+ GetCollectionMgr()->ToySetFavorite(collectionItemSetFavorite.ID, collectionItemSetFavorite.IsFavorite);
break;
case WorldPackets::Collections::APPEARANCE:
{
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index 6749f0ef5f2..6ff37422562 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -117,16 +117,17 @@ Quest::Quest(Field* questRecord)
LimitTime = questRecord[103].GetUInt32();
AllowableRaces = questRecord[104].GetInt32();
QuestRewardID = questRecord[105].GetUInt32();
-
- LogTitle = questRecord[106].GetString();
- LogDescription = questRecord[107].GetString();
- QuestDescription = questRecord[108].GetString();
- AreaDescription = questRecord[109].GetString();
- PortraitGiverText = questRecord[110].GetString();
- PortraitGiverName = questRecord[111].GetString();
- PortraitTurnInText = questRecord[112].GetString();
- PortraitTurnInName = questRecord[113].GetString();
- QuestCompletionLog = questRecord[114].GetString();
+ Expansion = questRecord[106].GetInt32();
+
+ LogTitle = questRecord[107].GetString();
+ LogDescription = questRecord[108].GetString();
+ QuestDescription = questRecord[109].GetString();
+ AreaDescription = questRecord[110].GetString();
+ PortraitGiverText = questRecord[111].GetString();
+ PortraitGiverName = questRecord[112].GetString();
+ PortraitTurnInText = questRecord[113].GetString();
+ PortraitTurnInName = questRecord[114].GetString();
+ QuestCompletionLog = questRecord[115].GetString();
for (uint32 i = 0; i < QUEST_EMOTE_COUNT; ++i)
{
diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h
index 2fa92f6fa4f..d7639109afe 100644
--- a/src/server/game/Quests/QuestDef.h
+++ b/src/server/game/Quests/QuestDef.h
@@ -387,6 +387,7 @@ class TC_GAME_API Quest
uint32 GetRewardSkillPoints() const { return RewardSkillPoints; }
uint32 GetRewardReputationMask() const { return RewardReputationMask; }
uint32 GetRewardId() const { return QuestRewardID; }
+ int32 GetExpansion() const { return Expansion; }
uint32 GetQuestGiverPortrait() const { return QuestGiverPortrait; }
uint32 GetQuestTurnInPortrait() const { return QuestTurnInPortrait; }
bool IsDaily() const { return (Flags & QUEST_FLAGS_DAILY) != 0; }
@@ -473,6 +474,7 @@ class TC_GAME_API Quest
uint32 LimitTime;
int32 AllowableRaces;
uint32 QuestRewardID;
+ int32 Expansion;
QuestObjectives Objectives;
std::string LogTitle;
std::string LogDescription;
diff --git a/src/server/game/Server/Packets/ArtifactPackets.cpp b/src/server/game/Server/Packets/ArtifactPackets.cpp
index 55247d04fe5..896092ea012 100644
--- a/src/server/game/Server/Packets/ArtifactPackets.cpp
+++ b/src/server/game/Server/Packets/ArtifactPackets.cpp
@@ -65,7 +65,7 @@ WorldPacket const* WorldPackets::Artifact::ArtifactRespecConfirm::Write()
WorldPacket const* WorldPackets::Artifact::ArtifactXpGain::Write()
{
_worldPacket << ArtifactGUID;
- _worldPacket << int32(Amount);
+ _worldPacket << uint64(Amount);
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/ArtifactPackets.h b/src/server/game/Server/Packets/ArtifactPackets.h
index a11e4e7d923..30336cdbf50 100644
--- a/src/server/game/Server/Packets/ArtifactPackets.h
+++ b/src/server/game/Server/Packets/ArtifactPackets.h
@@ -97,7 +97,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
ObjectGuid ArtifactGUID;
- int32 Amount = 0;
+ uint64 Amount = 0;
};
}
}
diff --git a/src/server/game/Server/Packets/CombatLogPackets.cpp b/src/server/game/Server/Packets/CombatLogPackets.cpp
index abc82dc7708..60e7ba97d46 100644
--- a/src/server/game/Server/Packets/CombatLogPackets.cpp
+++ b/src/server/game/Server/Packets/CombatLogPackets.cpp
@@ -24,6 +24,7 @@ WorldPacket const* WorldPackets::CombatLog::SpellNonMeleeDamageLog::Write()
*this << CasterGUID;
*this << CastID;
*this << int32(SpellID);
+ *this << int32(SpellXSpellVisualID);
*this << int32(Damage);
*this << int32(Overkill);
*this << uint8(SchoolMask);
@@ -127,14 +128,14 @@ WorldPacket const* WorldPackets::CombatLog::SpellHealLog::Write()
WriteBit(SandboxScaling.is_initialized());
FlushBits();
+ WriteLogData();
+
if (CritRollMade)
*this << *CritRollMade;
if (CritRollNeeded)
*this << *CritRollNeeded;
- WriteLogData();
-
if (SandboxScaling)
*this << *SandboxScaling;
@@ -147,6 +148,8 @@ WorldPacket const* WorldPackets::CombatLog::SpellPeriodicAuraLog::Write()
*this << CasterGUID;
*this << int32(SpellID);
*this << uint32(Effects.size());
+ WriteLogDataBit();
+ FlushBits();
for (SpellLogEffect const& effect : Effects)
{
@@ -172,8 +175,6 @@ WorldPacket const* WorldPackets::CombatLog::SpellPeriodicAuraLog::Write()
}
- WriteLogDataBit();
- FlushBits();
WriteLogData();
return &_worldPacket;
@@ -197,6 +198,7 @@ WorldPacket const* WorldPackets::CombatLog::SpellEnergizeLog::Write()
*this << int32(SpellID);
*this << int32(Type);
*this << int32(Amount);
+ *this << int32(OverEnergize);
WriteLogDataBit();
FlushBits();
@@ -344,6 +346,7 @@ WorldPacket const* WorldPackets::CombatLog::AttackerStateUpdate::Write()
attackRoundInfo << uint8(SandboxScaling.TargetMaxScalingLevel);
attackRoundInfo << int16(SandboxScaling.PlayerLevelDelta);
attackRoundInfo << int8(SandboxScaling.TargetScalingLevelDelta);
+ attackRoundInfo << uint16(SandboxScaling.PlayerItemLevel);
WriteLogDataBit();
FlushBits();
diff --git a/src/server/game/Server/Packets/CombatLogPackets.h b/src/server/game/Server/Packets/CombatLogPackets.h
index 0124f6f1254..40c650b2903 100644
--- a/src/server/game/Server/Packets/CombatLogPackets.h
+++ b/src/server/game/Server/Packets/CombatLogPackets.h
@@ -37,6 +37,7 @@ namespace WorldPackets
ObjectGuid CasterGUID;
ObjectGuid CastID;
int32 SpellID = 0;
+ int32 SpellXSpellVisualID = 0;
int32 Damage = 0;
int32 Overkill = 0;
uint8 SchoolMask = 0;
@@ -45,7 +46,7 @@ namespace WorldPackets
bool Periodic = false;
int32 Absorbed = 0;
int32 Flags = 0;
- // Optional<SpellNonMeleeDamageLogDebugInfo> Debug Info;
+ // Optional<SpellNonMeleeDamageLogDebugInfo> DebugInfo;
Optional<Spells::SandboxScalingData> SandboxScaling;
};
@@ -186,6 +187,7 @@ namespace WorldPackets
int32 SpellID = 0;
int32 Type = 0;
int32 Amount = 0;
+ int32 OverEnergize = 0;
};
class SpellInstakillLog final : public ServerPacket
diff --git a/src/server/game/Server/Packets/EquipmentSetPackets.cpp b/src/server/game/Server/Packets/EquipmentSetPackets.cpp
index 2e0b7e6dc09..2650410f0c1 100644
--- a/src/server/game/Server/Packets/EquipmentSetPackets.cpp
+++ b/src/server/game/Server/Packets/EquipmentSetPackets.cpp
@@ -109,6 +109,7 @@ void WorldPackets::EquipmentSet::UseEquipmentSet::Read()
WorldPacket const* WorldPackets::EquipmentSet::UseEquipmentSetResult::Write()
{
+ _worldPacket << uint64(GUID);
_worldPacket << uint8(Reason);
return &_worldPacket;
diff --git a/src/server/game/Server/Packets/EquipmentSetPackets.h b/src/server/game/Server/Packets/EquipmentSetPackets.h
index 432b470a4fc..2811fa396dc 100644
--- a/src/server/game/Server/Packets/EquipmentSetPackets.h
+++ b/src/server/game/Server/Packets/EquipmentSetPackets.h
@@ -93,6 +93,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
+ uint64 GUID = 0; ///< Set Identifier
uint8 Reason = 0;
};
}
diff --git a/src/server/game/Server/Packets/GarrisonPackets.cpp b/src/server/game/Server/Packets/GarrisonPackets.cpp
index 6deb5dedacf..b539439363e 100644
--- a/src/server/game/Server/Packets/GarrisonPackets.cpp
+++ b/src/server/game/Server/Packets/GarrisonPackets.cpp
@@ -148,16 +148,11 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonInfo co
data << uint32(garrison.ArchivedMissions.size());
data << int32(garrison.NumFollowerActivationsRemaining);
data << uint32(garrison.NumMissionsStartedToday);
-
- for (WorldPackets::Garrison::GarrisonBuildingInfo const* building : garrison.Buildings)
- data << *building;
+ data << int32(garrison.FollowerSoftCap);
for (WorldPackets::Garrison::GarrisonPlotInfo* plot : garrison.Plots)
data << *plot;
- for (WorldPackets::Garrison::GarrisonFollower const* follower : garrison.Followers)
- data << *follower;
-
for (WorldPackets::Garrison::GarrisonMission const* mission : garrison.Missions)
data << *mission;
@@ -184,11 +179,17 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonInfo co
if (!garrison.ArchivedMissions.empty())
data.append(garrison.ArchivedMissions.data(), garrison.ArchivedMissions.size());
+ for (WorldPackets::Garrison::GarrisonBuildingInfo const* building : garrison.Buildings)
+ data << *building;
+
for (bool canStartMission : garrison.CanStartMission)
data.WriteBit(canStartMission);
data.FlushBits();
+ for (WorldPackets::Garrison::GarrisonFollower const* follower : garrison.Followers)
+ data << *follower;
+
return data;
}
diff --git a/src/server/game/Server/Packets/GarrisonPackets.h b/src/server/game/Server/Packets/GarrisonPackets.h
index c6546256bda..0b973cf1dbf 100644
--- a/src/server/game/Server/Packets/GarrisonPackets.h
+++ b/src/server/game/Server/Packets/GarrisonPackets.h
@@ -139,6 +139,7 @@ namespace WorldPackets
uint32 GarrSiteLevelID = 0;
uint32 NumFollowerActivationsRemaining = 0;
uint32 NumMissionsStartedToday = 0; // might mean something else, but sending 0 here enables follower abilities "Increase success chance of the first mission of the day by %."
+ int32 FollowerSoftCap = 0;
std::vector<GarrisonPlotInfo*> Plots;
std::vector<GarrisonBuildingInfo const*> Buildings;
std::vector<GarrisonFollower const*> Followers;
diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp
index cccbd948f52..d9bb746eb73 100644
--- a/src/server/game/Server/Packets/GuildPackets.cpp
+++ b/src/server/game/Server/Packets/GuildPackets.cpp
@@ -614,12 +614,12 @@ WorldPacket const* WorldPackets::Guild::GuildBankQueryResults::Write()
for (GuildBankItemInfo const& item : ItemInfo)
{
_worldPacket << item.Slot;
- _worldPacket << item.Item;
_worldPacket << item.Count;
_worldPacket << item.EnchantmentID;
_worldPacket << item.Charges;
_worldPacket << item.OnUseEnchantmentID;
_worldPacket << item.Flags;
+ _worldPacket << item.Item;
_worldPacket.WriteBits(item.SocketEnchant.size(), 2);
_worldPacket.WriteBit(item.Locked);
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/LootPackets.cpp b/src/server/game/Server/Packets/LootPackets.cpp
index bce10b96065..a77e5ce877d 100644
--- a/src/server/game/Server/Packets/LootPackets.cpp
+++ b/src/server/game/Server/Packets/LootPackets.cpp
@@ -48,7 +48,6 @@ WorldPacket const* WorldPackets::Loot::LootResponse::Write()
_worldPacket << uint32(Currencies.size());
_worldPacket.WriteBit(Acquired);
_worldPacket.WriteBit(AELooting);
- _worldPacket.WriteBit(PersonalLooting);
_worldPacket.FlushBits();
for (LootItemData const& item : Items)
@@ -127,6 +126,7 @@ WorldPacket const* WorldPackets::Loot::LootReleaseResponse::Write()
WorldPacket const* WorldPackets::Loot::LootList::Write()
{
_worldPacket << Owner;
+ _worldPacket << LootObj;
_worldPacket.WriteBit(Master.is_initialized());
_worldPacket.WriteBit(RoundRobinWinner.is_initialized());
diff --git a/src/server/game/Server/Packets/LootPackets.h b/src/server/game/Server/Packets/LootPackets.h
index b85bb368a50..3d9e5ef9b70 100644
--- a/src/server/game/Server/Packets/LootPackets.h
+++ b/src/server/game/Server/Packets/LootPackets.h
@@ -71,7 +71,6 @@ namespace WorldPackets
uint32 Coins = 0;
std::vector<LootItemData> Items;
std::vector<LootCurrency> Currencies;
- bool PersonalLooting = false;
bool Acquired = false;
bool AELooting = false;
};
@@ -183,6 +182,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
ObjectGuid Owner;
+ ObjectGuid LootObj;
Optional<ObjectGuid> Master;
Optional<ObjectGuid> RoundRobinWinner;
};
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp
index e1a73d5378b..a6389509b66 100644
--- a/src/server/game/Server/Packets/MovementPackets.cpp
+++ b/src/server/game/Server/Packets/MovementPackets.cpp
@@ -558,10 +558,7 @@ WorldPacket const* WorldPackets::Movement::MoveUpdateTeleport::Write()
{
_worldPacket << *movementInfo;
- _worldPacket << int32(MovementForces.size());
- for (WorldPackets::Movement::MovementForce const& force : MovementForces)
- _worldPacket << force;
-
+ _worldPacket << uint32(MovementForces.size());
_worldPacket.WriteBit(WalkSpeed.is_initialized());
_worldPacket.WriteBit(RunSpeed.is_initialized());
_worldPacket.WriteBit(RunBackSpeed.is_initialized());
@@ -571,9 +568,11 @@ WorldPacket const* WorldPackets::Movement::MoveUpdateTeleport::Write()
_worldPacket.WriteBit(FlightBackSpeed.is_initialized());
_worldPacket.WriteBit(TurnRate.is_initialized());
_worldPacket.WriteBit(PitchRate.is_initialized());
-
_worldPacket.FlushBits();
+ for (WorldPackets::Movement::MovementForce const& force : MovementForces)
+ _worldPacket << force;
+
if (WalkSpeed)
_worldPacket << *WalkSpeed;
@@ -649,7 +648,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MoveKnockBackSp
return data;
}
-ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Movement::MoveKnockBackSpeeds const& speeds)
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Movement::MoveKnockBackSpeeds& speeds)
{
data >> speeds.HorzSpeed;
data >> speeds.VertSpeed;
@@ -827,12 +826,12 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MoveSetCompound
if (stateChange.VehicleRecID)
data << int32(*stateChange.VehicleRecID);
- if (stateChange.MovementForce_)
- data << *stateChange.MovementForce_;
-
if (stateChange.Unknown)
data << *stateChange.Unknown;
+ if (stateChange.MovementForce_)
+ data << *stateChange.MovementForce_;
+
return data;
}
diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp
index 8b42152b403..cf1666ef79c 100644
--- a/src/server/game/Server/Packets/NPCPackets.cpp
+++ b/src/server/game/Server/Packets/NPCPackets.cpp
@@ -54,7 +54,6 @@ WorldPacket const* WorldPackets::NPC::GossipMessage::Write()
_worldPacket << int32(text.QuestFlags[1]);
_worldPacket.WriteBit(text.Repeatable);
- _worldPacket.WriteBit(text.Ignored);
_worldPacket.WriteBits(text.QuestTitle.size(), 9);
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h
index dbb902d863d..c4ed5c20c69 100644
--- a/src/server/game/Server/Packets/NPCPackets.h
+++ b/src/server/game/Server/Packets/NPCPackets.h
@@ -61,7 +61,6 @@ namespace WorldPackets
int32 QuestType = 0;
int32 QuestLevel = 0;
bool Repeatable = false;
- bool Ignored = false;
std::string QuestTitle;
int32 QuestFlags[2] = { };
};
diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp
index 5b14c564d5a..69b87c3fc0a 100644
--- a/src/server/game/Server/Packets/QuestPackets.cpp
+++ b/src/server/game/Server/Packets/QuestPackets.cpp
@@ -138,9 +138,10 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write()
_worldPacket << int32(Info.AreaGroupID);
_worldPacket << int32(Info.TimeAllowed);
- _worldPacket << int32(Info.Objectives.size());
+ _worldPacket << uint32(Info.Objectives.size());
_worldPacket << int32(Info.AllowableRaces);
_worldPacket << int32(Info.QuestRewardID);
+ _worldPacket << int32(Info.Expansion);
_worldPacket.WriteBits(Info.LogTitle.size(), 9);
_worldPacket.WriteBits(Info.LogDescription.size(), 12);
@@ -228,7 +229,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::QuestRewards const
data << int32(questRewards.Money);
data << int32(questRewards.XP);
- data << int32(questRewards.ArtifactXP);
+ data << int64(questRewards.ArtifactXP);
data << int32(questRewards.ArtifactCategoryID);
data << int32(questRewards.Honor);
data << int32(questRewards.Title);
@@ -325,12 +326,12 @@ WorldPacket const* WorldPackets::Quest::QuestGiverQuestComplete::Write()
_worldPacket << int64(MoneyReward);
_worldPacket << int32(SkillLineIDReward);
_worldPacket << int32(NumSkillUpsReward);
- _worldPacket << ItemReward;
_worldPacket.WriteBit(UseQuestReward);
_worldPacket.WriteBit(LaunchGossip);
_worldPacket.WriteBit(LaunchQuest);
_worldPacket.WriteBit(HideChatMessage);
- _worldPacket.FlushBits();
+
+ _worldPacket << ItemReward;
return &_worldPacket;
}
@@ -354,7 +355,6 @@ WorldPacket const* WorldPackets::Quest::QuestGiverQuestDetails::Write()
_worldPacket << uint32(QuestFlags[1]); // FlagsEx
_worldPacket << int32(PortraitTurnIn);
_worldPacket << uint32(LearnSpells.size());
- _worldPacket << Rewards; // WorldPackets::Quest::QuestRewards
_worldPacket << int32(DescEmotes.size());
_worldPacket << int32(Objectives.size());
_worldPacket << int32(QuestStartItemID);
@@ -386,10 +386,9 @@ WorldPacket const* WorldPackets::Quest::QuestGiverQuestDetails::Write()
_worldPacket.WriteBit(DisplayPopup);
_worldPacket.WriteBit(StartCheat);
_worldPacket.WriteBit(AutoLaunched);
- _worldPacket.WriteBit(CanIgnoreQuest);
- _worldPacket.WriteBit(IsQuestIgnored);
_worldPacket.FlushBits();
+ _worldPacket << Rewards; // WorldPackets::Quest::QuestRewards
_worldPacket.WriteString(QuestTitle);
_worldPacket.WriteString(DescriptionText);
_worldPacket.WriteString(LogDescription);
@@ -430,8 +429,6 @@ WorldPacket const* WorldPackets::Quest::QuestGiverRequestItems::Write()
}
_worldPacket.WriteBit(AutoLaunched);
- _worldPacket.WriteBit(CanIgnoreQuest);
- _worldPacket.WriteBit(IsQuestIgnored);
_worldPacket.FlushBits();
_worldPacket.WriteBits(QuestTitle.size(), 9);
@@ -486,7 +483,6 @@ WorldPacket const* WorldPackets::Quest::QuestGiverQuestList::Write()
_worldPacket << uint32(gossip.QuestFlags);
_worldPacket << uint32(gossip.QuestFlagsEx);
_worldPacket.WriteBit(gossip.Repeatable);
- _worldPacket.WriteBit(gossip.IsQuestIgnored);
_worldPacket.WriteBits(gossip.QuestTitle.size(), 9);
_worldPacket.FlushBits();
_worldPacket.WriteString(gossip.QuestTitle);
@@ -540,6 +536,7 @@ void WorldPackets::Quest::QuestPushResult::Read()
WorldPacket const* WorldPackets::Quest::QuestGiverInvalidQuest::Write()
{
_worldPacket << uint32(Reason);
+ _worldPacket << int32(ContributionRewardID);
_worldPacket.WriteBit(SendErrorMessage);
_worldPacket.WriteBits(ReasonText.length(), 9);
diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h
index 454a324a9d1..ac382f31b41 100644
--- a/src/server/game/Server/Packets/QuestPackets.h
+++ b/src/server/game/Server/Packets/QuestPackets.h
@@ -157,6 +157,7 @@ namespace WorldPackets
int32 AreaGroupID = 0;
int32 TimeAllowed = 0;
int32 QuestRewardID = 0;
+ int32 Expansion = 0;
std::vector<QuestObjective> Objectives;
int32 RewardItems[QUEST_REWARD_ITEM_COUNT] = {};
int32 RewardAmount[QUEST_REWARD_ITEM_COUNT] = {};
@@ -362,8 +363,6 @@ namespace WorldPackets
bool DisplayPopup = false;
bool StartCheat = false;
bool AutoLaunched = false;
- bool CanIgnoreQuest = false;
- bool IsQuestIgnored = false;
};
struct QuestObjectiveCollect
@@ -402,8 +401,6 @@ namespace WorldPackets
uint32 QuestFlags[2] = {};
std::string QuestTitle;
std::string CompletionText;
- bool CanIgnoreQuest = false;
- bool IsQuestIgnored = false;
};
class QuestGiverRequestReward final : public ClientPacket
@@ -453,15 +450,14 @@ namespace WorldPackets
struct GossipTextData
{
- GossipTextData(uint32 questID, uint32 questType, uint32 questLevel, uint32 questFlags, uint32 questFlagsEx, bool repeatable, bool ignored, std::string questTitle) :
- QuestID(questID), QuestType(questType), QuestLevel(questLevel), QuestFlags(questFlags), QuestFlagsEx(questFlagsEx), Repeatable(repeatable), IsQuestIgnored(ignored), QuestTitle(questTitle) { }
+ GossipTextData(uint32 questID, uint32 questType, uint32 questLevel, uint32 questFlags, uint32 questFlagsEx, bool repeatable, std::string questTitle) :
+ QuestID(questID), QuestType(questType), QuestLevel(questLevel), QuestFlags(questFlags), QuestFlagsEx(questFlagsEx), Repeatable(repeatable), QuestTitle(questTitle) { }
uint32 QuestID;
uint32 QuestType;
uint32 QuestLevel;
uint32 QuestFlags;
uint32 QuestFlagsEx;
bool Repeatable;
- bool IsQuestIgnored;
std::string QuestTitle;
};
@@ -550,6 +546,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
uint32 Reason = 0;
+ int32 ContributionRewardID = 0;
bool SendErrorMessage = false;
std::string ReasonText;
};
diff --git a/src/server/game/Server/Packets/ScenarioPackets.h b/src/server/game/Server/Packets/ScenarioPackets.h
index 089f85cbcf3..38d4df57744 100644
--- a/src/server/game/Server/Packets/ScenarioPackets.h
+++ b/src/server/game/Server/Packets/ScenarioPackets.h
@@ -22,7 +22,7 @@
#include "PacketUtilities.h"
#include "AchievementPackets.h"
-#define MAX_ALLOWED_SCENARIO_POI_QUERY_SIZE 35
+#define MAX_ALLOWED_SCENARIO_POI_QUERY_SIZE 40
struct ScenarioPOI;
diff --git a/src/server/game/Server/Packets/SocialPackets.cpp b/src/server/game/Server/Packets/SocialPackets.cpp
index 86e992e8437..e76be45ee3a 100644
--- a/src/server/game/Server/Packets/SocialPackets.cpp
+++ b/src/server/game/Server/Packets/SocialPackets.cpp
@@ -135,13 +135,3 @@ void WorldPackets::Social::DelIgnore::Read()
{
_worldPacket >> Player;
}
-
-void WorldPackets::Social::VoiceAddIgnore::Read()
-{
- OffenderName = _worldPacket.ReadString(_worldPacket.ReadBits(9));
-}
-
-void WorldPackets::Social::VoiceDelIgnore::Read()
-{
- _worldPacket >> Player;
-}
diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp
index 8a71d7095de..a3eaca54052 100644
--- a/src/server/game/Server/Packets/SpellPackets.cpp
+++ b/src/server/game/Server/Packets/SpellPackets.cpp
@@ -140,6 +140,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SandboxScalingDat
{
data.WriteBits(sandboxScalingData.Type, 3);
data << int16(sandboxScalingData.PlayerLevelDelta);
+ data << uint16(sandboxScalingData.PlayerItemLevel);
data << uint8(sandboxScalingData.TargetLevel);
data << uint8(sandboxScalingData.Expansion);
data << uint8(sandboxScalingData.Class);
@@ -166,6 +167,9 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::AuraDataInfo cons
data.WriteBits(auraData.EstimatedPoints.size(), 6);
data.WriteBit(auraData.SandboxScaling.is_initialized());
+ if (auraData.SandboxScaling)
+ data << *auraData.SandboxScaling;
+
if (auraData.CastUnit)
data << *auraData.CastUnit;
@@ -184,9 +188,6 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::AuraDataInfo cons
if (!auraData.EstimatedPoints.empty())
data.append(auraData.EstimatedPoints.data(), auraData.EstimatedPoints.size());
- if (auraData.SandboxScaling)
- data << *auraData.SandboxScaling;
-
return data;
}
@@ -521,7 +522,7 @@ WorldPacket const* WorldPackets::Spells::SpellFailure::Write()
_worldPacket << CasterUnit;
_worldPacket << CastID;
_worldPacket << int32(SpellID);
- _worldPacket << uint32(SpelXSpellVisualID);
+ _worldPacket << uint32(SpellXSpellVisualID);
_worldPacket << uint16(Reason);
return &_worldPacket;
@@ -532,7 +533,7 @@ WorldPacket const* WorldPackets::Spells::SpellFailedOther::Write()
_worldPacket << CasterUnit;
_worldPacket << CastID;
_worldPacket << uint32(SpellID);
- _worldPacket << uint32(SpelXSpellVisualID);
+ _worldPacket << uint32(SpellXSpellVisualID);
_worldPacket << uint8(Reason);
return &_worldPacket;
@@ -814,6 +815,7 @@ WorldPacket const* WorldPackets::Spells::SpellChannelStart::Write()
{
_worldPacket << CasterGUID;
_worldPacket << int32(SpellID);
+ _worldPacket << int32(SpellXSpellVisualID);
_worldPacket << uint32(ChannelDuration);
_worldPacket.WriteBit(InterruptImmunities.is_initialized());
_worldPacket.WriteBit(HealPrediction.is_initialized());
diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h
index b0d78bd0b97..e5f283710fc 100644
--- a/src/server/game/Server/Packets/SpellPackets.h
+++ b/src/server/game/Server/Packets/SpellPackets.h
@@ -248,6 +248,7 @@ namespace WorldPackets
{
uint32 Type = 0;
int16 PlayerLevelDelta = 0;
+ uint16 PlayerItemLevel = 0;
uint8 TargetLevel = 0;
uint8 Expansion = 0;
uint8 Class = 1;
@@ -265,13 +266,13 @@ namespace WorldPackets
uint32 ActiveFlags = 0;
uint16 CastLevel = 1;
uint8 Applications = 1;
+ Optional<SandboxScalingData> SandboxScaling;
Optional<ObjectGuid> CastUnit;
Optional<int32> Duration;
Optional<int32> Remaining;
Optional<float> TimeMod;
std::vector<float> Points;
std::vector<float> EstimatedPoints;
- Optional<SandboxScalingData> SandboxScaling;
};
struct AuraInfo
@@ -504,7 +505,7 @@ namespace WorldPackets
ObjectGuid CasterUnit;
uint32 SpellID = 0;
- uint32 SpelXSpellVisualID = 0;
+ uint32 SpellXSpellVisualID = 0;
uint16 Reason = 0;
ObjectGuid CastID;
};
@@ -518,7 +519,7 @@ namespace WorldPackets
ObjectGuid CasterUnit;
uint32 SpellID = 0;
- uint32 SpelXSpellVisualID = 0;
+ uint32 SpellXSpellVisualID = 0;
uint8 Reason = 0;
ObjectGuid CastID;
};
@@ -834,6 +835,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
int32 SpellID = 0;
+ int32 SpellXSpellVisualID = 0;
Optional<SpellChannelStartInterruptImmunities> InterruptImmunities;
ObjectGuid CasterGUID;
Optional<SpellTargetedHealPrediction> HealPrediction;
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 3edc55b5918..fd6769cb16b 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -664,7 +664,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_RECRUIT_A_FRIEND, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REDEEM_WOW_TOKEN_CONFIRM, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REDEEM_WOW_TOKEN_START, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_REMOVE_NEW_ITEM STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_REMOVE_NEW_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REORDER_CHARACTERS, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleReorderCharacters);
DEFINE_HANDLER(CMSG_REPAIR_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRepairItemOpcode);
DEFINE_HANDLER(CMSG_REPLACE_TROPHY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
@@ -1258,7 +1258,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HIGHEST_THREAT_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOTFIXES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOTFIX_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOTFIX_QUERY_RESPONSE STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOTFIX_QUERY_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INITIALIZE_FACTIONS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INITIAL_SETUP, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INIT_WORLD_STATES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index fe81c87bede..e53f097beaf 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -5431,7 +5431,7 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster)
if (caster && target->GetPower(POWER_MANA) >= 10)
{
target->ModifyPower(POWER_MANA, -10);
- target->SendEnergizeSpellLog(caster, 27746, 10, POWER_MANA);
+ target->SendEnergizeSpellLog(caster, 27746, 10, 0, POWER_MANA);
}
else
target->RemoveAurasDueToSpell(27746);
@@ -5906,7 +5906,7 @@ void AuraEffect::HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) c
TC_LOG_DEBUG("spells.periodic", "PeriodicTick: %s health leech of %s for %u dmg inflicted by %u abs is %u",
GetCasterGUID().ToString().c_str(), target->GetGUID().ToString().c_str(), damage, GetId(), absorb);
- SpellNonMeleeDamage log(caster, target, GetId(), GetSpellInfo()->GetSchoolMask(), GetBase()->GetCastGUID());
+ SpellNonMeleeDamage log(caster, target, GetId(), GetBase()->GetSpellXSpellVisualId(), GetSpellInfo()->GetSchoolMask(), GetBase()->GetCastGUID());
log.damage = damage - absorb - resist;
log.absorb = absorb;
log.resist = resist;
@@ -6203,7 +6203,7 @@ void AuraEffect::HandlePeriodicPowerBurnAuraTick(Unit* target, Unit* caster) con
SpellInfo const* spellProto = GetSpellInfo();
// maybe has to be sent different to client, but not by SMSG_PERIODICAURALOG
- SpellNonMeleeDamage damageInfo(caster, target, spellProto->Id, spellProto->SchoolMask, GetBase()->GetCastGUID());
+ SpellNonMeleeDamage damageInfo(caster, target, spellProto->Id, GetBase()->GetSpellXSpellVisualId(), spellProto->SchoolMask, GetBase()->GetCastGUID());
// no SpellDamageBonus for burn mana
caster->CalculateSpellDamageTaken(&damageInfo, int32(gain * dmgMultiplier), spellProto);
@@ -6257,7 +6257,7 @@ void AuraEffect::HandleProcTriggerDamageAuraProc(AuraApplication* aurApp, ProcEv
{
Unit* target = aurApp->GetTarget();
Unit* triggerTarget = eventInfo.GetProcTarget();
- SpellNonMeleeDamage damageInfo(target, triggerTarget, GetId(), GetSpellInfo()->SchoolMask, GetBase()->GetCastGUID());
+ SpellNonMeleeDamage damageInfo(target, triggerTarget, GetId(), GetBase()->GetSpellXSpellVisualId(), GetSpellInfo()->SchoolMask, GetBase()->GetCastGUID());
uint32 damage = target->SpellDamageBonusDone(triggerTarget, GetSpellInfo(), GetAmount(), SPELL_DIRECT_DAMAGE, GetSpellEffectInfo());
damage = triggerTarget->SpellDamageBonusTaken(target, GetSpellInfo(), damage, SPELL_DIRECT_DAMAGE, GetSpellEffectInfo());
target->CalculateSpellDamageTaken(&damageInfo, damage, GetSpellInfo());
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index ba00da86235..7880d1339b3 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -2451,7 +2451,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
else if (m_damage > 0)
{
// Fill base damage struct (unitTarget - is real spell target)
- SpellNonMeleeDamage damageInfo(caster, unitTarget, m_spellInfo->Id, m_spellSchoolMask, m_castId);
+ SpellNonMeleeDamage damageInfo(caster, unitTarget, m_spellInfo->Id, m_SpellVisual, m_spellSchoolMask, m_castId);
// Add bonuses and fill damageInfo struct
caster->CalculateSpellDamageTaken(&damageInfo, m_damage, m_spellInfo, m_attackType, target->crit);
@@ -2480,7 +2480,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
else
{
// Fill base damage struct (unitTarget - is real spell target)
- SpellNonMeleeDamage damageInfo(caster, unitTarget, m_spellInfo->Id, m_spellSchoolMask);
+ SpellNonMeleeDamage damageInfo(caster, unitTarget, m_spellInfo->Id, m_SpellVisual, m_spellSchoolMask);
procEx |= createProcExtendMask(&damageInfo, missInfo);
// Do triggers for unit (reflect triggers passed on hit phase for correct drop charge)
if (canEffectTrigger && missInfo != SPELL_MISS_REFLECT)
@@ -4340,7 +4340,7 @@ void Spell::SendInterrupted(uint8 result)
failurePacket.CasterUnit = m_caster->GetGUID();
failurePacket.CastID = m_castId;
failurePacket.SpellID = m_spellInfo->Id;
- failurePacket.SpelXSpellVisualID = m_SpellVisual;
+ failurePacket.SpellXSpellVisualID = m_SpellVisual;
failurePacket.Reason = result;
m_caster->SendMessageToSet(failurePacket.Write(), true);
@@ -4376,6 +4376,7 @@ void Spell::SendChannelStart(uint32 duration)
WorldPackets::Spells::SpellChannelStart spellChannelStart;
spellChannelStart.CasterGUID = m_caster->GetGUID();
spellChannelStart.SpellID = m_spellInfo->Id;
+ spellChannelStart.SpellXSpellVisualID = m_SpellVisual;
spellChannelStart.ChannelDuration = duration;
m_caster->SendMessageToSet(spellChannelStart.Write(), true);
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 032a0050ef2..46410d47dcc 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -396,7 +396,7 @@ void Spell::EffectEnvironmentalDMG(SpellEffIndex /*effIndex*/)
uint32 resist = 0;
m_caster->CalcAbsorbResist(unitTarget, m_spellInfo->GetSchoolMask(), SPELL_DIRECT_DAMAGE, damage, &absorb, &resist, m_spellInfo);
- SpellNonMeleeDamage log(m_caster, unitTarget, m_spellInfo->Id, m_spellInfo->GetSchoolMask(), m_castId);
+ SpellNonMeleeDamage log(m_caster, unitTarget, m_spellInfo->Id, m_SpellVisual, m_spellInfo->GetSchoolMask(), m_castId);
log.damage = damage - absorb - resist;
log.absorb = absorb;
log.resist = resist;
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 5c11bd4bfb9..97b09de12a6 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -2924,7 +2924,7 @@ void SpellMgr::LoadSpellInfoCorrections()
}
}
- if (spellInfo->ActiveIconID == 2158) // flight
+ if (spellInfo->ActiveIconFileDataId == 135754) // flight
spellInfo->Attributes |= SPELL_ATTR0_PASSIVE;
switch (spellInfo->Id)
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 913aa5c71f0..594b65c881f 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -2431,10 +2431,11 @@ public:
// number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form
uint32 spellid = handler->extractSpellIdFromLink((char*)args);
- if (!spellid || !sSpellMgr->GetSpellInfo(spellid))
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellid);
+ if (!spellInfo)
return false;
- SpellNonMeleeDamage damageInfo(handler->GetSession()->GetPlayer(), target, spellid, sSpellMgr->GetSpellInfo(spellid)->SchoolMask);
+ SpellNonMeleeDamage damageInfo(handler->GetSession()->GetPlayer(), target, spellid, spellInfo->GetSpellXSpellVisualId(handler->GetSession()->GetPlayer()), spellInfo->SchoolMask);
damageInfo.damage = damage;
handler->GetSession()->GetPlayer()->DealDamageMods(damageInfo.target, damageInfo.damage, &damageInfo.absorb);
target->DealSpellDamage(&damageInfo, true);
diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp
index 1ee3e9aa4bc..88cab7f8076 100644
--- a/src/server/scripts/Spells/spell_warlock.cpp
+++ b/src/server/scripts/Spells/spell_warlock.cpp
@@ -731,7 +731,7 @@ class spell_warl_health_funnel : public SpellScriptLoader
if (Player* modOwner = caster->GetSpellModOwner())
modOwner->ApplySpellMod(GetId(), SPELLMOD_COST, damage);
- SpellNonMeleeDamage damageInfo(caster, caster, GetSpellInfo()->Id, GetSpellInfo()->SchoolMask, GetAura()->GetCastGUID());
+ SpellNonMeleeDamage damageInfo(caster, caster, GetSpellInfo()->Id, GetAura()->GetSpellXSpellVisualId(), GetSpellInfo()->SchoolMask, GetAura()->GetCastGUID());
damageInfo.periodicLog = true;
damageInfo.damage = damage;
caster->DealSpellDamage(&damageInfo, false);