aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2012_02_01_00_world_misc.sql5
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp5
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp426
-rwxr-xr-xsrc/server/scripts/World/achievement_scripts.cpp19
4 files changed, 233 insertions, 222 deletions
diff --git a/sql/updates/world/2012_02_01_00_world_misc.sql b/sql/updates/world/2012_02_01_00_world_misc.sql
new file mode 100644
index 00000000000..e137f7a8238
--- /dev/null
+++ b/sql/updates/world/2012_02_01_00_world_misc.sql
@@ -0,0 +1,5 @@
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=9798 AND `type`=6;
+
+DELETE FROM `spell_script_names` WHERE `spell_id`=63399;
+INSERT INTO `spell_script_names`(`spell_id`,`ScriptName`) VALUES
+(63399, 'spell_gen_tournament_pennant');
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index e02331e00e7..289a600e88a 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -775,7 +775,10 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam
ASSERT(he->duel);
- he->SetHealth(1);
+ if (duel_wasMounted) // In this case victim==mount
+ victim->SetHealth(1);
+ else
+ he->SetHealth(1);
he->duel->opponent->CombatStopWithPets(true);
he->CombatStopWithPets(true);
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 96d259817c0..3d552901295 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -342,11 +342,8 @@ class spell_gen_remove_flight_auras : public SpellScriptLoader
PrepareSpellScript(spell_gen_remove_flight_auras_SpellScript);
void HandleScript(SpellEffIndex /*effIndex*/)
{
- Unit* target = GetHitUnit();
- if (!target)
- return;
- target->RemoveAurasByType(SPELL_AURA_FLY);
- target->RemoveAurasByType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED);
+ GetHitUnit()->RemoveAurasByType(SPELL_AURA_FLY);
+ GetHitUnit()->RemoveAurasByType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED);
}
void Register()
@@ -448,25 +445,22 @@ class spell_gen_elune_candle : public SpellScriptLoader
void HandleScript(SpellEffIndex /*effIndex*/)
{
- if (Unit* target = GetHitUnit())
- {
- uint32 spellId = 0;
+ uint32 spellId = 0;
- if (target->GetEntry() == NPC_OMEN)
+ if (GetHitUnit()->GetEntry() == NPC_OMEN)
+ {
+ switch (urand(0, 3))
{
- switch (urand(0, 3))
- {
- case 0: spellId = SPELL_ELUNE_CANDLE_OMEN_HEAD; break;
- case 1: spellId = SPELL_ELUNE_CANDLE_OMEN_CHEST; break;
- case 2: spellId = SPELL_ELUNE_CANDLE_OMEN_HAND_R; break;
- case 3: spellId = SPELL_ELUNE_CANDLE_OMEN_HAND_L; break;
- }
+ case 0: spellId = SPELL_ELUNE_CANDLE_OMEN_HEAD; break;
+ case 1: spellId = SPELL_ELUNE_CANDLE_OMEN_CHEST; break;
+ case 2: spellId = SPELL_ELUNE_CANDLE_OMEN_HAND_R; break;
+ case 3: spellId = SPELL_ELUNE_CANDLE_OMEN_HAND_L; break;
}
- else
- spellId = SPELL_ELUNE_CANDLE_NORMAL;
-
- GetCaster()->CastSpell(target, spellId, true, NULL);
}
+ else
+ spellId = SPELL_ELUNE_CANDLE_NORMAL;
+
+ GetCaster()->CastSpell(GetHitUnit(), spellId, true, NULL);
}
void Register()
@@ -947,11 +941,8 @@ class spell_generic_clone : public SpellScriptLoader
void HandleScriptEffect(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex);
- Unit* caster = GetCaster();
uint32 spellId = uint32(GetSpellInfo()->Effects[effIndex].CalcValue());
-
- if (Unit* target = GetHitUnit())
- target->CastSpell(caster, spellId, true);
+ GetHitUnit()->CastSpell(GetCaster(), spellId, true);
}
void Register()
@@ -1591,7 +1582,6 @@ class spell_gen_dalaran_disguise : public SpellScriptLoader
void HandleScript(SpellEffIndex /*effIndex*/)
{
-
if (Player* player = GetHitPlayer())
{
uint8 gender = player->getGender();
@@ -1661,66 +1651,74 @@ enum BreakShieldSpells
class spell_gen_break_shield: public SpellScriptLoader
{
-public:
- spell_gen_break_shield() : SpellScriptLoader("spell_gen_break_shield") { }
-
- class spell_gen_break_shield_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_gen_break_shield_SpellScript)
+ public:
+ spell_gen_break_shield() : SpellScriptLoader("spell_gen_break_shield") { }
- void HandleScriptEffect(SpellEffIndex effIndex)
+ class spell_gen_break_shield_SpellScript : public SpellScript
{
- Unit* caster = GetCaster();
- Unit* target = GetTargetUnit();
-
- if (!caster || !target)
- return;
+ PrepareSpellScript(spell_gen_break_shield_SpellScript)
- switch (effIndex)
+ void HandleScriptEffect(SpellEffIndex effIndex)
{
- case EFFECT_0: // On spells wich trigger the damaging spell (and also the visual)
- uint32 spellId;
- switch (GetSpellInfo()->Id)
+ Unit* target = GetHitUnit();
+
+ switch (effIndex)
+ {
+ case EFFECT_0: // On spells wich trigger the damaging spell (and also the visual)
{
- case SPELL_BREAK_SHIELD_TRIGGER_UNK:
- case SPELL_BREAK_SHIELD_TRIGGER_CAMPAING_WARHORSE:
- spellId = SPELL_BREAK_SHIELD_DAMAGE_10K;
- break;
- case SPELL_BREAK_SHIELD_TRIGGER_FACTION_MOUNTS:
- spellId = SPELL_BREAK_SHIELD_DAMAGE_2K;
- break;
- default:
- return;
- }
+ uint32 spellId;
- if (Unit* rider = caster->GetCharmer())
- rider->CastSpell(target, spellId, false);
- else
- caster->CastSpell(target, spellId, false);
- break;
- case EFFECT_1: // On damaging spells, for removing the a defend layer
- Unit::AuraApplicationMap const& auras = target->GetAppliedAuras();
- for (Unit::AuraApplicationMap::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
+ switch (GetSpellInfo()->Id)
+ {
+ case SPELL_BREAK_SHIELD_TRIGGER_UNK:
+ case SPELL_BREAK_SHIELD_TRIGGER_CAMPAING_WARHORSE:
+ spellId = SPELL_BREAK_SHIELD_DAMAGE_10K;
+ break;
+ case SPELL_BREAK_SHIELD_TRIGGER_FACTION_MOUNTS:
+ spellId = SPELL_BREAK_SHIELD_DAMAGE_2K;
+ break;
+ default:
+ return;
+ }
+
+ if (Unit* rider = GetCaster()->GetCharmer())
+ rider->CastSpell(target, spellId, false);
+ else
+ GetCaster()->CastSpell(target, spellId, false);
+ break;
+ }
+ case EFFECT_1: // On damaging spells, for removing a defend layer
{
- Aura* aura = itr->second->GetBase();
- SpellInfo const* auraInfo = aura->GetSpellInfo();
- if (aura && auraInfo->SpellIconID == 2007 && aura->HasEffectType(SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN))
- aura->ModStackAmount(-1, AURA_REMOVE_BY_ENEMY_SPELL);
+ Unit::AuraApplicationMap const& auras = target->GetAppliedAuras();
+ for (Unit::AuraApplicationMap::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
+ {
+ Aura* aura = itr->second->GetBase();
+ SpellInfo const* auraInfo = aura->GetSpellInfo();
+ if (aura && auraInfo->SpellIconID == 2007 && aura->HasEffectType(SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN))
+ {
+ aura->ModStackAmount(-1, AURA_REMOVE_BY_ENEMY_SPELL);
+ // Remove dummys from rider (Necessary for updating visual shields)
+ if (Unit* rider = target->GetCharmer())
+ if (Aura* defend = rider->GetAura(aura->GetId()))
+ defend->ModStackAmount(-1, AURA_REMOVE_BY_ENEMY_SPELL);
+ break;
+ }
+ }
+ break;
}
- break;
+ }
}
- }
- void Register()
+ void Register()
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_gen_break_shield_SpellScript::HandleScriptEffect, EFFECT_FIRST_FOUND, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
{
- OnEffectHit += SpellEffectFn(spell_gen_break_shield_SpellScript::HandleScriptEffect, EFFECT_FIRST_FOUND, SPELL_EFFECT_SCRIPT_EFFECT);
+ return new spell_gen_break_shield_SpellScript();
}
- };
-
- SpellScript* GetSpellScript() const
- {
- return new spell_gen_break_shield_SpellScript();
- }
};
/* DOCUMENTATION: Charge spells
@@ -1775,109 +1773,110 @@ enum ChargeSpells
class spell_gen_mounted_charge: public SpellScriptLoader
{
-public:
- spell_gen_mounted_charge() : SpellScriptLoader("spell_gen_mounted_charge") { }
-
- class spell_gen_mounted_charge_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_gen_mounted_charge_SpellScript)
+ public:
+ spell_gen_mounted_charge() : SpellScriptLoader("spell_gen_mounted_charge") { }
- void HandleScriptEffect(SpellEffIndex effIndex)
+ class spell_gen_mounted_charge_SpellScript : public SpellScript
{
- Unit* caster = GetCaster();
- Unit* target = GetTargetUnit();
+ PrepareSpellScript(spell_gen_mounted_charge_SpellScript)
- if (!caster || !target)
- return;
-
- switch (effIndex)
+ void HandleScriptEffect(SpellEffIndex effIndex)
{
- case EFFECT_0: // On spells wich trigger the damaging spell (and also the visual)
- uint32 spellId;
+ Unit* target = GetHitUnit();
- switch (GetSpellInfo()->Id)
+ switch (effIndex)
+ {
+ case EFFECT_0: // On spells wich trigger the damaging spell (and also the visual)
{
- case SPELL_CHARGE_TRIGGER_TRIAL_CHAMPION:
- spellId = SPELL_CHARGE_CHARGING_EFFECT_20K_1;
- case SPELL_CHARGE_TRIGGER_FACTION_MOUNTS:
- spellId = SPELL_CHARGE_CHARGING_EFFECT_8K5;
- break;
- default:
- return;
- }
+ uint32 spellId;
- if (Unit* vehicle = caster->GetVehicleBase())
- vehicle->CastSpell(target, spellId, false);
- else
- caster->CastSpell(target, spellId, false);
- break;
- case EFFECT_1: // On damaging spells, for removing the a defend layer
- case EFFECT_2:
- Unit::AuraApplicationMap const& auras = target->GetAppliedAuras();
- for (Unit::AuraApplicationMap::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
+ switch (GetSpellInfo()->Id)
+ {
+ case SPELL_CHARGE_TRIGGER_TRIAL_CHAMPION:
+ spellId = SPELL_CHARGE_CHARGING_EFFECT_20K_1;
+ case SPELL_CHARGE_TRIGGER_FACTION_MOUNTS:
+ spellId = SPELL_CHARGE_CHARGING_EFFECT_8K5;
+ break;
+ default:
+ return;
+ }
+
+ // If target isn't a training dummy there's a chance of failing the charge
+ if (!target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE) && roll_chance_f(12.5f))
+ spellId = SPELL_CHARGE_MISS_EFFECT;
+
+ if (Unit* vehicle = GetCaster()->GetVehicleBase())
+ vehicle->CastSpell(target, spellId, false);
+ else
+ GetCaster()->CastSpell(target, spellId, false);
+ break;
+ }
+ case EFFECT_1: // On damaging spells, for removing a defend layer
+ case EFFECT_2:
{
- Aura* aura = itr->second->GetBase();
- SpellInfo const* auraInfo = aura->GetSpellInfo();
- if (aura && auraInfo->SpellIconID == 2007 && aura->HasEffectType(SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN))
- aura->ModStackAmount(-1, AURA_REMOVE_BY_ENEMY_SPELL);
+ Unit::AuraApplicationMap const& auras = target->GetAppliedAuras();
+ for (Unit::AuraApplicationMap::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
+ {
+ Aura* aura = itr->second->GetBase();
+ SpellInfo const* auraInfo = aura->GetSpellInfo();
+ if (aura && auraInfo->SpellIconID == 2007 && aura->HasEffectType(SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN))
+ {
+ aura->ModStackAmount(-1, AURA_REMOVE_BY_ENEMY_SPELL);
+ // Remove dummys from rider (Necessary for updating visual shields)
+ if (Unit* rider = target->GetCharmer())
+ if (Aura* defend = rider->GetAura(aura->GetId()))
+ defend->ModStackAmount(-1, AURA_REMOVE_BY_ENEMY_SPELL);
+ break;
+ }
+ }
+ break;
}
- break;
+ }
}
- }
- void HandleChargeEffect(SpellEffIndex effIndex)
- {
- Unit* caster = GetCaster();
- Unit* target = GetTargetUnit();
+ void HandleChargeEffect(SpellEffIndex effIndex)
+ {
+ uint32 spellId;
- if (!caster || !target)
- return;
+ switch (GetSpellInfo()->Id)
+ {
+ case SPELL_CHARGE_CHARGING_EFFECT_8K5:
+ spellId = SPELL_CHARGE_DAMAGE_8K5;
+ break;
+ case SPELL_CHARGE_CHARGING_EFFECT_20K_1:
+ case SPELL_CHARGE_CHARGING_EFFECT_20K_2:
+ spellId = SPELL_CHARGE_DAMAGE_20K;
+ break;
+ case SPELL_CHARGE_CHARGING_EFFECT_45K_1:
+ case SPELL_CHARGE_CHARGING_EFFECT_45K_2:
+ spellId = SPELL_CHARGE_DAMAGE_45K;
+ break;
+ default:
+ return;
+ }
- uint32 spellId;
-
- switch (GetSpellInfo()->Id)
- {
- case SPELL_CHARGE_CHARGING_EFFECT_8K5:
- spellId = SPELL_CHARGE_DAMAGE_8K5;
- break;
- case SPELL_CHARGE_CHARGING_EFFECT_20K_1:
- case SPELL_CHARGE_CHARGING_EFFECT_20K_2:
- spellId = SPELL_CHARGE_DAMAGE_20K;
- break;
- case SPELL_CHARGE_CHARGING_EFFECT_45K_1:
- case SPELL_CHARGE_CHARGING_EFFECT_45K_2:
- spellId = SPELL_CHARGE_DAMAGE_45K;
- break;
- default:
- return;
+ if (Unit* rider = GetCaster()->GetCharmer())
+ rider->CastSpell(GetHitUnit(), spellId, false);
+ else
+ GetCaster()->CastSpell(GetHitUnit(), spellId, false);
}
- // If target isn't a training dummy there's a chance of failing the charge
- if (!target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE) && urand(0,7) == 0)
- spellId = SPELL_CHARGE_MISS_EFFECT;
-
- if (Unit* rider = caster->GetCharmer())
- rider->CastSpell(target, spellId, false);
- else
- caster->CastSpell(target, spellId, false);
- }
+ void Register()
+ {
+ SpellInfo const* spell = sSpellMgr->GetSpellInfo(m_scriptSpellId);
- void Register()
- {
- SpellInfo const* spell = sSpellMgr->GetSpellInfo(m_scriptSpellId);
+ if (spell->HasEffect(SPELL_EFFECT_SCRIPT_EFFECT))
+ OnEffectHitTarget += SpellEffectFn(spell_gen_mounted_charge_SpellScript::HandleScriptEffect, EFFECT_FIRST_FOUND, SPELL_EFFECT_SCRIPT_EFFECT);
- if (spell->HasEffect(SPELL_EFFECT_SCRIPT_EFFECT))
- OnEffectHit += SpellEffectFn(spell_gen_mounted_charge_SpellScript::HandleScriptEffect, EFFECT_FIRST_FOUND, SPELL_EFFECT_SCRIPT_EFFECT);
+ if (spell->Effects[EFFECT_0].Effect == SPELL_EFFECT_CHARGE)
+ OnEffectHitTarget += SpellEffectFn(spell_gen_mounted_charge_SpellScript::HandleChargeEffect, EFFECT_0, SPELL_EFFECT_CHARGE);
+ }
+ };
- if (spell->Effects[EFFECT_0].Effect == SPELL_EFFECT_CHARGE)
- OnEffectHit += SpellEffectFn(spell_gen_mounted_charge_SpellScript::HandleChargeEffect, EFFECT_0, SPELL_EFFECT_CHARGE);
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_gen_mounted_charge_SpellScript();
}
- };
-
- SpellScript* GetSpellScript() const
- {
- return new spell_gen_mounted_charge_SpellScript();
- }
};
enum DefendVisuals
@@ -1907,44 +1906,33 @@ class spell_gen_defend : public SpellScriptLoader
return true;
}
- void RefreshVisualShields(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ void RefreshVisualShields(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
- Unit* caster = GetCaster();
- Unit* target = GetTarget();
-
- if(!target)
- return;
-
- if (!caster)
+ if (Unit* caster = GetCaster())
{
- target->RemoveAurasDueToSpell(GetId());
- return;
- }
+ Unit* target = GetTarget();
- for (uint8 i = 0; i < GetSpellInfo()->StackAmount; ++i)
- target->RemoveAurasDueToSpell(SPELL_VISUAL_SHIELD_1 + i);
+ for (uint8 i = 0; i < GetSpellInfo()->StackAmount; ++i)
+ target->RemoveAurasDueToSpell(SPELL_VISUAL_SHIELD_1 + i);
- target->CastSpell(target, SPELL_VISUAL_SHIELD_1 + GetAura()->GetStackAmount() - 1);
+ target->CastSpell(target, SPELL_VISUAL_SHIELD_1 + GetAura()->GetStackAmount() - 1, true, NULL, aurEff);
+ }
+ else
+ GetTarget()->RemoveAurasDueToSpell(GetId());
}
void RemoveVisualShields(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- Unit* target = GetTarget();
-
- if(!target)
- return;
-
for (uint8 i = 0; i < GetSpellInfo()->StackAmount; ++i)
- target->RemoveAurasDueToSpell(SPELL_VISUAL_SHIELD_1 + i);
+ GetTarget()->RemoveAurasDueToSpell(SPELL_VISUAL_SHIELD_1 + i);
}
void RemoveDummyFromDriver(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- Unit* caster = GetCaster();
-
- if (caster && caster->ToTempSummon())
- if (Unit* rider = caster->ToTempSummon()->GetSummoner())
- rider->RemoveAurasDueToSpell(GetId());
+ if (Unit* caster = GetCaster())
+ if (TempSummon* vehicle = caster->ToTempSummon())
+ if (Unit* rider = vehicle->GetSummoner())
+ rider->RemoveAurasDueToSpell(GetId());
}
void Register()
@@ -1955,7 +1943,7 @@ class spell_gen_defend : public SpellScriptLoader
if (spell->Effects[EFFECT_0].ApplyAuraName == SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN)
{
AfterEffectApply += AuraEffectApplyFn(spell_gen_defendAuraScript::RefreshVisualShields, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
- OnEffectRemove += AuraEffectRemoveFn(spell_gen_defendAuraScript::RemoveVisualShields, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL);
+ OnEffectRemove += AuraEffectRemoveFn(spell_gen_defendAuraScript::RemoveVisualShields, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
}
// Remove Defend spell from player when he dismounts
@@ -1966,7 +1954,7 @@ class spell_gen_defend : public SpellScriptLoader
if (spell->Effects[EFFECT_1].ApplyAuraName == SPELL_AURA_DUMMY)
{
AfterEffectApply += AuraEffectApplyFn(spell_gen_defendAuraScript::RefreshVisualShields, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
- OnEffectRemove += AuraEffectRemoveFn(spell_gen_defendAuraScript::RemoveVisualShields, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ OnEffectRemove += AuraEffectRemoveFn(spell_gen_defendAuraScript::RemoveVisualShields, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
}
}
};
@@ -2003,33 +1991,24 @@ class spell_gen_tournament_duel : public SpellScriptLoader
void HandleScriptEffect(SpellEffIndex effIndex)
{
- Unit* caster = GetCaster();
- Unit* target = GetTargetUnit();
- Unit* player = GetCaster()->GetCharmer();
-
- if (!caster || !target || !player)
- return;
-
- if (target->GetTypeId() == TYPEID_PLAYER)
- {
-
- if (!target->HasAura(SPELL_ON_TOURNAMENT_MOUNT) || !target->GetVehicleBase())
- return;
-
- player->CastSpell(target, SPELL_MOUNTED_DUEL, true);
- }
- else if (target->GetTypeId() == TYPEID_UNIT)
+ if (Unit* rider = GetCaster()->GetCharmer())
{
- if (!target->GetCharmer() || target->GetCharmer()->GetTypeId() != TYPEID_PLAYER || !target->GetCharmer()->HasAura(SPELL_ON_TOURNAMENT_MOUNT))
- return;
-
- player->CastSpell(target->GetCharmer(), SPELL_MOUNTED_DUEL, true);
+ if (Player* plrTarget = GetHitPlayer())
+ {
+ if (plrTarget->HasAura(SPELL_ON_TOURNAMENT_MOUNT) && plrTarget->GetVehicleBase())
+ rider->CastSpell(plrTarget, SPELL_MOUNTED_DUEL, true);
+ }
+ else if (Unit* unitTarget = GetHitUnit())
+ {
+ if (unitTarget->GetCharmer() && unitTarget->GetCharmer()->GetTypeId() == TYPEID_PLAYER && unitTarget->GetCharmer()->HasAura(SPELL_ON_TOURNAMENT_MOUNT))
+ rider->CastSpell(unitTarget->GetCharmer(), SPELL_MOUNTED_DUEL, true);
+ }
}
}
void Register()
{
- OnEffectHit += SpellEffectFn(spell_gen_tournament_duel_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_tournament_duel_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
@@ -2062,9 +2041,13 @@ class spell_gen_summon_tournament_mount : public SpellScriptLoader
SpellCastResult CheckIfLanceEquiped()
{
- Unit* caster = GetCaster();
+ if (GetCaster()->HasAuraType(SPELL_AURA_MOD_SHAPESHIFT))
+ {
+ SetCustomCastResultMessage(SPELL_CUSTOM_ERROR_CANT_MOUNT_WITH_SHAPESHIFT);
+ return SPELL_FAILED_CUSTOM_ERROR;
+ }
- if (!caster->HasAura(SPELL_LANCE_EQUIPPED))
+ if (!GetCaster()->HasAura(SPELL_LANCE_EQUIPPED))
{
SetCustomCastResultMessage(SPELL_CUSTOM_ERROR_MUST_HAVE_LANCE_EQUIPPED);
return SPELL_FAILED_CUSTOM_ERROR;
@@ -2194,25 +2177,24 @@ class spell_gen_on_tournament_mount : public SpellScriptLoader
bool Load()
{
_pennantSpellId = 0;
- return (GetCaster()->GetTypeId() == TYPEID_PLAYER);
+ return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
void HandleApplyEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- Unit* caster = GetCaster();
-
- if (caster && caster->GetVehicleBase())
+ if (Unit* caster = GetCaster())
{
- _pennantSpellId = GetPennatSpellId(caster->ToPlayer(), caster->GetVehicleBase());
- caster->CastSpell(caster, _pennantSpellId,true);
+ if (Unit* vehicle = caster->GetVehicleBase())
+ {
+ _pennantSpellId = GetPennatSpellId(caster->ToPlayer(), vehicle);
+ caster->CastSpell(caster, _pennantSpellId, true);
+ }
}
}
void HandleRemoveEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- Unit* caster = GetCaster();
-
- if (caster)
+ if (Unit* caster = GetCaster())
caster->RemoveAurasDueToSpell(_pennantSpellId);
}
@@ -2348,12 +2330,16 @@ class spell_gen_tournament_pennant : public SpellScriptLoader
{
PrepareAuraScript(spell_gen_tournament_pennantAuraScript);
- void HandleApplyEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ bool Load()
{
- Unit* caster = GetCaster();
+ return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER;
+ }
- if (caster && caster->GetTypeId() == TYPEID_PLAYER && !caster->GetVehicleBase())
- caster->RemoveAurasDueToSpell(GetId());
+ void HandleApplyEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (Unit* caster = GetCaster())
+ if (!caster->GetVehicleBase())
+ caster->RemoveAurasDueToSpell(GetId());
}
void Register()
diff --git a/src/server/scripts/World/achievement_scripts.cpp b/src/server/scripts/World/achievement_scripts.cpp
index 135f22e0a01..9bcf450b3aa 100755
--- a/src/server/scripts/World/achievement_scripts.cpp
+++ b/src/server/scripts/World/achievement_scripts.cpp
@@ -285,6 +285,16 @@ class achievement_bg_sa_defense_of_ancients : public AchievementCriteriaScript
}
};
+enum ArgentTournamentAreas
+{
+ AREA_ARGENT_TOURNAMENT_FIELDS = 4658,
+ AREA_RING_OF_ASPIRANTS = 4670,
+ AREA_RING_OF_ARGENT_VALIANTS = 4671,
+ AREA_RING_OF_ALLIANCE_VALIANTS = 4672,
+ AREA_RING_OF_HORDE_VALIANTS = 4673,
+ AREA_RING_OF_CHAMPIONS = 4669,
+};
+
class achievement_tilted : public AchievementCriteriaScript
{
public:
@@ -292,7 +302,14 @@ class achievement_tilted : public AchievementCriteriaScript
bool OnCheck(Player* player, Unit* /*target*/)
{
- return player && player->duel && player->duel->isMounted;
+ bool checkArea = player->GetAreaId() == AREA_ARGENT_TOURNAMENT_FIELDS ||
+ player->GetAreaId() == AREA_RING_OF_ASPIRANTS ||
+ player->GetAreaId() == AREA_RING_OF_ARGENT_VALIANTS ||
+ player->GetAreaId() == AREA_RING_OF_ALLIANCE_VALIANTS ||
+ player->GetAreaId() == AREA_RING_OF_HORDE_VALIANTS ||
+ player->GetAreaId() == AREA_RING_OF_CHAMPIONS;
+
+ return player && checkArea && player->duel && player->duel->isMounted;
}
};