diff options
Diffstat (limited to 'src/server/game/Handlers/DuelHandler.cpp')
| -rw-r--r-- | src/server/game/Handlers/DuelHandler.cpp | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/src/server/game/Handlers/DuelHandler.cpp b/src/server/game/Handlers/DuelHandler.cpp index edbf1d9fdc8..902090750ff 100644 --- a/src/server/game/Handlers/DuelHandler.cpp +++ b/src/server/game/Handlers/DuelHandler.cpp @@ -25,49 +25,49 @@ void WorldSession::HandleDuelAcceptedOpcode(WorldPacket& recvPacket) { - ObjectGuid guid; - Player* player; - Player* plTarget; - - recvPacket >> guid; - - if (!GetPlayer()->duel) // ignore accept from duel-sender + Player* player = GetPlayer(); + if (!player->duel || player == player->duel->Initiator || player->duel->State != DUEL_STATE_CHALLENGED) return; - player = GetPlayer(); - plTarget = player->duel->opponent; + ObjectGuid guid; + recvPacket >> guid; - if (player == player->duel->initiator || !plTarget || player == plTarget || player->duel->startTime != 0 || plTarget->duel->startTime != 0) + Player* target = player->duel->Opponent; + if (target->GetGuidValue(PLAYER_DUEL_ARBITER) != guid) return; //TC_LOG_DEBUG("network", "WORLD: Received CMSG_DUEL_ACCEPTED"); TC_LOG_DEBUG("network", "Player 1 is: %u (%s)", player->GetGUID().GetCounter(), player->GetName().c_str()); - TC_LOG_DEBUG("network", "Player 2 is: %u (%s)", plTarget->GetGUID().GetCounter(), plTarget->GetName().c_str()); + TC_LOG_DEBUG("network", "Player 2 is: %u (%s)", target->GetGUID().GetCounter(), target->GetName().c_str()); time_t now = GameTime::GetGameTime(); - player->duel->startTimer = now; - plTarget->duel->startTimer = now; + player->duel->StartTime = now + 3; + target->duel->StartTime = now + 3; + + player->duel->State = DUEL_STATE_COUNTDOWN; + target->duel->State = DUEL_STATE_COUNTDOWN; player->SendDuelCountdown(3000); - plTarget->SendDuelCountdown(3000); + target->SendDuelCountdown(3000); } void WorldSession::HandleDuelCancelledOpcode(WorldPacket& recvPacket) { TC_LOG_DEBUG("network", "WORLD: Received CMSG_DUEL_CANCELLED"); + Player* player = GetPlayer(); + ObjectGuid guid; recvPacket >> guid; // no duel requested - if (!GetPlayer()->duel) + if (!player->duel || player->duel->State == DUEL_STATE_COMPLETED) return; // player surrendered in a duel using /forfeit - if (GetPlayer()->duel->startTime != 0) + if (GetPlayer()->duel->State == DUEL_STATE_IN_PROGRESS) { GetPlayer()->CombatStopWithPets(true); - if (GetPlayer()->duel->opponent) - GetPlayer()->duel->opponent->CombatStopWithPets(true); + GetPlayer()->duel->Opponent->CombatStopWithPets(true); GetPlayer()->CastSpell(GetPlayer(), 7267, true); // beg GetPlayer()->DuelComplete(DUEL_WON); |
