Project SkyFire Core
SkyFire 5.4.8 server core API documentation
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
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
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 {
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 {
79 if (GetPlayer()->duel->opponent)
81
82 GetPlayer()->CastSpell(GetPlayer(), 7267, true); // beg
84 return;
85 }
86
88 }
89}
#define SPELL_MOUNTED_DUEL
#define SPELL_DUEL
#define SF_LOG_DEBUG(filterType__,...)
Definition Log.h:134
#define sObjectAccessor
void ReadGuidBytes(ObjectGuid &guid, Offsets... offsets)
Definition ByteBuffer.h:256
void ReadGuidMask(ObjectGuid &guid, Offsets... offsets)
Definition ByteBuffer.h:240
bool ReadBit()
Definition ByteBuffer.h:180
uint32 GetGUIDLow() const
Definition Object.h:120
void DuelComplete(DuelCompleteType type)
Definition Player.cpp:8277
void SendDuelCountdown(uint32 counter)
Definition Player.cpp:22142
DuelInfo * duel
Definition Player.h:2253
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)
void CombatStopWithPets(bool includingCast=false)
std::string const & GetName() const
Definition Object.h:664
void HandleDuelProposedOpcode(WorldPacket &recvPacket)
Player * GetPlayer() const
void HandleDuelResponseOpcode(WorldPacket &recvPacket)
Player * _player
bool HandlePendingPetBattlePvpDuelResponse(bool accepted)
Player * opponent
Definition Player.h:459
time_t startTimer
Definition Player.h:460
Player * initiator
Definition Player.h:458
time_t startTime
Definition Player.h:461