Core: Updated to 12.0.1

Signed-off-by: luis <[email protected]>
This commit is contained in:
Shauren
2026-02-12 20:22:00 -03:00
committed by luis
parent c9b1dc2764
commit 54c0cebeee
25 changed files with 389 additions and 239 deletions
@@ -0,0 +1,39 @@
DELETE FROM `build_info` WHERE `build` IN (65818,65848,65867);
INSERT INTO `build_info` (`build`,`majorVersion`,`minorVersion`,`bugfixVersion`,`hotfixVersion`) VALUES
(65818,12,0,1,NULL),
(65848,12,0,1,NULL),
(65867,12,0,1,NULL);
DELETE FROM `build_auth_key` WHERE `build` IN (65818,65848,65867) AND `platform`='Mac' AND `arch`='A64' AND `type`='WoW';
DELETE FROM `build_auth_key` WHERE `build` IN (65818,65848,65867) AND `platform`='Mac' AND `arch`='A64' AND `type`='WoWC';
DELETE FROM `build_auth_key` WHERE `build` IN (65818,65848,65867) AND `platform`='Mac' AND `arch`='x64' AND `type`='WoW';
DELETE FROM `build_auth_key` WHERE `build` IN (65818,65848,65867) AND `platform`='Mac' AND `arch`='x64' AND `type`='WoWC';
DELETE FROM `build_auth_key` WHERE `build` IN (65818,65848,65867) AND `platform`='Win' AND `arch`='A64' AND `type`='WoW';
DELETE FROM `build_auth_key` WHERE `build` IN (65818,65848,65867) AND `platform`='Win' AND `arch`='x64' AND `type`='WoW';
DELETE FROM `build_auth_key` WHERE `build` IN (65818,65848,65867) AND `platform`='Win' AND `arch`='x64' AND `type`='WoWC';
INSERT INTO `build_auth_key` (`build`,`platform`,`arch`,`type`,`key`) VALUES
(65818,'Mac','A64','WoW',0xF5F5FDB55355B846D75F9DD662859DE6),
(65818,'Mac','A64','WoWC',0x7C22D043962282E5AE79F4727FDD08A7),
(65818,'Mac','x64','WoW',0xC9F254309AB02D4DE2C69F406CAADD6D),
(65818,'Mac','x64','WoWC',0xD14FA35344953D9B576C776BC6D224A5),
(65818,'Win','A64','WoW',0xD934E6F9FC8ABBBE081EF1CBABB94DE6),
(65818,'Win','x64','WoW',0xF95DA20B62A41FD45A4222AD20806CD6),
(65818,'Win','x64','WoWC',0x31047A65186E5C9D17B73A4D38461705),
(65848,'Mac','A64','WoW',0x6045CAD5A5E2C05BAF489A0C29B589DD),
(65848,'Mac','A64','WoWC',0x219D0EE672094F2ED9B6E9494BE34EED),
(65848,'Mac','x64','WoW',0x39D1A9118ED8CEDE3534613A0558AB44),
(65848,'Mac','x64','WoWC',0x5EE49CAAA70BB66A83C2D51E881C1819),
(65848,'Win','A64','WoW',0x74BF726BEB5BA22E855F0DC6AB72B22C),
(65848,'Win','x64','WoW',0xFC91D5EB0678A0A537E68E68F92E390D),
(65848,'Win','x64','WoWC',0x263884BA5E5536FD5012596F10BDC132),
(65867,'Mac','A64','WoW',0x09FA621C9C012A9A2A94D9584AA545AE),
(65867,'Mac','A64','WoWC',0x0DD10D0707BA2A0ECF88D0660D942C78),
(65867,'Mac','x64','WoW',0x2D024D99A63AA2CD7C6717D3A372CDF7),
(65867,'Mac','x64','WoWC',0x7B7821FD41AB4ABCF97621669167D534),
(65867,'Win','A64','WoW',0x00C8DB00702C2AADAF8520D4581ACAE4),
(65867,'Win','x64','WoW',0x2DA62BB150688DCD24D757838FDA7BA4),
(65867,'Win','x64','WoWC',0xFA6B7796330EBC6E56F5C80B3B1E0279);
UPDATE `realmlist` SET `gamebuild`=65867 WHERE `gamebuild`=65727;
ALTER TABLE `realmlist` CHANGE `gamebuild` `gamebuild` int unsigned NOT NULL DEFAULT '65867';
@@ -0,0 +1,29 @@
--
ALTER TABLE `trait_tree` ADD COLUMN `TitleText` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST;
ALTER TABLE `trait_tree` CHANGE `Unused1000_1` `BaseNodeGroup` int NOT NULL DEFAULT 0 AFTER `TraitSystemID`;
ALTER TABLE `trait_tree` CHANGE `Unused1000_2` `MinZoom` float NOT NULL DEFAULT 0 AFTER `Flags`;
ALTER TABLE `trait_tree` CHANGE `Unused1000_3` `MaxZoom` float NOT NULL DEFAULT 0 AFTER `MinZoom`;
ALTER TABLE `trait_tree` ADD COLUMN `UiTextureKitID` int NOT NULL DEFAULT 0 AFTER `MaxZoom`;
--
-- Table structure for table `trait_tree_locale`
--
DROP TABLE IF EXISTS `trait_tree_locale`;
CREATE TABLE `trait_tree_locale` (
`ID` int unsigned NOT NULL DEFAULT '0',
`locale` varchar(4) NOT NULL,
`TitleText_lang` text,
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`locale`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
PARTITION BY LIST COLUMNS(locale)
(PARTITION deDE VALUES IN ('deDE') ENGINE = InnoDB,
PARTITION esES VALUES IN ('esES') ENGINE = InnoDB,
PARTITION esMX VALUES IN ('esMX') ENGINE = InnoDB,
PARTITION frFR VALUES IN ('frFR') ENGINE = InnoDB,
PARTITION itIT VALUES IN ('itIT') ENGINE = InnoDB,
PARTITION koKR VALUES IN ('koKR') ENGINE = InnoDB,
PARTITION ptBR VALUES IN ('ptBR') ENGINE = InnoDB,
PARTITION ruRU VALUES IN ('ruRU') ENGINE = InnoDB,
PARTITION zhCN VALUES IN ('zhCN') ENGINE = InnoDB,
PARTITION zhTW VALUES IN ('zhTW') ENGINE = InnoDB);
@@ -1955,9 +1955,10 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PREPARE_MAX_ID_STMT(HOTFIX_SEL_TRAIT_SYSTEM, "SELECT MAX(ID) + 1 FROM trait_system", CONNECTION_SYNCH);
// TraitTree.db2
PrepareStatement(HOTFIX_SEL_TRAIT_TREE, "SELECT ID, TraitSystemID, Unused1000_1, FirstTraitNodeID, PlayerConditionID, Flags, Unused1000_2, "
"Unused1000_3 FROM trait_tree WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PrepareStatement(HOTFIX_SEL_TRAIT_TREE, "SELECT TitleText, ID, TraitSystemID, BaseNodeGroup, FirstTraitNodeID, PlayerConditionID, Flags, MinZoom, "
"MaxZoom, UiTextureKitID FROM trait_tree WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_TRAIT_TREE, "SELECT MAX(ID) + 1 FROM trait_tree", CONNECTION_SYNCH);
PREPARE_LOCALE_STMT(HOTFIX_SEL_TRAIT_TREE, "SELECT ID, TitleText_lang FROM trait_tree_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH);
// TraitTreeLoadout.db2
PrepareStatement(HOTFIX_SEL_TRAIT_TREE_LOADOUT, "SELECT ID, TraitTreeID, ChrSpecializationID FROM trait_tree_loadout"
@@ -1131,6 +1131,7 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_TRAIT_TREE,
HOTFIX_SEL_TRAIT_TREE_MAX_ID,
HOTFIX_SEL_TRAIT_TREE_LOCALE,
HOTFIX_SEL_TRAIT_TREE_LOADOUT,
HOTFIX_SEL_TRAIT_TREE_LOADOUT_MAX_ID,
+7 -5
View File
@@ -6460,19 +6460,21 @@ struct TraitSystemLoadInfo
struct TraitTreeLoadInfo
{
static constexpr DB2FieldMeta Fields[8] =
static constexpr DB2FieldMeta Fields[10] =
{
{ .IsSigned = false, .Type = FT_STRING, .Name = "TitleText" },
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "TraitSystemID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Unused1000_1" },
{ .IsSigned = true, .Type = FT_INT, .Name = "BaseNodeGroup" },
{ .IsSigned = true, .Type = FT_INT, .Name = "FirstTraitNodeID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "PlayerConditionID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Unused1000_2" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Unused1000_3" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "MinZoom" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "MaxZoom" },
{ .IsSigned = true, .Type = FT_INT, .Name = "UiTextureKitID" },
};
static constexpr DB2LoadInfo Instance{ Fields, 8, &TraitTreeMeta::Instance, HOTFIX_SEL_TRAIT_TREE };
static constexpr DB2LoadInfo Instance{ Fields, 10, &TraitTreeMeta::Instance, HOTFIX_SEL_TRAIT_TREE };
};
struct TraitTreeLoadoutLoadInfo
+29 -22
View File
@@ -10237,7 +10237,7 @@ struct GroundEffectTextureMeta
struct GroupFinderActivityMeta
{
static constexpr DB2MetaField Fields[19] =
static constexpr DB2MetaField Fields[20] =
{
{ .Type = FT_STRING, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_STRING, .ArraySize = 1, .IsSigned = true },
@@ -10250,6 +10250,7 @@ struct GroupFinderActivityMeta
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
@@ -10265,9 +10266,9 @@ struct GroupFinderActivityMeta
.FileDataId = 974813,
.IndexField = -1,
.ParentIndexField = -1,
.FieldCount = 19,
.FileFieldCount = 19,
.LayoutHash = 0x5436E136,
.FieldCount = 20,
.FileFieldCount = 20,
.LayoutHash = 0xC3DB15C2,
.Fields = Fields
};
};
@@ -13696,7 +13697,7 @@ struct LightDataMeta
struct LightParamsMeta
{
static constexpr DB2MetaField Fields[30] =
static constexpr DB2MetaField Fields[32] =
{
{ .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true },
@@ -13728,6 +13729,8 @@ struct LightParamsMeta
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
};
static constexpr DB2Meta Instance =
@@ -13735,9 +13738,9 @@ struct LightParamsMeta
.FileDataId = 1334669,
.IndexField = -1,
.ParentIndexField = -1,
.FieldCount = 30,
.FileFieldCount = 30,
.LayoutHash = 0xF34ED6FA,
.FieldCount = 32,
.FileFieldCount = 32,
.LayoutHash = 0xCAE394E7,
.Fields = Fields
};
};
@@ -23630,8 +23633,9 @@ struct TraitSystemMeta
struct TraitTreeMeta
{
static constexpr DB2MetaField Fields[8] =
static constexpr DB2MetaField Fields[10] =
{
{ .Type = FT_STRING, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
@@ -23640,16 +23644,17 @@ struct TraitTreeMeta
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
};
static constexpr DB2Meta Instance =
{
.FileDataId = 4420305,
.IndexField = 0,
.ParentIndexField = 1,
.FieldCount = 8,
.FileFieldCount = 8,
.LayoutHash = 0xE0C67577,
.IndexField = 1,
.ParentIndexField = 2,
.FieldCount = 10,
.FileFieldCount = 10,
.LayoutHash = 0xFBCDBA8F,
.Fields = Fields
};
};
@@ -24503,7 +24508,7 @@ struct UIGenericWidgetDisplayMeta
struct UIMapPinInfoMeta
{
static constexpr DB2MetaField Fields[6] =
static constexpr DB2MetaField Fields[7] =
{
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
@@ -24511,6 +24516,7 @@ struct UIMapPinInfoMeta
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
};
static constexpr DB2Meta Instance =
@@ -24518,9 +24524,9 @@ struct UIMapPinInfoMeta
.FileDataId = 6237800,
.IndexField = -1,
.ParentIndexField = -1,
.FieldCount = 6,
.FileFieldCount = 6,
.LayoutHash = 0xE8E5C344,
.FieldCount = 7,
.FileFieldCount = 7,
.LayoutHash = 0x95F2CD4F,
.Fields = Fields
};
};
@@ -25242,12 +25248,13 @@ struct UiPartyPoseMeta
struct UiQuestDetailsThemeMeta
{
static constexpr DB2MetaField Fields[4] =
static constexpr DB2MetaField Fields[5] =
{
{ .Type = FT_STRING, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
};
static constexpr DB2Meta Instance =
@@ -25255,9 +25262,9 @@ struct UiQuestDetailsThemeMeta
.FileDataId = 3448518,
.IndexField = -1,
.ParentIndexField = -1,
.FieldCount = 4,
.FileFieldCount = 4,
.LayoutHash = 0xE7D161DC,
.FieldCount = 5,
.FileFieldCount = 5,
.LayoutHash = 0xE7D12547,
.Fields = Fields
};
};
+5 -3
View File
@@ -4608,14 +4608,16 @@ struct TraitSystemEntry
struct TraitTreeEntry
{
LocalizedString TitleText;
uint32 ID;
uint32 TraitSystemID;
int32 Unused1000_1;
int32 BaseNodeGroup;
int32 FirstTraitNodeID;
int32 PlayerConditionID;
int32 Flags;
float Unused1000_2;
float Unused1000_3;
float MinZoom;
float MaxZoom;
int32 UiTextureKitID;
EnumFlag<TraitTreeFlag> GetFlags() const { return static_cast<TraitTreeFlag>(Flags); }
};
@@ -143,7 +143,7 @@ inline void WriteSetFieldUpdate(SetUpdateFieldBase<T> const& set, bool ignoreCha
{
data << uint8(ignoreChangesMask ? 1 : 0);
if (ignoreChangesMask)
UF::WriteSetFieldCreate(set, data, owner, receiver);
UF::WriteSetFieldCreate(set, data, receiver, owner);
else
{
uint16 changesCount = 0;
@@ -881,8 +881,10 @@ void VisibleItem::WriteCreate(ByteBuffer& data, Player const* receiver, Unit con
data << int32(ConditionalItemAppearanceID);
data << uint16(ItemAppearanceModID);
data << uint16(ItemVisual);
data.WriteBit(Field_10);
data.WriteBit(Field_11);
data << uint32(ItemModifiedAppearanceID);
data << uint8(Field_18);
data.WriteBit(HasTransmog);
data.WriteBit(HasIllusion);
data.FlushBits();
}
@@ -892,17 +894,17 @@ void VisibleItem::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player c
if (ignoreChangesMask)
changesMask.SetAll();
data.WriteBits(changesMask.GetBlock(0), 8);
data.WriteBits(changesMask.GetBlock(0), 10);
if (changesMask[0])
{
if (changesMask[1])
{
data.WriteBit(Field_10);
data.WriteBit(HasTransmog);
}
if (changesMask[2])
{
data.WriteBit(Field_11);
data.WriteBit(HasIllusion);
}
}
data.FlushBits();
@@ -928,19 +930,29 @@ void VisibleItem::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player c
{
data << uint16(ItemVisual);
}
if (changesMask[8])
{
data << uint32(ItemModifiedAppearanceID);
}
if (changesMask[9])
{
data << uint8(Field_18);
}
}
data.FlushBits();
}
void VisibleItem::ClearChangesMask()
{
Base::ClearChangesMask(Field_10);
Base::ClearChangesMask(Field_11);
Base::ClearChangesMask(HasTransmog);
Base::ClearChangesMask(HasIllusion);
Base::ClearChangesMask(ItemID);
Base::ClearChangesMask(SecondaryItemModifiedAppearanceID);
Base::ClearChangesMask(ConditionalItemAppearanceID);
Base::ClearChangesMask(ItemAppearanceModID);
Base::ClearChangesMask(ItemVisual);
Base::ClearChangesMask(ItemModifiedAppearanceID);
Base::ClearChangesMask(Field_18);
_changesMask.ResetAll();
}
@@ -5230,6 +5242,7 @@ void TransmogOutfitMetadata::WriteCreate(ByteBuffer& data, Player const* receive
data << uint32(TransmogOutfitID);
data << uint8(StampedOptionMainHand);
data << uint8(StampedOptionOffHand);
data << float(CostMod);
data.WriteBit(Locked);
data.FlushBits();
}
@@ -5240,6 +5253,7 @@ void TransmogOutfitMetadata::WriteUpdate(bool ignoreChangesMask, ByteBuffer& dat
data << uint32(TransmogOutfitID);
data << uint8(StampedOptionMainHand);
data << uint8(StampedOptionOffHand);
data << float(CostMod);
data.WriteBit(Locked);
data.FlushBits();
data.FlushBits();
@@ -5251,7 +5265,8 @@ bool TransmogOutfitMetadata::operator==(TransmogOutfitMetadata const& right) con
&& SituationTrigger == right.SituationTrigger
&& TransmogOutfitID == right.TransmogOutfitID
&& StampedOptionMainHand == right.StampedOptionMainHand
&& StampedOptionOffHand == right.StampedOptionOffHand;
&& StampedOptionOffHand == right.StampedOptionOffHand
&& CostMod == right.CostMod;
}
void Research::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
@@ -8907,6 +8922,7 @@ void ConversationData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlag
(*Lines)[i].WriteCreate(data, receiver, owner);
}
data.WriteBit(DontPlayBroadcastTextSounds);
data.WriteBit(Field_33);
data << uint32(Actors.size());
data << uint32(Flags);
for (uint32 i = 0; i < Actors.size(); ++i)
@@ -8923,7 +8939,7 @@ void ConversationData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlag
void ConversationData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Conversation const* owner, bool ignoreNestedChangesMask) const
{
data.WriteBits(changesMask.GetBlock(0), 7);
data.WriteBits(changesMask.GetBlock(0), 8);
if (changesMask[0])
{
@@ -8932,6 +8948,10 @@ void ConversationData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Pl
data.WriteBit(DontPlayBroadcastTextSounds);
}
if (changesMask[2])
{
data.WriteBit(Field_33);
}
if (changesMask[3])
{
data.WriteBits(Lines->size(), 32);
for (uint32 i = 0; i < Lines->size(); ++i)
@@ -8943,7 +8963,7 @@ void ConversationData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Pl
data.FlushBits();
if (changesMask[0])
{
if (changesMask[3])
if (changesMask[4])
{
if (!ignoreNestedChangesMask)
Actors.WriteUpdateMask(data);
@@ -8954,7 +8974,7 @@ void ConversationData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Pl
data.FlushBits();
if (changesMask[0])
{
if (changesMask[3])
if (changesMask[4])
{
for (uint32 i = 0; i < Actors.size(); ++i)
{
@@ -8964,15 +8984,15 @@ void ConversationData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Pl
}
}
}
if (changesMask[4])
if (changesMask[5])
{
data << int32(ViewerDependentValue<LastLineEndTimeTag>::GetValue(this, receiver, owner));
}
if (changesMask[5])
if (changesMask[6])
{
data << uint32(Progress);
}
if (changesMask[6])
if (changesMask[7])
{
data << uint32(Flags);
}
@@ -8983,6 +9003,7 @@ void ConversationData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Pl
void ConversationData::ClearChangesMask()
{
Base::ClearChangesMask(DontPlayBroadcastTextSounds);
Base::ClearChangesMask(Field_33);
Base::ClearChangesMask(Lines);
Base::ClearChangesMask(Actors);
Base::ClearChangesMask(LastLineEndTime);
@@ -10346,20 +10367,20 @@ void PlayerInitiativeTaskInfo::ClearChangesMask()
void NICompletedMilestoneEntry::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
{
data << uint32(MilestoneID);
data << int64(AwardDate);
data << uint32(MilestoneID);
}
void NICompletedMilestoneEntry::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
{
data << uint32(MilestoneID);
data << int64(AwardDate);
data << uint32(MilestoneID);
}
bool NICompletedMilestoneEntry::operator==(NICompletedMilestoneEntry const& right) const
{
return MilestoneID == right.MilestoneID
&& AwardDate == right.AwardDate;
return AwardDate == right.AwardDate
&& MilestoneID == right.MilestoneID;
}
void NICompletedInitiativesEntry::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
@@ -252,15 +252,17 @@ struct UnitChannel : public IsUpdateFieldStructureTag
bool operator!=(UnitChannel const& right) const { return !(*this == right); }
};
struct VisibleItem : public IsUpdateFieldStructureTag, public HasChangesMask<8>
struct VisibleItem : public IsUpdateFieldStructureTag, public HasChangesMask<10>
{
UpdateField<bool, 0, 1> Field_10;
UpdateField<bool, 0, 2> Field_11;
UpdateField<bool, 0, 1> HasTransmog;
UpdateField<bool, 0, 2> HasIllusion;
UpdateField<int32, 0, 3> ItemID;
UpdateField<int32, 0, 4> SecondaryItemModifiedAppearanceID;
UpdateField<int32, 0, 5> ConditionalItemAppearanceID;
UpdateField<uint16, 0, 6> ItemAppearanceModID;
UpdateField<uint16, 0, 7> ItemVisual;
UpdateField<uint32, 0, 8> ItemModifiedAppearanceID;
UpdateField<uint8, 0, 9> Field_18;
using OwnerObject = Unit;
void WriteCreate(ByteBuffer& data, Player const* receiver, Unit const* owner) const;
@@ -1257,6 +1259,7 @@ struct TransmogOutfitMetadata : public IsUpdateFieldStructureTag
uint32 TransmogOutfitID = 0;
uint8 StampedOptionMainHand = 0;
uint8 StampedOptionOffHand = 0;
float CostMod = 0.0f; // Used only with SPELL_AURA_MOD_TRANSMOG_OUTFIT_UPDATE_COST
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
@@ -1813,15 +1816,16 @@ struct ConversationActor : public IsUpdateFieldStructureTag
bool operator!=(ConversationActor const& right) const { return !(*this == right); }
};
struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<7>
struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<8>
{
UpdateField<bool, 0, 1> DontPlayBroadcastTextSounds;
UpdateField<std::vector<UF::ConversationLine>, 0, 2> Lines;
DynamicUpdateField<UF::ConversationActor, 0, 3> Actors;
UpdateField<int32, 0, 4> LastLineEndTime;
UpdateField<bool, 0, 2> Field_33; // UNK: Prevents line lookup from succeeding
UpdateField<std::vector<UF::ConversationLine>, 0, 3> Lines;
DynamicUpdateField<UF::ConversationActor, 0, 4> Actors;
UpdateField<int32, 0, 5> LastLineEndTime;
struct LastLineEndTimeTag : ViewerDependentValueTag<int32> {};
UpdateField<uint32, 0, 5> Progress;
UpdateField<uint32, 0, 6> Flags;
UpdateField<uint32, 0, 6> Progress;
UpdateField<uint32, 0, 7> Flags;
using OwnerObject = Conversation;
void WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Conversation const* owner) const;
@@ -2187,8 +2191,8 @@ struct PlayerInitiativeTaskInfo : public IsUpdateFieldStructureTag, public HasCh
struct NICompletedMilestoneEntry : public IsUpdateFieldStructureTag
{
uint32 MilestoneID = 0;
int64 AwardDate = 0;
uint32 MilestoneID = 0;
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
@@ -11839,6 +11839,7 @@ void Player::SetVisibleItemSlot(uint8 slot, Item* pItem)
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::SecondaryItemModifiedAppearanceID), pItem->GetVisibleSecondaryModifiedAppearanceId(this));
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemAppearanceModID), pItem->GetVisibleAppearanceModId(this));
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemVisual), pItem->GetVisibleItemVisual(this));
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemModifiedAppearanceID), pItem->GetVisibleModifiedAppearanceId(this));
}
else
{
@@ -11846,6 +11847,7 @@ void Player::SetVisibleItemSlot(uint8 slot, Item* pItem)
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::SecondaryItemModifiedAppearanceID), 0);
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemAppearanceModID), 0);
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemVisual), 0);
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemModifiedAppearanceID), 0);
}
}
+5 -3
View File
@@ -303,7 +303,7 @@ SpellSchoolMask ProcEventInfo::GetSchoolMask() const
SpellNonMeleeDamage::SpellNonMeleeDamage(Unit* _attacker, Unit* _target, SpellInfo const* _spellInfo, SpellCastVisual spellVisual, uint32 _schoolMask, ObjectGuid _castId)
: target(_target), attacker(_attacker), castId(_castId), Spell(_spellInfo), SpellVisual(spellVisual), damage(0), originalDamage(0),
schoolMask(_schoolMask), absorb(0), resist(0), periodicLog(false), blocked(0), HitInfo(0), cleanDamage(0), fullBlock(false), preHitHealth(_target->GetHealth())
schoolMask(_schoolMask), absorb(0), resist(0), periodicLog(false), blocked(0), reflectingSpellId(0), HitInfo(0), cleanDamage(0), fullBlock(false), preHitHealth(_target->GetHealth())
{
}
@@ -2157,7 +2157,8 @@ void Unit::HandleEmoteCommand(Emote emoteId, Player* target /*=nullptr*/, Trinit
absorbLog.AbsorbSpellID = absorbAurEff->GetId();
absorbLog.Absorbed = currentAbsorb;
absorbLog.OriginalHeal = healInfo.GetOriginalHeal();
healInfo.GetTarget()->SendMessageToSet(absorbLog.Write(), true);
absorbLog.LogData.Initialize(healInfo.GetTarget());
healInfo.GetTarget()->SendCombatLogMessage(&absorbLog);
}
}
}
@@ -5556,6 +5557,7 @@ void Unit::SendSpellNonMeleeDamageLog(SpellNonMeleeDamage const* log)
packet.Absorbed = log->absorb;
packet.Resisted = log->resist;
packet.ShieldBlock = log->blocked;
packet.ReflectingSpellID = log->reflectingSpellId;
packet.Periodic = log->periodicLog;
packet.Flags = log->HitInfo;
@@ -5648,7 +5650,7 @@ void Unit::SendSpellDamageImmune(Unit* target, uint32 spellId, bool isPeriodic)
void Unit::SendAttackStateUpdate(CalcDamageInfo* damageInfo)
{
WorldPackets::CombatLog::AttackerStateUpdate packet;
packet.HitInfo = damageInfo->HitInfo;
packet.Flags = damageInfo->HitInfo;
packet.AttackerGUID = damageInfo->Attacker->GetGUID();
packet.VictimGUID = damageInfo->Target->GetGUID();
packet.Damage = damageInfo->Damage;
+1
View File
@@ -568,6 +568,7 @@ struct TC_GAME_API SpellNonMeleeDamage
uint32 resist;
bool periodicLog;
uint32 blocked;
uint32 reflectingSpellId;
uint32 HitInfo;
// Used for help
uint32 cleanDamage;
+62 -60
View File
@@ -6685,69 +6685,71 @@ enum ResponseCodes
CHAR_CREATE_TIMEOUT = 47,
CHAR_CREATE_THROTTLE = 48,
CHAR_CREATE_ALLIED_RACE_ACHIEVEMENT = 49,
CHAR_CREATE_CHARACTER_IN_COMMUNITY = 50,
CHAR_CREATE_NEW_PLAYER = 51,
CHAR_CREATE_NAME_RESERVATION_FULL = 52,
CHAR_CREATE_DRACTHYR_DUPLICATE = 53,
CHAR_CREATE_DRACTHYR_LEVEL_REQUIREMENT = 54,
CHAR_CREATE_DEATHKNIGHT_DUPLICATE = 55,
CHAR_CREATE_DEATHKNIGHT_LEVEL_REQUIREMENT = 56,
CHAR_CREATE_CLASS_TRIAL_NEWCOMER = 57,
CHAR_CREATE_CLASS_TRIAL_THROTTLE_HOUR = 58,
CHAR_CREATE_CLASS_TRIAL_THROTTLE_DAY = 59,
CHAR_CREATE_CLASS_TRIAL_THROTTLE_WEEK = 60,
CHAR_CREATE_CLASS_TRIAL_THROTTLE_ACCOUNT = 61,
CHAR_CREATE_FACTION_BALANCE = 62,
CHAR_CREATE_TIMERUNNING = 63,
CHAR_CREATE_RACECLASS_ACHIEVEMENT = 50,
CHAR_CREATE_CHARACTER_IN_COMMUNITY = 51,
CHAR_CREATE_NEW_PLAYER = 52,
CHAR_CREATE_NAME_RESERVATION_FULL = 53,
CHAR_CREATE_DRACTHYR_DUPLICATE = 54,
CHAR_CREATE_DRACTHYR_LEVEL_REQUIREMENT = 55,
CHAR_CREATE_DEATHKNIGHT_DUPLICATE = 56,
CHAR_CREATE_DEATHKNIGHT_LEVEL_REQUIREMENT = 57,
CHAR_CREATE_CLASS_TRIAL_NEWCOMER = 58,
CHAR_CREATE_CLASS_TRIAL_THROTTLE_HOUR = 59,
CHAR_CREATE_CLASS_TRIAL_THROTTLE_DAY = 60,
CHAR_CREATE_CLASS_TRIAL_THROTTLE_WEEK = 61,
CHAR_CREATE_CLASS_TRIAL_THROTTLE_ACCOUNT = 62,
CHAR_CREATE_FACTION_BALANCE = 63,
CHAR_CREATE_TIMERUNNING = 64,
CHAR_DELETE_IN_PROGRESS = 64,
CHAR_DELETE_SUCCESS = 65,
CHAR_DELETE_FAILED = 66,
CHAR_DELETE_FAILED_CHARACTER_SERVICE_PENDING = 67,
CHAR_DELETE_FAILED_GUILD_LEADER = 68,
CHAR_DELETE_FAILED_ARENA_CAPTAIN = 69,
CHAR_DELETE_FAILED_HAS_HEIRLOOM_OR_MAIL = 70,
CHAR_DELETE_FAILED_DEPRECATED1 = 71,
CHAR_DELETE_FAILED_HAS_WOW_TOKEN = 72,
CHAR_DELETE_FAILED_DEPRECATED2 = 73,
CHAR_DELETE_FAILED_COMMUNITY_OWNER = 74,
CHAR_DELETE_IN_PROGRESS = 65,
CHAR_DELETE_SUCCESS = 66,
CHAR_DELETE_FAILED = 67,
CHAR_DELETE_FAILED_CHARACTER_SERVICE_PENDING = 68,
CHAR_DELETE_FAILED_GUILD_LEADER = 69,
CHAR_DELETE_FAILED_ARENA_CAPTAIN = 70,
CHAR_DELETE_FAILED_HAS_HEIRLOOM_OR_MAIL = 71,
CHAR_DELETE_FAILED_DEPRECATED1 = 72,
CHAR_DELETE_FAILED_HAS_WOW_TOKEN = 73,
CHAR_DELETE_FAILED_DEPRECATED2 = 74,
CHAR_DELETE_FAILED_COMMUNITY_OWNER = 75,
CHAR_DELETE_FAILED_NEIGHBORHOOD_OWNER = 76,
CHAR_DELETE_FAILED_HOUSE_OWNER = 77,
CHAR_LOGIN_IN_PROGRESS = 75,
CHAR_LOGIN_SUCCESS = 76,
CHAR_LOGIN_NO_WORLD = 77,
CHAR_LOGIN_DUPLICATE_CHARACTER = 78,
CHAR_LOGIN_NO_INSTANCES = 79,
CHAR_LOGIN_FAILED = 80,
CHAR_LOGIN_DISABLED = 81,
CHAR_LOGIN_NO_CHARACTER = 82,
CHAR_LOGIN_LOCKED_FOR_TRANSFER = 83,
CHAR_LOGIN_LOCKED_BY_BILLING = 84,
CHAR_LOGIN_LOCKED_BY_MOBILE_AH = 85,
CHAR_LOGIN_TEMPORARY_GM_LOCK = 86,
CHAR_LOGIN_LOCKED_BY_CHARACTER_UPGRADE = 87,
CHAR_LOGIN_LOCKED_BY_REVOKED_CHARACTER_UPGRADE = 88,
CHAR_LOGIN_LOCKED_BY_REVOKED_VAS_TRANSACTION = 89,
CHAR_LOGIN_LOCKED_BY_RESTRICTION = 90,
CHAR_LOGIN_LOCKED_FOR_REALM_PLAYTYPE = 91,
CHAR_LOGIN_IN_PROGRESS = 78,
CHAR_LOGIN_SUCCESS = 79,
CHAR_LOGIN_NO_WORLD = 80,
CHAR_LOGIN_DUPLICATE_CHARACTER = 81,
CHAR_LOGIN_NO_INSTANCES = 82,
CHAR_LOGIN_FAILED = 83,
CHAR_LOGIN_DISABLED = 84,
CHAR_LOGIN_NO_CHARACTER = 85,
CHAR_LOGIN_LOCKED_FOR_TRANSFER = 86,
CHAR_LOGIN_LOCKED_BY_BILLING = 87,
CHAR_LOGIN_LOCKED_BY_MOBILE_AH = 88,
CHAR_LOGIN_TEMPORARY_GM_LOCK = 89,
CHAR_LOGIN_LOCKED_BY_CHARACTER_UPGRADE = 90,
CHAR_LOGIN_LOCKED_BY_REVOKED_CHARACTER_UPGRADE = 91,
CHAR_LOGIN_LOCKED_BY_REVOKED_VAS_TRANSACTION = 92,
CHAR_LOGIN_LOCKED_BY_RESTRICTION = 93,
CHAR_LOGIN_LOCKED_FOR_REALM_PLAYTYPE = 94,
CHAR_NAME_SUCCESS = 92,
CHAR_NAME_FAILURE = 93,
CHAR_NAME_NO_NAME = 94,
CHAR_NAME_TOO_SHORT = 95,
CHAR_NAME_TOO_LONG = 96,
CHAR_NAME_INVALID_CHARACTER = 97,
CHAR_NAME_MIXED_LANGUAGES = 98,
CHAR_NAME_PROFANE = 99,
CHAR_NAME_RESERVED = 100,
CHAR_NAME_INVALID_APOSTROPHE = 101,
CHAR_NAME_MULTIPLE_APOSTROPHES = 102,
CHAR_NAME_THREE_CONSECUTIVE = 103,
CHAR_NAME_INVALID_SPACE = 104,
CHAR_NAME_CONSECUTIVE_SPACES = 105,
CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 106,
CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 107,
CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 108,
CHAR_NAME_SPACES_DISALLOWED = 109,
CHAR_NAME_SUCCESS = 95,
CHAR_NAME_FAILURE = 96,
CHAR_NAME_NO_NAME = 97,
CHAR_NAME_TOO_SHORT = 98,
CHAR_NAME_TOO_LONG = 99,
CHAR_NAME_INVALID_CHARACTER = 100,
CHAR_NAME_MIXED_LANGUAGES = 101,
CHAR_NAME_PROFANE = 102,
CHAR_NAME_RESERVED = 103,
CHAR_NAME_INVALID_APOSTROPHE = 104,
CHAR_NAME_MULTIPLE_APOSTROPHES = 105,
CHAR_NAME_THREE_CONSECUTIVE = 106,
CHAR_NAME_INVALID_SPACE = 107,
CHAR_NAME_CONSECUTIVE_SPACES = 108,
CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 109,
CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 110,
CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 111,
};
enum CharacterUndeleteResult
@@ -52,6 +52,7 @@ WorldPacket const* SpellNonMeleeDamageLog::Write()
*this << int32(Absorbed);
*this << int32(Resisted);
*this << int32(ShieldBlock);
*this << int32(ReflectingSpellID);
*this << int32(Flags);
*this << Size<uint32>(WorldTextViewers);
*this << Size<uint32>(Supporters);
@@ -250,6 +251,8 @@ WorldPacket const* SpellInterruptLog::Write()
_worldPacket << Victim;
_worldPacket << int32(InterruptedSpellID);
_worldPacket << int32(SpellID);
_worldPacket << Bits<1>(HideFromCombatLog);
_worldPacket.FlushBits();
return &_worldPacket;
}
@@ -306,6 +309,7 @@ WorldPacket const* SpellMissLog::Write()
_worldPacket << int32(SpellID);
_worldPacket << Caster;
_worldPacket << Size<uint32>(Entries);
_worldPacket << Bits<1>(HideFromCombatLog);
for (SpellLogMissEntry const& missEntry : Entries)
_worldPacket << missEntry;
@@ -361,7 +365,7 @@ WorldPacket const* SpellDamageShield::Write()
WorldPacket const* AttackerStateUpdate::Write()
{
ByteBuffer attackRoundInfo;
attackRoundInfo << uint32(HitInfo);
attackRoundInfo << uint32(Flags);
attackRoundInfo << AttackerGUID;
attackRoundInfo << VictimGUID;
attackRoundInfo << int32(Damage);
@@ -373,39 +377,39 @@ WorldPacket const* AttackerStateUpdate::Write()
attackRoundInfo << int32(SubDmg->SchoolMask);
attackRoundInfo << float(SubDmg->FDamage);
attackRoundInfo << int32(SubDmg->Damage);
if (HitInfo & (HITINFO_FULL_ABSORB | HITINFO_PARTIAL_ABSORB))
if (Flags & (HITINFO_FULL_ABSORB | HITINFO_PARTIAL_ABSORB))
attackRoundInfo << int32(SubDmg->Absorbed);
if (HitInfo & (HITINFO_FULL_RESIST | HITINFO_PARTIAL_RESIST))
if (Flags & (HITINFO_FULL_RESIST | HITINFO_PARTIAL_RESIST))
attackRoundInfo << int32(SubDmg->Resisted);
}
attackRoundInfo << uint8(VictimState);
attackRoundInfo << uint32(AttackerState);
attackRoundInfo << uint32(MeleeSpellID);
if (HitInfo & HITINFO_BLOCK)
if (Flags & HITINFO_BLOCK)
attackRoundInfo << int32(BlockAmount);
if (HitInfo & HITINFO_RAGE_GAIN)
if (Flags & HITINFO_RAGE_GAIN)
attackRoundInfo << int32(RageGained);
if (HitInfo & HITINFO_UNK1)
if (Flags & HITINFO_UNK1)
{
attackRoundInfo << uint32(UnkState.State1);
attackRoundInfo << float(UnkState.State2);
attackRoundInfo << float(UnkState.State3);
attackRoundInfo << float(UnkState.State4);
attackRoundInfo << float(UnkState.State5);
attackRoundInfo << float(UnkState.State6);
attackRoundInfo << float(UnkState.State7);
attackRoundInfo << float(UnkState.State8);
attackRoundInfo << float(UnkState.State9);
attackRoundInfo << float(UnkState.State10);
attackRoundInfo << float(UnkState.State11);
attackRoundInfo << uint32(UnkState.State12);
attackRoundInfo << uint32(HitInfo.ArmorReduction);
attackRoundInfo << float(HitInfo.CritRollNeeded);
attackRoundInfo << float(HitInfo.CombatRoll);
attackRoundInfo << float(HitInfo.MissChance);
attackRoundInfo << float(HitInfo.DodgeChance);
attackRoundInfo << float(HitInfo.ParryChance);
attackRoundInfo << float(HitInfo.BlockChance);
attackRoundInfo << float(HitInfo.GlanceChance);
attackRoundInfo << float(HitInfo.CrushChance);
attackRoundInfo << float(HitInfo.MinDamage);
attackRoundInfo << float(HitInfo.MaxDamage);
attackRoundInfo << uint32(HitInfo.SinceLastSwing);
}
if (HitInfo & (HITINFO_BLOCK | HITINFO_UNK12))
attackRoundInfo << float(Unk);
if (Flags & (HITINFO_BLOCK | HITINFO_UNK12))
attackRoundInfo << float(BlockRoll);
attackRoundInfo << ContentTuning;
@@ -476,18 +480,22 @@ WorldPacket const* SpellAbsorbLog::Write()
WorldPacket const* SpellHealAbsorbLog::Write()
{
_worldPacket << Target;
_worldPacket << AbsorbCaster;
_worldPacket << Healer;
_worldPacket << int32(AbsorbSpellID);
_worldPacket << int32(AbsorbedSpellID);
_worldPacket << int32(Absorbed);
_worldPacket << int32(OriginalHeal);
_worldPacket << OptionalInit(ContentTuning);
_worldPacket.FlushBits();
*this << Target;
*this << AbsorbCaster;
*this << Healer;
*this << int32(AbsorbSpellID);
*this << int32(AbsorbedSpellID);
*this << int32(Absorbed);
*this << int32(OriginalHeal);
WriteLogDataBit();
*this << OptionalInit(ContentTuning);
FlushBits();
WriteLogData();
if (ContentTuning)
_worldPacket << *ContentTuning;
*this << *ContentTuning;
return &_worldPacket;
}
@@ -51,6 +51,7 @@ namespace WorldPackets
int32 Overkill = -1;
uint8 SchoolMask = 0;
int32 ShieldBlock = 0;
int32 ReflectingSpellID = 0;
int32 Resisted = 0;
bool Periodic = false;
int32 Absorbed = 0;
@@ -153,6 +154,7 @@ namespace WorldPackets
ObjectGuid Victim;
int32 InterruptedSpellID = 0;
int32 SpellID = 0;
bool HideFromCombatLog = false;
};
struct SpellDispellData
@@ -230,6 +232,7 @@ namespace WorldPackets
int32 SpellID = 0;
ObjectGuid Caster;
std::vector<SpellLogMissEntry> Entries;
bool HideFromCombatLog = false;
};
class ProcResist final : public ServerPacket
@@ -285,20 +288,20 @@ namespace WorldPackets
int32 Resisted = 0;
};
struct UnkAttackerState
struct HitInfoData
{
uint32 State1 = 0;
float State2 = 0.0f;
float State3 = 0.0f;
float State4 = 0.0f;
float State5 = 0.0f;
float State6 = 0.0f;
float State7 = 0.0f;
float State8 = 0.0f;
float State9 = 0.0f;
float State10 = 0.0f;
float State11 = 0.0f;
uint32 State12 = 0;
uint32 ArmorReduction = 0;
float CritRollNeeded = 0.0f;
float CombatRoll = 0.0f;
float MissChance = 0.0f;
float DodgeChance = 0.0f;
float ParryChance = 0.0f;
float BlockChance = 0.0f;
float GlanceChance = 0.0f;
float CrushChance = 0.0f;
float MinDamage = 0.0f;
float MaxDamage = 0.0f;
uint32 SinceLastSwing = 0;
};
class AttackerStateUpdate final : public CombatLogServerPacket
@@ -308,7 +311,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
uint32 HitInfo = 0; // Flags
uint32 Flags = 0; // Flags
ObjectGuid AttackerGUID;
ObjectGuid VictimGUID;
int32 Damage = 0;
@@ -320,8 +323,8 @@ namespace WorldPackets
uint32 MeleeSpellID = 0;
int32 BlockAmount = 0;
int32 RageGained = 0;
UnkAttackerState UnkState;
float Unk = 0.0f;
HitInfoData HitInfo;
float BlockRoll = 0.0f;
Spells::ContentTuningParams ContentTuning;
};
@@ -343,10 +346,10 @@ namespace WorldPackets
std::vector<Spells::SpellSupportInfo> Supporters;
};
class SpellHealAbsorbLog final : public ServerPacket
class SpellHealAbsorbLog final : public CombatLogServerPacket
{
public:
explicit SpellHealAbsorbLog() : ServerPacket(SMSG_SPELL_HEAL_ABSORB_LOG, 100) { }
explicit SpellHealAbsorbLog() : CombatLogServerPacket(SMSG_SPELL_HEAL_ABSORB_LOG, 100) { }
WorldPacket const* Write() override;
@@ -33,6 +33,11 @@ void SpellCastLogData::Initialize(Unit const* unit)
AttackPower = unit->GetTotalAttackPowerValue(unit->GetClass() == CLASS_HUNTER ? RANGED_ATTACK : BASE_ATTACK);
SpellPower = unit->SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_SPELL);
Armor = unit->GetArmor();
if (Player const* player = unit->ToPlayer())
{
Versatility = player->GetRatingBonusValue(CR_VERSATILITY_DAMAGE_DONE) * 100.0f;
Avoidance = player->GetRatingBonusValue(CR_AVOIDANCE) * 100.0f;
}
PowerData.emplace_back(int32(unit->GetPowerType()), unit->GetPower(unit->GetPowerType()), int32(0));
}
@@ -44,6 +49,11 @@ void SpellCastLogData::Initialize(Spell const* spell)
AttackPower = unitCaster->GetTotalAttackPowerValue(unitCaster->GetClass() == CLASS_HUNTER ? RANGED_ATTACK : BASE_ATTACK);
SpellPower = unitCaster->SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_SPELL);
Armor = unitCaster->GetArmor();
if (Player const* player = unitCaster->ToPlayer())
{
Versatility = player->GetRatingBonusValue(CR_VERSATILITY_DAMAGE_DONE) * 100.0f;
Avoidance = player->GetRatingBonusValue(CR_AVOIDANCE) * 100.0f;
}
Powers primaryPowerType = unitCaster->GetPowerType();
bool primaryPowerAdded = false;
for (SpellPowerCost const& cost : spell->GetPowerCost())
@@ -161,8 +171,9 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellCastLogData const& spellCastLogDat
data << int32(spellCastLogData.AttackPower);
data << int32(spellCastLogData.SpellPower);
data << int32(spellCastLogData.Armor);
data << int32(spellCastLogData.Unknown_1105_1);
data << int32(spellCastLogData.Unknown_1105_2);
data << int32(spellCastLogData.Versatility);
data << int32(spellCastLogData.Avoidance);
data << Bits<1>(spellCastLogData.HideFromCombatLog);
data << BitsSize<9>(spellCastLogData.PowerData);
data.FlushBits();
@@ -43,8 +43,9 @@ namespace WorldPackets
int32 AttackPower = 0;
int32 SpellPower = 0;
int32 Armor = 0;
int32 Unknown_1105_1 = 0;
int32 Unknown_1105_2 = 0;
int32 Versatility = 0;
int32 Avoidance = 0;
bool HideFromCombatLog = false;
std::vector<SpellLogPowerData> PowerData;
void Initialize(Unit const* unit);
@@ -135,7 +135,6 @@ namespace WorldPackets
int32 CfgRealmRecID = 0;
uint32 CommercePricePollTimeSeconds = 0;
int64 RedeemForBalanceAmount = 0;
uint32 BpayStorePurchaseTimeout = 0;
uint32 ClubsPresenceDelay = 0;
uint32 ClubPresenceUnsubscribeDelay = 0; ///< Timer for updating club presence when communities ui frame is hidden
uint32 KioskSessionDurationMinutes = 0;
@@ -249,6 +249,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_BONUS_ROLL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_BUG_REPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBugReportOpcode);
DEFINE_HANDLER(CMSG_BULK_PURCHASE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_BULK_REFUND, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_BUSY_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBusyTradeOpcode);
DEFINE_HANDLER(CMSG_BUY_ACCOUNT_BANK_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBuyBankTab);
DEFINE_HANDLER(CMSG_BUY_BACK_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleBuybackItem);
@@ -583,6 +584,8 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_HOUSING_GET_CURRENT_HOUSE_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_GET_PLAYER_PERMISSIONS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_HOUSE_STATUS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_PHOTO_SHARING_CLEAR_AUTHORIZATION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_PHOTO_SHARING_COMPLETE_AUTHORIZATION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_RESET_KIOSK_MODE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_ROOM_ADD, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_ROOM_APPLY_COMPONENT_MATERIALS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
@@ -1739,6 +1742,8 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_GET_CURRENT_HOUSE_INFO_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_GET_PLAYER_PERMISSIONS_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_HOUSE_STATUS_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_PHOTO_SHARING_AUTHORIZATION_CLEARED_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_PHOTO_SHARING_AUTHORIZATION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_REDEEM_DEFERRED_DECOR_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_RESET_KIOSK_MODE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_ROOM_ADD_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+64 -59
View File
@@ -140,6 +140,7 @@ enum OpcodeClient : uint32
CMSG_BONUS_ROLL = 0x3A0265,
CMSG_BUG_REPORT = 0x4000B1,
CMSG_BULK_PURCHASE = 0x290032,
CMSG_BULK_REFUND = 0x290033,
CMSG_BUSY_TRADE = 0x3A0002,
CMSG_BUY_ACCOUNT_BANK_TAB = 0x3B0124,
CMSG_BUY_BACK_ITEM = 0x3B0037,
@@ -474,6 +475,8 @@ enum OpcodeClient : uint32
CMSG_HOUSING_GET_CURRENT_HOUSE_INFO = 0x350006,
CMSG_HOUSING_GET_PLAYER_PERMISSIONS = 0x350007,
CMSG_HOUSING_HOUSE_STATUS = 0x350005,
CMSG_HOUSING_PHOTO_SHARING_CLEAR_AUTHORIZATION = 0x4001A0,
CMSG_HOUSING_PHOTO_SHARING_COMPLETE_AUTHORIZATION = 0x40019F,
CMSG_HOUSING_RESET_KIOSK_MODE = 0x350008,
CMSG_HOUSING_ROOM_ADD = 0x320001,
CMSG_HOUSING_ROOM_APPLY_COMPONENT_MATERIALS = 0x320006,
@@ -1039,7 +1042,7 @@ enum OpcodeClient : uint32
CMSG_TRANSMOGRIFY_ITEMS = CMSG_REQUEST_SCHEDULED_PVP_INFO + 1,
};
inline constexpr std::size_t NUM_CMSG_OPCODES = 1934;
inline constexpr std::size_t NUM_CMSG_OPCODES = 1938;
inline constexpr std::ptrdiff_t GetOpcodeArrayIndex(OpcodeClient opcode)
{
@@ -1065,8 +1068,8 @@ inline constexpr std::ptrdiff_t GetOpcodeArrayIndex(OpcodeClient opcode)
case 0x3C: return idInGroup < 1 ? idInGroup + 1358 : -1;
case 0x3D: return idInGroup < 10 ? idInGroup + 1359 : -1;
case 0x3E: return idInGroup < 134 ? idInGroup + 1369 : -1;
case 0x40: return idInGroup < 413 ? idInGroup + 1503 : -1;
case 0x41: return idInGroup < 18 ? idInGroup + 1916 : -1;
case 0x40: return idInGroup < 417 ? idInGroup + 1503 : -1;
case 0x41: return idInGroup < 18 ? idInGroup + 1920 : -1;
default: return -1;
}
}
@@ -1348,9 +1351,9 @@ enum OpcodeServer : uint32
SMSG_COMMERCE_TOKEN_UPDATE = 0x42027A,
SMSG_COMPLAINT_RESULT = 0x420155,
SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x420246,
SMSG_COMPRESSED_PACKET = 0x49000C,
SMSG_COMPRESSED_PACKET = 0x49000D,
SMSG_CONFIRM_PARTY_INVITE = 0x4202BC,
SMSG_CONNECT_TO = 0x490007,
SMSG_CONNECT_TO = 0x490008,
SMSG_CONSOLE_WRITE = 0x4200DD,
SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x420281,
SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x420280,
@@ -1413,7 +1416,7 @@ enum OpcodeServer : uint32
SMSG_DISPLAY_WORLD_TEXT = 0x420296,
SMSG_DISPLAY_WORLD_TEXT_ON_TARGET = 0x620055,
SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x420083,
SMSG_DROP_NEW_CONNECTION = 0x490006,
SMSG_DROP_NEW_CONNECTION = 0x490007,
SMSG_DUEL_ARRANGED = 0x48001B,
SMSG_DUEL_COMPLETE = 0x48001F,
SMSG_DUEL_COUNTDOWN = 0x48001E,
@@ -1428,7 +1431,7 @@ enum OpcodeServer : uint32
SMSG_ENCOUNTER_END = 0x420227,
SMSG_ENCOUNTER_START = 0x420226,
SMSG_END_LIGHTNING_STORM = 0x420152,
SMSG_ENTER_ENCRYPTED_MODE = 0x490003,
SMSG_ENTER_ENCRYPTED_MODE = 0x490004,
SMSG_ENUM_CHARACTERS_RESULT = 0x420018,
SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x42029B,
SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x62000E,
@@ -1660,6 +1663,8 @@ enum OpcodeServer : uint32
SMSG_HOUSING_GET_CURRENT_HOUSE_INFO_RESPONSE = 0x550001,
SMSG_HOUSING_GET_PLAYER_PERMISSIONS_RESPONSE = 0x550006,
SMSG_HOUSING_HOUSE_STATUS_RESPONSE = 0x550000,
SMSG_HOUSING_PHOTO_SHARING_AUTHORIZATION_CLEARED_RESULT = 0x42037C,
SMSG_HOUSING_PHOTO_SHARING_AUTHORIZATION_RESULT = 0x42037B,
SMSG_HOUSING_REDEEM_DEFERRED_DECOR_RESPONSE = 0x510009,
SMSG_HOUSING_RESET_KIOSK_MODE_RESPONSE = 0x550007,
SMSG_HOUSING_ROOM_ADD_RESPONSE = 0x530001,
@@ -1670,33 +1675,33 @@ enum OpcodeServer : uint32
SMSG_HOUSING_ROOM_SET_DOOR_TYPE_RESPONSE = 0x530006,
SMSG_HOUSING_ROOM_SET_LAYOUT_EDIT_MODE_RESPONSE = 0x530000,
SMSG_HOUSING_ROOM_UPDATE_RESPONSE = 0x530003,
SMSG_HOUSING_SVCS_ACCEPT_NEIGHBORHOOD_OWNERSHIP_RESPONSE = 0x540018,
SMSG_HOUSING_SVCS_ACCEPT_NEIGHBORHOOD_OWNERSHIP_RESPONSE = 0x540017,
SMSG_HOUSING_SVCS_CANCEL_RELINQUISH_HOUSE_RESPONSE = 0x540008,
SMSG_HOUSING_SVCS_CHANGE_HOUSE_COSMETIC_OWNER = 0x540011,
SMSG_HOUSING_SVCS_CHANGE_HOUSE_COSMETIC_OWNER = 0x540010,
SMSG_HOUSING_SVCS_CLEAR_PLOT_RESERVATION_RESPONSE = 0x540005,
SMSG_HOUSING_SVCS_CREATE_CHARTER_NEIGHBORHOOD_RESPONSE = 0x540003,
SMSG_HOUSING_SVCS_DELETE_ALL_NEIGHBORHOOD_INVITES_RESPONSE = 0x540022,
SMSG_HOUSING_SVCS_GET_BNET_FRIEND_NEIGHBORHOODS_RESPONSE = 0x54001F,
SMSG_HOUSING_SVCS_GET_HOUSE_FINDER_INFO_RESPONSE = 0x54001D,
SMSG_HOUSING_SVCS_GET_HOUSE_FINDER_NEIGHBORHOOD_RESPONSE = 0x54001E,
SMSG_HOUSING_SVCS_GET_PLAYER_HOUSES_INFO_RESPONSE = 0x54000C,
SMSG_HOUSING_SVCS_GET_POTENTIAL_HOUSE_OWNERS_RESPONSE = 0x54001B,
SMSG_HOUSING_SVCS_GUILD_ADD_HOUSE_NOTIFICATION = 0x540013,
SMSG_HOUSING_SVCS_GUILD_APPEND_NEIGHBORHOOD_NOTIFICATION = 0x540015,
SMSG_HOUSING_SVCS_DELETE_ALL_NEIGHBORHOOD_INVITES_RESPONSE = 0x540021,
SMSG_HOUSING_SVCS_GET_BNET_FRIEND_NEIGHBORHOODS_RESPONSE = 0x54001E,
SMSG_HOUSING_SVCS_GET_HOUSE_FINDER_INFO_RESPONSE = 0x54001C,
SMSG_HOUSING_SVCS_GET_HOUSE_FINDER_NEIGHBORHOOD_RESPONSE = 0x54001D,
SMSG_HOUSING_SVCS_GET_PLAYER_HOUSES_INFO_RESPONSE = 0x54000B,
SMSG_HOUSING_SVCS_GET_POTENTIAL_HOUSE_OWNERS_RESPONSE = 0x54001A,
SMSG_HOUSING_SVCS_GUILD_ADD_HOUSE_NOTIFICATION = 0x540012,
SMSG_HOUSING_SVCS_GUILD_APPEND_NEIGHBORHOOD_NOTIFICATION = 0x540014,
SMSG_HOUSING_SVCS_GUILD_CREATE_NEIGHBORHOOD_NOTIFICATION = 0x540001,
SMSG_HOUSING_SVCS_GUILD_GET_HOUSING_INFO_RESPONSE = 0x540017,
SMSG_HOUSING_SVCS_GUILD_REMOVE_HOUSE_NOTIFICATION = 0x540014,
SMSG_HOUSING_SVCS_GUILD_RENAME_NEIGHBORHOOD_NOTIFICATION = 0x540016,
SMSG_HOUSING_SVCS_HOUSE_FINDER_FORCE_REFRESH = 0x540020,
SMSG_HOUSING_SVCS_NEIGHBORHOOD_OWNERSHIP_TRANSFERRED_RESPONSE = 0x54001A,
SMSG_HOUSING_SVCS_GUILD_GET_HOUSING_INFO_RESPONSE = 0x540016,
SMSG_HOUSING_SVCS_GUILD_REMOVE_HOUSE_NOTIFICATION = 0x540013,
SMSG_HOUSING_SVCS_GUILD_RENAME_NEIGHBORHOOD_NOTIFICATION = 0x540015,
SMSG_HOUSING_SVCS_HOUSE_FINDER_FORCE_REFRESH = 0x54001F,
SMSG_HOUSING_SVCS_NEIGHBORHOOD_OWNERSHIP_TRANSFERRED_RESPONSE = 0x540019,
SMSG_HOUSING_SVCS_NEIGHBORHOOD_RESERVE_PLOT_RESPONSE = 0x540004,
SMSG_HOUSING_SVCS_NOTIFY_PERMISSIONS_FAILURE = 0x540000,
SMSG_HOUSING_SVCS_PLAYER_VIEW_HOUSES_RESPONSE = 0x54000D,
SMSG_HOUSING_SVCS_REJECT_NEIGHBORHOOD_OWNERSHIP_RESPONSE = 0x540019,
SMSG_HOUSING_SVCS_PLAYER_VIEW_HOUSES_RESPONSE = 0x54000C,
SMSG_HOUSING_SVCS_REJECT_NEIGHBORHOOD_OWNERSHIP_RESPONSE = 0x540018,
SMSG_HOUSING_SVCS_RELINQUISH_HOUSE_RESPONSE = 0x540007,
SMSG_HOUSING_SVCS_UPDATE_HOUSES_LEVEL_FAVOR = 0x540012,
SMSG_HOUSING_SVCS_UPDATE_HOUSE_SETTINGS_RESPONSE = 0x54001C,
SMSG_HOUSING_SVC_REQUEST_PLAYER_RELOAD_DATA = 0x540021,
SMSG_HOUSING_SVCS_UPDATE_HOUSES_LEVEL_FAVOR = 0x540011,
SMSG_HOUSING_SVCS_UPDATE_HOUSE_SETTINGS_RESPONSE = 0x54001B,
SMSG_HOUSING_SVC_REQUEST_PLAYER_RELOAD_DATA = 0x540020,
SMSG_INITIALIZE_FACTIONS = 0x4201CC,
SMSG_INITIAL_SETUP = 0x420014,
SMSG_INITIATIVE_COMPLETE = 0x420363,
@@ -1956,7 +1961,7 @@ enum OpcodeServer : uint32
SMSG_MOVE_UPDATE_TELEPORT = 0x5A000F,
SMSG_MOVE_UPDATE_TURN_RATE = 0x5A000B,
SMSG_MOVE_UPDATE_WALK_SPEED = 0x5A0006,
SMSG_MULTIPLE_PACKETS = 0x49000B,
SMSG_MULTIPLE_PACKETS = 0x49000C,
SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x420287,
SMSG_MULTI_FLOOR_NEW_FLOOR = 0x420286,
SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x4200B2,
@@ -2096,7 +2101,7 @@ enum OpcodeServer : uint32
SMSG_PLAY_SPELL_VISUAL = 0x620038,
SMSG_PLAY_SPELL_VISUAL_KIT = 0x62003C,
SMSG_PLAY_TIME_WARNING = 0x4201A7,
SMSG_PONG = 0x490008,
SMSG_PONG = 0x490009,
SMSG_POWER_UPDATE = 0x42017C,
SMSG_PRELOAD_CHILD_MAP = 0x42000D,
SMSG_PRELOAD_WORLD = 0x42002C,
@@ -2195,7 +2200,7 @@ enum OpcodeServer : uint32
SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x420025,
SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x480014,
SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE = 0x480015,
SMSG_RESET_COMPRESSION_CONTEXT = 0x490009,
SMSG_RESET_COMPRESSION_CONTEXT = 0x49000A,
SMSG_RESET_FAILED_NOTIFY = 0x420161,
SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x420340,
SMSG_RESET_QUEST_POI = 0x600020,
@@ -2209,7 +2214,7 @@ enum OpcodeServer : uint32
SMSG_RESTRICTED_ACCOUNT_WARNING = 0x42005C,
SMSG_RESUME_CAST = 0x62002E,
SMSG_RESUME_CAST_BAR = 0x620031,
SMSG_RESUME_COMMS = 0x490005,
SMSG_RESUME_COMMS = 0x490006,
SMSG_RESUME_TOKEN = 0x420041,
SMSG_RESURRECT_REQUEST = 0x420012,
SMSG_RESYNC_RUNES = 0x620052,
@@ -2344,7 +2349,7 @@ enum OpcodeServer : uint32
SMSG_SUMMON_REQUEST = 0x4201CA,
SMSG_SUPERCEDED_SPELLS = 0x62003F,
SMSG_SURVEY_DELIVERED = 0x420360,
SMSG_SUSPEND_COMMS = 0x490004,
SMSG_SUSPEND_COMMS = 0x490005,
SMSG_SUSPEND_TOKEN = 0x420040,
SMSG_SYNC_WOW_ENTITLEMENTS = 0x4202FC,
SMSG_TALENTS_INVOLUNTARILY_RESET = 0x4201C1,
@@ -2461,39 +2466,39 @@ enum OpcodeServer : uint32
SMSG_ARENA_TEAM_STATS = UNKNOWN_OPCODE,
};
inline constexpr std::size_t NUM_SMSG_OPCODES = 1636;
inline constexpr std::size_t NUM_SMSG_OPCODES = 1638;
inline constexpr std::ptrdiff_t GetOpcodeArrayIndex(OpcodeServer opcode)
{
uint32 idInGroup = opcode & 0xFFFF;
switch (opcode >> 16)
{
case 0x42: return idInGroup < 891 ? idInGroup + 0 : -1;
case 0x43: return idInGroup < 5 ? idInGroup + 891 : -1;
case 0x46: return idInGroup < 20 ? idInGroup + 896 : -1;
case 0x47: return idInGroup < 36 ? idInGroup + 916 : -1;
case 0x48: return idInGroup < 49 ? idInGroup + 952 : -1;
case 0x49: return idInGroup < 13 ? idInGroup + 1001 : -1;
case 0x4A: return idInGroup < 12 ? idInGroup + 1014 : -1;
case 0x4C: return idInGroup < 82 ? idInGroup + 1026 : -1;
case 0x4E: return idInGroup < 72 ? idInGroup + 1108 : -1;
case 0x50: return idInGroup < 2 ? idInGroup + 1180 : -1;
case 0x51: return idInGroup < 11 ? idInGroup + 1182 : -1;
case 0x52: return idInGroup < 8 ? idInGroup + 1193 : -1;
case 0x53: return idInGroup < 8 ? idInGroup + 1201 : -1;
case 0x54: return idInGroup < 36 ? idInGroup + 1209 : -1;
case 0x55: return idInGroup < 8 ? idInGroup + 1245 : -1;
case 0x56: return idInGroup < 34 ? idInGroup + 1253 : -1;
case 0x58: return idInGroup < 1 ? idInGroup + 1287 : -1;
case 0x5A: return idInGroup < 122 ? idInGroup + 1288 : -1;
case 0x5B: return idInGroup < 6 ? idInGroup + 1410 : -1;
case 0x5C: return idInGroup < 23 ? idInGroup + 1416 : -1;
case 0x5E: return idInGroup < 8 ? idInGroup + 1439 : -1;
case 0x5F: return idInGroup < 52 ? idInGroup + 1447 : -1;
case 0x60: return idInGroup < 41 ? idInGroup + 1499 : -1;
case 0x62: return idInGroup < 87 ? idInGroup + 1540 : -1;
case 0x63: return idInGroup < 8 ? idInGroup + 1627 : -1;
case 0x65: return idInGroup < 1 ? idInGroup + 1635 : -1;
case 0x42: return idInGroup < 893 ? idInGroup + 0 : -1;
case 0x43: return idInGroup < 5 ? idInGroup + 893 : -1;
case 0x46: return idInGroup < 20 ? idInGroup + 898 : -1;
case 0x47: return idInGroup < 36 ? idInGroup + 918 : -1;
case 0x48: return idInGroup < 49 ? idInGroup + 954 : -1;
case 0x49: return idInGroup < 14 ? idInGroup + 1003 : -1;
case 0x4A: return idInGroup < 12 ? idInGroup + 1017 : -1;
case 0x4C: return idInGroup < 82 ? idInGroup + 1029 : -1;
case 0x4E: return idInGroup < 72 ? idInGroup + 1111 : -1;
case 0x50: return idInGroup < 2 ? idInGroup + 1183 : -1;
case 0x51: return idInGroup < 11 ? idInGroup + 1185 : -1;
case 0x52: return idInGroup < 8 ? idInGroup + 1196 : -1;
case 0x53: return idInGroup < 8 ? idInGroup + 1204 : -1;
case 0x54: return idInGroup < 35 ? idInGroup + 1212 : -1;
case 0x55: return idInGroup < 8 ? idInGroup + 1247 : -1;
case 0x56: return idInGroup < 34 ? idInGroup + 1255 : -1;
case 0x58: return idInGroup < 1 ? idInGroup + 1289 : -1;
case 0x5A: return idInGroup < 122 ? idInGroup + 1290 : -1;
case 0x5B: return idInGroup < 6 ? idInGroup + 1412 : -1;
case 0x5C: return idInGroup < 23 ? idInGroup + 1418 : -1;
case 0x5E: return idInGroup < 8 ? idInGroup + 1441 : -1;
case 0x5F: return idInGroup < 52 ? idInGroup + 1449 : -1;
case 0x60: return idInGroup < 41 ? idInGroup + 1501 : -1;
case 0x62: return idInGroup < 87 ? idInGroup + 1542 : -1;
case 0x63: return idInGroup < 8 ? idInGroup + 1629 : -1;
case 0x65: return idInGroup < 1 ? idInGroup + 1637 : -1;
default: return -1;
}
}
@@ -739,7 +739,7 @@ enum AuraType : uint32
SPELL_AURA_652 = 652,
SPELL_AURA_653 = 653,
SPELL_AURA_654 = 654,
SPELL_AURA_REMOVE_TRANSMOG_OUTFIT_UPDATE_COST = 655,
SPELL_AURA_MOD_TRANSMOG_OUTFIT_UPDATE_COST = 655,
TOTAL_AURAS
};
@@ -724,7 +724,7 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleNULL, //652
&AuraEffect::HandleNULL, //653
&AuraEffect::HandleNULL, //654
&AuraEffect::HandleNULL, //655 SPELL_AURA_REMOVE_TRANSMOG_OUTFIT_UPDATE_COST
&AuraEffect::HandleNULL, //655 SPELL_AURA_MOD_TRANSMOG_OUTFIT_UPDATE_COST
};
AuraEffect::AuraEffect(Aura* base, SpellEffectInfo const& spellEfffectInfo, int32 const* baseAmount, Unit* caster) :
+4
View File
@@ -2492,6 +2492,9 @@ void Spell::AddUnitTarget(Unit* target, uint32 effectMask, bool checkIfValid /*=
false /*can't reflect twice*/,
false /*immunity will be checked after complete EffectMask is known*/);
if (targetInfo.ReflectResult == SPELL_MISS_MISS && target->HasAuraType(SPELL_AURA_REFLECT_SPELLS))
targetInfo.ReflectingSpellId = target->GetAuraEffectsByType(SPELL_AURA_REFLECT_SPELLS).front()->GetId();
// Proc spell reflect aura when missile hits the original target
target->m_Events.AddEvent(new ProcReflectDelayed(target, m_originalCasterGUID), target->m_Events.CalculateTime(Milliseconds(targetInfo.TimeDelay)));
@@ -2901,6 +2904,7 @@ void Spell::TargetInfo::DoDamageAndTriggers(Spell* spell)
hasDamage = true;
// Fill base damage struct (unitTarget - is real spell target)
SpellNonMeleeDamage damageInfo(caster, spell->unitTarget, spell->m_spellInfo, spell->m_SpellVisual, spell->m_spellSchoolMask, spell->m_castId);
damageInfo.reflectingSpellId = ReflectingSpellId;
// Check damage immunity
if (spell->unitTarget->IsImmunedToDamage(caster, spell->m_spellInfo))
{
+2 -1
View File
@@ -841,9 +841,11 @@ class TC_GAME_API Spell
uint64 TimeDelay = 0ULL;
int32 Damage = 0;
int32 Healing = 0;
bool Positive = true;
SpellMissInfo MissCondition = SPELL_MISS_NONE;
SpellMissInfo ReflectResult = SPELL_MISS_NONE;
uint32 ReflectingSpellId = 0;
bool IsAlive = false;
bool IsCrit = false;
@@ -852,7 +854,6 @@ class TC_GAME_API Spell
DiminishingGroup DRGroup = DIMINISHING_NONE;
int32 AuraDuration = 0;
int32 AuraBasePoints[MAX_SPELL_EFFECTS] = { };
bool Positive = true;
UnitAura* HitAura = nullptr;
ProcFlagsHit ProcHitMask = { };