diff options
| author | Spp <spp@jorge.gr> | 2012-12-17 12:13:51 +0100 |
|---|---|---|
| committer | Spp <spp@jorge.gr> | 2012-12-17 12:13:51 +0100 |
| commit | a227a3494766103cf6805cf52839612854c2767b (patch) | |
| tree | 80519e3484d4b7deaf36d944caf2bb1a3a254e88 /src/server/scripts | |
| parent | 70b542a88cef4f33a793d87665a1e0ebd179c5ab (diff) | |
| parent | 5a52acbe40c2a455419b43bbfdda82709a1cbe80 (diff) | |
Merge branch 'master' into 4.3.4
Conflicts:
src/server/game/AI/CoreAI/PetAI.cpp
src/server/game/Entities/Player/Player.cpp
src/server/game/Handlers/QuestHandler.cpp
src/server/game/Spells/SpellEffects.cpp
src/server/scripts/EasternKingdoms/stormwind_city.cpp
Diffstat (limited to 'src/server/scripts')
25 files changed, 395 insertions, 266 deletions
diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp index 1ec0eda171c..27a3aaa3fae 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp @@ -33,7 +33,7 @@ EndScriptData */ enum eEnums { - SAY_BOSS_DIE_AD = 0, + SAY_BOSS_DIE_AD = 4, SAY_BOSS_DIE_AS = 3, SAY_ARCHMAGE = 0, diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp index 959f8a3f690..5c46519ab1c 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp @@ -231,7 +231,7 @@ public: { npc_morriduneAI(Creature* creature) : npc_escortAI(creature) { - creature->AI()->Talk(SAY_MORRIDUNE_1); + Talk(SAY_MORRIDUNE_1); me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); Start(false, false, 0); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index 3329ecf88d2..4887c8adf62 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -43,7 +43,7 @@ enum Says SAY_PHASE201 = 10, SAY_PHASE203 = 11, SAY_PHASE205 = 12, - SAY_PHASE208 = 13, + SAY_PHASE208 = 13, SAY_PHASE209 = 14, SAY_PHASE210 = 15, @@ -96,7 +96,7 @@ enum Says SAY_PHASE117 = 1, //Cityman - SAY_PHASE202 = 0, + SAY_PHASE202 = 0, //Crazyman SAY_PHASE204 = 0, diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.cpp index 03bebe35fd9..5d9eaeac7b9 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.cpp @@ -59,7 +59,7 @@ enum MedivhBm SPELL_CORRUPT = 31326, SPELL_CORRUPT_AEONUS = 37853, - + C_COUNCIL_ENFORCER = 17023 }; diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp index 4ebdc408963..99a304e3726 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp @@ -35,7 +35,7 @@ enum Skeram SAY_SLAY = 1, SAY_SPLIT = 2, SAY_DEATH = 3, - + SPELL_ARCANE_EXPLOSION = 25679, SPELL_EARTH_SHOCK = 26194, SPELL_TRUE_FULFILLMENT = 785, diff --git a/src/server/scripts/Kalimdor/azuremyst_isle.cpp b/src/server/scripts/Kalimdor/azuremyst_isle.cpp index ae0199e5dee..244a0abe8b2 100644 --- a/src/server/scripts/Kalimdor/azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/azuremyst_isle.cpp @@ -411,14 +411,14 @@ enum Geezle SPELL_TREE_DISGUISE = 30298, GEEZLE_SAY_1 = 0, - SPARK_SAY_2 = 0, - SPARK_SAY_3 = 1, + SPARK_SAY_2 = 3, + SPARK_SAY_3 = 4, GEEZLE_SAY_4 = 1, - SPARK_SAY_5 = 2, - SPARK_SAY_6 = 3, + SPARK_SAY_5 = 5, + SPARK_SAY_6 = 6, GEEZLE_SAY_7 = 2, - EMOTE_SPARK = 4, + EMOTE_SPARK = 7, MOB_SPARK = 17243, GO_NAGA_FLAG = 181694 @@ -490,23 +490,23 @@ public: Spark->SetInFront(me); me->SetInFront(Spark); return 5000; - case 3: - Spark->AI()->Talk(SPARK_SAY_2); + case 3: + Spark->AI()->Talk(SPARK_SAY_2); return 7000; - case 4: + case 4: Spark->AI()->Talk(SPARK_SAY_3); return 8000; - case 5: + case 5: Talk(GEEZLE_SAY_4, SparkGUID); return 8000; - case 6: + case 6: Spark->AI()->Talk(SPARK_SAY_5); return 9000; - case 7: - Spark->AI()->Talk(SPARK_SAY_6); + case 7: + Spark->AI()->Talk(SPARK_SAY_6); return 8000; - case 8: - Talk(GEEZLE_SAY_7, SparkGUID); + case 8: + Talk(GEEZLE_SAY_7, SparkGUID); return 2000; case 9: me->GetMotionMaster()->MoveTargetedHome(); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index d77c84b2978..3c20acf34a6 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -27,10 +27,34 @@ EndScriptData */ #include "SpellScript.h" #include "trial_of_the_champion.h" #include "ScriptedEscortAI.h" - -enum eSpells +/* +enum Yells +{ + // Eadric the Pure + SAY_INTRO = 0, + SAY_AGGRO = 1, + EMOTE_RADIANCE = 2, + EMOTE_HAMMER_RIGHTEOUS = 3, + SAY_HAMMER_RIGHTEOUS = 4, + SAY_KILL_PLAYER = 5, + SAY_DEFEATED = 6, + + // Argent Confessor Paletress + SAY_INTRO_1 = 0, + SAY_INTRO_2 = 1, + SAY_AGGRO = 2, + SAY_MEMORY_SUMMON = 3, + SAY_MEMORY_DEATH = 4, + SAY_KILL_PLAYER = 5, + SAY_DEFEATED = 6, + + // Memory of X + EMOTE_WAKING_NIGHTMARE = 0 +}; +*/ +enum Spells { - //Eadric + // Eadric the Pure SPELL_EADRIC_ACHIEVEMENT = 68197, SPELL_HAMMER_JUSTICE = 66863, SPELL_HAMMER_RIGHTEOUS = 66867, diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp index c56d44ceb08..c1a2f9c07d2 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp @@ -27,7 +27,7 @@ EndScriptData */ #include "ScriptedEscortAI.h" #include "trial_of_the_champion.h" -enum eSpells +enum Spells { //phase 1 SPELL_PLAGUE_STRIKE = 67884, @@ -61,13 +61,13 @@ enum eSpells SPELL_KILL_CREDIT = 68663 }; -enum eModels +enum Models { MODEL_SKELETON = 29846, MODEL_GHOST = 21300 }; -enum ePhases +enum Phases { PHASE_UNDEAD = 1, PHASE_SKELETON = 2, diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp index ffda3d12e2f..9c0b894bfa7 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp @@ -33,6 +33,18 @@ EndContentData */ #include "Vehicle.h" #include "Player.h" +enum Yells +{ + SAY_INTRO_1 = 0, + SAY_INTRO_2 = 1, + SAY_INTRO_3 = 2, + SAY_AGGRO = 3, + SAY_PHASE_2 = 4, + SAY_PHASE_3 = 5, + SAY_KILL_PLAYER = 6, + SAY_DEATH = 7 +}; + #define GOSSIP_START_EVENT1 "I'm ready to start challenge." #define GOSSIP_START_EVENT2 "I'm ready for the next challenge." diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h index cb3a43acdd0..6116a150334 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h @@ -19,7 +19,7 @@ #ifndef DEF_TOC_H #define DEF_TOC_H -enum eData +enum Data { BOSS_GRAND_CHAMPIONS, BOSS_ARGENT_CHALLENGE_E, @@ -46,7 +46,7 @@ enum Data64 DATA_GRAND_CHAMPION_3 }; -enum eNpcs +enum CreatureIds { // Horde Champions NPC_MOKRA = 35572, @@ -78,7 +78,7 @@ enum eNpcs NPC_ARELAS = 35005 }; -enum eGameObjects +enum GameObjects { GO_MAIN_GATE = 195647, @@ -92,7 +92,7 @@ enum eGameObjects GO_PALETRESS_LOOT_H = 195324 }; -enum eVehicles +enum Vehicles { //Grand Champions Alliance Vehicles VEHICLE_MARSHAL_JACOB_ALERIUS_MOUNT = 35637, diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp index f618d0e04e7..a9dc9cf394d 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp @@ -25,6 +25,7 @@ #include "ScriptedCreature.h" #include "trial_of_the_crusader.h" #include "SpellScript.h" +#include "SpellAuraEffects.h" #include <limits> enum Yells @@ -53,54 +54,54 @@ enum Summons enum BossSpells { - SPELL_FREEZE_SLASH = 66012, - SPELL_PENETRATING_COLD = 66013, - SPELL_LEECHING_SWARM = 66118, - SPELL_LEECHING_HEAL = 66125, - SPELL_LEECHING_DAMAGE = 66240, - SPELL_MARK = 67574, - SPELL_SPIKE_CALL = 66169, - SPELL_SUBMERGE_ANUBARAK = 65981, - SPELL_CLEAR_ALL_DEBUFFS = 34098, - SPELL_EMERGE_ANUBARAK = 65982, - SPELL_SUMMON_BEATLES = 66339, - SPELL_SUMMON_BURROWER = 66332, + SPELL_FREEZE_SLASH = 66012, + SPELL_PENETRATING_COLD = 66013, + SPELL_LEECHING_SWARM = 66118, + SPELL_LEECHING_SWARM_HEAL = 66125, + SPELL_LEECHING_SWARM_DMG = 66240, + SPELL_MARK = 67574, + SPELL_SPIKE_CALL = 66169, + SPELL_SUBMERGE_ANUBARAK = 65981, + SPELL_CLEAR_ALL_DEBUFFS = 34098, + SPELL_EMERGE_ANUBARAK = 65982, + SPELL_SUMMON_BEATLES = 66339, + SPELL_SUMMON_BURROWER = 66332, // Burrow - SPELL_CHURNING_GROUND = 66969, + SPELL_CHURNING_GROUND = 66969, // Scarab - SPELL_DETERMINATION = 66092, - SPELL_ACID_MANDIBLE = 65774, //Passive - Triggered + SPELL_DETERMINATION = 66092, + SPELL_ACID_MANDIBLE = 65774, //Passive - Triggered // Burrower - SPELL_SPIDER_FRENZY = 66128, - SPELL_EXPOSE_WEAKNESS = 67720, //Passive - Triggered - SPELL_SHADOW_STRIKE = 66134, - SPELL_SUBMERGE_EFFECT = 68394, - SPELL_AWAKENED = 66311, - SPELL_EMERGE_EFFECT = 65982, + SPELL_SPIDER_FRENZY = 66128, + SPELL_EXPOSE_WEAKNESS = 67720, //Passive - Triggered + SPELL_SHADOW_STRIKE = 66134, + SPELL_SUBMERGE_EFFECT = 68394, + SPELL_AWAKENED = 66311, + SPELL_EMERGE_EFFECT = 65982, - SPELL_PERSISTENT_DIRT = 68048, + SPELL_PERSISTENT_DIRT = 68048, - SUMMON_SCARAB = NPC_SCARAB, - SUMMON_FROSTSPHERE = NPC_FROST_SPHERE, - SPELL_BERSERK = 26662, + SUMMON_SCARAB = NPC_SCARAB, + SUMMON_FROSTSPHERE = NPC_FROST_SPHERE, + SPELL_BERSERK = 26662, //Frost Sphere - SPELL_FROST_SPHERE = 67539, - SPELL_PERMAFROST = 66193, - SPELL_PERMAFROST_VISUAL = 65882, - SPELL_PERMAFROST_MODEL = 66185, + SPELL_FROST_SPHERE = 67539, + SPELL_PERMAFROST = 66193, + SPELL_PERMAFROST_VISUAL = 65882, + SPELL_PERMAFROST_MODEL = 66185, //Spike - SPELL_SUMMON_SPIKE = 66169, - SPELL_SPIKE_SPEED1 = 65920, - SPELL_SPIKE_TRAIL = 65921, - SPELL_SPIKE_SPEED2 = 65922, - SPELL_SPIKE_SPEED3 = 65923, - SPELL_SPIKE_FAIL = 66181, - SPELL_SPIKE_TELE = 66170 + SPELL_SUMMON_SPIKE = 66169, + SPELL_SPIKE_SPEED1 = 65920, + SPELL_SPIKE_TRAIL = 65921, + SPELL_SPIKE_SPEED2 = 65922, + SPELL_SPIKE_SPEED3 = 65923, + SPELL_SPIKE_FAIL = 66181, + SPELL_SPIKE_TELE = 66170 }; #define SPELL_PERMAFROST_HELPER RAID_MODE<uint32>(66193, 67855, 67856, 67857) @@ -841,6 +842,49 @@ class spell_impale : public SpellScriptLoader } }; +class spell_anubarak_leeching_swarm : public SpellScriptLoader +{ + public: + spell_anubarak_leeching_swarm() : SpellScriptLoader("spell_anubarak_leeching_swarm") { } + + class spell_anubarak_leeching_swarm_AuraScript : public AuraScript + { + PrepareAuraScript(spell_anubarak_leeching_swarm_AuraScript); + + bool Validate(SpellInfo const* /*spell*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_LEECHING_SWARM_DMG) || !sSpellMgr->GetSpellInfo(SPELL_LEECHING_SWARM_HEAL)) + return false; + return true; + } + + void HandleEffectPeriodic(AuraEffect const* aurEff) + { + Unit* caster = GetCaster(); + if (Unit* target = GetTarget()) + { + int32 lifeLeeched = target->CountPctFromCurHealth(aurEff->GetAmount()); + if (lifeLeeched < 250) + lifeLeeched = 250; + // Damage + caster->CastCustomSpell(target, SPELL_LEECHING_SWARM_DMG, &lifeLeeched, 0, 0, false); + // Heal + caster->CastCustomSpell(caster, SPELL_LEECHING_SWARM_HEAL, &lifeLeeched, 0, 0, false); + } + } + + void Register() + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_anubarak_leeching_swarm_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_anubarak_leeching_swarm_AuraScript(); + } +}; + void AddSC_boss_anubarak_trial() { new boss_anubarak_trial(); @@ -850,4 +894,5 @@ void AddSC_boss_anubarak_trial() new mob_frost_sphere(); new spell_impale(); + new spell_anubarak_leeching_swarm(); } diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index d4e3a9e677d..c1a3a432407 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -70,7 +70,7 @@ enum Yells SAY_FALRIC_INTRO_1 = 5, SAY_FALRIC_INTRO_2 = 6, - SAY_MARWYN_INTRO_1 = 0 + SAY_MARWYN_INTRO_1 = 4 }; enum Events diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp index 969a3621e8e..51eca327810 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -29,7 +29,7 @@ enum Yells SAY_GORKUN_INTRO_2 = 0, SAY_GORKUN_OUTRO_1 = 1, SAY_GORKUN_OUTRO_2 = 2, - + //Tyrannus SAY_AMBUSH_1 = 3, SAY_AMBUSH_2 = 4, @@ -43,7 +43,7 @@ enum Yells SAY_MARK_RIMEFANG_2 = 12, SAY_DARK_MIGHT_1 = 13, SAY_DARK_MIGHT_2 = 14, - + //Jaina SAY_JAYNA_OUTRO_3 = 3, SAY_JAYNA_OUTRO_4 = 4, diff --git a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp index 0018c58f4cb..8be4ac6b8b6 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp @@ -117,12 +117,16 @@ public: events.ScheduleEvent(EVENT_FEVER, urand(15000, 20000)); events.ScheduleEvent(EVENT_PHASE, 90000); events.ScheduleEvent(EVENT_ERUPT, 15000); + me->GetMotionMaster()->MoveChase(me->getVictim()); } else { float x, y, z, o; me->GetHomePosition(x, y, z, o); - me->NearTeleportTo(x, y, z, o); + me->NearTeleportTo(x, y, z, o - G3D::halfPi()); + me->GetMotionMaster()->Clear(); + me->GetMotionMaster()->MoveIdle(); + me->SetTarget(0); DoCastAOE(SPELL_PLAGUE_CLOUD); events.ScheduleEvent(EVENT_PHASE, 45000); events.ScheduleEvent(EVENT_ERUPT, 8000); diff --git a/src/server/scripts/Northrend/borean_tundra.cpp b/src/server/scripts/Northrend/borean_tundra.cpp index 628de0238e0..3f20a3d32bc 100644 --- a/src/server/scripts/Northrend/borean_tundra.cpp +++ b/src/server/scripts/Northrend/borean_tundra.cpp @@ -931,7 +931,7 @@ enum eThassarian SAY_LICH_1 = 0, SAY_LICH_2 = 1, SAY_LICH_3 = 2, - + SAY_ARLOS_1 = 0, SAY_ARLOS_2 = 1, diff --git a/src/server/scripts/Northrend/sholazar_basin.cpp b/src/server/scripts/Northrend/sholazar_basin.cpp index c0635f897d9..5bf45452d34 100644 --- a/src/server/scripts/Northrend/sholazar_basin.cpp +++ b/src/server/scripts/Northrend/sholazar_basin.cpp @@ -18,7 +18,7 @@ /* ScriptData SDName: Sholazar_Basin SD%Complete: 100 -SDComment: Quest support: 12570, 12573, 12621. +SDComment: Quest support: 12570, 12573, 12621, 12726 SDCategory: Sholazar_Basin EndScriptData */ @@ -26,6 +26,7 @@ EndScriptData */ npc_injured_rainspeaker_oracle npc_vekjik avatar_of_freya +npc_haiphoon (Quest: "Song of Wind and Water") EndContentData */ #include "ScriptMgr.h" @@ -34,6 +35,8 @@ EndContentData */ #include "ScriptedEscortAI.h" #include "SpellScript.h" #include "SpellAuras.h" +#include "Vehicle.h" +#include "CombatAI.h" #include "Player.h" /*###### @@ -984,6 +987,52 @@ public: } }; +/*###### +## Quest: Song of Wind and Water ID: 12726 +######*/ +/*This quest precisly needs core script since battle vehicles are not well integrated with SAI, +may be easily converted to SAI when they get.*/ +enum SongOfWindAndWater +{ + // Spells + SPELL_DEVOUR_WIND = 52862, + SPELL_DEVOUR_WATER = 52864, + // NPCs + NPC_HAIPHOON_WATER = 28999, + NPC_HAIPHOON_AIR = 28985 +}; + +class npc_haiphoon : public CreatureScript +{ +public: + npc_haiphoon() : CreatureScript("npc_haiphoon") { } + + struct npc_haiphoonAI : public VehicleAI + { + npc_haiphoonAI(Creature* creature) : VehicleAI(creature) { } + + void SpellHitTarget(Unit* target, SpellInfo const* spell) + { + if (target == me) + return; + + if (spell->Id == SPELL_DEVOUR_WIND && me->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + me->UpdateEntry(NPC_HAIPHOON_AIR); + } + else if (spell->Id == SPELL_DEVOUR_WATER && me->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + me->UpdateEntry(NPC_HAIPHOON_WATER); + } + } + }; + + CreatureAI* GetAI(Creature* creature) const + { + return new npc_haiphoonAI(creature); + } +}; + void AddSC_sholazar_basin() { new npc_injured_rainspeaker_oracle(); @@ -995,4 +1044,5 @@ void AddSC_sholazar_basin() new npc_jungle_punch_target(); new spell_q12620_the_lifewarden_wrath(); new spell_q12589_shoot_rjr(); + new npc_haiphoon(); } diff --git a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp index 5a9b6e5a94e..dcbbb76162d 100644 --- a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp +++ b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp @@ -37,7 +37,7 @@ enum IllidariCouncil SAY_GATH_SLAY = 4, SAY_GATH_COMNT = 5, SAY_GATH_DEATH = 6, - + SAY_MALA_SPECIAL1 = 2, SAY_MALA_SPECIAL2 = 3, SAY_MALA_SLAY = 4, diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp index 6fe1e86551a..157473463af 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp @@ -387,7 +387,7 @@ public: { if (victim->GetTypeId() != TYPEID_PLAYER) return; - + Talk(DemonForm ? SAY_DEMON_SLAY : SAY_NIGHTELF_SLAY); } diff --git a/src/server/scripts/Outland/netherstorm.cpp b/src/server/scripts/Outland/netherstorm.cpp index 96f707b06f1..7bec3674a84 100644 --- a/src/server/scripts/Outland/netherstorm.cpp +++ b/src/server/scripts/Outland/netherstorm.cpp @@ -247,7 +247,7 @@ public: if (someplayer) { Unit* u = Unit::GetUnit(*me, someplayer); - if (u && u->GetTypeId() == TYPEID_PLAYER) + if (u && u->GetTypeId() == TYPEID_PLAYER) Talk(EMOTE_START, u->GetGUID()); } Event_Timer = 60000; @@ -375,7 +375,7 @@ enum eCommanderDawnforgeData SAY_PATHALEON_CULATOR_IMAGE_2 = 1, SAY_PATHALEON_CULATOR_IMAGE_2_1 = 2, SAY_PATHALEON_CULATOR_IMAGE_2_2 = 3, - + QUEST_INFO_GATHERING = 10198, SPELL_SUNFURY_DISGUISE = 34603, }; @@ -683,7 +683,7 @@ class npc_professor_dabiri : public CreatureScript public: npc_professor_dabiri() : CreatureScript("npc_professor_dabiri") { } - //OnQuestAccept: + //OnQuestAccept: //if (quest->GetQuestId() == QUEST_DIMENSIUS) //creature->AI()->Talk(WHISPER_DABIRI, player->GetGUID()); diff --git a/src/server/scripts/Outland/shadowmoon_valley.cpp b/src/server/scripts/Outland/shadowmoon_valley.cpp index 55fce0c4a8d..65a4dbe92a5 100644 --- a/src/server/scripts/Outland/shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/shadowmoon_valley.cpp @@ -1495,8 +1495,8 @@ public: if (!Announced && AnnounceTimer <= diff) { Announced = true; - } - else + } + else AnnounceTimer -= diff; if (WaveTimer <= diff) diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index b54cc3cdf55..c8ae44d9cd9 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -367,59 +367,9 @@ class spell_gen_remove_flight_auras : public SpellScriptLoader } }; -// 66118 Leeching Swarm -enum LeechingSwarmSpells -{ - SPELL_LEECHING_SWARM_DMG = 66240, - SPELL_LEECHING_SWARM_HEAL = 66125, -}; - -class spell_gen_leeching_swarm : public SpellScriptLoader -{ - public: - spell_gen_leeching_swarm() : SpellScriptLoader("spell_gen_leeching_swarm") { } - - class spell_gen_leeching_swarm_AuraScript : public AuraScript - { - PrepareAuraScript(spell_gen_leeching_swarm_AuraScript); - - bool Validate(SpellInfo const* /*spellEntry*/) - { - if (!sSpellMgr->GetSpellInfo(SPELL_LEECHING_SWARM_DMG) || !sSpellMgr->GetSpellInfo(SPELL_LEECHING_SWARM_HEAL)) - return false; - return true; - } - - void HandleEffectPeriodic(AuraEffect const* aurEff) - { - Unit* caster = GetCaster(); - if (Unit* target = GetTarget()) - { - int32 lifeLeeched = target->CountPctFromCurHealth(aurEff->GetAmount()); - if (lifeLeeched < 250) - lifeLeeched = 250; - // Damage - caster->CastCustomSpell(target, SPELL_LEECHING_SWARM_DMG, &lifeLeeched, 0, 0, false); - // Heal - caster->CastCustomSpell(caster, SPELL_LEECHING_SWARM_HEAL, &lifeLeeched, 0, 0, false); - } - } - - void Register() - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_leeching_swarm_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); - } - }; - - AuraScript* GetAuraScript() const - { - return new spell_gen_leeching_swarm_AuraScript(); - } -}; - enum EluneCandle { - NPC_OMEN = 15467, + NPC_OMEN = 15467, SPELL_ELUNE_CANDLE_OMEN_HEAD = 26622, SPELL_ELUNE_CANDLE_OMEN_CHEST = 26624, @@ -483,128 +433,6 @@ class spell_gen_elune_candle : public SpellScriptLoader } }; -// 24750 Trick -enum TrickSpells -{ - SPELL_PIRATE_COSTUME_MALE = 24708, - SPELL_PIRATE_COSTUME_FEMALE = 24709, - SPELL_NINJA_COSTUME_MALE = 24710, - SPELL_NINJA_COSTUME_FEMALE = 24711, - SPELL_LEPER_GNOME_COSTUME_MALE = 24712, - SPELL_LEPER_GNOME_COSTUME_FEMALE = 24713, - SPELL_SKELETON_COSTUME = 24723, - SPELL_GHOST_COSTUME_MALE = 24735, - SPELL_GHOST_COSTUME_FEMALE = 24736, - SPELL_TRICK_BUFF = 24753, -}; - -class spell_gen_trick : public SpellScriptLoader -{ - public: - spell_gen_trick() : SpellScriptLoader("spell_gen_trick") {} - - class spell_gen_trick_SpellScript : public SpellScript - { - PrepareSpellScript(spell_gen_trick_SpellScript); - bool Validate(SpellInfo const* /*spellEntry*/) - { - if (!sSpellMgr->GetSpellInfo(SPELL_PIRATE_COSTUME_MALE) || !sSpellMgr->GetSpellInfo(SPELL_PIRATE_COSTUME_FEMALE) || !sSpellMgr->GetSpellInfo(SPELL_NINJA_COSTUME_MALE) - || !sSpellMgr->GetSpellInfo(SPELL_NINJA_COSTUME_FEMALE) || !sSpellMgr->GetSpellInfo(SPELL_LEPER_GNOME_COSTUME_MALE) || !sSpellMgr->GetSpellInfo(SPELL_LEPER_GNOME_COSTUME_FEMALE) - || !sSpellMgr->GetSpellInfo(SPELL_SKELETON_COSTUME) || !sSpellMgr->GetSpellInfo(SPELL_GHOST_COSTUME_MALE) || !sSpellMgr->GetSpellInfo(SPELL_GHOST_COSTUME_FEMALE) || !sSpellMgr->GetSpellInfo(SPELL_TRICK_BUFF)) - return false; - return true; - } - - void HandleScript(SpellEffIndex /*effIndex*/) - { - Unit* caster = GetCaster(); - if (Player* target = GetHitPlayer()) - { - uint8 gender = target->getGender(); - uint32 spellId = SPELL_TRICK_BUFF; - switch (urand(0, 5)) - { - case 1: - spellId = gender ? SPELL_LEPER_GNOME_COSTUME_FEMALE : SPELL_LEPER_GNOME_COSTUME_MALE; - break; - case 2: - spellId = gender ? SPELL_PIRATE_COSTUME_FEMALE : SPELL_PIRATE_COSTUME_MALE; - break; - case 3: - spellId = gender ? SPELL_GHOST_COSTUME_FEMALE : SPELL_GHOST_COSTUME_MALE; - break; - case 4: - spellId = gender ? SPELL_NINJA_COSTUME_FEMALE : SPELL_NINJA_COSTUME_MALE; - break; - case 5: - spellId = SPELL_SKELETON_COSTUME; - break; - default: - break; - } - - caster->CastSpell(target, spellId, true, NULL); - } - } - - void Register() - { - OnEffectHitTarget += SpellEffectFn(spell_gen_trick_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const - { - return new spell_gen_trick_SpellScript(); - } -}; - -// 24751 Trick or Treat -enum TrickOrTreatSpells -{ - SPELL_TRICK = 24714, - SPELL_TREAT = 24715, - SPELL_TRICKED_OR_TREATED = 24755 -}; - -class spell_gen_trick_or_treat : public SpellScriptLoader -{ - public: - spell_gen_trick_or_treat() : SpellScriptLoader("spell_gen_trick_or_treat") {} - - class spell_gen_trick_or_treat_SpellScript : public SpellScript - { - PrepareSpellScript(spell_gen_trick_or_treat_SpellScript); - - bool Validate(SpellInfo const* /*spellEntry*/) - { - if (!sSpellMgr->GetSpellInfo(SPELL_TRICK) || !sSpellMgr->GetSpellInfo(SPELL_TREAT) || !sSpellMgr->GetSpellInfo(SPELL_TRICKED_OR_TREATED)) - return false; - return true; - } - - void HandleScript(SpellEffIndex /*effIndex*/) - { - Unit* caster = GetCaster(); - if (Player* target = GetHitPlayer()) - { - caster->CastSpell(target, roll_chance_i(50) ? SPELL_TRICK : SPELL_TREAT, true, NULL); - caster->CastSpell(target, SPELL_TRICKED_OR_TREATED, true, NULL); - } - } - - void Register() - { - OnEffectHitTarget += SpellEffectFn(spell_gen_trick_or_treat_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const - { - return new spell_gen_trick_or_treat_SpellScript(); - } -}; - class spell_creature_permanent_feign_death : public SpellScriptLoader { public: @@ -3397,12 +3225,9 @@ void AddSC_generic_spell_scripts() new spell_gen_av_drekthar_presence(); new spell_gen_burn_brutallus(); new spell_gen_cannibalize(); - new spell_gen_leeching_swarm(); new spell_gen_parachute(); new spell_gen_pet_summoned(); new spell_gen_remove_flight_auras(); - new spell_gen_trick(); - new spell_gen_trick_or_treat(); new spell_creature_permanent_feign_death(); new spell_pvp_trinket_wotf_shared_cd(); new spell_gen_animal_blood(); diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp index 5b1cbe0c36a..4f48c311612 100644 --- a/src/server/scripts/Spells/spell_holiday.cpp +++ b/src/server/scripts/Spells/spell_holiday.cpp @@ -110,7 +110,176 @@ class spell_love_is_in_the_air_romantic_picnic : public SpellScriptLoader } }; +// 24750 Trick +enum TrickSpells +{ + SPELL_PIRATE_COSTUME_MALE = 24708, + SPELL_PIRATE_COSTUME_FEMALE = 24709, + SPELL_NINJA_COSTUME_MALE = 24710, + SPELL_NINJA_COSTUME_FEMALE = 24711, + SPELL_LEPER_GNOME_COSTUME_MALE = 24712, + SPELL_LEPER_GNOME_COSTUME_FEMALE = 24713, + SPELL_SKELETON_COSTUME = 24723, + SPELL_GHOST_COSTUME_MALE = 24735, + SPELL_GHOST_COSTUME_FEMALE = 24736, + SPELL_TRICK_BUFF = 24753, +}; + +class spell_hallow_end_trick : public SpellScriptLoader +{ + public: + spell_hallow_end_trick() : SpellScriptLoader("spell_hallow_end_trick") { } + + class spell_hallow_end_trick_SpellScript : public SpellScript + { + PrepareSpellScript(spell_hallow_end_trick_SpellScript); + bool Validate(SpellInfo const* /*spell*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_PIRATE_COSTUME_MALE) || !sSpellMgr->GetSpellInfo(SPELL_PIRATE_COSTUME_FEMALE) || !sSpellMgr->GetSpellInfo(SPELL_NINJA_COSTUME_MALE) + || !sSpellMgr->GetSpellInfo(SPELL_NINJA_COSTUME_FEMALE) || !sSpellMgr->GetSpellInfo(SPELL_LEPER_GNOME_COSTUME_MALE) || !sSpellMgr->GetSpellInfo(SPELL_LEPER_GNOME_COSTUME_FEMALE) + || !sSpellMgr->GetSpellInfo(SPELL_SKELETON_COSTUME) || !sSpellMgr->GetSpellInfo(SPELL_GHOST_COSTUME_MALE) || !sSpellMgr->GetSpellInfo(SPELL_GHOST_COSTUME_FEMALE) || !sSpellMgr->GetSpellInfo(SPELL_TRICK_BUFF)) + return false; + return true; + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + if (Player* target = GetHitPlayer()) + { + uint8 gender = target->getGender(); + uint32 spellId = SPELL_TRICK_BUFF; + switch (urand(0, 5)) + { + case 1: + spellId = gender ? SPELL_LEPER_GNOME_COSTUME_FEMALE : SPELL_LEPER_GNOME_COSTUME_MALE; + break; + case 2: + spellId = gender ? SPELL_PIRATE_COSTUME_FEMALE : SPELL_PIRATE_COSTUME_MALE; + break; + case 3: + spellId = gender ? SPELL_GHOST_COSTUME_FEMALE : SPELL_GHOST_COSTUME_MALE; + break; + case 4: + spellId = gender ? SPELL_NINJA_COSTUME_FEMALE : SPELL_NINJA_COSTUME_MALE; + break; + case 5: + spellId = SPELL_SKELETON_COSTUME; + break; + default: + break; + } + + caster->CastSpell(target, spellId, true, NULL); + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_hallow_end_trick_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_hallow_end_trick_SpellScript(); + } +}; + +// 24751 Trick or Treat +enum TrickOrTreatSpells +{ + SPELL_TRICK = 24714, + SPELL_TREAT = 24715, + SPELL_TRICKED_OR_TREATED = 24755, + SPELL_TRICKY_TREAT_SPEED = 42919, + SPELL_TRICKY_TREAT_TRIGGER = 42965, + SPELL_UPSET_TUMMY = 42966 +}; + +class spell_hallow_end_trick_or_treat : public SpellScriptLoader +{ + public: + spell_hallow_end_trick_or_treat() : SpellScriptLoader("spell_hallow_end_trick_or_treat") {} + + class spell_hallow_end_trick_or_treat_SpellScript : public SpellScript + { + PrepareSpellScript(spell_hallow_end_trick_or_treat_SpellScript); + + bool Validate(SpellInfo const* /*spell*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_TRICK) || !sSpellMgr->GetSpellInfo(SPELL_TREAT) || !sSpellMgr->GetSpellInfo(SPELL_TRICKED_OR_TREATED)) + return false; + return true; + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + if (Player* target = GetHitPlayer()) + { + caster->CastSpell(target, roll_chance_i(50) ? SPELL_TRICK : SPELL_TREAT, true, NULL); + caster->CastSpell(target, SPELL_TRICKED_OR_TREATED, true, NULL); + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_hallow_end_trick_or_treat_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_hallow_end_trick_or_treat_SpellScript(); + } +}; + +class spell_hallow_end_tricky_treat : public SpellScriptLoader +{ + public: + spell_hallow_end_tricky_treat() : SpellScriptLoader("spell_hallow_end_tricky_treat") { } + + class spell_hallow_end_tricky_treat_SpellScript : public SpellScript + { + PrepareSpellScript(spell_hallow_end_tricky_treat_SpellScript); + + bool Validate(SpellInfo const* /*spell*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_TRICKY_TREAT_SPEED)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_TRICKY_TREAT_TRIGGER)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_UPSET_TUMMY)) + return false; + return true; + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + if (caster->HasAura(SPELL_TRICKY_TREAT_TRIGGER) && caster->GetAuraCount(SPELL_TRICKY_TREAT_SPEED) > 3 && roll_chance_i(33)) + caster->CastSpell(caster, SPELL_UPSET_TUMMY, true); + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_hallow_end_tricky_treat_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_hallow_end_tricky_treat_SpellScript(); + } +}; + void AddSC_holiday_spell_scripts() { + // Love is in the Air new spell_love_is_in_the_air_romantic_picnic(); + // Hallow's End + new spell_hallow_end_trick(); + new spell_hallow_end_trick_or_treat(); + new spell_hallow_end_tricky_treat(); } diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index e52034ed2d9..a5122ff5f08 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -706,14 +706,14 @@ class spell_hun_tame_beast : public SpellScriptLoader } }; -class spell_hun_furious_howl : public SpellScriptLoader +class spell_hun_target_only_pet_and_owner : public SpellScriptLoader { public: - spell_hun_furious_howl() : SpellScriptLoader("spell_hun_furious_howl") { } + spell_hun_target_only_pet_and_owner() : SpellScriptLoader("spell_hun_target_only_pet_and_owner") { } - class spell_hun_furious_howl_SpellScript : public SpellScript + class spell_hun_target_only_pet_and_owner_SpellScript : public SpellScript { - PrepareSpellScript(spell_hun_furious_howl_SpellScript); + PrepareSpellScript(spell_hun_target_only_pet_and_owner_SpellScript); void FilterTargets(std::list<WorldObject*>& targets) { @@ -725,14 +725,14 @@ class spell_hun_furious_howl : public SpellScriptLoader void Register() { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_hun_furious_howl_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_PARTY); - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_hun_furious_howl_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_CASTER_AREA_PARTY); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_hun_target_only_pet_and_owner_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_PARTY); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_hun_target_only_pet_and_owner_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_CASTER_AREA_PARTY); } }; SpellScript* GetSpellScript() const { - return new spell_hun_furious_howl_SpellScript(); + return new spell_hun_target_only_pet_and_owner_SpellScript(); } }; @@ -752,5 +752,5 @@ void AddSC_hunter_spell_scripts() new spell_hun_misdirection_proc(); new spell_hun_disengage(); new spell_hun_tame_beast(); - new spell_hun_furious_howl(); + new spell_hun_target_only_pet_and_owner(); } diff --git a/src/server/scripts/World/npc_professions.cpp b/src/server/scripts/World/npc_professions.cpp index a04912d0828..a5f6b4cfecf 100644 --- a/src/server/scripts/World/npc_professions.cpp +++ b/src/server/scripts/World/npc_professions.cpp @@ -785,7 +785,7 @@ enum eEngineeringTrinkets SPELL_TO_TOSHLEY = 36955, }; -#define GOSSIP_ITEM_ZAP "[PH] Unknown" +#define GOSSIP_ITEM_ZAP "This Dimensional Imploder sounds dangerous! How can I make one?" #define GOSSIP_ITEM_JHORDY "I must build a beacon for this marvelous device!" #define GOSSIP_ITEM_KABLAM "[PH] Unknown" @@ -819,7 +819,7 @@ public: switch (creature->GetEntry()) { case NPC_ZAP: - canLearn = CanLearn(player, 7249, 0, 260, S_GOBLIN, SPELL_TO_EVERLOOK, npcTextId); + canLearn = CanLearn(player, 6092, 0, 260, S_GOBLIN, SPELL_TO_EVERLOOK, npcTextId); if (canLearn) gossipItem = GOSSIP_ITEM_ZAP; break; diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index 96f7db23281..936052fd8ad 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -913,7 +913,7 @@ public: struct npc_garments_of_questsAI : public npc_escortAI { - npc_garments_of_questsAI(Creature* creature) : npc_escortAI(creature) + npc_garments_of_questsAI(Creature* creature) : npc_escortAI(creature) { Reset(); } |
