Scripts/Spells: Fix Argent Tournament mount spells:
* Break-Shield * Charge * Defend (visual) * Mounted duel * Faction Pennants when riding argent tournament mounts Closes #4917.
This commit is contained in:
@@ -274,13 +274,14 @@ struct PvPInfo
|
||||
|
||||
struct DuelInfo
|
||||
{
|
||||
DuelInfo() : initiator(NULL), opponent(NULL), startTimer(0), startTime(0), outOfBound(0) {}
|
||||
DuelInfo() : initiator(NULL), opponent(NULL), startTimer(0), startTime(0), outOfBound(0), isMounted(false) {}
|
||||
|
||||
Player* initiator;
|
||||
Player* opponent;
|
||||
time_t startTimer;
|
||||
time_t startTime;
|
||||
time_t outOfBound;
|
||||
bool isMounted;
|
||||
};
|
||||
|
||||
struct Areas
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -5607,6 +5607,7 @@ void Spell::EffectDuel(SpellEffIndex effIndex)
|
||||
duel->opponent = target;
|
||||
duel->startTime = 0;
|
||||
duel->startTimer = 0;
|
||||
duel->isMounted = (GetSpellInfo()->Id == 62875); // Mounted Duel
|
||||
caster->duel = duel;
|
||||
|
||||
DuelInfo* duel2 = new DuelInfo;
|
||||
@@ -5614,6 +5615,7 @@ void Spell::EffectDuel(SpellEffIndex effIndex)
|
||||
duel2->opponent = caster;
|
||||
duel2->startTime = 0;
|
||||
duel2->startTimer = 0;
|
||||
duel2->isMounted = (GetSpellInfo()->Id == 62875); // Mounted Duel
|
||||
target->duel = duel2;
|
||||
|
||||
caster->SetUInt64Value(PLAYER_DUEL_ARBITER, pGameObj->GetGUID());
|
||||
|
||||
@@ -2889,6 +2889,22 @@ void SpellMgr::LoadSpellCustomAttr()
|
||||
case 69293: // Wing Buffet
|
||||
case 74439: // Machine Gun
|
||||
case 63278: // Mark of the Faceless (General Vezax)
|
||||
case 62544: // Thrust (Argent Tournament)
|
||||
case 64588: // Thrust (Argent Tournament)
|
||||
case 66479: // Thrust (Argent Tournament)
|
||||
case 68505: // Thrust (Argent Tournament)
|
||||
case 62626: // Break-Shield (Argent Tournament, Player)
|
||||
case 64590: // Break-Shield (Argent Tournament, Player)
|
||||
case 64342: // Break-Shield (Argent Tournament, NPC)
|
||||
case 64686: // Break-Shield (Argent Tournament, NPC)
|
||||
case 65147: // Break-Shield (Argent Tournament, NPC)
|
||||
case 68504: // Break-Shield (Argent Tournament, NPC)
|
||||
case 62874: // Charge (Argent Tournament, Player)
|
||||
case 68498: // Charge (Argent Tournament, Player)
|
||||
case 64591: // Charge (Argent Tournament, Player)
|
||||
case 63003: // Charge (Argent Tournament, NPC)
|
||||
case 63010: // Charge (Argent Tournament, NPC)
|
||||
case 68321: // Charge (Argent Tournament, NPC)
|
||||
case 72255: // Mark of the Fallen Champion (Deathbringer Saurfang)
|
||||
case 72444: // Mark of the Fallen Champion (Deathbringer Saurfang)
|
||||
case 72445: // Mark of the Fallen Champion (Deathbringer Saurfang)
|
||||
@@ -2972,6 +2988,7 @@ void SpellMgr::LoadDbcDataCorrections()
|
||||
spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_TARGET_ENEMY;
|
||||
spellInfo->EffectImplicitTargetB[0] = 0;
|
||||
break;
|
||||
case 63665: // Charge (Argent Tournament emote on riders)
|
||||
case 31447: // Mark of Kaz'rogal (needs target selection script)
|
||||
case 31298: // Sleep (needs target selection script)
|
||||
case 51904: // Summon Ghouls On Scarlet Crusade (this should use conditions table, script for this spell needs to be fixed)
|
||||
|
||||
Reference in New Issue
Block a user