Files
Viano-Core/src/server/game/Server/Packets/CombatPackets.cpp
T

135 lines
3.6 KiB
C++

/*
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "CombatPackets.h"
#include "Unit.h"
WorldPacket const* WorldPackets::Combat::ThreatUpdate::Write()
{
_worldPacket << UnitGUID.WriteAsPacked();
_worldPacket << uint32(ThreatList.size());
for (WorldPackets::Combat::ThreatInfo const& threatInfo : ThreatList)
{
_worldPacket << threatInfo.UnitGUID.WriteAsPacked();
_worldPacket << uint32(threatInfo.Threat);
}
return &_worldPacket;
}
WorldPacket const* WorldPackets::Combat::HighestThreatUpdate::Write()
{
_worldPacket << UnitGUID.WriteAsPacked();
_worldPacket << HighestThreatGUID.WriteAsPacked();
_worldPacket << int32(ThreatList.size());
for (WorldPackets::Combat::ThreatInfo const& threatInfo : ThreatList)
{
_worldPacket << threatInfo.UnitGUID.WriteAsPacked();
_worldPacket << uint32(threatInfo.Threat);
}
return &_worldPacket;
}
WorldPacket const* WorldPackets::Combat::ThreatRemove::Write()
{
_worldPacket << UnitGUID.WriteAsPacked();
_worldPacket << AboutGUID.WriteAsPacked();
return &_worldPacket;
}
WorldPacket const* WorldPackets::Combat::ThreatClear::Write()
{
_worldPacket << UnitGUID.WriteAsPacked();
return &_worldPacket;
}
WorldPacket const* WorldPackets::Combat::PowerUpdate::Write()
{
_worldPacket << Guid.WriteAsPacked();
_worldPacket << uint32(Powers.size());
for (PowerUpdatePower const& power : Powers)
{
_worldPacket << uint8(power.PowerType);
_worldPacket << int32(power.Power);
}
return &_worldPacket;
}
WorldPacket const* WorldPackets::Combat::BreakTarget::Write()
{
_worldPacket << UnitGUID.WriteAsPacked();
return &_worldPacket;
}
WorldPacket const* WorldPackets::Combat::AIReaction::Write()
{
_worldPacket << UnitGUID;
_worldPacket << uint32(Reaction);
return &_worldPacket;
}
WorldPacket const* WorldPackets::Combat::AttackStart::Write()
{
_worldPacket << Attacker;
_worldPacket << Victim;
return &_worldPacket;
}
WorldPackets::Combat::SAttackStop::SAttackStop(Unit const* attacker, Unit const* victim) : ServerPacket(SMSG_ATTACK_STOP, 8 + 8 + 4)
{
Attacker = attacker->GetGUID();
if (victim)
{
Victim = victim->GetGUID();
NowDead = !attacker->IsAlive(); // using IsAlive instead of IsDead to catch JUST_DIED death states as well
}
}
WorldPacket const* WorldPackets::Combat::SAttackStop::Write()
{
_worldPacket << Attacker.WriteAsPacked();
_worldPacket << Victim.WriteAsPacked();
_worldPacket << int32(NowDead);
return &_worldPacket;
}
WorldPacket const* WorldPackets::Combat::PvPCredit::Write()
{
_worldPacket << int32(Honor);
_worldPacket << Target;
_worldPacket << int32(Rank);
return &_worldPacket;
}
void WorldPackets::Combat::AttackSwing::Read()
{
_worldPacket >> Victim;
}
void WorldPackets::Combat::SetSheathed::Read()
{
_worldPacket >> CurrentSheathState;
}