diff options
author | Shauren <shauren.trinity@gmail.com> | 2017-04-15 12:32:36 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2017-04-15 12:32:36 +0200 |
commit | adbdb64301b5048914e58131479a07e31304e019 (patch) | |
tree | 79403f90d1f9f70aea792aabbc0c4368ede93dfe /src | |
parent | e88a5e4d6d34a7d319cf8a18d3522017bc9101c0 (diff) |
Core/PacketIO: Updated server packet structures to 7.2.0
Diffstat (limited to 'src')
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); |