/* * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU Affero General Public License as published by the * Free Software Foundation; either version 3 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "Opcodes.h" #include "Player.h" #include "UpdateData.h" #include "WorldPacket.h" #include "WorldSession.h" void WorldSession::HandleDuelAcceptedOpcode(WorldPacket& recvPacket) { ObjectGuid guid; Player* player; Player* plTarget; recvPacket >> guid; if (!GetPlayer()->duel) // ignore accept from duel-sender return; player = GetPlayer(); plTarget = player->duel->opponent; if (player == player->duel->initiator || !plTarget || player == plTarget || player->duel->startTime != 0 || plTarget->duel->startTime != 0) return; LOG_DEBUG("network.opcode", "Player 1 is: %s (%s)", player->GetGUID().ToString().c_str(), player->GetName().c_str()); LOG_DEBUG("network.opcode", "Player 2 is: %s (%s)", plTarget->GetGUID().ToString().c_str(), plTarget->GetName().c_str()); time_t now = time(nullptr); player->duel->startTimer = now; plTarget->duel->startTimer = now; player->SendDuelCountdown(3000); plTarget->SendDuelCountdown(3000); } void WorldSession::HandleDuelCancelledOpcode(WorldPacket& recvPacket) { LOG_DEBUG("network", "WORLD: Received CMSG_DUEL_CANCELLED"); ObjectGuid guid; recvPacket >> guid; // 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(), 7267, true); // beg GetPlayer()->DuelComplete(DUEL_WON); return; } GetPlayer()->DuelComplete(DUEL_INTERRUPTED); }