aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorIntel <chemicstry@gmail.com>2014-11-19 00:30:31 +0200
committerIntel <chemicstry@gmail.com>2014-11-19 20:18:14 +0200
commitb86bf40f617a480f8e78bbde2e9884dd9edd2ebe (patch)
tree74c70848170eced6222df44b812b79a00ea122b8 /src/server/game/Entities
parent73a7d7c0538b5c791aaa89caae6547c4b330dd80 (diff)
Core/Packets: Added the following packets:
CMSG_QUESTGIVER_STATUS_MULTIPLE_QUERY SMSG_QUESTGIVER_STATUS_MULTIPLE CMSG_QUESTGIVER_STATUS_QUERY SMSG_QUESTGIVER_STATUS SMSG_AI_REACTION SMSG_ATTACKERSTATEUPDATE SMSG_ATTACKSTART SMSG_ATTACKSTOP SMSG_THREAT_UPDATE SMSG_HIGHEST_THREAT_UPDATE SMSG_SET_PROFICIENCY
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp9
-rw-r--r--src/server/game/Entities/Creature/GossipDef.cpp9
-rw-r--r--src/server/game/Entities/Player/Player.cpp8
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp142
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
5 files changed, 68 insertions, 102 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 7fb3822c888..3765c54b42a 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -51,6 +51,7 @@
#include "WaypointMovementGenerator.h"
#include "World.h"
#include "WorldPacket.h"
+#include "CombatPackets.h"
#include "Transport.h"
@@ -1826,12 +1827,12 @@ Player* Creature::SelectNearestPlayer(float distance) const
void Creature::SendAIReaction(AiReaction reactionType)
{
- WorldPacket data(SMSG_AI_REACTION, 12);
+ WorldPackets::Combat::AIReaction packet;
- data << GetGUID();
- data << uint32(reactionType);
+ packet.UnitGUID = GetGUID();
+ packet.Reaction = reactionType;
- ((WorldObject*)this)->SendMessageToSet(&data, true);
+ ((WorldObject*)this)->SendMessageToSet(packet.Write(), true);
TC_LOG_DEBUG("network", "WORLD: Sent SMSG_AI_REACTION, type %u.", reactionType);
}
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index 4d14ede70fe..c947d4f49da 100644
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -23,6 +23,7 @@
#include "WorldPacket.h"
#include "WorldSession.h"
#include "Formulas.h"
+#include "QuestPackets.h"
GossipMenu::GossipMenu()
{
@@ -373,11 +374,11 @@ void PlayerMenu::SendQuestGiverQuestList(QEmote const& eEmote, const std::string
void PlayerMenu::SendQuestGiverStatus(uint32 questStatus, ObjectGuid npcGUID) const
{
- WorldPacket data(SMSG_QUESTGIVER_STATUS, 8 + 4);
- data << npcGUID;
- data << uint32(questStatus);
+ WorldPackets::Quest::QuestGiverStatus packet;
+ packet.QuestGiver.Guid = npcGUID;
+ packet.QuestGiver.Status = questStatus;
- _session->SendPacket(&data);
+ _session->SendPacket(packet.Write());
TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_STATUS NPC=%s, status=%u", npcGUID.ToString().c_str(), questStatus);
}
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 29c3af9d685..a11c75a2c6f 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -89,6 +89,7 @@
#include "MiscPackets.h"
#include "ChatPackets.h"
#include "MovementPackets.h"
+#include "ItemPackets.h"
#define ZONE_UPDATE_INTERVAL (1*IN_MILLISECONDS)
@@ -20976,9 +20977,10 @@ void Player::SetSpellModTakingSpell(Spell* spell, bool apply)
// send Proficiency
void Player::SendProficiency(ItemClass itemClass, uint32 itemSubclassMask)
{
- WorldPacket data(SMSG_SET_PROFICIENCY, 1 + 4);
- data << uint8(itemClass) << uint32(itemSubclassMask);
- GetSession()->SendPacket(&data);
+ WorldPackets::Item::SetProficiency packet;
+ packet.ProficiencyMask = itemSubclassMask;
+ packet.ProficiencyClass = itemClass;
+ GetSession()->SendPacket(packet.Write());
}
void Player::RemovePetitionsAndSigns(ObjectGuid guid, uint32 type)
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index dac142f4044..77d5a28b1ce 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -64,6 +64,7 @@
#include "WorldSession.h"
#include "ChatPackets.h"
#include "MovementPackets.h"
+#include "CombatPackets.h"
#include <cmath>
@@ -2110,24 +2111,24 @@ float Unit::CalculateLevelPenalty(SpellInfo const* spellProto) const
void Unit::SendMeleeAttackStart(Unit* victim)
{
- WorldPacket data(SMSG_ATTACKSTART, 8 + 8);
- data << GetGUID();
- data << victim->GetGUID();
- SendMessageToSet(&data, true);
+ WorldPackets::Combat::AttackStart packet;
+ packet.Attacker = GetGUID();
+ packet.Victim = victim->GetGUID();
+ SendMessageToSet(packet.Write(), true);
TC_LOG_DEBUG("entities.unit", "WORLD: Sent SMSG_ATTACKSTART");
}
void Unit::SendMeleeAttackStop(Unit* victim)
{
- WorldPacket data(SMSG_ATTACKSTOP, (8+8+4));
- data << GetPackGUID();
+ WorldPackets::Combat::SAttackStop packet;
+ packet.Attacker = GetGUID();
if (victim)
- data << victim->GetPackGUID();
- else
- data << uint8(0);
+ {
+ packet.Victim = victim->GetGUID();
+ packet.Dead = victim->isDead();
+ }
- data << uint32(0); //! Can also take the value 0x01, which seems related to updating rotation
- SendMessageToSet(&data, true);
+ SendMessageToSet(packet.Write(), true);
TC_LOG_DEBUG("entities.unit", "WORLD: Sent SMSG_ATTACKSTOP");
if (victim)
@@ -4849,68 +4850,27 @@ void Unit::SendSpellDamageImmune(Unit* target, uint32 spellId)
void Unit::SendAttackStateUpdate(CalcDamageInfo* damageInfo)
{
TC_LOG_DEBUG("entities.unit", "WORLD: Sending SMSG_ATTACKERSTATEUPDATE");
-
- uint32 count = 1;
- size_t maxsize = 4+5+5+4+4+1+4+4+4+4+4+1+4+4+4+4+4*12;
- WorldPacket data(SMSG_ATTACKERSTATEUPDATE, maxsize); // we guess size
- data << uint32(damageInfo->HitInfo);
- data << damageInfo->attacker->GetPackGUID();
- data << damageInfo->target->GetPackGUID();
- data << uint32(damageInfo->damage); // Full damage
+
+ WorldPackets::Combat::AttackerStateUpdate packet;
+ packet.HitInfo = damageInfo->HitInfo;
+ packet.AttackerGUID = damageInfo->attacker->GetGUID();
+ packet.VictimGUID = damageInfo->target->GetGUID();
+ packet.Damage = damageInfo->damage;
int32 overkill = damageInfo->damage - damageInfo->target->GetHealth();
- data << uint32(overkill < 0 ? 0 : overkill); // Overkill
- data << uint8(count); // Sub damage count
-
- for (uint32 i = 0; i < count; ++i)
- {
- data << uint32(damageInfo->damageSchoolMask); // School of sub damage
- data << float(damageInfo->damage); // sub damage
- data << uint32(damageInfo->damage); // Sub Damage
- }
-
- if (damageInfo->HitInfo & (HITINFO_FULL_ABSORB | HITINFO_PARTIAL_ABSORB))
- {
- for (uint32 i = 0; i < count; ++i)
- data << uint32(damageInfo->absorb); // Absorb
- }
-
- if (damageInfo->HitInfo & (HITINFO_FULL_RESIST | HITINFO_PARTIAL_RESIST))
- {
- for (uint32 i = 0; i < count; ++i)
- data << uint32(damageInfo->resist); // Resist
- }
-
- data << uint8(damageInfo->TargetState);
- data << uint32(0); // Unknown attackerstate
- data << uint32(0); // Melee spellid
+ packet.OverDamage = (overkill < 0 ? -1 : overkill);
- if (damageInfo->HitInfo & HITINFO_BLOCK)
- data << uint32(damageInfo->blocked_amount);
+ WorldPackets::Combat::SubDamage& subDmg = packet.SubDmg.value;
+ subDmg.SchoolMask = damageInfo->damageSchoolMask; // School of sub damage
+ subDmg.FDamage = damageInfo->damage; // sub damage
+ subDmg.Damage = damageInfo->damage; // Sub Damage
+ subDmg.Absorbed = damageInfo->absorb;
+ subDmg.Resisted = damageInfo->resist;
+ packet.SubDmg.HasValue = true;
- if (damageInfo->HitInfo & HITINFO_RAGE_GAIN)
- data << uint32(0);
-
- //! Probably used for debugging purposes, as it is not known to appear on retail servers
- if (damageInfo->HitInfo & HITINFO_UNK1)
- {
- data << uint32(0);
- data << float(0);
- data << float(0);
- data << float(0);
- data << float(0);
- data << float(0);
- data << float(0);
- data << float(0);
- data << float(0);
- for (uint8 i = 0; i < 2; ++i)
- {
- data << float(0);
- data << float(0);
- }
- data << uint32(0);
- }
+ packet.VictimState = damageInfo->TargetState;
+ packet.BlockAmount = damageInfo->blocked_amount;
- SendMessageToSet(&data, true);
+ SendMessageToSet(packet.Write(), true);
}
void Unit::SendAttackStateUpdate(uint32 HitInfo, Unit* target, uint8 /*SwingType*/, SpellSchoolMask damageSchoolMask, uint32 Damage, uint32 AbsorbDamage, uint32 Resist, VictimState TargetState, uint32 BlockedAmount)
@@ -12905,10 +12865,10 @@ void Unit::SendPetAIReaction(ObjectGuid guid)
if (!owner || owner->GetTypeId() != TYPEID_PLAYER)
return;
- WorldPacket data(SMSG_AI_REACTION, 8 + 4);
- data << guid;
- data << uint32(AI_REACTION_HOSTILE);
- owner->ToPlayer()->GetSession()->SendPacket(&data);
+ WorldPackets::Combat::AIReaction packet;
+ packet.UnitGUID = guid;
+ packet.Reaction = AI_REACTION_HOSTILE;
+ owner->ToPlayer()->GetSession()->SendPacket(packet.Write());
}
///----------End of Pet responses methods----------
@@ -15969,16 +15929,17 @@ void Unit::SendThreatListUpdate()
uint32 count = getThreatManager().getThreatList().size();
TC_LOG_DEBUG("entities.unit", "WORLD: Send SMSG_THREAT_UPDATE Message");
- WorldPacket data(SMSG_THREAT_UPDATE, 8 + count * 8);
- data << GetPackGUID();
- data << uint32(count);
+ WorldPackets::Combat::ThreatUpdate packet;
+ packet.UnitGUID = GetGUID();
ThreatContainer::StorageType const &tlist = getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = tlist.begin(); itr != tlist.end(); ++itr)
{
- data << (*itr)->getUnitGuid().WriteAsPacked();
- data << uint32((*itr)->getThreat() * 100);
+ WorldPackets::Combat::ThreatInfo info;
+ info.UnitGUID = (*itr)->getUnitGuid();
+ info.Threat = (*itr)->getThreat() * 100;
+ packet.ThreatList.push_back(info);
}
- SendMessageToSet(&data, false);
+ SendMessageToSet(packet.Write(), false);
}
}
@@ -15989,17 +15950,18 @@ void Unit::SendChangeCurrentVictimOpcode(HostileReference* pHostileReference)
uint32 count = getThreatManager().getThreatList().size();
TC_LOG_DEBUG("entities.unit", "WORLD: Send SMSG_HIGHEST_THREAT_UPDATE Message");
- WorldPacket data(SMSG_HIGHEST_THREAT_UPDATE, 8 + 8 + count * 8);
- data << GetPackGUID();
- data << pHostileReference->getUnitGuid().WriteAsPacked();
- data << uint32(count);
+ WorldPackets::Combat::HighestThreatUpdate packet;
+ packet.UnitGUID = GetGUID();
+ packet.HighestThreatGUID = pHostileReference->getUnitGuid();
ThreatContainer::StorageType const &tlist = getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = tlist.begin(); itr != tlist.end(); ++itr)
{
- data << (*itr)->getUnitGuid().WriteAsPacked();
- data << uint32((*itr)->getThreat());
+ WorldPackets::Combat::ThreatInfo info;
+ info.UnitGUID = (*itr)->getUnitGuid();
+ info.Threat = int32((*itr)->getThreat());
+ packet.ThreatList.push_back(info);
}
- SendMessageToSet(&data, false);
+ SendMessageToSet(packet.Write(), false);
}
}
@@ -16014,10 +15976,10 @@ void Unit::SendClearThreatListOpcode()
void Unit::SendRemoveFromThreatListOpcode(HostileReference* pHostileReference)
{
TC_LOG_DEBUG("entities.unit", "WORLD: Send SMSG_THREAT_REMOVE Message");
- WorldPacket data(SMSG_THREAT_REMOVE, 8 + 8);
- data << GetPackGUID();
- data << pHostileReference->getUnitGuid().WriteAsPacked();
- SendMessageToSet(&data, false);
+ WorldPackets::Combat::ThreatRemove packet;
+ packet.UnitGUID = GetGUID();
+ packet.AboutGUID = pHostileReference->getUnitGuid();
+ SendMessageToSet(packet.Write(), false);
}
// baseRage means damage taken when attacker = false
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index b28d26af2c9..1905f41e84e 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -309,7 +309,7 @@ enum HitInfo
HITINFO_CRITICALHIT = 0x00000200, // critical hit
// 0x00000400
// 0x00000800
- // 0x00001000
+ HITINFO_UNK12 = 0x00001000,
HITINFO_BLOCK = 0x00002000, // blocked damage
// 0x00004000 // Hides worldtext for 0 damage
// 0x00008000 // Related to blood visual