aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2015-10-05 16:57:02 +0200
committerCarbenium <carbenium@outlook.com>2015-11-07 00:15:00 +0100
commit8ceffaef4419d6dffe70ccc2fee1a4d5180ea546 (patch)
tree97acf23b22ef45a9f9a4d7790a9cf0e524a1c195 /src/server/game/Entities
parented20680f92f5288f3a158e02b576d9e280120444 (diff)
Merge pull request #15646 from ShinDarth/ticket
Core/Player: implement ResetCoolDownAfterDuel configurable feature (cherry picked from commit 5b8f1469ca32ff1b02b8f902954e1ffc362c4343) Conflicts: src/server/game/Spells/SpellHistory.cpp src/server/game/Spells/SpellHistory.h src/server/game/World/World.h
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Player/Player.cpp14
-rw-r--r--src/server/game/Entities/Player/Player.h7
2 files changed, 20 insertions, 1 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 797b5691891..ee45cb5bfba 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -7474,6 +7474,20 @@ void Player::DuelComplete(DuelCompleteType type)
duel->opponent->SetGuidValue(PLAYER_DUEL_ARBITER, ObjectGuid::Empty);
duel->opponent->SetUInt32Value(PLAYER_DUEL_TEAM, 0);
+ if (sWorld->getBoolConfig(CONFIG_RESET_COOLDOWN_AFTER_DUEL) &&
+ type != DUEL_INTERRUPTED)
+ {
+ if (!HasCoolDownBeforeDuel())
+ RemoveArenaSpellCooldowns(true);
+ else
+ ChatHandler(GetSession()).PSendSysMessage(LANG_COOLDOWN_NOT_RESET_AFTER_DUEL);
+
+ if (!duel->opponent->HasCoolDownBeforeDuel())
+ duel->opponent->RemoveArenaSpellCooldowns(true);
+ else
+ ChatHandler(duel->opponent->GetSession()).PSendSysMessage(LANG_COOLDOWN_NOT_RESET_AFTER_DUEL);
+ }
+
delete duel->opponent->duel;
duel->opponent->duel = NULL;
delete duel;
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 6b981528d63..1f7dd0549a1 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -28,6 +28,7 @@
#include "PetDefines.h"
#include "QuestDef.h"
#include "SpellMgr.h"
+#include "SpellHistory.h"
#include "Unit.h"
#include "Opcodes.h"
#include "WorldSession.h"
@@ -419,7 +420,7 @@ struct PvPInfo
struct DuelInfo
{
- DuelInfo() : initiator(NULL), opponent(NULL), startTimer(0), startTime(0), outOfBound(0), isMounted(false) { }
+ DuelInfo() : initiator(NULL), opponent(NULL), startTimer(0), startTime(0), outOfBound(0), isMounted(false), hasCoolDownBeforeDuel(false) { }
Player* initiator;
Player* opponent;
@@ -427,6 +428,7 @@ struct DuelInfo
time_t startTime;
time_t outOfBound;
bool isMounted;
+ bool hasCoolDownBeforeDuel;
};
struct Areas
@@ -2188,6 +2190,9 @@ class Player : public Unit, public GridObject<Player>
bool RewardHonor(Unit* victim, uint32 groupsize, int32 honor = -1, bool pvptoken = false);
uint32 GetMaxPersonalArenaRatingRequirement(uint32 minarenaslot) const;
+ bool HasCoolDownBeforeDuel() const { return duel->hasCoolDownBeforeDuel; }
+ void UpdateHasCoolDownBeforeDuel() { duel->hasCoolDownBeforeDuel = GetSpellHistory()->GetArenaCooldownsSize() > 0; }
+
//End of PvP System
void SetDrunkValue(uint8 newDrunkValue, uint32 itemId = 0);