diff options
-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.sql | 9 | ||||
-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.sql | 6 | ||||
-rwxr-xr-x | src/server/game/Miscellaneous/SharedDefines.h | 2 | ||||
-rwxr-xr-x | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 21 | ||||
-rwxr-xr-x | src/server/game/Spells/Spell.cpp | 10 | ||||
-rwxr-xr-x | src/server/game/Spells/SpellEffects.cpp | 23 | ||||
-rw-r--r-- | src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp | 53 |
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(); } |