aboutsummaryrefslogtreecommitdiff
path: root/src/game/DuelHandler.cpp
diff options
context:
space:
mode:
authormaximius <none@none>2009-10-17 15:51:44 -0700
committermaximius <none@none>2009-10-17 15:51:44 -0700
commite585187b248f48b3c6e9247b49fa07c6565d65e5 (patch)
tree637c5b7ddacf41040bef4ea4f75a97da64c6a9bc /src/game/DuelHandler.cpp
parent26b5e033ffde3d161382fc9addbfa99738379641 (diff)
*Backed out changeset 3be01fb200a5
--HG-- branch : trunk
Diffstat (limited to 'src/game/DuelHandler.cpp')
-rw-r--r--src/game/DuelHandler.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/game/DuelHandler.cpp b/src/game/DuelHandler.cpp
index 64ec8f6352b..c35b9dbdc07 100644
--- a/src/game/DuelHandler.cpp
+++ b/src/game/DuelHandler.cpp
@@ -17,6 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+
#include "Common.h"
#include "WorldPacket.h"
#include "WorldSession.h"
@@ -24,49 +25,63 @@
#include "Opcodes.h"
#include "UpdateData.h"
#include "Player.h"
+
void WorldSession::HandleDuelAcceptedOpcode(WorldPacket& recvPacket)
{
uint64 guid;
Player *pl;
Player *plTarget;
+
if(!GetPlayer()->duel) // ignore accept from duel-sender
return;
+
recvPacket >> guid;
+
pl = GetPlayer();
plTarget = pl->duel->opponent;
+
if(pl == pl->duel->initiator || !plTarget || pl == plTarget || pl->duel->startTime != 0 || plTarget->duel->startTime != 0)
return;
+
//sLog.outDebug( "WORLD: received CMSG_DUEL_ACCEPTED" );
DEBUG_LOG("Player 1 is: %u (%s)", pl->GetGUIDLow(),pl->GetName());
DEBUG_LOG("Player 2 is: %u (%s)", plTarget->GetGUIDLow(),plTarget->GetName());
+
time_t now = time(NULL);
pl->duel->startTimer = now;
plTarget->duel->startTimer = now;
+
WorldPacket data(SMSG_DUEL_COUNTDOWN, 4);
data << (uint32)3000; // 3 seconds
pl->GetSession()->SendPacket(&data);
plTarget->GetSession()->SendPacket(&data);
}
+
void WorldSession::HandleDuelCancelledOpcode(WorldPacket& recvPacket)
{
//sLog.outDebug( "WORLD: received CMSG_DUEL_CANCELLED" );
+
// no duel requested
if(!GetPlayer()->duel)
return;
+
// player surrendered in a duel using /forfeit
if(GetPlayer()->duel->startTime != 0)
{
GetPlayer()->CombatStopWithPets(true);
if(GetPlayer()->duel->opponent)
GetPlayer()->duel->opponent->CombatStopWithPets(true);
+
GetPlayer()->CastSpell(GetPlayer(), SPELL_ID_DUEL_BEG, true); // beg
GetPlayer()->DuelComplete(DUEL_WON);
return;
}
+
// player either discarded the duel using the "discard button"
// or used "/forfeit" before countdown reached 0
uint64 guid;
recvPacket >> guid;
+
GetPlayer()->DuelComplete(DUEL_INTERUPTED);
}