aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/Player.cpp4
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp15
-rw-r--r--src/server/game/Scripting/ScriptMgr.h12
-rw-r--r--src/server/game/Spells/SpellEffects.cpp2
4 files changed, 33 insertions, 0 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index d9e1d5d2eae..9dd13be7fdd 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -7173,6 +7173,8 @@ void Player::DuelComplete(DuelCompleteType type)
SendMessageToSet(&data,true);
}
+ sScriptMgr.OnPlayerDuelEnd(duel->opponent, this, type);
+
switch (type)
{
case DUEL_FLED:
@@ -18476,6 +18478,8 @@ void Player::UpdateDuelFlag(time_t currTime)
if (!duel || duel->startTimer == 0 ||currTime < duel->startTimer + 3)
return;
+ sScriptMgr.OnPlayerDuelStart(this, duel->opponent);
+
SetUInt32Value(PLAYER_DUEL_TEAM, 1);
duel->opponent->SetUInt32Value(PLAYER_DUEL_TEAM, 2);
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp
index e2da5d20d4c..b1087989180 100644
--- a/src/server/game/Scripting/ScriptMgr.cpp
+++ b/src/server/game/Scripting/ScriptMgr.cpp
@@ -1116,6 +1116,21 @@ void ScriptMgr::OnPlayerReputationChange(Player *player, uint32 factionID, int32
FOREACH_SCRIPT(PlayerScript)->OnReputationChange(player, factionID, standing, incremental);
}
+void ScriptMgr::OnPlayerDuelRequest(Player *target, Player *challenger)
+{
+ FOREACH_SCRIPT(PlayerScript)->OnDuelRequest(target, challenger);
+}
+
+void ScriptMgr::OnPlayerDuelStart(Player *player1, Player *player2)
+{
+ FOREACH_SCRIPT(PlayerScript)->OnDuelStart(player1, player2);
+}
+
+void ScriptMgr::OnPlayerDuelEnd(Player *winner, Player *looser, DuelCompleteType type)
+{
+ FOREACH_SCRIPT(PlayerScript)->OnDuelEnd(winner, looser, type);
+}
+
void ScriptMgr::OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string msg)
{
FOREACH_SCRIPT(PlayerScript)->OnChat(player, type, lang, msg);
diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h
index 008f945cb53..0c1135a2416 100644
--- a/src/server/game/Scripting/ScriptMgr.h
+++ b/src/server/game/Scripting/ScriptMgr.h
@@ -674,6 +674,15 @@ class PlayerScript : public ScriptObject
// Called when a player's reputation changes (before it is actually changed)
virtual void OnReputationChange(Player* /*player*/, uint32 /*factionID*/, int32& /*standing*/, bool /*incremental*/) { }
+ // Called when a duel is requested
+ virtual void OnDuelRequest(Player* /*target*/, Player* /*challenger*/) { }
+
+ // Called when a duel starts (after 3s countdown)
+ virtual void OnDuelStart(Player* /*player1*/, Player* /*player2*/) { }
+
+ // Called when a duel ends
+ virtual void OnDuelEnd(Player* /*winner*/, Player* /*looser*/, DuelCompleteType /*type*/) { }
+
// The following methods are called when a player sends a chat message
virtual void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string /*msg*/) { }
virtual void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string /*msg*/, Player* /*receiver*/) { }
@@ -885,6 +894,9 @@ class ScriptMgr
void OnPlayerMoneyChanged(Player *player, int32& amount);
void OnGivePlayerXP(Player *player, uint32& amount, Unit *victim);
void OnPlayerReputationChange(Player *player, uint32 factionID, int32& standing, bool incremental);
+ void OnPlayerDuelRequest(Player* target, Player* challenger);
+ void OnPlayerDuelStart(Player* player1, Player* player2);
+ void OnPlayerDuelEnd(Player* winner, Player* looser, DuelCompleteType type);
void OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string msg);
void OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string msg, Player* receiver);
void OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string msg, Group* group);
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 2a49326fe83..166066f1bb9 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -5474,6 +5474,8 @@ void Spell::EffectDuel(SpellEffIndex effIndex)
caster->SetUInt64Value(PLAYER_DUEL_ARBITER, pGameObj->GetGUID());
target->SetUInt64Value(PLAYER_DUEL_ARBITER, pGameObj->GetGUID());
+
+ sScriptMgr.OnPlayerDuelRequest(target, caster);
}
void Spell::EffectStuck(SpellEffIndex /*effIndex*/)