aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Player.cpp44
1 files changed, 29 insertions, 15 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 292cde60ea9..e414f861ab3 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -6780,26 +6780,44 @@ void Player::DuelComplete(DuelCompleteType type)
GetSession()->SendPacket(&data);
duel->opponent->GetSession()->SendPacket(&data);
- if(type != DUEL_INTERUPTED)
+ if (type != DUEL_INTERUPTED)
{
data.Initialize(SMSG_DUEL_WINNER, (1+20)); // we guess size
- data << (uint8)((type==DUEL_WON) ? 0 : 1); // 0 = just won; 1 = fled
+ data << uint8(type == DUEL_WON ? 0 : 1); // 0 = just won; 1 = fled
data << duel->opponent->GetName();
data << GetName();
SendMessageToSet(&data,true);
}
- if (type == DUEL_WON)
+ switch (type)
{
- GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOSE_DUEL, 1);
- if (duel->opponent)
- {
- duel->opponent->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL, 1);
+ case DUEL_FLED:
+ // if initiator and opponent are on the same team
+ // or initiator and opponent are not PvP enabled, forcibly stop attacking
+ if (duel->initiator->GetTeam() == duel->opponent->GetTeam())
+ {
+ duel->initiator->AttackStop();
+ duel->opponent->AttackStop();
+ }
+ else
+ {
+ if (!duel->initiator->IsPvP())
+ duel->initiator->AttackStop();
+ if (!duel->opponent->IsPvP())
+ duel->opponent->AttackStop();
+ }
+ break;
+ case DUEL_WON:
+ GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOSE_DUEL, 1);
+ if (duel->opponent)
+ {
+ duel->opponent->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL, 1);
- //Credit for quest Death's Challenge
- if (getClass() == CLASS_DEATH_KNIGHT && duel->opponent->GetQuestStatus(12733) == QUEST_STATUS_INCOMPLETE)
- duel->opponent->CastSpell(duel->opponent, 52994, true);
- }
+ //Credit for quest Death's Challenge
+ if (getClass() == CLASS_DEATH_KNIGHT && duel->opponent->GetQuestStatus(12733) == QUEST_STATUS_INCOMPLETE)
+ duel->opponent->CastSpell(duel->opponent, 52994, true);
+ }
+ break;
}
//Remove Duel Flag object
@@ -6812,9 +6830,7 @@ void Player::DuelComplete(DuelCompleteType type)
for (AuraMap::iterator i = itsAuras.begin(); i != itsAuras.end(); )
{
if (!i->second->IsPositive() && i->second->GetCasterGUID() == GetGUID() && i->second->GetAuraApplyTime() >= duel->startTime)
- {
duel->opponent->RemoveAura(i);
- }
else
++i;
}
@@ -6823,9 +6839,7 @@ void Player::DuelComplete(DuelCompleteType type)
for (AuraMap::iterator i = myAuras.begin(); i != myAuras.end(); )
{
if (!i->second->IsPositive() && i->second->GetCasterGUID() == duel->opponent->GetGUID() && i->second->GetAuraApplyTime() >= duel->startTime)
- {
RemoveAura(i);
- }
else
++i;
}