aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2011_08_18_00_world_vehicle_template_accessory.sql (renamed from sql/updates/world/2011_08_15_01_world_vehicle_template_accessory.sql)0
-rw-r--r--sql/updates/world/2011_08_18_01_world_misc.sql (renamed from sql/updates/world/2011_08_18_00_world_misc.sql)0
-rw-r--r--sql/updates/world/2011_08_18_02_world_achievement_criteria_data.sql9
-rw-r--r--sql/updates/world/2011_08_18_03_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_08_18_01_world_achievement_criteria_data.sql)9
-rw-r--r--sql/updates/world/2011_08_18_04_world_spell_script_names.sql6
-rwxr-xr-xsrc/server/game/Miscellaneous/SharedDefines.h2
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuraEffects.cpp21
-rwxr-xr-xsrc/server/game/Spells/Spell.cpp10
-rwxr-xr-xsrc/server/game/Spells/SpellEffects.cpp23
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp53
10 files changed, 94 insertions, 39 deletions
diff --git a/sql/updates/world/2011_08_15_01_world_vehicle_template_accessory.sql b/sql/updates/world/2011_08_18_00_world_vehicle_template_accessory.sql
index 2659570e464..2659570e464 100644
--- a/sql/updates/world/2011_08_15_01_world_vehicle_template_accessory.sql
+++ b/sql/updates/world/2011_08_18_00_world_vehicle_template_accessory.sql
diff --git a/sql/updates/world/2011_08_18_00_world_misc.sql b/sql/updates/world/2011_08_18_01_world_misc.sql
index 0a01fc87763..0a01fc87763 100644
--- a/sql/updates/world/2011_08_18_00_world_misc.sql
+++ b/sql/updates/world/2011_08_18_01_world_misc.sql
diff --git a/sql/updates/world/2011_08_18_02_world_achievement_criteria_data.sql b/sql/updates/world/2011_08_18_02_world_achievement_criteria_data.sql
index 91e9715006d..6c52e685054 100644
--- a/sql/updates/world/2011_08_18_02_world_achievement_criteria_data.sql
+++ b/sql/updates/world/2011_08_18_02_world_achievement_criteria_data.sql
@@ -1,7 +1,6 @@
-DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (12740,12741,12744,12993) AND `type`=12;
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (12747,12748,12749) AND `type`=12;
INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
VALUES
-(12740,12,0,0,''),
-(12741,12,0,0,''),
-(12744,12,0,0,''),
-(12993,12,1,0,'');
+(12747,12,1,0,''),
+(12748,12,1,0,''),
+(12749,12,1,0,'');
diff --git a/sql/updates/world/2011_08_18_01_world_achievement_criteria_data.sql b/sql/updates/world/2011_08_18_03_world_achievement_criteria_data.sql
index 6c52e685054..91e9715006d 100644
--- a/sql/updates/world/2011_08_18_01_world_achievement_criteria_data.sql
+++ b/sql/updates/world/2011_08_18_03_world_achievement_criteria_data.sql
@@ -1,6 +1,7 @@
-DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (12747,12748,12749) AND `type`=12;
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (12740,12741,12744,12993) AND `type`=12;
INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
VALUES
-(12747,12,1,0,''),
-(12748,12,1,0,''),
-(12749,12,1,0,'');
+(12740,12,0,0,''),
+(12741,12,0,0,''),
+(12744,12,0,0,''),
+(12993,12,1,0,'');
diff --git a/sql/updates/world/2011_08_18_04_world_spell_script_names.sql b/sql/updates/world/2011_08_18_04_world_spell_script_names.sql
new file mode 100644
index 00000000000..a5ad44c5659
--- /dev/null
+++ b/sql/updates/world/2011_08_18_04_world_spell_script_names.sql
@@ -0,0 +1,6 @@
+DELETE FROM `spell_script_names` WHERE `spell_id`=64414;
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(64414,'spell_load_into_catapult');
+
+-- Update a wrongly entered spell
+UPDATE `creature_template` SET `spell6`=64414 WHERE `entry`=33167;
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 752776fcf06..f9e68e86208 100755
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -497,7 +497,7 @@ enum SpellAttr6
SPELL_ATTR6_UNK15 = 0x00008000, // 15 not set in 3.0.3
SPELL_ATTR6_UNK16 = 0x00010000, // 16
SPELL_ATTR6_UNK17 = 0x00020000, // 17
- SPELL_ATTR6_ONLY_CAST_WHILE_POSSESSED = 0x00040000, // 18 (NYI) client won't allow to cast these spells when unit does not have possessor
+ SPELL_ATTR6_ONLY_CAST_WHILE_POSSESSED = 0x00040000, // 18 client won't allow to cast these spells when unit is not possessed && charmer of caster will be original caster
SPELL_ATTR6_UNK19 = 0x00080000, // 19
SPELL_ATTR6_UNK20 = 0x00100000, // 20
SPELL_ATTR6_CLIENT_UI_TARGET_EFFECTS = 0x00200000, // 21 it's only client-side attribute
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index d6a3ef5ff50..158a4d8c2eb 100755
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -5609,20 +5609,17 @@ void AuraEffect::HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const
{
case 54798: // FLAMING Arrow Triggered Effect
{
- if (!caster || !target || !target->ToCreature() || !caster->IsVehicle() || target->HasAura(54683))
+ if (!caster || !target || !target->ToCreature() || !caster->GetVehicle() || target->HasAura(54683))
break;
- if (Unit* rider = caster->GetVehicleKit()->GetPassenger(0))
- {
- target->CastSpell(target, 54683, true);
-
- // Credit Frostworgs
- if (target->GetEntry() == 29358)
- rider->CastSpell(rider, 54896, true);
- // Credit Frost Giants
- else if (target->GetEntry() == 29351)
- rider->CastSpell(rider, 54893, true);
- }
+ target->CastSpell(target, 54683, true);
+
+ // Credit Frostworgs
+ if (target->GetEntry() == 29358)
+ caster->CastSpell(caster, 54896, true);
+ // Credit Frost Giants
+ else if (target->GetEntry() == 29351)
+ caster->CastSpell(caster, 54893, true);
break;
}
case 62292: // Blaze (Pool of Tar)
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 4b3f0ed73df..e29e0ced1e6 100755
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -498,6 +498,8 @@ m_caster(caster), m_spellValue(new SpellValue(m_spellInfo))
if (originalCasterGUID)
m_originalCasterGUID = originalCasterGUID;
+ else if (info->AttributesEx6 & SPELL_ATTR6_ONLY_CAST_WHILE_POSSESSED)
+ m_originalCasterGUID = m_caster->GetCharmerOrOwnerGUID();
else
m_originalCasterGUID = m_caster->GetGUID();
@@ -506,7 +508,8 @@ m_caster(caster), m_spellValue(new SpellValue(m_spellInfo))
else
{
m_originalCaster = ObjectAccessor::GetUnit(*m_caster, m_originalCasterGUID);
- if (m_originalCaster && !m_originalCaster->IsInWorld()) m_originalCaster = NULL;
+ if (m_originalCaster && !m_originalCaster->IsInWorld())
+ m_originalCaster = NULL;
}
m_spellState = SPELL_STATE_NULL;
@@ -4743,6 +4746,11 @@ SpellCastResult Spell::CheckCast(bool strict)
return SPELL_FAILED_DONT_REPORT;
}
+ //! Client checks this already
+ if (m_spellInfo->AttributesEx6 & SPELL_ATTR6_ONLY_CAST_WHILE_POSSESSED && !m_caster->GetCharmerOrOwnerGUID())
+ return SPELL_FAILED_DONT_REPORT;
+
+
Unit* target = m_targets.GetUnitTarget();
// In pure self-cast spells, the client won't send any unit target
if (!target && (m_targets.GetTargetMask() == TARGET_FLAG_SELF || m_targets.GetTargetMask() & TARGET_FLAG_UNIT_ALLY)) // TARGET_FLAG_SELF == 0, remember!
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 36244257d28..5b8e23697df 100755
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -5062,27 +5062,18 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
m_caster->ToPlayer()->learnSpell(discoveredSpell, false);
return;
}
- case 62428: // Load into Catapult
- {
- if (Vehicle* seat = m_caster->GetVehicleKit())
- if (Unit* passenger = seat->GetPassenger(0))
- if (Unit* demolisher = m_caster->GetVehicleBase())
- passenger->CastSpell(demolisher, damage, true);
- return;
- }
case 62482: // Grab Crate
{
if (unitTarget)
{
- if (Vehicle* seat = m_caster->GetVehicleKit())
+ if (Unit* seat = m_caster->GetVehicleBase())
{
- if (Unit* passenger = seat->GetPassenger(1))
- if (Creature* oldContainer = passenger->ToCreature())
- oldContainer->DisappearAndDie();
-
- // TODO: a hack, range = 11, should after some time cast, otherwise too far
- m_caster->CastSpell(seat->GetBase(), 62496, true);
- unitTarget->EnterVehicle(m_caster, 1);
+ if (Unit* parent = seat->GetVehicleBase())
+ {
+ // TODO: a hack, range = 11, should after some time cast, otherwise too far
+ m_caster->CastSpell(parent, 62496, true);
+ unitTarget->CastSpell(parent, m_spellInfo->Effects[EFFECT_0].CalcValue());
+ }
}
}
return;
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
index 779abd6ddf8..776b69d599b 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
@@ -49,6 +49,7 @@ enum Spells
SPELL_SMOKE_TRAIL = 63575,
SPELL_ELECTROSHOCK = 62522,
SPELL_NAPALM = 63666,
+ SPELL_INVIS_AND_STEALTH_DETECT = 18950, // Passive
//TOWER Additional SPELLS
SPELL_THORIM_S_HAMMER = 62911, // Tower of Storms
SPELL_MIMIRON_S_INFERNO = 62909, // Tower of Flames
@@ -243,6 +244,8 @@ class boss_flame_leviathan : public CreatureScript
Shutout = true;
Unbroken = true;
+ DoCast(SPELL_INVIS_AND_STEALTH_DETECT);
+
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
me->SetReactState(REACT_PASSIVE);
}
@@ -327,6 +330,9 @@ class boss_flame_leviathan : public CreatureScript
void JustDied(Unit* /*victim*/)
{
_JustDied();
+ // Set Field Flags 67108928 = 64 | 67108864 = UNIT_FLAG_UNK_6 | UNIT_FLAG_SKINNABLE
+ // Set DynFlags 12
+ // Set NPCFlags 0
DoScriptText(SAY_DEATH, me);
}
@@ -1466,6 +1472,51 @@ class achievement_orbit_uary : public AchievementCriteriaScript
}
};
+class spell_load_into_catapult : public SpellScriptLoader
+{
+ enum Spells
+ {
+ SPELL_PASSENGER_LOADED = 62340,
+ };
+
+ public:
+ spell_load_into_catapult() : SpellScriptLoader("spell_load_into_catapult") { }
+
+ class spell_load_into_catapult_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_load_into_catapult_AuraScript);
+
+ void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* owner = GetOwner()->ToUnit();
+ if (!owner)
+ return;
+
+ owner->CastSpell(owner, SPELL_PASSENGER_LOADED, true);
+ }
+
+ void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* owner = GetOwner()->ToUnit();
+ if (!owner)
+ return;
+
+ owner->RemoveAurasDueToSpell(SPELL_PASSENGER_LOADED);
+ }
+
+ void Register()
+ {
+ OnEffectApply += AuraEffectApplyFn(spell_load_into_catapult_AuraScript::OnApply, EFFECT_0, SPELL_AURA_CONTROL_VEHICLE, AURA_EFFECT_HANDLE_REAL);
+ OnEffectRemove += AuraEffectRemoveFn(spell_load_into_catapult_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_CONTROL_VEHICLE, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ }
+ };
+
+ AuraScript* GetAuraScript() const
+ {
+ return new spell_load_into_catapult_AuraScript();
+ }
+};
+
void AddSC_boss_flame_leviathan()
{
new boss_flame_leviathan();
@@ -1495,4 +1546,6 @@ void AddSC_boss_flame_leviathan()
new achievement_orbital_devastation();
new achievement_nuked_from_orbit();
new achievement_orbit_uary();
+
+ new spell_load_into_catapult();
}