Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
DuelHandler.cpp
Go to the documentation of this file.
1
/*
2
* This file is part of Project SkyFire https://www.projectskyfire.org.
3
* See LICENSE.md file for Copyright information
4
*/
5
6
#include "
Common.h
"
7
#include "
Log.h
"
8
#include "
ObjectAccessor.h
"
9
#include "
Opcodes.h
"
10
#include "
Player.h
"
11
#include "
UpdateData.h
"
12
#include "
WorldPacket.h
"
13
#include "
WorldSession.h
"
14
15
#define SPELL_DUEL 7266
16
#define SPELL_MOUNTED_DUEL 62875
17
18
void
WorldSession::HandleDuelProposedOpcode
(
WorldPacket
& recvPacket)
19
{
20
ObjectGuid
guid;
21
22
recvPacket.
ReadGuidMask
(guid, 1, 5, 4, 6, 3, 2, 7, 0);
23
recvPacket.
ReadGuidBytes
(guid, 4, 2, 5, 7, 1, 3, 6, 0);
24
25
if
(
Player
* player =
sObjectAccessor
->FindPlayer(guid))
26
{
27
if
(
_player
->IsMounted())
28
_player
->CastSpell(player,
SPELL_MOUNTED_DUEL
,
false
);
29
else
30
_player
->CastSpell(player,
SPELL_DUEL
,
false
);
31
}
32
}
33
34
void
WorldSession::HandleDuelResponseOpcode
(
WorldPacket
& recvPacket)
35
{
36
bool
accepted;
37
ObjectGuid
guid;
38
Player
* player;
39
40
recvPacket.
ReadGuidMask
(guid, 7, 1, 3, 4, 0, 2, 6);
41
accepted = recvPacket.
ReadBit
();
42
recvPacket.
ReadGuidMask
(guid, 5);
43
44
recvPacket.
ReadGuidBytes
(guid, 6, 4, 5, 0, 1, 2, 7, 3);
45
46
if
(!
GetPlayer
()->duel)
47
{
48
if
(
HandlePendingPetBattlePvpDuelResponse
(accepted))
49
return
;
50
51
return
;
52
}
53
54
if
(accepted)
55
{
56
player =
GetPlayer
();
57
Player
* plTarget = player->
duel
->
opponent
;
58
59
if
(player == player->
duel
->
initiator
|| !plTarget || player == plTarget || player->
duel
->
startTime
!= 0 || plTarget->
duel
->
startTime
!= 0)
60
return
;
61
62
//SF_LOG_DEBUG("network", "WORLD: Received CMSG_DUEL_ACCEPTED");
63
SF_LOG_DEBUG
(
"network"
,
"Player 1 is: %u (%s)"
, player->
GetGUIDLow
(), player->
GetName
().c_str());
64
SF_LOG_DEBUG
(
"network"
,
"Player 2 is: %u (%s)"
, plTarget->
GetGUIDLow
(), plTarget->
GetName
().c_str());
65
66
time_t now = time(NULL);
67
player->
duel
->
startTimer
= now;
68
plTarget->
duel
->
startTimer
= now;
69
70
player->
SendDuelCountdown
(3000);
71
plTarget->
SendDuelCountdown
(3000);
72
}
73
else
74
{
75
// player surrendered in a duel using /forfeit
76
if
(
GetPlayer
()->duel->startTime != 0)
77
{
78
GetPlayer
()->
CombatStopWithPets
(
true
);
79
if
(
GetPlayer
()->duel->opponent)
80
GetPlayer
()->
duel
->
opponent
->
CombatStopWithPets
(
true
);
81
82
GetPlayer
()->
CastSpell
(
GetPlayer
(), 7267,
true
);
// beg
83
GetPlayer
()->
DuelComplete
(
DuelCompleteType::DUEL_WON
);
84
return
;
85
}
86
87
GetPlayer
()->
DuelComplete
(
DuelCompleteType::DUEL_INTERRUPTED
);
88
}
89
}
Common.h
SPELL_MOUNTED_DUEL
#define SPELL_MOUNTED_DUEL
Definition
DuelHandler.cpp:16
SPELL_DUEL
#define SPELL_DUEL
Definition
DuelHandler.cpp:15
Log.h
SF_LOG_DEBUG
#define SF_LOG_DEBUG(filterType__,...)
Definition
Log.h:134
ObjectAccessor.h
sObjectAccessor
#define sObjectAccessor
Definition
ObjectAccessor.h:195
Opcodes.h
Player.h
DuelCompleteType::DUEL_INTERRUPTED
@ DUEL_INTERRUPTED
Definition
SharedDefines.h:4162
DuelCompleteType::DUEL_WON
@ DUEL_WON
Definition
SharedDefines.h:4163
UpdateData.h
WorldPacket.h
WorldSession.h
ByteBuffer::ReadGuidBytes
void ReadGuidBytes(ObjectGuid &guid, Offsets... offsets)
Definition
ByteBuffer.h:256
ByteBuffer::ReadGuidMask
void ReadGuidMask(ObjectGuid &guid, Offsets... offsets)
Definition
ByteBuffer.h:240
ByteBuffer::ReadBit
bool ReadBit()
Definition
ByteBuffer.h:180
Object::GetGUIDLow
uint32 GetGUIDLow() const
Definition
Object.h:120
Player
Definition
Player.h:1289
Player::DuelComplete
void DuelComplete(DuelCompleteType type)
Definition
Player.cpp:8277
Player::SendDuelCountdown
void SendDuelCountdown(uint32 counter)
Definition
Player.cpp:22142
Player::duel
DuelInfo * duel
Definition
Player.h:2253
Unit::CastSpell
void CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
Definition
UnitCombat.cpp:324
Unit::CombatStopWithPets
void CombatStopWithPets(bool includingCast=false)
Definition
UnitCombatState.cpp:229
WorldObject::GetName
std::string const & GetName() const
Definition
Object.h:664
WorldPacket
Definition
WorldPacket.h:16
WorldSession::HandleDuelProposedOpcode
void HandleDuelProposedOpcode(WorldPacket &recvPacket)
Definition
DuelHandler.cpp:18
WorldSession::GetPlayer
Player * GetPlayer() const
Definition
WorldSession.h:295
WorldSession::HandleDuelResponseOpcode
void HandleDuelResponseOpcode(WorldPacket &recvPacket)
Definition
DuelHandler.cpp:34
WorldSession::_player
Player * _player
Definition
WorldSession.h:1188
WorldSession::HandlePendingPetBattlePvpDuelResponse
bool HandlePendingPetBattlePvpDuelResponse(bool accepted)
Definition
BattlePetHandler.cpp:1015
DuelInfo::opponent
Player * opponent
Definition
Player.h:459
DuelInfo::startTimer
time_t startTimer
Definition
Player.h:460
DuelInfo::initiator
Player * initiator
Definition
Player.h:458
DuelInfo::startTime
time_t startTime
Definition
Player.h:461
ObjectGuid
Definition
ByteBuffer.h:66
src
server
game
Handlers
DuelHandler.cpp
Generated on
for Project SkyFire Core by
1.17.0