aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Unit
diff options
context:
space:
mode:
authorSouler <soulerhyd@gmail.com>2012-01-30 00:21:42 +0100
committerQAston <qaston@gmail.com>2012-01-30 00:21:42 +0100
commit75992143c193ec6afdd5897e06eb3694fc80a13f (patch)
tree0b1f07586203fe1b3b6738516fef2b6e382d1377 /src/server/game/Entities/Unit
parent28249f3cb54850cddee93acb6a26bc3ad62ffefd (diff)
Scripts/Spells: Fix Argent Tournament mount spells:
* Break-Shield * Charge * Defend (visual) * Mounted duel * Faction Pennants when riding argent tournament mounts Closes #4917.
Diffstat (limited to 'src/server/game/Entities/Unit')
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 6bab63acf1b..e02331e00e7 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -628,6 +628,7 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam
// duel ends when player has 1 or less hp
bool duel_hasEnded = false;
+ bool duel_wasMounted = false;
if (victim->GetTypeId() == TYPEID_PLAYER && victim->ToPlayer()->duel && damage >= (health-1))
{
// prevent kill only if killed in duel and killed by opponent or opponent controlled creature
@@ -636,6 +637,20 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam
duel_hasEnded = true;
}
+ else if (victim->IsVehicle() && damage >= (health-1) && victim->GetCharmer() && victim->GetCharmer()->GetTypeId() == TYPEID_PLAYER)
+ {
+ Player* victimRider = victim->GetCharmer()->ToPlayer();
+
+ if (victimRider && victimRider->duel && victimRider->duel->isMounted)
+ {
+ // prevent kill only if killed in duel and killed by opponent or opponent controlled creature
+ if (victimRider->duel->opponent == this || victimRider->duel->opponent->GetGUID() == GetCharmerGUID())
+ damage = health - 1;
+
+ duel_wasMounted = true;
+ duel_hasEnded = true;
+ }
+ }
if (GetTypeId() == TYPEID_PLAYER && this != victim)
{
@@ -745,8 +760,18 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam
// last damage from duel opponent
if (duel_hasEnded)
{
- ASSERT(victim->GetTypeId() == TYPEID_PLAYER);
- Player* he = victim->ToPlayer();
+ Player* he;
+
+ if (duel_wasMounted)
+ {
+ ASSERT(victim->GetCharmer()->GetTypeId() == TYPEID_PLAYER);
+ he = victim->GetCharmer()->ToPlayer();
+ }
+ else
+ {
+ ASSERT(victim->GetTypeId() == TYPEID_PLAYER);
+ he = victim->ToPlayer();
+ }
ASSERT(he->duel);
@@ -16954,6 +16979,10 @@ void Unit::_ExitVehicle(Position const* exitPosition)
m_vehicle->RemovePassenger(this);
+ // If player is on mouted duel and exits the mount should immediatly lose the duel
+ if (GetTypeId() == TYPEID_PLAYER && ToPlayer()->duel && ToPlayer()->duel->isMounted)
+ ToPlayer()->DuelComplete(DUEL_FLED);
+
// This should be done before dismiss, because there may be some aura removal
Vehicle* vehicle = m_vehicle;
m_vehicle = NULL;