diff options
author | maximius <none@none> | 2009-10-17 15:51:44 -0700 |
---|---|---|
committer | maximius <none@none> | 2009-10-17 15:51:44 -0700 |
commit | e585187b248f48b3c6e9247b49fa07c6565d65e5 (patch) | |
tree | 637c5b7ddacf41040bef4ea4f75a97da64c6a9bc /src/game/DuelHandler.cpp | |
parent | 26b5e033ffde3d161382fc9addbfa99738379641 (diff) |
*Backed out changeset 3be01fb200a5
--HG--
branch : trunk
Diffstat (limited to 'src/game/DuelHandler.cpp')
-rw-r--r-- | src/game/DuelHandler.cpp | 15 |
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); } |