Some more consistency-renaming of script-zones

--HG--
branch : trunk
rename : src/server/scripts/EasternKingdoms/alterac_valley/alterac_valley.cpp => src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
rename : src/server/scripts/EasternKingdoms/alterac_valley/boss_balinda.cpp => src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp
rename : src/server/scripts/EasternKingdoms/alterac_valley/boss_drekthar.cpp => src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp
rename : src/server/scripts/EasternKingdoms/alterac_valley/boss_galvangar.cpp => src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp
rename : src/server/scripts/EasternKingdoms/alterac_valley/boss_vanndar.cpp => src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_depths/blackrock_depths.cpp => src/server/scripts/EasternKingdoms/BlackrockDepths/blackrock_depths.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_depths/blackrock_depths.h => src/server/scripts/EasternKingdoms/BlackrockDepths/blackrock_depths.h
rename : src/server/scripts/EasternKingdoms/blackrock_depths/boss_ambassador_flamelash.cpp => src/server/scripts/EasternKingdoms/BlackrockDepths/boss_ambassador_flamelash.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_depths/boss_anubshiah.cpp => src/server/scripts/EasternKingdoms/BlackrockDepths/boss_anubshiah.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_depths/boss_emperor_dagran_thaurissan.cpp => src/server/scripts/EasternKingdoms/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_depths/boss_general_angerforge.cpp => src/server/scripts/EasternKingdoms/BlackrockDepths/boss_general_angerforge.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_depths/boss_gorosh_the_dervish.cpp => src/server/scripts/EasternKingdoms/BlackrockDepths/boss_gorosh_the_dervish.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_depths/boss_grizzle.cpp => src/server/scripts/EasternKingdoms/BlackrockDepths/boss_grizzle.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_depths/boss_high_interrogator_gerstahn.cpp => src/server/scripts/EasternKingdoms/BlackrockDepths/boss_high_interrogator_gerstahn.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_depths/boss_magmus.cpp => src/server/scripts/EasternKingdoms/BlackrockDepths/boss_magmus.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_depths/boss_moira_bronzebeard.cpp => src/server/scripts/EasternKingdoms/BlackrockDepths/boss_moira_bronzebeard.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_depths/boss_tomb_of_seven.cpp => src/server/scripts/EasternKingdoms/BlackrockDepths/boss_tomb_of_seven.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_depths/instance_blackrock_depths.cpp => src/server/scripts/EasternKingdoms/BlackrockDepths/instance_blackrock_depths.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_spire/blackrock_spire.cpp => src/server/scripts/EasternKingdoms/BlackrockSpire/blackrock_spire.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_spire/blackrock_spire.h => src/server/scripts/EasternKingdoms/BlackrockSpire/blackrock_spire.h
rename : src/server/scripts/EasternKingdoms/blackrock_spire/boss_drakkisath.cpp => src/server/scripts/EasternKingdoms/BlackrockSpire/boss_drakkisath.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_spire/boss_gyth.cpp => src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_spire/boss_halycon.cpp => src/server/scripts/EasternKingdoms/BlackrockSpire/boss_halycon.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_spire/boss_highlord_omokk.cpp => src/server/scripts/EasternKingdoms/BlackrockSpire/boss_highlord_omokk.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_spire/boss_mother_smolderweb.cpp => src/server/scripts/EasternKingdoms/BlackrockSpire/boss_mother_smolderweb.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_spire/boss_overlord_wyrmthalak.cpp => src/server/scripts/EasternKingdoms/BlackrockSpire/boss_overlord_wyrmthalak.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_spire/boss_pyroguard_emberseer.cpp => src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_spire/boss_quartermaster_zigris.cpp => src/server/scripts/EasternKingdoms/BlackrockSpire/boss_quartermaster_zigris.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_spire/boss_rend_blackhand.cpp => src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_spire/boss_shadow_hunter_voshgajin.cpp => src/server/scripts/EasternKingdoms/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_spire/boss_the_beast.cpp => src/server/scripts/EasternKingdoms/BlackrockSpire/boss_the_beast.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_spire/boss_warmaster_voone.cpp => src/server/scripts/EasternKingdoms/BlackrockSpire/boss_warmaster_voone.cpp
rename : src/server/scripts/EasternKingdoms/blackrock_spire/instance_blackrock_spire.cpp => src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp
rename : src/server/scripts/EasternKingdoms/blackwing_lair/boss_broodlord_lashlayer.cpp => src/server/scripts/EasternKingdoms/BlackwingLair/boss_broodlord_lashlayer.cpp
rename : src/server/scripts/EasternKingdoms/blackwing_lair/boss_chromaggus.cpp => src/server/scripts/EasternKingdoms/BlackwingLair/boss_chromaggus.cpp
rename : src/server/scripts/EasternKingdoms/blackwing_lair/boss_ebonroc.cpp => src/server/scripts/EasternKingdoms/BlackwingLair/boss_ebonroc.cpp
rename : src/server/scripts/EasternKingdoms/blackwing_lair/boss_firemaw.cpp => src/server/scripts/EasternKingdoms/BlackwingLair/boss_firemaw.cpp
rename : src/server/scripts/EasternKingdoms/blackwing_lair/boss_flamegor.cpp => src/server/scripts/EasternKingdoms/BlackwingLair/boss_flamegor.cpp
rename : src/server/scripts/EasternKingdoms/blackwing_lair/boss_nefarian.cpp => src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp
rename : src/server/scripts/EasternKingdoms/blackwing_lair/boss_razorgore.cpp => src/server/scripts/EasternKingdoms/BlackwingLair/boss_razorgore.cpp
rename : src/server/scripts/EasternKingdoms/blackwing_lair/boss_vaelastrasz.cpp => src/server/scripts/EasternKingdoms/BlackwingLair/boss_vaelastrasz.cpp
rename : src/server/scripts/EasternKingdoms/blackwing_lair/boss_victor_nefarius.cpp => src/server/scripts/EasternKingdoms/BlackwingLair/boss_victor_nefarius.cpp
rename : src/server/scripts/EasternKingdoms/blackwing_lair/instance_blackwing_lair.cpp => src/server/scripts/EasternKingdoms/BlackwingLair/instance_blackwing_lair.cpp
rename : src/server/scripts/EasternKingdoms/deadmines/boss_mr_smite.cpp => src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp
rename : src/server/scripts/EasternKingdoms/deadmines/deadmines.cpp => src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp
rename : src/server/scripts/EasternKingdoms/deadmines/deadmines.h => src/server/scripts/EasternKingdoms/Deadmines/deadmines.h
rename : src/server/scripts/EasternKingdoms/deadmines/instance_deadmines.cpp => src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
rename : src/server/scripts/EasternKingdoms/gnomeregan/gnomeregan.cpp => src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
rename : src/server/scripts/EasternKingdoms/gnomeregan/gnomeregan.h => src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.h
rename : src/server/scripts/EasternKingdoms/gnomeregan/instance_gnomeregan.cpp => src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp
rename : src/server/scripts/EasternKingdoms/karazhan/boss_curator.cpp => src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp
rename : src/server/scripts/EasternKingdoms/karazhan/boss_maiden_of_virtue.cpp => src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp
rename : src/server/scripts/EasternKingdoms/karazhan/boss_midnight.cpp => src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
rename : src/server/scripts/EasternKingdoms/karazhan/boss_moroes.cpp => src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp
rename : src/server/scripts/EasternKingdoms/karazhan/boss_netherspite.cpp => src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp
rename : src/server/scripts/EasternKingdoms/karazhan/boss_nightbane.cpp => src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
rename : src/server/scripts/EasternKingdoms/karazhan/boss_prince_malchezaar.cpp => src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
rename : src/server/scripts/EasternKingdoms/karazhan/boss_shade_of_aran.cpp => src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
rename : src/server/scripts/EasternKingdoms/karazhan/boss_terestian_illhoof.cpp => src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
rename : src/server/scripts/EasternKingdoms/karazhan/bosses_opera.cpp => src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
rename : src/server/scripts/EasternKingdoms/karazhan/instance_karazhan.cpp => src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp
rename : src/server/scripts/EasternKingdoms/karazhan/karazhan.cpp => src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
rename : src/server/scripts/EasternKingdoms/karazhan/karazhan.h => src/server/scripts/EasternKingdoms/Karazhan/karazhan.h
rename : src/server/scripts/EasternKingdoms/magisters_terrace/boss_felblood_kaelthas.cpp => src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
rename : src/server/scripts/EasternKingdoms/magisters_terrace/boss_priestess_delrissa.cpp => src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
rename : src/server/scripts/EasternKingdoms/magisters_terrace/boss_selin_fireheart.cpp => src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
rename : src/server/scripts/EasternKingdoms/magisters_terrace/boss_vexallus.cpp => src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp
rename : src/server/scripts/EasternKingdoms/magisters_terrace/instance_magisters_terrace.cpp => src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp
rename : src/server/scripts/EasternKingdoms/magisters_terrace/magisters_terrace.cpp => src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp
rename : src/server/scripts/EasternKingdoms/magisters_terrace/magisters_terrace.h => src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h
rename : src/server/scripts/EasternKingdoms/molten_core/boss_baron_geddon.cpp => src/server/scripts/EasternKingdoms/MoltenCore/boss_baron_geddon.cpp
rename : src/server/scripts/EasternKingdoms/molten_core/boss_garr.cpp => src/server/scripts/EasternKingdoms/MoltenCore/boss_garr.cpp
rename : src/server/scripts/EasternKingdoms/molten_core/boss_gehennas.cpp => src/server/scripts/EasternKingdoms/MoltenCore/boss_gehennas.cpp
rename : src/server/scripts/EasternKingdoms/molten_core/boss_golemagg.cpp => src/server/scripts/EasternKingdoms/MoltenCore/boss_golemagg.cpp
rename : src/server/scripts/EasternKingdoms/molten_core/boss_lucifron.cpp => src/server/scripts/EasternKingdoms/MoltenCore/boss_lucifron.cpp
rename : src/server/scripts/EasternKingdoms/molten_core/boss_magmadar.cpp => src/server/scripts/EasternKingdoms/MoltenCore/boss_magmadar.cpp
rename : src/server/scripts/EasternKingdoms/molten_core/boss_majordomo_executus.cpp => src/server/scripts/EasternKingdoms/MoltenCore/boss_majordomo_executus.cpp
rename : src/server/scripts/EasternKingdoms/molten_core/boss_ragnaros.cpp => src/server/scripts/EasternKingdoms/MoltenCore/boss_ragnaros.cpp
rename : src/server/scripts/EasternKingdoms/molten_core/boss_shazzrah.cpp => src/server/scripts/EasternKingdoms/MoltenCore/boss_shazzrah.cpp
rename : src/server/scripts/EasternKingdoms/molten_core/boss_sulfuron_harbinger.cpp => src/server/scripts/EasternKingdoms/MoltenCore/boss_sulfuron_harbinger.cpp
rename : src/server/scripts/EasternKingdoms/molten_core/instance_molten_core.cpp => src/server/scripts/EasternKingdoms/MoltenCore/instance_molten_core.cpp
rename : src/server/scripts/EasternKingdoms/molten_core/molten_core.cpp => src/server/scripts/EasternKingdoms/MoltenCore/molten_core.cpp
rename : src/server/scripts/EasternKingdoms/molten_core/molten_core.h => src/server/scripts/EasternKingdoms/MoltenCore/molten_core.h
rename : src/server/scripts/EasternKingdoms/scarlet_enclave/chapter1.cpp => src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
rename : src/server/scripts/EasternKingdoms/scarlet_enclave/chapter2.cpp => src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
rename : src/server/scripts/EasternKingdoms/scarlet_enclave/chapter5.cpp => src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
rename : src/server/scripts/EasternKingdoms/scarlet_enclave/the_scarlet_enclave.cpp => src/server/scripts/EasternKingdoms/ScarletEnclave/the_scarlet_enclave.cpp
rename : src/server/scripts/EasternKingdoms/scarlet_monastery/boss_arcanist_doan.cpp => src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp
rename : src/server/scripts/EasternKingdoms/scarlet_monastery/boss_azshir_the_sleepless.cpp => src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp
rename : src/server/scripts/EasternKingdoms/scarlet_monastery/boss_bloodmage_thalnos.cpp => src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp
rename : src/server/scripts/EasternKingdoms/scarlet_monastery/boss_headless_horseman.cpp => src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
rename : src/server/scripts/EasternKingdoms/scarlet_monastery/boss_herod.cpp => src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp
rename : src/server/scripts/EasternKingdoms/scarlet_monastery/boss_high_inquisitor_fairbanks.cpp => src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp
rename : src/server/scripts/EasternKingdoms/scarlet_monastery/boss_houndmaster_loksey.cpp => src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp
rename : src/server/scripts/EasternKingdoms/scarlet_monastery/boss_interrogator_vishas.cpp => src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp
rename : src/server/scripts/EasternKingdoms/scarlet_monastery/boss_mograine_and_whitemane.cpp => src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp
rename : src/server/scripts/EasternKingdoms/scarlet_monastery/boss_scorn.cpp => src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp
rename : src/server/scripts/EasternKingdoms/scarlet_monastery/instance_scarlet_monastery.cpp => src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp
rename : src/server/scripts/EasternKingdoms/scarlet_monastery/scarlet_monastery.h => src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h
rename : src/server/scripts/EasternKingdoms/scholomance/boss_darkmaster_gandling.cpp => src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
rename : src/server/scripts/EasternKingdoms/scholomance/boss_death_knight_darkreaver.cpp => src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp
rename : src/server/scripts/EasternKingdoms/scholomance/boss_doctor_theolen_krastinov.cpp => src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
rename : src/server/scripts/EasternKingdoms/scholomance/boss_illucia_barov.cpp => src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
rename : src/server/scripts/EasternKingdoms/scholomance/boss_instructor_malicia.cpp => src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
rename : src/server/scripts/EasternKingdoms/scholomance/boss_jandice_barov.cpp => src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
rename : src/server/scripts/EasternKingdoms/scholomance/boss_kormok.cpp => src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
rename : src/server/scripts/EasternKingdoms/scholomance/boss_lord_alexei_barov.cpp => src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
rename : src/server/scripts/EasternKingdoms/scholomance/boss_lorekeeper_polkelt.cpp => src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
rename : src/server/scripts/EasternKingdoms/scholomance/boss_ras_frostwhisper.cpp => src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
rename : src/server/scripts/EasternKingdoms/scholomance/boss_the_ravenian.cpp => src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
rename : src/server/scripts/EasternKingdoms/scholomance/boss_vectus.cpp => src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
rename : src/server/scripts/EasternKingdoms/scholomance/instance_scholomance.cpp => src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
rename : src/server/scripts/EasternKingdoms/scholomance/scholomance.h => src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
rename : src/server/scripts/EasternKingdoms/shadowfang_keep/instance_shadowfang_keep.cpp => src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp
rename : src/server/scripts/EasternKingdoms/shadowfang_keep/shadowfang_keep.cpp => src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp
rename : src/server/scripts/EasternKingdoms/shadowfang_keep/shadowfang_keep.h => src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h
rename : src/server/scripts/EasternKingdoms/stratholme/boss_baron_rivendare.cpp => src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp
rename : src/server/scripts/EasternKingdoms/stratholme/boss_baroness_anastari.cpp => src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp
rename : src/server/scripts/EasternKingdoms/stratholme/boss_cannon_master_willey.cpp => src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp
rename : src/server/scripts/EasternKingdoms/stratholme/boss_dathrohan_balnazzar.cpp => src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
rename : src/server/scripts/EasternKingdoms/stratholme/boss_magistrate_barthilas.cpp => src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp
rename : src/server/scripts/EasternKingdoms/stratholme/boss_maleki_the_pallid.cpp => src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp
rename : src/server/scripts/EasternKingdoms/stratholme/boss_nerubenkan.cpp => src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp
rename : src/server/scripts/EasternKingdoms/stratholme/boss_order_of_silver_hand.cpp => src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp
rename : src/server/scripts/EasternKingdoms/stratholme/boss_postmaster_malown.cpp => src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp
rename : src/server/scripts/EasternKingdoms/stratholme/boss_ramstein_the_gorger.cpp => src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp
rename : src/server/scripts/EasternKingdoms/stratholme/boss_timmy_the_cruel.cpp => src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp
rename : src/server/scripts/EasternKingdoms/stratholme/instance_stratholme.cpp => src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
rename : src/server/scripts/EasternKingdoms/stratholme/stratholme.cpp => src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp
rename : src/server/scripts/EasternKingdoms/stratholme/stratholme.h => src/server/scripts/EasternKingdoms/Stratholme/stratholme.h
rename : src/server/scripts/EasternKingdoms/sunken_temple/instance_sunken_temple.cpp => src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp
rename : src/server/scripts/EasternKingdoms/sunken_temple/sunken_temple.cpp => src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp
rename : src/server/scripts/EasternKingdoms/sunken_temple/sunken_temple.h => src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h
rename : src/server/scripts/EasternKingdoms/sunwell_plateau/boss_brutallus.cpp => src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
rename : src/server/scripts/EasternKingdoms/sunwell_plateau/boss_eredar_twins.cpp => src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
rename : src/server/scripts/EasternKingdoms/sunwell_plateau/boss_felmyst.cpp => src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
rename : src/server/scripts/EasternKingdoms/sunwell_plateau/boss_kalecgos.cpp => src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
rename : src/server/scripts/EasternKingdoms/sunwell_plateau/boss_kiljaeden.cpp => src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
rename : src/server/scripts/EasternKingdoms/sunwell_plateau/boss_muru.cpp => src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
rename : src/server/scripts/EasternKingdoms/sunwell_plateau/instance_sunwell_plateau.cpp => src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp
rename : src/server/scripts/EasternKingdoms/sunwell_plateau/sunwell_plateau.cpp => src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.cpp
rename : src/server/scripts/EasternKingdoms/sunwell_plateau/sunwell_plateau.h => src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h
rename : src/server/scripts/EasternKingdoms/uldaman/boss_archaedas.cpp => src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
rename : src/server/scripts/EasternKingdoms/uldaman/boss_ironaya.cpp => src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp
rename : src/server/scripts/EasternKingdoms/uldaman/instance_uldaman.cpp => src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp
rename : src/server/scripts/EasternKingdoms/uldaman/uldaman.cpp => src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp
rename : src/server/scripts/EasternKingdoms/zulaman/boss_akilzon.cpp => src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
rename : src/server/scripts/EasternKingdoms/zulaman/boss_halazzi.cpp => src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp
rename : src/server/scripts/EasternKingdoms/zulaman/boss_hexlord.cpp => src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
rename : src/server/scripts/EasternKingdoms/zulaman/boss_janalai.cpp => src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp
rename : src/server/scripts/EasternKingdoms/zulaman/boss_nalorakk.cpp => src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp
rename : src/server/scripts/EasternKingdoms/zulaman/boss_zuljin.cpp => src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp
rename : src/server/scripts/EasternKingdoms/zulaman/instance_zulaman.cpp => src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp
rename : src/server/scripts/EasternKingdoms/zulaman/zulaman.cpp => src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
rename : src/server/scripts/EasternKingdoms/zulaman/zulaman.h => src/server/scripts/EasternKingdoms/ZulAman/zulaman.h
rename : src/server/scripts/EasternKingdoms/zulgurub/boss_arlokk.cpp => src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
rename : src/server/scripts/EasternKingdoms/zulgurub/boss_gahzranka.cpp => src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp
rename : src/server/scripts/EasternKingdoms/zulgurub/boss_grilek.cpp => src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp
rename : src/server/scripts/EasternKingdoms/zulgurub/boss_hakkar.cpp => src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp
rename : src/server/scripts/EasternKingdoms/zulgurub/boss_hazzarah.cpp => src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp
rename : src/server/scripts/EasternKingdoms/zulgurub/boss_jeklik.cpp => src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
rename : src/server/scripts/EasternKingdoms/zulgurub/boss_jindo.cpp => src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
rename : src/server/scripts/EasternKingdoms/zulgurub/boss_mandokir.cpp => src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
rename : src/server/scripts/EasternKingdoms/zulgurub/boss_marli.cpp => src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp
rename : src/server/scripts/EasternKingdoms/zulgurub/boss_renataki.cpp => src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp
rename : src/server/scripts/EasternKingdoms/zulgurub/boss_thekal.cpp => src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp
rename : src/server/scripts/EasternKingdoms/zulgurub/boss_venoxis.cpp => src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp
rename : src/server/scripts/EasternKingdoms/zulgurub/boss_wushoolay.cpp => src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp
rename : src/server/scripts/EasternKingdoms/zulgurub/instance_zulgurub.cpp => src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp
rename : src/server/scripts/EasternKingdoms/zulgurub/zulgurub.h => src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h
rename : src/server/scripts/Kalimdor/blackfathom_depths/blackfathom_deeps.cpp => src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
rename : src/server/scripts/Kalimdor/blackfathom_depths/blackfathom_deeps.h => src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h
rename : src/server/scripts/Kalimdor/blackfathom_depths/boss_aku_mai.cpp => src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp
rename : src/server/scripts/Kalimdor/blackfathom_depths/boss_gelihast.cpp => src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp
rename : src/server/scripts/Kalimdor/blackfathom_depths/boss_kelris.cpp => src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp
rename : src/server/scripts/Kalimdor/blackfathom_depths/instance_blackfathom_deeps.cpp => src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/culling_of_stratholme/boss_epoch.cpp => src/server/scripts/Kalimdor/CavernsOfTime/culling_of_stratholme/boss_epoch.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/culling_of_stratholme/boss_infinite.cpp => src/server/scripts/Kalimdor/CavernsOfTime/culling_of_stratholme/boss_infinite.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/culling_of_stratholme/boss_mal_ganis.cpp => src/server/scripts/Kalimdor/CavernsOfTime/culling_of_stratholme/boss_mal_ganis.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/culling_of_stratholme/boss_meathook.cpp => src/server/scripts/Kalimdor/CavernsOfTime/culling_of_stratholme/boss_meathook.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/culling_of_stratholme/boss_salramm.cpp => src/server/scripts/Kalimdor/CavernsOfTime/culling_of_stratholme/boss_salramm.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/culling_of_stratholme/culling_of_stratholme.cpp => src/server/scripts/Kalimdor/CavernsOfTime/culling_of_stratholme/culling_of_stratholme.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/culling_of_stratholme/culling_of_stratholme.h => src/server/scripts/Kalimdor/CavernsOfTime/culling_of_stratholme/culling_of_stratholme.h
rename : src/server/scripts/Kalimdor/caverns_of_time/culling_of_stratholme/instance_culling_of_stratholme.cpp => src/server/scripts/Kalimdor/CavernsOfTime/culling_of_stratholme/instance_culling_of_stratholme.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/dark_portal/boss_aeonus.cpp => src/server/scripts/Kalimdor/CavernsOfTime/dark_portal/boss_aeonus.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/dark_portal/boss_chrono_lord_deja.cpp => src/server/scripts/Kalimdor/CavernsOfTime/dark_portal/boss_chrono_lord_deja.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/dark_portal/boss_temporus.cpp => src/server/scripts/Kalimdor/CavernsOfTime/dark_portal/boss_temporus.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/dark_portal/dark_portal.cpp => src/server/scripts/Kalimdor/CavernsOfTime/dark_portal/dark_portal.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/dark_portal/dark_portal.h => src/server/scripts/Kalimdor/CavernsOfTime/dark_portal/dark_portal.h
rename : src/server/scripts/Kalimdor/caverns_of_time/dark_portal/instance_dark_portal.cpp => src/server/scripts/Kalimdor/CavernsOfTime/dark_portal/instance_dark_portal.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/hyjal/boss_anetheron.cpp => src/server/scripts/Kalimdor/CavernsOfTime/hyjal/boss_anetheron.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/hyjal/boss_archimonde.cpp => src/server/scripts/Kalimdor/CavernsOfTime/hyjal/boss_archimonde.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/hyjal/boss_azgalor.cpp => src/server/scripts/Kalimdor/CavernsOfTime/hyjal/boss_azgalor.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/hyjal/boss_kazrogal.cpp => src/server/scripts/Kalimdor/CavernsOfTime/hyjal/boss_kazrogal.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/hyjal/boss_rage_winterchill.cpp => src/server/scripts/Kalimdor/CavernsOfTime/hyjal/boss_rage_winterchill.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/hyjal/hyjal.cpp => src/server/scripts/Kalimdor/CavernsOfTime/hyjal/hyjal.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/hyjal/hyjal.h => src/server/scripts/Kalimdor/CavernsOfTime/hyjal/hyjal.h
rename : src/server/scripts/Kalimdor/caverns_of_time/hyjal/hyjalAI.cpp => src/server/scripts/Kalimdor/CavernsOfTime/hyjal/hyjalAI.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/hyjal/hyjalAI.h => src/server/scripts/Kalimdor/CavernsOfTime/hyjal/hyjalAI.h
rename : src/server/scripts/Kalimdor/caverns_of_time/hyjal/hyjal_trash.cpp => src/server/scripts/Kalimdor/CavernsOfTime/hyjal/hyjal_trash.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/hyjal/hyjal_trash.h => src/server/scripts/Kalimdor/CavernsOfTime/hyjal/hyjal_trash.h
rename : src/server/scripts/Kalimdor/caverns_of_time/hyjal/instance_hyjal.cpp => src/server/scripts/Kalimdor/CavernsOfTime/hyjal/instance_hyjal.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/old_hillsbrad/boss_captain_skarloc.cpp => src/server/scripts/Kalimdor/CavernsOfTime/old_hillsbrad/boss_captain_skarloc.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/old_hillsbrad/boss_epoch_hunter.cpp => src/server/scripts/Kalimdor/CavernsOfTime/old_hillsbrad/boss_epoch_hunter.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/old_hillsbrad/boss_leutenant_drake.cpp => src/server/scripts/Kalimdor/CavernsOfTime/old_hillsbrad/boss_leutenant_drake.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/old_hillsbrad/instance_old_hillsbrad.cpp => src/server/scripts/Kalimdor/CavernsOfTime/old_hillsbrad/instance_old_hillsbrad.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp => src/server/scripts/Kalimdor/CavernsOfTime/old_hillsbrad/old_hillsbrad.cpp
rename : src/server/scripts/Kalimdor/caverns_of_time/old_hillsbrad/old_hillsbrad.h => src/server/scripts/Kalimdor/CavernsOfTime/old_hillsbrad/old_hillsbrad.h
rename : src/server/scripts/Kalimdor/maraudon/boss_celebras_the_cursed.cpp => src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp
rename : src/server/scripts/Kalimdor/maraudon/boss_landslide.cpp => src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp
rename : src/server/scripts/Kalimdor/maraudon/boss_noxxion.cpp => src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp
rename : src/server/scripts/Kalimdor/maraudon/boss_princess_theradras.cpp => src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp
rename : src/server/scripts/Kalimdor/onyxias_lair/boss_onyxia.cpp => src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp
rename : src/server/scripts/Kalimdor/onyxias_lair/instance_onyxias_lair.cpp => src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp
rename : src/server/scripts/Kalimdor/onyxias_lair/onyxias_lair.h => src/server/scripts/Kalimdor/OnyxiasLair/onyxias_lair.h
rename : src/server/scripts/Kalimdor/razorfen_downs/boss_amnennar_the_coldbringer.cpp => src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp
rename : src/server/scripts/Kalimdor/razorfen_downs/instance_razorfen_downs.cpp => src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp
rename : src/server/scripts/Kalimdor/razorfen_downs/razorfen_downs.cpp => src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
rename : src/server/scripts/Kalimdor/razorfen_downs/razorfen_downs.h => src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h
rename : src/server/scripts/Kalimdor/razorfen_kraul/instance_razorfen_kraul.cpp => src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp
rename : src/server/scripts/Kalimdor/razorfen_kraul/razorfen_kraul.cpp => src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
rename : src/server/scripts/Kalimdor/razorfen_kraul/razorfen_kraul.h => src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.h
rename : src/server/scripts/Kalimdor/ruins_of_ahnqiraj/boss_ayamiss.cpp => src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp
rename : src/server/scripts/Kalimdor/ruins_of_ahnqiraj/boss_buru.cpp => src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
rename : src/server/scripts/Kalimdor/ruins_of_ahnqiraj/boss_kurinnaxx.cpp => src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp
rename : src/server/scripts/Kalimdor/ruins_of_ahnqiraj/boss_moam.cpp => src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp
rename : src/server/scripts/Kalimdor/ruins_of_ahnqiraj/boss_ossirian.cpp => src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
rename : src/server/scripts/Kalimdor/ruins_of_ahnqiraj/boss_rajaxx.cpp => src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
rename : src/server/scripts/Kalimdor/ruins_of_ahnqiraj/instance_ruins_of_ahnqiraj.cpp => src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp
rename : src/server/scripts/Kalimdor/ruins_of_ahnqiraj/ruins_of_ahnqiraj.h => src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h
rename : src/server/scripts/Kalimdor/temple_of_ahnqiraj/boss_bug_trio.cpp => src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
rename : src/server/scripts/Kalimdor/temple_of_ahnqiraj/boss_cthun.cpp => src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
rename : src/server/scripts/Kalimdor/temple_of_ahnqiraj/boss_fankriss.cpp => src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp
rename : src/server/scripts/Kalimdor/temple_of_ahnqiraj/boss_huhuran.cpp => src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp
rename : src/server/scripts/Kalimdor/temple_of_ahnqiraj/boss_ouro.cpp => src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp
rename : src/server/scripts/Kalimdor/temple_of_ahnqiraj/boss_sartura.cpp => src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp
rename : src/server/scripts/Kalimdor/temple_of_ahnqiraj/boss_skeram.cpp => src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp
rename : src/server/scripts/Kalimdor/temple_of_ahnqiraj/boss_twinemperors.cpp => src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
rename : src/server/scripts/Kalimdor/temple_of_ahnqiraj/boss_viscidus.cpp => src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp
rename : src/server/scripts/Kalimdor/temple_of_ahnqiraj/instance_temple_of_ahnqiraj.cpp => src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp
rename : src/server/scripts/Kalimdor/temple_of_ahnqiraj/mob_anubisath_sentinel.cpp => src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp
rename : src/server/scripts/Kalimdor/temple_of_ahnqiraj/temple_of_ahnqiraj.h => src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h
rename : src/server/scripts/Kalimdor/wailing_caverns/instance_wailing_caverns.cpp => src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp
rename : src/server/scripts/Kalimdor/wailing_caverns/wailing_caverns.cpp => src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp
rename : src/server/scripts/Kalimdor/wailing_caverns/wailing_caverns.h => src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h
rename : src/server/scripts/Kalimdor/zulfarrak/instance_zulfarrak.cpp => src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp
rename : src/server/scripts/Kalimdor/zulfarrak/zulfarrak.cpp => src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp
rename : src/server/scripts/Northrend/azjol_nerub/ahnkahet/ahnkahet.h => src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h
rename : src/server/scripts/Northrend/azjol_nerub/ahnkahet/boss_amanitar.cpp => src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_amanitar.cpp
rename : src/server/scripts/Northrend/azjol_nerub/ahnkahet/boss_elder_nadox.cpp => src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp
rename : src/server/scripts/Northrend/azjol_nerub/ahnkahet/boss_herald_volazj.cpp => src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_herald_volazj.cpp
rename : src/server/scripts/Northrend/azjol_nerub/ahnkahet/boss_jedoga_shadowseeker.cpp => src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp
rename : src/server/scripts/Northrend/azjol_nerub/ahnkahet/boss_prince_taldaram.cpp => src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp
rename : src/server/scripts/Northrend/azjol_nerub/ahnkahet/instance_ahnkahet.cpp => src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp
rename : src/server/scripts/Northrend/azjol_nerub/azjol_nerub/azjol_nerub.h => src/server/scripts/Northrend/AzjolNerub/azjol_nerub/azjol_nerub.h
rename : src/server/scripts/Northrend/azjol_nerub/azjol_nerub/boss_anubarak.cpp => src/server/scripts/Northrend/AzjolNerub/azjol_nerub/boss_anubarak.cpp
rename : src/server/scripts/Northrend/azjol_nerub/azjol_nerub/boss_hadronox.cpp => src/server/scripts/Northrend/AzjolNerub/azjol_nerub/boss_hadronox.cpp
rename : src/server/scripts/Northrend/azjol_nerub/azjol_nerub/boss_krikthir_the_gatewatcher.cpp => src/server/scripts/Northrend/AzjolNerub/azjol_nerub/boss_krikthir_the_gatewatcher.cpp
rename : src/server/scripts/Northrend/azjol_nerub/azjol_nerub/instance_azjol_nerub.cpp => src/server/scripts/Northrend/AzjolNerub/azjol_nerub/instance_azjol_nerub.cpp
rename : src/server/scripts/Northrend/crusaders_coliseum/trial_of_the_champion/boss_argent_challenge.cpp => src/server/scripts/Northrend/CrusadersColiseum/trial_of_the_champion/boss_argent_challenge.cpp
rename : src/server/scripts/Northrend/crusaders_coliseum/trial_of_the_champion/boss_black_knight.cpp => src/server/scripts/Northrend/CrusadersColiseum/trial_of_the_champion/boss_black_knight.cpp
rename : src/server/scripts/Northrend/crusaders_coliseum/trial_of_the_champion/boss_grand_champions.cpp => src/server/scripts/Northrend/CrusadersColiseum/trial_of_the_champion/boss_grand_champions.cpp
rename : src/server/scripts/Northrend/crusaders_coliseum/trial_of_the_champion/instance_trial_of_the_champion.cpp => src/server/scripts/Northrend/CrusadersColiseum/trial_of_the_champion/instance_trial_of_the_champion.cpp
rename : src/server/scripts/Northrend/crusaders_coliseum/trial_of_the_champion/trial_of_the_champion.cpp => src/server/scripts/Northrend/CrusadersColiseum/trial_of_the_champion/trial_of_the_champion.cpp
rename : src/server/scripts/Northrend/crusaders_coliseum/trial_of_the_champion/trial_of_the_champion.h => src/server/scripts/Northrend/CrusadersColiseum/trial_of_the_champion/trial_of_the_champion.h
rename : src/server/scripts/Northrend/draktharon_keep/boss_dred.cpp => src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp
rename : src/server/scripts/Northrend/draktharon_keep/boss_novos.cpp => src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
rename : src/server/scripts/Northrend/draktharon_keep/boss_tharon_ja.cpp => src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp
rename : src/server/scripts/Northrend/draktharon_keep/boss_trollgore.cpp => src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
rename : src/server/scripts/Northrend/draktharon_keep/drak_tharon_keep.h => src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h
rename : src/server/scripts/Northrend/draktharon_keep/instance_drak_tharon_keep.cpp => src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp
rename : src/server/scripts/Northrend/frozen_halls/forge_of_souls/boss_bronjahm.cpp => src/server/scripts/Northrend/FrozenHalls/forge_of_souls/boss_bronjahm.cpp
rename : src/server/scripts/Northrend/frozen_halls/forge_of_souls/boss_devourer_of_souls.cpp => src/server/scripts/Northrend/FrozenHalls/forge_of_souls/boss_devourer_of_souls.cpp
rename : src/server/scripts/Northrend/frozen_halls/forge_of_souls/forge_of_souls.cpp => src/server/scripts/Northrend/FrozenHalls/forge_of_souls/forge_of_souls.cpp
rename : src/server/scripts/Northrend/frozen_halls/forge_of_souls/forge_of_souls.h => src/server/scripts/Northrend/FrozenHalls/forge_of_souls/forge_of_souls.h
rename : src/server/scripts/Northrend/frozen_halls/forge_of_souls/instance_forge_of_souls.cpp => src/server/scripts/Northrend/FrozenHalls/forge_of_souls/instance_forge_of_souls.cpp
rename : src/server/scripts/Northrend/frozen_halls/halls_of_reflection/boss_falric.cpp => src/server/scripts/Northrend/FrozenHalls/halls_of_reflection/boss_falric.cpp
rename : src/server/scripts/Northrend/frozen_halls/halls_of_reflection/boss_marwyn.cpp => src/server/scripts/Northrend/FrozenHalls/halls_of_reflection/boss_marwyn.cpp
rename : src/server/scripts/Northrend/frozen_halls/halls_of_reflection/halls_of_reflection.cpp => src/server/scripts/Northrend/FrozenHalls/halls_of_reflection/halls_of_reflection.cpp
rename : src/server/scripts/Northrend/frozen_halls/halls_of_reflection/halls_of_reflection.h => src/server/scripts/Northrend/FrozenHalls/halls_of_reflection/halls_of_reflection.h
rename : src/server/scripts/Northrend/frozen_halls/halls_of_reflection/instance_halls_of_reflection.cpp => src/server/scripts/Northrend/FrozenHalls/halls_of_reflection/instance_halls_of_reflection.cpp
rename : src/server/scripts/Northrend/frozen_halls/pit_of_saron/boss_forgemaster_garfrost.cpp => src/server/scripts/Northrend/FrozenHalls/pit_of_saron/boss_forgemaster_garfrost.cpp
rename : src/server/scripts/Northrend/frozen_halls/pit_of_saron/boss_krickandick.cpp => src/server/scripts/Northrend/FrozenHalls/pit_of_saron/boss_krickandick.cpp
rename : src/server/scripts/Northrend/frozen_halls/pit_of_saron/boss_scourgelord_tyrannus.cpp => src/server/scripts/Northrend/FrozenHalls/pit_of_saron/boss_scourgelord_tyrannus.cpp
rename : src/server/scripts/Northrend/frozen_halls/pit_of_saron/instance_pit_of_saron.cpp => src/server/scripts/Northrend/FrozenHalls/pit_of_saron/instance_pit_of_saron.cpp
rename : src/server/scripts/Northrend/frozen_halls/pit_of_saron/pit_of_saron.cpp => src/server/scripts/Northrend/FrozenHalls/pit_of_saron/pit_of_saron.cpp
rename : src/server/scripts/Northrend/frozen_halls/pit_of_saron/pit_of_saron.h => src/server/scripts/Northrend/FrozenHalls/pit_of_saron/pit_of_saron.h
rename : src/server/scripts/Northrend/gundrak/boss_drakkari_colossus.cpp => src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp
rename : src/server/scripts/Northrend/gundrak/boss_eck.cpp => src/server/scripts/Northrend/Gundrak/boss_eck.cpp
rename : src/server/scripts/Northrend/gundrak/boss_gal_darah.cpp => src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp
rename : src/server/scripts/Northrend/gundrak/boss_moorabi.cpp => src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
rename : src/server/scripts/Northrend/gundrak/boss_slad_ran.cpp => src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp
rename : src/server/scripts/Northrend/gundrak/gundrak.h => src/server/scripts/Northrend/Gundrak/gundrak.h
rename : src/server/scripts/Northrend/gundrak/instance_gundrak.cpp => src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
rename : src/server/scripts/Northrend/naxxramas/boss_anubrekhan.cpp => src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
rename : src/server/scripts/Northrend/naxxramas/boss_faerlina.cpp => src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp
rename : src/server/scripts/Northrend/naxxramas/boss_four_horsemen.cpp => src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
rename : src/server/scripts/Northrend/naxxramas/boss_gluth.cpp => src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
rename : src/server/scripts/Northrend/naxxramas/boss_gothik.cpp => src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
rename : src/server/scripts/Northrend/naxxramas/boss_grobbulus.cpp => src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
rename : src/server/scripts/Northrend/naxxramas/boss_heigan.cpp => src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
rename : src/server/scripts/Northrend/naxxramas/boss_highlord_mograine.cpp => src/server/scripts/Northrend/Naxxramas/boss_highlord_mograine.cpp
rename : src/server/scripts/Northrend/naxxramas/boss_kelthuzad.cpp => src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
rename : src/server/scripts/Northrend/naxxramas/boss_loatheb.cpp => src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
rename : src/server/scripts/Northrend/naxxramas/boss_maexxna.cpp => src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
rename : src/server/scripts/Northrend/naxxramas/boss_noth.cpp => src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
rename : src/server/scripts/Northrend/naxxramas/boss_patchwerk.cpp => src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
rename : src/server/scripts/Northrend/naxxramas/boss_razuvious.cpp => src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
rename : src/server/scripts/Northrend/naxxramas/boss_sapphiron.cpp => src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
rename : src/server/scripts/Northrend/naxxramas/boss_thaddius.cpp => src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
rename : src/server/scripts/Northrend/naxxramas/instance_naxxramas.cpp => src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
rename : src/server/scripts/Northrend/naxxramas/naxxramas.h => src/server/scripts/Northrend/Naxxramas/naxxramas.h
rename : src/server/scripts/Northrend/obsidian_sanctum/boss_sartharion.cpp => src/server/scripts/Northrend/ObsidianSanctum/boss_sartharion.cpp
rename : src/server/scripts/Northrend/obsidian_sanctum/instance_obsidian_sanctum.cpp => src/server/scripts/Northrend/ObsidianSanctum/instance_obsidian_sanctum.cpp
rename : src/server/scripts/Northrend/obsidian_sanctum/obsidian_sanctum.h => src/server/scripts/Northrend/ObsidianSanctum/obsidian_sanctum.h
rename : src/server/scripts/Northrend/nexus/eye_of_eternity/boss_malygos.cpp => src/server/scripts/Northrend/TheNexus/eye_of_eternity/boss_malygos.cpp
rename : src/server/scripts/Northrend/nexus/eye_of_eternity/eye_of_eternity.h => src/server/scripts/Northrend/TheNexus/eye_of_eternity/eye_of_eternity.h
rename : src/server/scripts/Northrend/nexus/eye_of_eternity/instance_eye_of_eternity.cpp => src/server/scripts/Northrend/TheNexus/eye_of_eternity/instance_eye_of_eternity.cpp
rename : src/server/scripts/Northrend/nexus/nexus/boss_anomalus.cpp => src/server/scripts/Northrend/TheNexus/nexus/boss_anomalus.cpp
rename : src/server/scripts/Northrend/nexus/nexus/boss_keristrasza.cpp => src/server/scripts/Northrend/TheNexus/nexus/boss_keristrasza.cpp
rename : src/server/scripts/Northrend/nexus/nexus/boss_magus_telestra.cpp => src/server/scripts/Northrend/TheNexus/nexus/boss_magus_telestra.cpp
rename : src/server/scripts/Northrend/nexus/nexus/boss_ormorok.cpp => src/server/scripts/Northrend/TheNexus/nexus/boss_ormorok.cpp
rename : src/server/scripts/Northrend/nexus/nexus/commander_kolurg.cpp => src/server/scripts/Northrend/TheNexus/nexus/commander_kolurg.cpp
rename : src/server/scripts/Northrend/nexus/nexus/commander_stoutbeard.cpp => src/server/scripts/Northrend/TheNexus/nexus/commander_stoutbeard.cpp
rename : src/server/scripts/Northrend/nexus/nexus/instance_nexus.cpp => src/server/scripts/Northrend/TheNexus/nexus/instance_nexus.cpp
rename : src/server/scripts/Northrend/nexus/nexus/nexus.h => src/server/scripts/Northrend/TheNexus/nexus/nexus.h
rename : src/server/scripts/Northrend/nexus/oculus/boss_drakos.cpp => src/server/scripts/Northrend/TheNexus/oculus/boss_drakos.cpp
rename : src/server/scripts/Northrend/nexus/oculus/boss_eregos.cpp => src/server/scripts/Northrend/TheNexus/oculus/boss_eregos.cpp
rename : src/server/scripts/Northrend/nexus/oculus/boss_urom.cpp => src/server/scripts/Northrend/TheNexus/oculus/boss_urom.cpp
rename : src/server/scripts/Northrend/nexus/oculus/boss_varos.cpp => src/server/scripts/Northrend/TheNexus/oculus/boss_varos.cpp
rename : src/server/scripts/Northrend/nexus/oculus/instance_oculus.cpp => src/server/scripts/Northrend/TheNexus/oculus/instance_oculus.cpp
rename : src/server/scripts/Northrend/nexus/oculus/oculus.cpp => src/server/scripts/Northrend/TheNexus/oculus/oculus.cpp
rename : src/server/scripts/Northrend/nexus/oculus/oculus.h => src/server/scripts/Northrend/TheNexus/oculus/oculus.h
rename : src/server/scripts/Northrend/ulduar/halls_of_lightning/boss_bjarngrim.cpp => src/server/scripts/Northrend/Ulduar/halls_of_lightning/boss_bjarngrim.cpp
rename : src/server/scripts/Northrend/ulduar/halls_of_lightning/boss_ionar.cpp => src/server/scripts/Northrend/Ulduar/halls_of_lightning/boss_ionar.cpp
rename : src/server/scripts/Northrend/ulduar/halls_of_lightning/boss_loken.cpp => src/server/scripts/Northrend/Ulduar/halls_of_lightning/boss_loken.cpp
rename : src/server/scripts/Northrend/ulduar/halls_of_lightning/boss_volkhan.cpp => src/server/scripts/Northrend/Ulduar/halls_of_lightning/boss_volkhan.cpp
rename : src/server/scripts/Northrend/ulduar/halls_of_lightning/halls_of_lightning.h => src/server/scripts/Northrend/Ulduar/halls_of_lightning/halls_of_lightning.h
rename : src/server/scripts/Northrend/ulduar/halls_of_lightning/instance_halls_of_lightning.cpp => src/server/scripts/Northrend/Ulduar/halls_of_lightning/instance_halls_of_lightning.cpp
rename : src/server/scripts/Northrend/ulduar/halls_of_stone/boss_krystallus.cpp => src/server/scripts/Northrend/Ulduar/halls_of_stone/boss_krystallus.cpp
rename : src/server/scripts/Northrend/ulduar/halls_of_stone/boss_maiden_of_grief.cpp => src/server/scripts/Northrend/Ulduar/halls_of_stone/boss_maiden_of_grief.cpp
rename : src/server/scripts/Northrend/ulduar/halls_of_stone/boss_sjonnir.cpp => src/server/scripts/Northrend/Ulduar/halls_of_stone/boss_sjonnir.cpp
rename : src/server/scripts/Northrend/ulduar/halls_of_stone/halls_of_stone.cpp => src/server/scripts/Northrend/Ulduar/halls_of_stone/halls_of_stone.cpp
rename : src/server/scripts/Northrend/ulduar/halls_of_stone/halls_of_stone.h => src/server/scripts/Northrend/Ulduar/halls_of_stone/halls_of_stone.h
rename : src/server/scripts/Northrend/ulduar/halls_of_stone/instance_halls_of_stone.cpp => src/server/scripts/Northrend/Ulduar/halls_of_stone/instance_halls_of_stone.cpp
rename : src/server/scripts/Northrend/ulduar/ulduar/boss_algalon.cpp => src/server/scripts/Northrend/Ulduar/ulduar/boss_algalon.cpp
rename : src/server/scripts/Northrend/ulduar/ulduar/boss_assembly_of_iron.cpp => src/server/scripts/Northrend/Ulduar/ulduar/boss_assembly_of_iron.cpp
rename : src/server/scripts/Northrend/ulduar/ulduar/boss_auriaya.cpp => src/server/scripts/Northrend/Ulduar/ulduar/boss_auriaya.cpp
rename : src/server/scripts/Northrend/ulduar/ulduar/boss_flame_leviathan.cpp => src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
rename : src/server/scripts/Northrend/ulduar/ulduar/boss_freya.cpp => src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp
rename : src/server/scripts/Northrend/ulduar/ulduar/boss_general_vezax.cpp => src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp
rename : src/server/scripts/Northrend/ulduar/ulduar/boss_hodir.cpp => src/server/scripts/Northrend/Ulduar/ulduar/boss_hodir.cpp
rename : src/server/scripts/Northrend/ulduar/ulduar/boss_ignis.cpp => src/server/scripts/Northrend/Ulduar/ulduar/boss_ignis.cpp
rename : src/server/scripts/Northrend/ulduar/ulduar/boss_kologarn.cpp => src/server/scripts/Northrend/Ulduar/ulduar/boss_kologarn.cpp
rename : src/server/scripts/Northrend/ulduar/ulduar/boss_mimiron.cpp => src/server/scripts/Northrend/Ulduar/ulduar/boss_mimiron.cpp
rename : src/server/scripts/Northrend/ulduar/ulduar/boss_razorscale.cpp => src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp
rename : src/server/scripts/Northrend/ulduar/ulduar/boss_thorim.cpp => src/server/scripts/Northrend/Ulduar/ulduar/boss_thorim.cpp
rename : src/server/scripts/Northrend/ulduar/ulduar/boss_xt002.cpp => src/server/scripts/Northrend/Ulduar/ulduar/boss_xt002.cpp
rename : src/server/scripts/Northrend/ulduar/ulduar/boss_yoggsaron.cpp => src/server/scripts/Northrend/Ulduar/ulduar/boss_yoggsaron.cpp
rename : src/server/scripts/Northrend/ulduar/ulduar/instance_ulduar.cpp => src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp
rename : src/server/scripts/Northrend/ulduar/ulduar/ulduar.h => src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h
rename : src/server/scripts/Northrend/ulduar/ulduar/ulduar_teleporter.cpp => src/server/scripts/Northrend/Ulduar/ulduar/ulduar_teleporter.cpp
rename : src/server/scripts/Northrend/utgarde_keep/utgarde_keep/boss_ingvar_the_plunderer.cpp => src/server/scripts/Northrend/UtgardeKeep/utgarde_keep/boss_ingvar_the_plunderer.cpp
rename : src/server/scripts/Northrend/utgarde_keep/utgarde_keep/boss_keleseth.cpp => src/server/scripts/Northrend/UtgardeKeep/utgarde_keep/boss_keleseth.cpp
rename : src/server/scripts/Northrend/utgarde_keep/utgarde_keep/boss_skarvald_dalronn.cpp => src/server/scripts/Northrend/UtgardeKeep/utgarde_keep/boss_skarvald_dalronn.cpp
rename : src/server/scripts/Northrend/utgarde_keep/utgarde_keep/instance_utgarde_keep.cpp => src/server/scripts/Northrend/UtgardeKeep/utgarde_keep/instance_utgarde_keep.cpp
rename : src/server/scripts/Northrend/utgarde_keep/utgarde_keep/utgarde_keep.cpp => src/server/scripts/Northrend/UtgardeKeep/utgarde_keep/utgarde_keep.cpp
rename : src/server/scripts/Northrend/utgarde_keep/utgarde_keep/utgarde_keep.h => src/server/scripts/Northrend/UtgardeKeep/utgarde_keep/utgarde_keep.h
rename : src/server/scripts/Northrend/utgarde_keep/utgarde_pinnacle/boss_palehoof.cpp => src/server/scripts/Northrend/UtgardeKeep/utgarde_pinnacle/boss_palehoof.cpp
rename : src/server/scripts/Northrend/utgarde_keep/utgarde_pinnacle/boss_skadi.cpp => src/server/scripts/Northrend/UtgardeKeep/utgarde_pinnacle/boss_skadi.cpp
rename : src/server/scripts/Northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp => src/server/scripts/Northrend/UtgardeKeep/utgarde_pinnacle/boss_svala.cpp
rename : src/server/scripts/Northrend/utgarde_keep/utgarde_pinnacle/boss_ymiron.cpp => src/server/scripts/Northrend/UtgardeKeep/utgarde_pinnacle/boss_ymiron.cpp
rename : src/server/scripts/Northrend/utgarde_keep/utgarde_pinnacle/instance_pinnacle.cpp => src/server/scripts/Northrend/UtgardeKeep/utgarde_pinnacle/instance_pinnacle.cpp
rename : src/server/scripts/Northrend/utgarde_keep/utgarde_pinnacle/utgarde_pinnacle.h => src/server/scripts/Northrend/UtgardeKeep/utgarde_pinnacle/utgarde_pinnacle.h
rename : src/server/scripts/Northrend/vault_of_archavon/boss_archavon.cpp => src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp
rename : src/server/scripts/Northrend/vault_of_archavon/boss_emalon.cpp => src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp
rename : src/server/scripts/Northrend/vault_of_archavon/boss_koralon.cpp => src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp
rename : src/server/scripts/Northrend/vault_of_archavon/boss_toravon.cpp => src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
rename : src/server/scripts/Northrend/vault_of_archavon/instance_vault_of_archavon.cpp => src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp
rename : src/server/scripts/Northrend/vault_of_archavon/vault_of_archavon.h => src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h
rename : src/server/scripts/Northrend/violet_hold/boss_cyanigosa.cpp => src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp
rename : src/server/scripts/Northrend/violet_hold/boss_erekem.cpp => src/server/scripts/Northrend/VioletHold/boss_erekem.cpp
rename : src/server/scripts/Northrend/violet_hold/boss_ichoron.cpp => src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
rename : src/server/scripts/Northrend/violet_hold/boss_lavanthor.cpp => src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp
rename : src/server/scripts/Northrend/violet_hold/boss_moragg.cpp => src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
rename : src/server/scripts/Northrend/violet_hold/boss_xevozz.cpp => src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
rename : src/server/scripts/Northrend/violet_hold/boss_zuramat.cpp => src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
rename : src/server/scripts/Northrend/violet_hold/instance_violet_hold.cpp => src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
rename : src/server/scripts/Northrend/violet_hold/violet_hold.cpp => src/server/scripts/Northrend/VioletHold/violet_hold.cpp
rename : src/server/scripts/Northrend/violet_hold/violet_hold.h => src/server/scripts/Northrend/VioletHold/violet_hold.h
rename : src/server/scripts/Outland/auchindoun/auchenai_crypts/boss_exarch_maladaar.cpp => src/server/scripts/Outland/Auchindoun/auchenai_crypts/boss_exarch_maladaar.cpp
rename : src/server/scripts/Outland/auchindoun/auchenai_crypts/boss_shirrak_the_dead_watcher.cpp => src/server/scripts/Outland/Auchindoun/auchenai_crypts/boss_shirrak_the_dead_watcher.cpp
rename : src/server/scripts/Outland/auchindoun/mana_tombs/boss_nexusprince_shaffar.cpp => src/server/scripts/Outland/Auchindoun/mana_tombs/boss_nexusprince_shaffar.cpp
rename : src/server/scripts/Outland/auchindoun/mana_tombs/boss_pandemonius.cpp => src/server/scripts/Outland/Auchindoun/mana_tombs/boss_pandemonius.cpp
rename : src/server/scripts/Outland/auchindoun/sethekk_halls/boss_darkweaver_syth.cpp => src/server/scripts/Outland/Auchindoun/sethekk_halls/boss_darkweaver_syth.cpp
rename : src/server/scripts/Outland/auchindoun/sethekk_halls/boss_tailonking_ikiss.cpp => src/server/scripts/Outland/Auchindoun/sethekk_halls/boss_tailonking_ikiss.cpp
rename : src/server/scripts/Outland/auchindoun/sethekk_halls/instance_sethekk_halls.cpp => src/server/scripts/Outland/Auchindoun/sethekk_halls/instance_sethekk_halls.cpp
rename : src/server/scripts/Outland/auchindoun/sethekk_halls/sethekk_halls.h => src/server/scripts/Outland/Auchindoun/sethekk_halls/sethekk_halls.h
rename : src/server/scripts/Outland/auchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp => src/server/scripts/Outland/Auchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp
rename : src/server/scripts/Outland/auchindoun/shadow_labyrinth/boss_blackheart_the_inciter.cpp => src/server/scripts/Outland/Auchindoun/shadow_labyrinth/boss_blackheart_the_inciter.cpp
rename : src/server/scripts/Outland/auchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp => src/server/scripts/Outland/Auchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp
rename : src/server/scripts/Outland/auchindoun/shadow_labyrinth/boss_murmur.cpp => src/server/scripts/Outland/Auchindoun/shadow_labyrinth/boss_murmur.cpp
rename : src/server/scripts/Outland/auchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp => src/server/scripts/Outland/Auchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp
rename : src/server/scripts/Outland/auchindoun/shadow_labyrinth/shadow_labyrinth.h => src/server/scripts/Outland/Auchindoun/shadow_labyrinth/shadow_labyrinth.h
rename : src/server/scripts/Outland/black_temple/black_temple.cpp => src/server/scripts/Outland/BlackTemple/black_temple.cpp
rename : src/server/scripts/Outland/black_temple/black_temple.h => src/server/scripts/Outland/BlackTemple/black_temple.h
rename : src/server/scripts/Outland/black_temple/boss_bloodboil.cpp => src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp
rename : src/server/scripts/Outland/black_temple/boss_illidan.cpp => src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
rename : src/server/scripts/Outland/black_temple/boss_mother_shahraz.cpp => src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
rename : src/server/scripts/Outland/black_temple/boss_reliquary_of_souls.cpp => src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
rename : src/server/scripts/Outland/black_temple/boss_shade_of_akama.cpp => src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
rename : src/server/scripts/Outland/black_temple/boss_supremus.cpp => src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
rename : src/server/scripts/Outland/black_temple/boss_teron_gorefiend.cpp => src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
rename : src/server/scripts/Outland/black_temple/boss_warlord_najentus.cpp => src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
rename : src/server/scripts/Outland/black_temple/illidari_council.cpp => src/server/scripts/Outland/BlackTemple/illidari_council.cpp
rename : src/server/scripts/Outland/black_temple/instance_black_temple.cpp => src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
rename : src/server/scripts/Outland/coilfang_resevoir/serpent_shrine/boss_fathomlord_karathress.cpp => src/server/scripts/Outland/CoilfangReservoir/serpent_shrine/boss_fathomlord_karathress.cpp
rename : src/server/scripts/Outland/coilfang_resevoir/serpent_shrine/boss_hydross_the_unstable.cpp => src/server/scripts/Outland/CoilfangReservoir/serpent_shrine/boss_hydross_the_unstable.cpp
rename : src/server/scripts/Outland/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp => src/server/scripts/Outland/CoilfangReservoir/serpent_shrine/boss_lady_vashj.cpp
rename : src/server/scripts/Outland/coilfang_resevoir/serpent_shrine/boss_leotheras_the_blind.cpp => src/server/scripts/Outland/CoilfangReservoir/serpent_shrine/boss_leotheras_the_blind.cpp
rename : src/server/scripts/Outland/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp => src/server/scripts/Outland/CoilfangReservoir/serpent_shrine/boss_lurker_below.cpp
rename : src/server/scripts/Outland/coilfang_resevoir/serpent_shrine/boss_morogrim_tidewalker.cpp => src/server/scripts/Outland/CoilfangReservoir/serpent_shrine/boss_morogrim_tidewalker.cpp
rename : src/server/scripts/Outland/coilfang_resevoir/serpent_shrine/instance_serpent_shrine.cpp => src/server/scripts/Outland/CoilfangReservoir/serpent_shrine/instance_serpent_shrine.cpp
rename : src/server/scripts/Outland/coilfang_resevoir/serpent_shrine/serpent_shrine.h => src/server/scripts/Outland/CoilfangReservoir/serpent_shrine/serpent_shrine.h
rename : src/server/scripts/Outland/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp => src/server/scripts/Outland/CoilfangReservoir/steam_vault/boss_hydromancer_thespia.cpp
rename : src/server/scripts/Outland/coilfang_resevoir/steam_vault/boss_mekgineer_steamrigger.cpp => src/server/scripts/Outland/CoilfangReservoir/steam_vault/boss_mekgineer_steamrigger.cpp
rename : src/server/scripts/Outland/coilfang_resevoir/steam_vault/boss_warlord_kalithresh.cpp => src/server/scripts/Outland/CoilfangReservoir/steam_vault/boss_warlord_kalithresh.cpp
rename : src/server/scripts/Outland/coilfang_resevoir/steam_vault/instance_steam_vault.cpp => src/server/scripts/Outland/CoilfangReservoir/steam_vault/instance_steam_vault.cpp
rename : src/server/scripts/Outland/coilfang_resevoir/steam_vault/steam_vault.h => src/server/scripts/Outland/CoilfangReservoir/steam_vault/steam_vault.h
rename : src/server/scripts/Outland/coilfang_resevoir/underbog/boss_hungarfen.cpp => src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp
rename : src/server/scripts/Outland/coilfang_resevoir/underbog/boss_the_black_stalker.cpp => src/server/scripts/Outland/CoilfangReservoir/underbog/boss_the_black_stalker.cpp
rename : src/server/scripts/Outland/gruuls_lair/boss_gruul.cpp => src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
rename : src/server/scripts/Outland/gruuls_lair/boss_high_king_maulgar.cpp => src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
rename : src/server/scripts/Outland/gruuls_lair/gruuls_lair.h => src/server/scripts/Outland/GruulsLair/gruuls_lair.h
rename : src/server/scripts/Outland/gruuls_lair/instance_gruuls_lair.cpp => src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp
rename : src/server/scripts/Outland/hellfire_citadel/blood_furnace/blood_furnace.h => src/server/scripts/Outland/HellfireCitadel/blood_furnace/blood_furnace.h
rename : src/server/scripts/Outland/hellfire_citadel/blood_furnace/boss_broggok.cpp => src/server/scripts/Outland/HellfireCitadel/blood_furnace/boss_broggok.cpp
rename : src/server/scripts/Outland/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp => src/server/scripts/Outland/HellfireCitadel/blood_furnace/boss_kelidan_the_breaker.cpp
rename : src/server/scripts/Outland/hellfire_citadel/blood_furnace/boss_the_maker.cpp => src/server/scripts/Outland/HellfireCitadel/blood_furnace/boss_the_maker.cpp
rename : src/server/scripts/Outland/hellfire_citadel/blood_furnace/instance_blood_furnace.cpp => src/server/scripts/Outland/HellfireCitadel/blood_furnace/instance_blood_furnace.cpp
rename : src/server/scripts/Outland/hellfire_citadel/hellfire_ramparts/boss_omor_the_unscarred.cpp => src/server/scripts/Outland/HellfireCitadel/hellfire_ramparts/boss_omor_the_unscarred.cpp
rename : src/server/scripts/Outland/hellfire_citadel/hellfire_ramparts/boss_vazruden_the_herald.cpp => src/server/scripts/Outland/HellfireCitadel/hellfire_ramparts/boss_vazruden_the_herald.cpp
rename : src/server/scripts/Outland/hellfire_citadel/hellfire_ramparts/boss_watchkeeper_gargolmar.cpp => src/server/scripts/Outland/HellfireCitadel/hellfire_ramparts/boss_watchkeeper_gargolmar.cpp
rename : src/server/scripts/Outland/hellfire_citadel/hellfire_ramparts/hellfire_ramparts.h => src/server/scripts/Outland/HellfireCitadel/hellfire_ramparts/hellfire_ramparts.h
rename : src/server/scripts/Outland/hellfire_citadel/hellfire_ramparts/instance_hellfire_ramparts.cpp => src/server/scripts/Outland/HellfireCitadel/hellfire_ramparts/instance_hellfire_ramparts.cpp
rename : src/server/scripts/Outland/hellfire_citadel/magtheridons_lair/boss_magtheridon.cpp => src/server/scripts/Outland/HellfireCitadel/magtheridons_lair/boss_magtheridon.cpp
rename : src/server/scripts/Outland/hellfire_citadel/magtheridons_lair/instance_magtheridons_lair.cpp => src/server/scripts/Outland/HellfireCitadel/magtheridons_lair/instance_magtheridons_lair.cpp
rename : src/server/scripts/Outland/hellfire_citadel/magtheridons_lair/magtheridons_lair.h => src/server/scripts/Outland/HellfireCitadel/magtheridons_lair/magtheridons_lair.h
rename : src/server/scripts/Outland/hellfire_citadel/shattered_halls/boss_nethekurse.cpp => src/server/scripts/Outland/HellfireCitadel/shattered_halls/boss_nethekurse.cpp
rename : src/server/scripts/Outland/hellfire_citadel/shattered_halls/boss_warbringer_omrogg.cpp => src/server/scripts/Outland/HellfireCitadel/shattered_halls/boss_warbringer_omrogg.cpp
rename : src/server/scripts/Outland/hellfire_citadel/shattered_halls/boss_warchief_kargath_bladefist.cpp => src/server/scripts/Outland/HellfireCitadel/shattered_halls/boss_warchief_kargath_bladefist.cpp
rename : src/server/scripts/Outland/hellfire_citadel/shattered_halls/instance_shattered_halls.cpp => src/server/scripts/Outland/HellfireCitadel/shattered_halls/instance_shattered_halls.cpp
rename : src/server/scripts/Outland/hellfire_citadel/shattered_halls/shattered_halls.h => src/server/scripts/Outland/HellfireCitadel/shattered_halls/shattered_halls.h
rename : src/server/scripts/Outland/tempest_keep/arcatraz/arcatraz.cpp => src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
rename : src/server/scripts/Outland/tempest_keep/arcatraz/arcatraz.h => src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h
rename : src/server/scripts/Outland/tempest_keep/arcatraz/boss_harbinger_skyriss.cpp => src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
rename : src/server/scripts/Outland/tempest_keep/arcatraz/instance_arcatraz.cpp => src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp
rename : src/server/scripts/Outland/tempest_keep/botanica/boss_high_botanist_freywinn.cpp => src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp
rename : src/server/scripts/Outland/tempest_keep/botanica/boss_laj.cpp => src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp
rename : src/server/scripts/Outland/tempest_keep/botanica/boss_warp_splinter.cpp => src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
rename : src/server/scripts/Outland/tempest_keep/the_eye/boss_alar.cpp => src/server/scripts/Outland/TempestKeep/the_eye/boss_alar.cpp
rename : src/server/scripts/Outland/tempest_keep/the_eye/boss_astromancer.cpp => src/server/scripts/Outland/TempestKeep/the_eye/boss_astromancer.cpp
rename : src/server/scripts/Outland/tempest_keep/the_eye/boss_kaelthas.cpp => src/server/scripts/Outland/TempestKeep/the_eye/boss_kaelthas.cpp
rename : src/server/scripts/Outland/tempest_keep/the_eye/boss_void_reaver.cpp => src/server/scripts/Outland/TempestKeep/the_eye/boss_void_reaver.cpp
rename : src/server/scripts/Outland/tempest_keep/the_eye/instance_the_eye.cpp => src/server/scripts/Outland/TempestKeep/the_eye/instance_the_eye.cpp
rename : src/server/scripts/Outland/tempest_keep/the_eye/the_eye.cpp => src/server/scripts/Outland/TempestKeep/the_eye/the_eye.cpp
rename : src/server/scripts/Outland/tempest_keep/the_eye/the_eye.h => src/server/scripts/Outland/TempestKeep/the_eye/the_eye.h
rename : src/server/scripts/Outland/tempest_keep/the_mechanar/boss_gatewatcher_gyrokill.cpp => src/server/scripts/Outland/TempestKeep/the_mechanar/boss_gatewatcher_gyrokill.cpp
rename : src/server/scripts/Outland/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp => src/server/scripts/Outland/TempestKeep/the_mechanar/boss_gatewatcher_ironhand.cpp
rename : src/server/scripts/Outland/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp => src/server/scripts/Outland/TempestKeep/the_mechanar/boss_nethermancer_sepethrea.cpp
rename : src/server/scripts/Outland/tempest_keep/the_mechanar/boss_pathaleon_the_calculator.cpp => src/server/scripts/Outland/TempestKeep/the_mechanar/boss_pathaleon_the_calculator.cpp
rename : src/server/scripts/Outland/tempest_keep/the_mechanar/instance_mechanar.cpp => src/server/scripts/Outland/TempestKeep/the_mechanar/instance_mechanar.cpp
rename : src/server/scripts/Outland/tempest_keep/the_mechanar/mechanar.h => src/server/scripts/Outland/TempestKeep/the_mechanar/mechanar.h
This commit is contained in:
click
2010-06-07 00:54:06 +02:00
parent ded01bb23c
commit dc510c9a14
473 changed files with 0 additions and 0 deletions
@@ -0,0 +1,185 @@
/* Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "ScriptedPch.h"
#include "naxxramas.h"
#define SAY_GREET RAND(-1533000,-1533004,-1533005,-1533006,-1533007)
#define SAY_AGGRO RAND(-1533001,-1533002,-1533003)
#define SAY_SLAY -1533008
#define MOB_CRYPT_GUARD 16573
const Position GuardSummonPos = {3333.72, -3476.30, 287.1, 6.2801};
enum Events
{
EVENT_NONE,
EVENT_IMPALE,
EVENT_LOCUST,
EVENT_SPAWN_GUARDIAN_NORMAL,
EVENT_BERSERK,
};
enum Spells
{
SPELL_IMPALE_10 = 28783,
SPELL_IMPALE_25 = 56090,
SPELL_LOCUST_SWARM_10 = 28785,
SPELL_LOCUST_SWARM_25 = 54021,
SPELL_SUMMON_CORPSE_SCARABS_PLR = 29105, // This spawns 5 corpse scarabs on top of player
SPELL_SUMMON_CORPSE_SCARABS_MOB = 28864, // This spawns 10 corpse scarabs on top of dead guards
SPELL_BERSERK = 27680,
};
enum
{
ACHIEV_TIMED_START_EVENT = 9891,
};
struct boss_anubrekhanAI : public BossAI
{
boss_anubrekhanAI(Creature *c) : BossAI(c, BOSS_ANUBREKHAN) {}
bool hasTaunted;
void Reset()
{
_Reset();
hasTaunted = false;
if (getDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL)
{
Position pos;
// respawn guard using home position,
// otherwise, after a wipe, they respawn where boss was at wipe moment.
pos = me->GetHomePosition();
pos.m_positionY -= 10.0f;
me->SummonCreature(MOB_CRYPT_GUARD, pos, TEMPSUMMON_CORPSE_DESPAWN);
pos = me->GetHomePosition();
pos.m_positionY += 10.0f;
me->SummonCreature(MOB_CRYPT_GUARD, pos, TEMPSUMMON_CORPSE_DESPAWN);
}
}
void KilledUnit(Unit* victim)
{
//Force the player to spawn corpse scarabs via spell, TODO: Check percent chance for scarabs, 20% at the moment
if (!(rand()%5))
if (victim->GetTypeId() == TYPEID_PLAYER)
victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCARABS_PLR, true, NULL, NULL, me->GetGUID());
DoScriptText(SAY_SLAY, me);
}
void JustDied(Unit *)
{
_JustDied();
// start achievement timer (kill Maexna within 20 min)
if (instance)
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
}
void EnterCombat(Unit * /*who*/)
{
_EnterCombat();
DoScriptText(SAY_AGGRO, me);
events.ScheduleEvent(EVENT_IMPALE, 10000 + rand()%10000);
events.ScheduleEvent(EVENT_LOCUST, 90000);
events.ScheduleEvent(EVENT_BERSERK, 600000);
if (getDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL)
events.ScheduleEvent(EVENT_SPAWN_GUARDIAN_NORMAL, urand(15000,20000));
}
void MoveInLineOfSight(Unit *who)
{
if (!hasTaunted && me->IsWithinDistInMap(who, 60.0f) && who->GetTypeId() == TYPEID_PLAYER)
{
DoScriptText(SAY_GREET, me);
hasTaunted = true;
}
ScriptedAI::MoveInLineOfSight(who);
}
void SummonedCreatureDespawn(Creature *summon)
{
BossAI::SummonedCreatureDespawn(summon);
// check if it is an actual killed guard
if (!me->isAlive() || summon->isAlive() || summon->GetEntry() != MOB_CRYPT_GUARD)
return;
summon->CastSpell(summon, SPELL_SUMMON_CORPSE_SCARABS_MOB, true, NULL, NULL, me->GetGUID());
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim() || !CheckInRoom())
return;
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_IMPALE:
//Cast Impale on a random target
//Do NOT cast it when we are afflicted by locust swarm
if (!me->HasAura(RAID_MODE(SPELL_LOCUST_SWARM_10,SPELL_LOCUST_SWARM_25)))
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, RAID_MODE(SPELL_IMPALE_10,SPELL_IMPALE_25));
events.ScheduleEvent(EVENT_IMPALE, urand(10000,20000));
break;
case EVENT_LOCUST:
// TODO : Add Text
DoCast(me, RAID_MODE(SPELL_LOCUST_SWARM_10,SPELL_LOCUST_SWARM_25));
DoSummon(MOB_CRYPT_GUARD, GuardSummonPos, 0, TEMPSUMMON_CORPSE_DESPAWN);
events.ScheduleEvent(EVENT_LOCUST, 90000);
break;
case EVENT_SPAWN_GUARDIAN_NORMAL:
// TODO : Add Text
DoSummon(MOB_CRYPT_GUARD, GuardSummonPos, 0, TEMPSUMMON_CORPSE_DESPAWN);
break;
case EVENT_BERSERK:
DoCast(me, SPELL_BERSERK, true);
events.ScheduleEvent(EVENT_BERSERK, 600000);
break;
}
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_anubrekhan(Creature* pCreature)
{
return new boss_anubrekhanAI (pCreature);
}
void AddSC_boss_anubrekhan()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_anubrekhan";
newscript->GetAI = &GetAI_boss_anubrekhan;
newscript->RegisterSelf();
}
@@ -0,0 +1,218 @@
/*
* Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "ScriptedPch.h"
#include "naxxramas.h"
enum Yells
{
SAY_GREET = -1533009,
SAY_AGGRO_1 = -1533010,
SAY_AGGRO_2 = -1533011,
SAY_AGGRO_3 = -1533012,
SAY_AGGRO_4 = -1533013,
SAY_SLAY_1 = -1533014,
SAY_SLAY_2 = -1533015,
SAY_DEATH = -1533016
};
//#define SOUND_RANDOM_AGGRO 8955 //soundId containing the 4 aggro sounds, we not using this
enum Spells
{
SPELL_POISON_BOLT_VOLLEY = 28796,
H_SPELL_POISON_BOLT_VOLLEY = 54098,
SPELL_RAIN_OF_FIRE = 28794,
H_SPELL_RAIN_OF_FIRE = 54099,
SPELL_FRENZY = 28798,
H_SPELL_FRENZY = 54100,
SPELL_WIDOWS_EMBRACE = 28732,
H_SPELL_WIDOWS_EMBRACE = 54097
};
enum Events
{
EVENT_NONE,
EVENT_POISON,
EVENT_FIRE,
EVENT_FRENZY
};
enum Achievements
{
ACHIEVEMENT_MOMMA_SAID_KNOCK_YOU_OUT_10 = 1997,
ACHIEVEMENT_MOMMA_SAID_KNOCK_YOU_OUT_25 = 2140
};
struct boss_faerlinaAI : public BossAI
{
boss_faerlinaAI(Creature *c) : BossAI(c, BOSS_FAERLINA), greet(false) {}
bool greet;
bool doDelayFrenzy;
bool bAchievement;
void EnterCombat(Unit * /*who*/)
{
_EnterCombat();
DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2,SAY_AGGRO_3,SAY_AGGRO_4), me);
events.ScheduleEvent(EVENT_POISON, urand(10000,15000));
events.ScheduleEvent(EVENT_FIRE, urand(6000,18000));
events.ScheduleEvent(EVENT_FRENZY, urand(60000,80000));
}
void Reset()
{
doDelayFrenzy = false;
bAchievement = true;
_Reset();
}
void MoveInLineOfSight(Unit *who)
{
if (!greet && who->GetTypeId() == TYPEID_PLAYER)
{
DoScriptText(SAY_GREET, me);
greet = true;
}
BossAI::MoveInLineOfSight(who);
}
void KilledUnit(Unit* /*victim*/)
{
if (!(rand()%3))
DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), me);
}
void JustDied(Unit* /*Killer*/)
{
_JustDied();
DoScriptText(SAY_DEATH, me);
if (instance && bAchievement)
instance->DoCompleteAchievement(RAID_MODE(ACHIEVEMENT_MOMMA_SAID_KNOCK_YOU_OUT_10,ACHIEVEMENT_MOMMA_SAID_KNOCK_YOU_OUT_25));
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
if (doDelayFrenzy && !me->HasAura(RAID_MODE(SPELL_WIDOWS_EMBRACE, H_SPELL_WIDOWS_EMBRACE)))
{
doDelayFrenzy = false;
DoCast(me, RAID_MODE(SPELL_FRENZY, H_SPELL_FRENZY), true);
}
events.Update(diff);
if (me->hasUnitState(UNIT_STAT_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_POISON:
if (!me->HasAura(RAID_MODE(SPELL_WIDOWS_EMBRACE,H_SPELL_WIDOWS_EMBRACE)))
DoCastAOE(RAID_MODE(SPELL_POISON_BOLT_VOLLEY,H_SPELL_POISON_BOLT_VOLLEY));
events.ScheduleEvent(EVENT_POISON, urand(8000,15000));
break;
case EVENT_FIRE:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, RAID_MODE(SPELL_RAIN_OF_FIRE, H_SPELL_RAIN_OF_FIRE));
events.ScheduleEvent(EVENT_FIRE, urand(6000,18000));
break;
case EVENT_FRENZY:
// TODO : Add Text
if (!me->HasAura(RAID_MODE(SPELL_WIDOWS_EMBRACE,H_SPELL_WIDOWS_EMBRACE)))
DoCast(me, RAID_MODE(SPELL_FRENZY, H_SPELL_FRENZY));
else
doDelayFrenzy = true;
events.ScheduleEvent(EVENT_FRENZY, urand(60000,80000));
break;
}
}
DoMeleeAttackIfReady();
}
void SpellHit(Unit* caster, const SpellEntry *spell)
{
if (spell->Id == SPELL_WIDOWS_EMBRACE || spell->Id == H_SPELL_WIDOWS_EMBRACE)
{
// TODO : Add Text
bAchievement = false;
doDelayFrenzy = true;
me->Kill(caster);
}
}
};
CreatureAI* GetAI_boss_faerlina(Creature* pCreature)
{
return new boss_faerlinaAI (pCreature);
}
struct mob_faerlina_addAI : public ScriptedAI
{
mob_faerlina_addAI(Creature* pCreature) : ScriptedAI(pCreature)
{
pInstance = pCreature->GetInstanceData();
}
ScriptedInstance *pInstance;
void Reset()
{
if (getDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL) {
me->ApplySpellImmune(0, IMMUNITY_MECHANIC, SPELL_EFFECT_BIND, true);
me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_CHARM, true);
}
}
void JustDied(Unit * /*killer*/)
{
if (pInstance && getDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL)
{
if (Creature *pFaerlina = pInstance->instance->GetCreature(pInstance->GetData64(DATA_FAERLINA)))
DoCast(pFaerlina, SPELL_WIDOWS_EMBRACE);
}
}
};
CreatureAI* GetAI_mob_faerlina_add(Creature* pCreature)
{
return new mob_faerlina_addAI (pCreature);
}
void AddSC_boss_faerlina()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_faerlina";
newscript->GetAI = &GetAI_boss_faerlina;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "mob_faerlina_add";
newscript->GetAI = &GetAI_mob_faerlina_add;
newscript->RegisterSelf();
}
@@ -0,0 +1,397 @@
/* Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "ScriptedPch.h"
#include "naxxramas.h"
enum Horsemen
{
HORSEMEN_THANE,
HORSEMEN_LADY,
HORSEMEN_BARON,
HORSEMEN_SIR,
};
enum Events
{
EVENT_NONE,
EVENT_MARK,
EVENT_CAST,
EVENT_BERSERK,
};
const Position WaypointPositions[12] =
{
// Thane waypoints
{2542.3, -2984.1, 241.49, 5.362},
{2547.6, -2999.4, 241.34, 5.049},
{2542.9, -3015.0, 241.35, 4.654},
// Lady waypoints
{2498.3, -2961.8, 241.28, 3.267},
{2487.7, -2959.2, 241.28, 2.890},
{2469.4, -2947.6, 241.28, 2.576},
// Baron waypoints
{2553.8, -2968.4, 241.33, 5.757},
{2564.3, -2972.5, 241.33, 5.890},
{2583.9, -2971.67, 241.35, 0.008},
// Sir waypoints
{2534.5, -2921.7, 241.53, 1.363},
{2523.5, -2902.8, 241.28, 2.095},
{2517.8, -2896.6, 241.28, 2.315},
};
const uint32 MOB_HORSEMEN[] = {16064, 16065, 30549, 16063};
const uint32 SPELL_MARK[] = {28832, 28833, 28834, 28835};
#define SPELL_PRIMARY(i) RAID_MODE(SPELL_PRIMARY_N[i],SPELL_PRIMARY_H[i])
const uint32 SPELL_PRIMARY_N[] = {28884, 28863, 28882, 28883};
const uint32 SPELL_PRIMARY_H[] = {57467, 57463, 57369, 57466};
#define SPELL_SECONDARY(i) RAID_MODE(SPELL_SECONDARY_N[i],SPELL_SECONDARY_H[i])
const uint32 SPELL_SECONDARY_N[]= {0, 57374, 0, 57376};
const uint32 SPELL_SECONDARY_H[]= {0, 57464, 0, 57465};
const uint32 SPELL_PUNISH[] = {0, 57381, 0, 57377};
#define SPELL_BERSERK 26662
// used by 16063,16064,16065,30549, but signed for 16063
const int32 SAY_AGGRO[] = {-1533051, -1533044, -1533065, -1533058};
const int32 SAY_TAUNT[3][4] ={ {-1533052, -1533045, -1533071, -1533059},
{-1533053, -1533046, -1533072, -1533060},
{-1533054, -1533047, -1533073, -1533061},};
const int32 SAY_SPECIAL[] = {-1533055, -1533048, -1533070, -1533062};
const int32 SAY_SLAY[] = {-1533056, -1533049, -1533068, -1533063};
const int32 SAY_DEATH[] = {-1533057, -1533050, -1533074, -1533064};
#define SAY_BARON_AGGRO RAND(-1533065,-1533066,-1533067)
#define SAY_BARON_SLAY RAND(-1533068,-1533069)
struct boss_four_horsemenAI : public BossAI
{
boss_four_horsemenAI(Creature *c) : BossAI(c, BOSS_HORSEMEN)
{
id = Horsemen(0);
for (uint8 i = 0; i < 4; ++i)
if (me->GetEntry() == MOB_HORSEMEN[i])
id = Horsemen(i);
caster = (id == HORSEMEN_LADY || id == HORSEMEN_SIR);
}
Horsemen id;
uint64 uiEventStarterGUID;
uint8 nextWP;
uint32 punishTimer;
bool caster;
bool nextMovementStarted;
bool movementCompleted;
bool movementStarted;
bool encounterActionAttack;
bool encounterActionReset;
bool doDelayPunish;
void Reset()
{
if (!encounterActionReset)
DoEncounterAction(NULL, false, true, false);
if (instance)
instance->SetData(DATA_HORSEMEN0 + id, NOT_STARTED);
me->SetReactState(REACT_AGGRESSIVE);
uiEventStarterGUID = 0;
nextWP = 0;
punishTimer = 2000;
nextMovementStarted = false;
movementCompleted = false;
movementStarted = false;
encounterActionAttack = false;
encounterActionReset = false;
doDelayPunish = false;
_Reset();
}
bool DoEncounterAction(Unit *who, bool attack, bool reset, bool checkAllDead)
{
if (!instance)
return false;
Creature *Thane = CAST_CRE(Unit::GetUnit(*me, instance->GetData64(DATA_THANE)));
Creature *Lady = CAST_CRE(Unit::GetUnit(*me, instance->GetData64(DATA_LADY)));
Creature *Baron = CAST_CRE(Unit::GetUnit(*me, instance->GetData64(DATA_BARON)));
Creature *Sir = CAST_CRE(Unit::GetUnit(*me, instance->GetData64(DATA_SIR)));
if (Thane && Lady && Baron && Sir)
{
if (attack && who)
{
CAST_AI(boss_four_horsemenAI, Thane->AI())->encounterActionAttack = true;
CAST_AI(boss_four_horsemenAI, Lady->AI())->encounterActionAttack = true;
CAST_AI(boss_four_horsemenAI, Baron->AI())->encounterActionAttack = true;
CAST_AI(boss_four_horsemenAI, Sir->AI())->encounterActionAttack = true;
CAST_AI(boss_four_horsemenAI, Thane->AI())->AttackStart(who);
CAST_AI(boss_four_horsemenAI, Lady->AI())->AttackStart(who);
CAST_AI(boss_four_horsemenAI, Baron->AI())->AttackStart(who);
CAST_AI(boss_four_horsemenAI, Sir->AI())->AttackStart(who);
}
if (reset)
{
if (instance->GetBossState(BOSS_HORSEMEN) != NOT_STARTED)
{
if (!Thane->isAlive())
Thane->Respawn();
if (!Lady->isAlive())
Lady->Respawn();
if (!Baron->isAlive())
Baron->Respawn();
if (!Sir->isAlive())
Sir->Respawn();
CAST_AI(boss_four_horsemenAI, Thane->AI())->encounterActionReset = true;
CAST_AI(boss_four_horsemenAI, Lady->AI())->encounterActionReset = true;
CAST_AI(boss_four_horsemenAI, Baron->AI())->encounterActionReset = true;
CAST_AI(boss_four_horsemenAI, Sir->AI())->encounterActionReset = true;
CAST_AI(boss_four_horsemenAI, Thane->AI())->EnterEvadeMode();
CAST_AI(boss_four_horsemenAI, Lady->AI())->EnterEvadeMode();
CAST_AI(boss_four_horsemenAI, Baron->AI())->EnterEvadeMode();
CAST_AI(boss_four_horsemenAI, Sir->AI())->EnterEvadeMode();
}
}
if (checkAllDead)
return !Thane->isAlive() && !Lady->isAlive() && !Baron->isAlive() && !Sir->isAlive();
}
return false;
}
void BeginFourHorsemenMovement()
{
movementStarted = true;
me->SetReactState(REACT_PASSIVE);
me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
me->SetSpeed(MOVE_RUN, me->GetSpeedRate(MOVE_RUN), true);
switch(id)
{
case HORSEMEN_THANE:
me->GetMotionMaster()->MovePoint(0, WaypointPositions[0]);
break;
case HORSEMEN_LADY:
me->GetMotionMaster()->MovePoint(3, WaypointPositions[3]);
break;
case HORSEMEN_BARON:
me->GetMotionMaster()->MovePoint(6, WaypointPositions[6]);
break;
case HORSEMEN_SIR:
me->GetMotionMaster()->MovePoint(9, WaypointPositions[9]);
break;
}
}
void MovementInform(uint32 type, uint32 id)
{
if (type != POINT_MOTION_TYPE)
return;
if (id == 2 || id == 5 || id == 8 || id == 11)
{
movementCompleted = true;
me->SetReactState(REACT_AGGRESSIVE);
Unit *eventStarter = Unit::GetUnit(*me, uiEventStarterGUID);
if (eventStarter && me->canAttack(eventStarter))
AttackStart(eventStarter);
else if (!UpdateVictim())
{
EnterEvadeMode();
return;
}
if (caster)
{
me->GetMotionMaster()->Clear();
me->GetMotionMaster()->MoveIdle();
}
return;
}
nextMovementStarted = false;
nextWP = id + 1;
}
// switch to "who" if nearer than current target.
void SelectNearestTarget(Unit *who)
{
if (me->getVictim() && me->GetDistanceOrder(who, me->getVictim()) && me->canAttack(who))
{
me->getThreatManager().modifyThreatPercent(me->getVictim(), -100);
me->AddThreat(who, 1000000.0f);
}
}
void MoveInLineOfSight(Unit *who)
{
BossAI::MoveInLineOfSight(who);
if (caster)
SelectNearestTarget(who);
}
void AttackStart(Unit *who)
{
if (!movementCompleted && !movementStarted)
{
uiEventStarterGUID = who->GetGUID();
BeginFourHorsemenMovement();
if (!encounterActionAttack)
DoEncounterAction(who, true, false, false);
}
else if (movementCompleted && movementStarted)
{
if (caster)
me->Attack(who, false);
else
BossAI::AttackStart(who);
}
}
void KilledUnit(Unit* /*victim*/)
{
if (!(rand()%5))
{
if (id == HORSEMEN_BARON)
DoScriptText(SAY_BARON_SLAY, me);
else
DoScriptText(SAY_SLAY[id], me);
}
}
void JustDied(Unit* /*killer*/)
{
events.Reset();
summons.DespawnAll();
if (instance)
instance->SetData(DATA_HORSEMEN0 + id, DONE);
if (instance && DoEncounterAction(NULL, false, false, true))
{
instance->SetBossState(BOSS_HORSEMEN, DONE);
instance->SaveToDB();
// Achievements related to the 4-horsemen are given through spell 59450 which does not exist.
// There is thus no way it can be given by casting the spell on the players.
instance->DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, 59450);
}
DoScriptText(SAY_DEATH[id], me);
}
void EnterCombat(Unit * /*who*/)
{
_EnterCombat();
if (id == HORSEMEN_BARON)
DoScriptText(SAY_BARON_AGGRO, me);
else
DoScriptText(SAY_AGGRO[id], me);
events.ScheduleEvent(EVENT_MARK, 15000);
events.ScheduleEvent(EVENT_CAST, 20000+rand()%5000);
events.ScheduleEvent(EVENT_BERSERK, 15*100*1000);
}
void UpdateAI(const uint32 diff)
{
if (nextWP && movementStarted && !movementCompleted && !nextMovementStarted)
{
nextMovementStarted = true;
me->GetMotionMaster()->MovePoint(nextWP, WaypointPositions[nextWP]);
}
if (!UpdateVictim() || !CheckInRoom() || !movementCompleted)
return;
events.Update(diff);
if (me->hasUnitState(UNIT_STAT_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_MARK:
if (!(rand()%5))
DoScriptText(SAY_SPECIAL[id], me);
DoCastAOE(SPELL_MARK[id]);
events.ScheduleEvent(EVENT_MARK, 15000);
break;
case EVENT_CAST:
if (!(rand()%5))
DoScriptText(SAY_TAUNT[rand()%3][id], me);
if (caster)
{
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f))
DoCast(pTarget, SPELL_PRIMARY(id));
}
else
DoCast(me->getVictim(), SPELL_PRIMARY(id));
events.ScheduleEvent(EVENT_CAST, 15000);
break;
case EVENT_BERSERK:
DoScriptText(SAY_SPECIAL[id], me);
DoCast(me, EVENT_BERSERK);
break;
}
}
if (punishTimer <= diff)
{
if (doDelayPunish)
{
DoCastAOE(SPELL_PUNISH[id], true);
doDelayPunish = false;
}
punishTimer = 2000;
} else punishTimer -= diff;
if (!caster)
DoMeleeAttackIfReady();
else if ((!DoSpellAttackIfReady(SPELL_SECONDARY(id)) || !me->IsWithinLOSInMap(me->getVictim())) && movementCompleted && !doDelayPunish)
doDelayPunish = true;
}
};
CreatureAI* GetAI_four_horsemen(Creature* pCreature)
{
return new boss_four_horsemenAI (pCreature);
}
void AddSC_boss_four_horsemen()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_four_horsemen";
newscript->GetAI = &GetAI_four_horsemen;
newscript->RegisterSelf();
}
@@ -0,0 +1,147 @@
/* Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "ScriptedPch.h"
#include "naxxramas.h"
#define SPELL_MORTAL_WOUND 25646
#define SPELL_ENRAGE RAID_MODE(28371,54427)
#define SPELL_DECIMATE RAID_MODE(28374,54426)
#define SPELL_BERSERK 26662
#define SPELL_INFECTED_WOUND 29306
#define MOB_ZOMBIE 16360
const Position PosSummon[3] =
{
{3267.9, -3172.1, 297.42, 0.94},
{3253.2, -3132.3, 297.42, 0},
{3308.3, -3185.8, 297.42, 1.58},
};
enum Events
{
EVENT_NONE,
EVENT_WOUND,
EVENT_ENRAGE,
EVENT_DECIMATE,
EVENT_BERSERK,
EVENT_SUMMON,
};
#define EMOTE_NEARBY " spots a nearby zombie to devour!"
struct boss_gluthAI : public BossAI
{
boss_gluthAI(Creature *c) : BossAI(c, BOSS_GLUTH)
{
// Do not let Gluth be affected by zombies' debuff
me->ApplySpellImmune(0, IMMUNITY_ID, SPELL_INFECTED_WOUND, true);
}
void MoveInLineOfSight(Unit *who)
{
if (who->GetEntry() == MOB_ZOMBIE && me->IsWithinDistInMap(who, 7))
{
SetGazeOn(who);
// TODO: use a script text
me->MonsterTextEmote(EMOTE_NEARBY, 0, true);
}
else
BossAI::MoveInLineOfSight(who);
}
void EnterCombat(Unit * /*who*/)
{
_EnterCombat();
events.ScheduleEvent(EVENT_WOUND, 10000);
events.ScheduleEvent(EVENT_ENRAGE, 15000);
events.ScheduleEvent(EVENT_DECIMATE, 105000);
events.ScheduleEvent(EVENT_BERSERK, 8*60000);
events.ScheduleEvent(EVENT_SUMMON, 15000);
}
void JustSummoned(Creature *summon)
{
if (summon->GetEntry() == MOB_ZOMBIE)
summon->AI()->AttackStart(me);
summons.Summon(summon);
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictimWithGaze() || !CheckInRoom())
return;
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_WOUND:
DoCast(me->getVictim(), SPELL_MORTAL_WOUND);
events.ScheduleEvent(EVENT_WOUND, 10000);
break;
case EVENT_ENRAGE:
// TODO : Add missing text
DoCast(me, SPELL_ENRAGE);
events.ScheduleEvent(EVENT_ENRAGE, 15000);
break;
case EVENT_DECIMATE:
// TODO : Add missing text
DoCastAOE(SPELL_DECIMATE);
events.ScheduleEvent(EVENT_DECIMATE, 105000);
break;
case EVENT_BERSERK:
DoCast(me, SPELL_BERSERK);
events.ScheduleEvent(EVENT_BERSERK, 5*60000);
break;
case EVENT_SUMMON:
for (uint32 i = 0; i < RAID_MODE(1,2); ++i)
DoSummon(MOB_ZOMBIE, PosSummon[rand()%3]);
events.ScheduleEvent(EVENT_SUMMON, 10000);
break;
}
}
if (me->getVictim() && me->getVictim()->GetEntry() == MOB_ZOMBIE)
{
if (me->IsWithinMeleeRange(me->getVictim()))
{
me->Kill(me->getVictim());
me->ModifyHealth(me->GetMaxHealth() * 0.05f);
}
}
else
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_gluth(Creature* pCreature)
{
return new boss_gluthAI (pCreature);
}
void AddSC_boss_gluth()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_gluth";
newscript->GetAI = &GetAI_boss_gluth;
newscript->RegisterSelf();
}
@@ -0,0 +1,582 @@
/* Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "ScriptedPch.h"
#include "naxxramas.h"
enum Yells
{
SAY_SPEECH = -1533040,
SAY_KILL = -1533041,
SAY_DEATH = -1533042,
SAY_TELEPORT = -1533043
};
//Gothik
enum Spells
{
SPELL_HARVEST_SOUL = 28679,
SPELL_SHADOW_BOLT = 29317,
H_SPELL_SHADOW_BOLT = 56405,
SPELL_INFORM_LIVE_TRAINEE = 27892,
SPELL_INFORM_LIVE_KNIGHT = 27928,
SPELL_INFORM_LIVE_RIDER = 27935,
SPELL_INFORM_DEAD_TRAINEE = 27915,
SPELL_INFORM_DEAD_KNIGHT = 27931,
SPELL_INFORM_DEAD_RIDER = 27937
};
enum Creatures
{
MOB_LIVE_TRAINEE = 16124,
MOB_LIVE_KNIGHT = 16125,
MOB_LIVE_RIDER = 16126,
MOB_DEAD_TRAINEE = 16127,
MOB_DEAD_KNIGHT = 16148,
MOB_DEAD_RIDER = 16150,
MOB_DEAD_HORSE = 16149
};
struct Waves { uint32 entry, time, mode; };
// wave setups are not the same in heroic and normal difficulty,
// mode is 0 only normal, 1 both and 2 only heroic
// but this is handled in DoGothikSummon function
const Waves waves[] =
{
{MOB_LIVE_TRAINEE, 20000, 1},
{MOB_LIVE_TRAINEE, 20000, 1},
{MOB_LIVE_TRAINEE, 10000, 1},
{MOB_LIVE_KNIGHT, 10000, 1},
{MOB_LIVE_TRAINEE, 15000, 1},
{MOB_LIVE_KNIGHT, 5000, 1},
{MOB_LIVE_TRAINEE, 20000, 1},
{MOB_LIVE_TRAINEE, 0, 1},
{MOB_LIVE_KNIGHT, 10000, 1},
{MOB_LIVE_TRAINEE, 10000, 2},
{MOB_LIVE_RIDER, 10000, 0},
{MOB_LIVE_RIDER, 5000, 2},
{MOB_LIVE_TRAINEE, 5000, 0},
{MOB_LIVE_TRAINEE, 15000, 2},
{MOB_LIVE_KNIGHT, 15000, 0},
{MOB_LIVE_TRAINEE, 0, 0},
{MOB_LIVE_RIDER, 10000, 1},
{MOB_LIVE_KNIGHT, 10000, 1},
{MOB_LIVE_TRAINEE, 10000, 0},
{MOB_LIVE_RIDER, 10000, 2},
{MOB_LIVE_TRAINEE, 0, 2},
{MOB_LIVE_RIDER, 5000, 1},
{MOB_LIVE_TRAINEE, 0, 2},
{MOB_LIVE_KNIGHT, 5000, 1},
{MOB_LIVE_RIDER, 0, 2},
{MOB_LIVE_TRAINEE, 20000, 1},
{MOB_LIVE_RIDER, 0, 1},
{MOB_LIVE_KNIGHT, 0, 1},
{MOB_LIVE_TRAINEE, 25000, 2},
{MOB_LIVE_TRAINEE, 15000, 0},
{MOB_LIVE_TRAINEE, 25000, 0},
{0, 0, 1},
};
#define POS_Y_GATE -3360.78f
#define POS_Y_WEST -3285.0f
#define POS_Y_EAST -3434.0f
#define POS_X_NORTH 2750.49f
#define POS_X_SOUTH 2633.84f
#define IN_LIVE_SIDE(who) (who->GetPositionY() < POS_Y_GATE)
enum Events
{
EVENT_NONE,
EVENT_SUMMON,
EVENT_HARVEST,
EVENT_BOLT,
EVENT_TELEPORT
};
enum Pos
{
POS_LIVE = 6,
POS_DEAD = 5
};
const Position PosSummonLive[POS_LIVE] =
{
{2669.7, -3428.76, 268.56, 1.6},
{2692.1, -3428.76, 268.56, 1.6},
{2714.4, -3428.76, 268.56, 1.6},
{2669.7, -3431.67, 268.56, 1.6},
{2692.1, -3431.67, 268.56, 1.6},
{2714.4, -3431.67, 268.56, 1.6},
};
const Position PosSummonDead[POS_DEAD] =
{
{2725.1, -3310.0, 268.85, 3.4},
{2699.3, -3322.8, 268.60, 3.3},
{2733.1, -3348.5, 268.84, 3.1},
{2682.8, -3304.2, 268.85, 3.9},
{2664.8, -3340.7, 268.23, 3.7},
};
const float PosGroundLiveSide[4] = {2691.2, -3387.0, 267.68, 1.52};
const float PosGroundDeadSide[4] = {2693.5, -3334.6, 267.68, 4.67};
const float PosPlatform[4] = {2640.5, -3360.6, 285.26, 0};
// Predicate function to check that the r efzr unit is NOT on the same side as the source.
struct NotOnSameSide : public std::unary_function<Unit *, bool> {
bool m_inLiveSide;
NotOnSameSide(Unit *pSource) : m_inLiveSide(IN_LIVE_SIDE(pSource)) {}
bool operator() (const Unit *pTarget) {
return (m_inLiveSide != IN_LIVE_SIDE(pTarget));
}
};
struct boss_gothikAI : public BossAI
{
boss_gothikAI(Creature *c) : BossAI(c, BOSS_GOTHIK) {}
uint32 waveCount;
typedef std::vector<Creature*> TriggerVct;
TriggerVct liveTrigger, deadTrigger;
bool mergedSides;
bool phaseTwo;
bool thirtyPercentReached;
std::vector<uint64> LiveTriggerGUID;
std::vector<uint64> DeadTriggerGUID;
void Reset()
{
LiveTriggerGUID.clear();
DeadTriggerGUID.clear();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_DISABLE_MOVE);
me->SetReactState(REACT_PASSIVE);
if (instance)
instance->SetData(DATA_GOTHIK_GATE, GO_STATE_ACTIVE);
_Reset();
mergedSides = false;
phaseTwo = false;
thirtyPercentReached = false;
}
void EnterCombat(Unit * /*who*/)
{
for (uint32 i = 0; i < POS_LIVE; ++i)
if (Creature *trigger = DoSummon(WORLD_TRIGGER, PosSummonLive[i]))
LiveTriggerGUID.push_back(trigger->GetGUID());
for (uint32 i = 0; i < POS_DEAD; ++i)
if (Creature *trigger = DoSummon(WORLD_TRIGGER, PosSummonDead[i]))
DeadTriggerGUID.push_back(trigger->GetGUID());
if (LiveTriggerGUID.size() < POS_LIVE || DeadTriggerGUID.size() < POS_DEAD)
{
error_log("Script Gothik: cannot summon triggers!");
EnterEvadeMode();
return;
}
_EnterCombat();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_DISABLE_MOVE);
waveCount = 0;
events.ScheduleEvent(EVENT_SUMMON, 30000);
DoTeleportTo(PosPlatform);
DoScriptText(SAY_SPEECH, me);
if (instance)
instance->SetData(DATA_GOTHIK_GATE, GO_STATE_READY);
}
void JustSummoned(Creature *summon)
{
if (summon->GetEntry() == WORLD_TRIGGER)
summon->setActive(true);
else if (!mergedSides)
{
summon->AI()->DoAction(me->HasReactState(REACT_PASSIVE) ? 1 : 0);
summon->AI()->EnterEvadeMode();
}
else
{
summon->AI()->DoAction(0);
summon->AI()->DoZoneInCombat();
}
summons.Summon(summon);
}
void SummonedCreatureDespawn(Creature *summon)
{
summons.Despawn(summon);
}
void KilledUnit(Unit* /*victim*/)
{
if (!(rand()%5))
DoScriptText(SAY_KILL, me);
}
void JustDied(Unit* /*Killer*/)
{
LiveTriggerGUID.clear();
DeadTriggerGUID.clear();
_JustDied();
DoScriptText(SAY_DEATH, me);
if (instance)
instance->SetData(DATA_GOTHIK_GATE, GO_STATE_ACTIVE);
}
void DoGothikSummon(uint32 entry)
{
if (getDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL)
{
switch(entry)
{
case MOB_LIVE_TRAINEE:
{
if (Creature *LiveTrigger0 = Unit::GetCreature(*me, LiveTriggerGUID[0]))
DoSummon(MOB_LIVE_TRAINEE, LiveTrigger0, 1);
if (Creature *LiveTrigger1 = Unit::GetCreature(*me, LiveTriggerGUID[1]))
DoSummon(MOB_LIVE_TRAINEE, LiveTrigger1, 1);
if (Creature *LiveTrigger2 = Unit::GetCreature(*me, LiveTriggerGUID[2]))
DoSummon(MOB_LIVE_TRAINEE, LiveTrigger2, 1);
break;
}
case MOB_LIVE_KNIGHT:
{
if (Creature *LiveTrigger3 = Unit::GetCreature(*me, LiveTriggerGUID[3]))
DoSummon(MOB_LIVE_KNIGHT, LiveTrigger3, 1);
if (Creature *LiveTrigger5 = Unit::GetCreature(*me, LiveTriggerGUID[5]))
DoSummon(MOB_LIVE_KNIGHT, LiveTrigger5, 1);
break;
}
case MOB_LIVE_RIDER:
{
if (Creature *LiveTrigger4 = Unit::GetCreature(*me, LiveTriggerGUID[4]))
DoSummon(MOB_LIVE_RIDER, LiveTrigger4, 1);
break;
}
}
}
else
{
switch(entry)
{
case MOB_LIVE_TRAINEE:
{
if (Creature *LiveTrigger0 = Unit::GetCreature(*me, LiveTriggerGUID[4]))
DoSummon(MOB_LIVE_TRAINEE, LiveTrigger0, 1);
if (Creature *LiveTrigger1 = Unit::GetCreature(*me, LiveTriggerGUID[4]))
DoSummon(MOB_LIVE_TRAINEE, LiveTrigger1, 1);
break;
}
case MOB_LIVE_KNIGHT:
{
if (Creature *LiveTrigger5 = Unit::GetCreature(*me, LiveTriggerGUID[4]))
DoSummon(MOB_LIVE_KNIGHT, LiveTrigger5, 1);
break;
}
case MOB_LIVE_RIDER:
{
if (Creature *LiveTrigger4 = Unit::GetCreature(*me, LiveTriggerGUID[4]))
DoSummon(MOB_LIVE_RIDER, LiveTrigger4, 1);
break;
}
}
}
}
bool CheckGroupSplitted()
{
bool checklife = false;
bool checkdead = false;
Map* pMap = me->GetMap();
if (pMap && pMap->IsDungeon())
{
Map::PlayerList const &PlayerList = pMap->GetPlayers();
if (!PlayerList.isEmpty())
{
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
{
if (i->getSource() && i->getSource()->isAlive() &&
i->getSource()->GetPositionX() <= POS_X_NORTH &&
i->getSource()->GetPositionX() >= POS_X_SOUTH &&
i->getSource()->GetPositionY() <= POS_Y_GATE &&
i->getSource()->GetPositionY() >= POS_Y_EAST)
{
checklife = true;
}
else if (i->getSource() && i->getSource()->isAlive() &&
i->getSource()->GetPositionX() <= POS_X_NORTH &&
i->getSource()->GetPositionX() >= POS_X_SOUTH &&
i->getSource()->GetPositionY() >= POS_Y_GATE &&
i->getSource()->GetPositionY() <= POS_Y_WEST)
{
checkdead = true;
}
if (checklife && checkdead)
return true;
}
}
}
return false;
}
void SpellHit(Unit * /*caster*/, const SpellEntry *spell)
{
uint32 spellId = 0;
switch(spell->Id)
{
case SPELL_INFORM_LIVE_TRAINEE: spellId = SPELL_INFORM_DEAD_TRAINEE; break;
case SPELL_INFORM_LIVE_KNIGHT: spellId = SPELL_INFORM_DEAD_KNIGHT; break;
case SPELL_INFORM_LIVE_RIDER: spellId = SPELL_INFORM_DEAD_RIDER; break;
}
if (spellId && me->isInCombat())
{
me->HandleEmoteCommand(EMOTE_ONESHOT_SPELLCAST);
if (Creature *pRandomDeadTrigger = Unit::GetCreature(*me, DeadTriggerGUID[rand() % POS_DEAD]))
me->CastSpell(pRandomDeadTrigger, spellId, true);
}
}
void SpellHitTarget(Unit *pTarget, const SpellEntry *spell)
{
if (!me->isInCombat())
return;
switch(spell->Id)
{
case SPELL_INFORM_DEAD_TRAINEE:
DoSummon(MOB_DEAD_TRAINEE, pTarget, 0);
break;
case SPELL_INFORM_DEAD_KNIGHT:
DoSummon(MOB_DEAD_KNIGHT, pTarget, 0);
break;
case SPELL_INFORM_DEAD_RIDER:
DoSummon(MOB_DEAD_RIDER, pTarget, 1.0f);
DoSummon(MOB_DEAD_HORSE, pTarget, 1.0f);
break;
}
}
void UpdateAI(const uint32 diff)
{
if (!UpdateCombatState() || !CheckInRoom())
return;
events.Update(diff);
if (!thirtyPercentReached && HealthBelowPct(30) && phaseTwo)
{
thirtyPercentReached = true;
if (instance)
instance->SetData(DATA_GOTHIK_GATE, GO_STATE_ACTIVE);
}
if (me->hasUnitState(UNIT_STAT_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_SUMMON:
if (waves[waveCount].entry)
{
if ((waves[waveCount].mode == 2) && (getDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL))
DoGothikSummon(waves[waveCount].entry);
else if ((waves[waveCount].mode == 0) && (getDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL))
DoGothikSummon(waves[waveCount].entry);
else if (waves[waveCount].mode == 1)
DoGothikSummon(waves[waveCount].entry);
// if group is not splitted, open gate and merge both sides at ~ 2 minutes (wave 11)
if (waveCount == 11)
{
if (!CheckGroupSplitted())
{
if (instance)
instance->SetData(DATA_GOTHIK_GATE, GO_STATE_ACTIVE);
summons.DoAction(0, 0);
summons.DoZoneInCombat();
mergedSides = true;
}
}
if (waves[waveCount].mode == 1)
events.ScheduleEvent(EVENT_SUMMON,waves[waveCount].time);
else if ((waves[waveCount].mode == 2) && (getDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL))
events.ScheduleEvent(EVENT_SUMMON,waves[waveCount].time);
else if ((waves[waveCount].mode == 0) && (getDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL))
events.ScheduleEvent(EVENT_SUMMON,waves[waveCount].time);
else
events.ScheduleEvent(EVENT_SUMMON, 0);
++waveCount;
}
else
{
phaseTwo = true;
DoScriptText(SAY_TELEPORT, me);
DoTeleportTo(PosGroundLiveSide);
me->SetReactState(REACT_AGGRESSIVE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
summons.DoAction(0, 0);
summons.DoZoneInCombat();
events.ScheduleEvent(EVENT_BOLT, 1000);
events.ScheduleEvent(EVENT_HARVEST, urand(3000,15000));
events.ScheduleEvent(EVENT_TELEPORT, 20000);
}
break;
case EVENT_BOLT:
DoCast(me->getVictim(), RAID_MODE(SPELL_SHADOW_BOLT, H_SPELL_SHADOW_BOLT));
events.ScheduleEvent(EVENT_BOLT, 1000);
break;
case EVENT_HARVEST:
DoCast(me->getVictim(), SPELL_HARVEST_SOUL, true);
events.ScheduleEvent(EVENT_HARVEST, urand(20000,25000));
break;
case EVENT_TELEPORT:
if (!thirtyPercentReached)
{
me->AttackStop();
if (IN_LIVE_SIDE(me))
{
DoTeleportTo(PosGroundDeadSide);
}
else
{
DoTeleportTo(PosGroundLiveSide);
}
me->getThreatManager().resetAggro(NotOnSameSide(me));
if (Unit *pTarget = SelectTarget(SELECT_TARGET_NEAREST, 0))
{
me->getThreatManager().addThreat(pTarget, 100.0f);
AttackStart(pTarget);
}
events.ScheduleEvent(EVENT_TELEPORT, 20000);
}
break;
}
}
DoMeleeAttackIfReady();
}
};
struct mob_gothik_minionAI : public CombatAI
{
mob_gothik_minionAI(Creature *c) : CombatAI(c)
{
liveSide = IN_LIVE_SIDE(me);
}
bool liveSide;
bool gateClose;
bool isOnSameSide(const Unit *pWho)
{
return (liveSide == IN_LIVE_SIDE(pWho));
}
void DoAction(const int32 param)
{
gateClose = param;
}
void DamageTaken(Unit *attacker, uint32 &damage)
{
if (gateClose && !isOnSameSide(attacker))
damage = 0;
}
void JustDied(Unit * /*killer*/)
{
if (me->isSummon())
{
if (Unit *owner = CAST_SUM(me)->GetSummoner())
CombatAI::JustDied(owner);
}
}
void EnterEvadeMode()
{
if (!gateClose)
{
CombatAI::EnterEvadeMode();
return;
}
if (!_EnterEvadeMode())
return;
Map* pMap = me->GetMap();
if (pMap->IsDungeon())
{
Map::PlayerList const &PlayerList = pMap->GetPlayers();
if (!PlayerList.isEmpty())
{
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
{
if (i->getSource() && i->getSource()->isAlive() && isOnSameSide(i->getSource()))
{
AttackStart(i->getSource());
return;
}
}
}
}
me->GetMotionMaster()->MoveIdle();
Reset();
}
void UpdateAI(const uint32 diff)
{
if (gateClose && (!isOnSameSide(me) || me->getVictim() && !isOnSameSide(me->getVictim())))
{
EnterEvadeMode();
return;
}
CombatAI::UpdateAI(diff);
}
};
CreatureAI* GetAI_boss_gothik(Creature* pCreature)
{
return new boss_gothikAI (pCreature);
}
CreatureAI* GetAI_mob_gothik_minion(Creature* pCreature)
{
return new mob_gothik_minionAI (pCreature);
}
void AddSC_boss_gothik()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_gothik";
newscript->GetAI = &GetAI_boss_gothik;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "mob_gothik_minion";
newscript->GetAI = &GetAI_mob_gothik_minion;
newscript->RegisterSelf();
}
@@ -0,0 +1,142 @@
/* Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "ScriptedPch.h"
#include "naxxramas.h"
#define SPELL_BOMBARD_SLIME 28280
#define SPELL_POISON_CLOUD 28240
#define SPELL_MUTATING_INJECTION 28169
#define SPELL_SLIME_SPRAY RAID_MODE(28157,54364)
#define SPELL_BERSERK 26662
#define SPELL_POISON_CLOUD_ADD 59116
#define EVENT_BERSERK 1
#define EVENT_CLOUD 2
#define EVENT_INJECT 3
#define EVENT_SPRAY 4
#define MOB_FALLOUT_SLIME 16290
struct boss_grobbulusAI : public BossAI
{
boss_grobbulusAI(Creature *c) : BossAI(c, BOSS_GROBBULUS)
{
me->ApplySpellImmune(0, IMMUNITY_ID, SPELL_POISON_CLOUD_ADD, true);
}
void EnterCombat(Unit * /*who*/)
{
_EnterCombat();
events.ScheduleEvent(EVENT_CLOUD, 15000);
events.ScheduleEvent(EVENT_INJECT, 20000);
events.ScheduleEvent(EVENT_SPRAY, 15000+rand()%15000); //not sure
events.ScheduleEvent(EVENT_BERSERK, 12*60000);
}
void SpellHitTarget(Unit *pTarget, const SpellEntry *spell)
{
if (spell->Id == uint32(SPELL_SLIME_SPRAY))
{
if (TempSummon *slime = me->SummonCreature(MOB_FALLOUT_SLIME, pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 0))
DoZoneInCombat(slime);
}
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_CLOUD:
DoCastAOE(SPELL_POISON_CLOUD);
events.ScheduleEvent(EVENT_CLOUD, 15000);
return;
case EVENT_BERSERK:
DoCastAOE(SPELL_BERSERK);
return;
case EVENT_SPRAY:
DoCastAOE(SPELL_SLIME_SPRAY);
events.ScheduleEvent(EVENT_SPRAY, 15000+rand()%15000);
return;
case EVENT_INJECT:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1))
if (!pTarget->HasAura(SPELL_MUTATING_INJECTION))
DoCast(pTarget, SPELL_MUTATING_INJECTION);
events.ScheduleEvent(EVENT_INJECT, 8000 + 12000 * ((float)me->GetHealth() / me->GetMaxHealth()));
return;
}
}
DoMeleeAttackIfReady();
}
};
struct npc_grobbulus_poison_cloudAI : public Scripted_NoMovementAI
{
npc_grobbulus_poison_cloudAI(Creature* pCreature) : Scripted_NoMovementAI(pCreature)
{
Reset();
}
uint32 Cloud_Timer;
void Reset()
{
Cloud_Timer = 1000;
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
}
void UpdateAI(const uint32 diff)
{
if (Cloud_Timer <= diff)
{
DoCast(me, SPELL_POISON_CLOUD_ADD);
Cloud_Timer = 10000;
} else Cloud_Timer -= diff;
}
};
CreatureAI* GetAI_boss_grobbulus(Creature* pCreature)
{
return new boss_grobbulusAI (pCreature);
}
CreatureAI* GetAI_npc_grobbulus_poison_cloud(Creature* pCreature)
{
return new npc_grobbulus_poison_cloudAI(pCreature);
}
void AddSC_boss_grobbulus()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_grobbulus";
newscript->GetAI = &GetAI_boss_grobbulus;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_grobbulus_poison_cloud";
newscript->GetAI = &GetAI_npc_grobbulus_poison_cloud;
newscript->RegisterSelf();
}
@@ -0,0 +1,149 @@
/* Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "ScriptedPch.h"
#include "naxxramas.h"
#define SAY_AGGRO RAND(-1533109,-1533110,-1533111)
#define SAY_SLAY -1533112
#define SAY_TAUNT RAND(-1533113,-1533114,-1533115,-1533116,-1533117)
#define SAY_DEATH -1533118
#define SPELL_SPELL_DISRUPTION 29310
#define SPELL_DECREPIT_FEVER RAID_MODE(29998,55011)
#define SPELL_PLAGUE_CLOUD 29350
enum Events
{
EVENT_NONE,
EVENT_DISRUPT,
EVENT_FEVER,
EVENT_ERUPT,
EVENT_PHASE,
};
enum Phases
{
PHASE_FIGHT = 1,
PHASE_DANCE,
};
struct boss_heiganAI : public BossAI
{
boss_heiganAI(Creature *c) : BossAI(c, BOSS_HEIGAN) {}
uint32 eruptSection;
bool eruptDirection;
Phases phase;
void KilledUnit(Unit* /*Victim*/)
{
if (!(rand()%5))
DoScriptText(SAY_SLAY, me);
}
void JustDied(Unit* /*Killer*/)
{
_JustDied();
DoScriptText(SAY_DEATH, me);
}
void EnterCombat(Unit * /*who*/)
{
_EnterCombat();
DoScriptText(SAY_AGGRO, me);
EnterPhase(PHASE_FIGHT);
}
void EnterPhase(Phases newPhase)
{
phase = newPhase;
events.Reset();
eruptSection = 3;
if (phase == PHASE_FIGHT)
{
events.ScheduleEvent(EVENT_DISRUPT, urand(10000, 25000));
events.ScheduleEvent(EVENT_FEVER, urand(15000, 20000));
events.ScheduleEvent(EVENT_PHASE, 90000);
events.ScheduleEvent(EVENT_ERUPT, 15000);
}
else
{
float x, y, z, o;
me->GetHomePosition(x, y, z, o);
me->NearTeleportTo(x, y, z, o);
DoCastAOE(SPELL_PLAGUE_CLOUD);
events.ScheduleEvent(EVENT_PHASE, 45000);
events.ScheduleEvent(EVENT_ERUPT, 8000);
}
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim() || !CheckInRoom())
return;
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_DISRUPT:
DoCastAOE(SPELL_SPELL_DISRUPTION);
events.ScheduleEvent(EVENT_DISRUPT, urand(5000, 10000));
break;
case EVENT_FEVER:
DoCastAOE(SPELL_DECREPIT_FEVER);
events.ScheduleEvent(EVENT_FEVER, urand(20000, 25000));
break;
case EVENT_PHASE:
// TODO : Add missing texts for both phase switches
EnterPhase(phase == PHASE_FIGHT ? PHASE_DANCE : PHASE_FIGHT);
break;
case EVENT_ERUPT:
instance->SetData(DATA_HEIGAN_ERUPT, eruptSection);
TeleportCheaters();
if (eruptSection == 0)
eruptDirection = true;
else if (eruptSection == 3)
eruptDirection = false;
eruptDirection ? ++eruptSection : --eruptSection;
events.ScheduleEvent(EVENT_ERUPT, phase == PHASE_FIGHT ? 10000 : 3000);
break;
}
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_heigan(Creature* pCreature)
{
return new boss_heiganAI (pCreature);
}
void AddSC_boss_heigan()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_heigan";
newscript->GetAI = &GetAI_boss_heigan;
newscript->RegisterSelf();
}
@@ -0,0 +1,179 @@
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* ScriptData
SDName: Boss_Highlord_Mograine
SD%Complete: 100
SDComment: SCRIPT OBSOLETE
SDCategory: Naxxramas
EndScriptData */
#include "precompiled.h"
//All horsemen
#define SPELL_SHIELDWALL 29061
#define SPELL_BESERK 26662
// highlord mograine
#define SPELL_MARK_OF_MOGRAINE 28834
#define SPELL_RIGHTEOUS_FIRE 28882 // Applied as a 25% chance on melee hit to proc. me->GetVictim()
#define SAY_TAUNT1 "Enough prattling. Let them come! We shall grind their bones to dust."
#define SAY_TAUNT2 "Conserve your anger! Harness your rage! You will all have outlets for your frustration soon enough."
#define SAY_TAUNT3 "Life is meaningless. It is in death that we are truly tested."
#define SAY_AGGRO1 "You seek death?"
#define SAY_AGGRO2 "None shall pass!"
#define SAY_AGGRO3 "Be still!"
#define SAY_SLAY1 "You will find no peace in death."
#define SAY_SLAY2 "The master's will is done."
#define SAY_SPECIAL "Bow to the might of the Highlord!"
#define SAY_DEATH "I... am... released! Perhaps it's not too late to - noo! I need... more time..."
#define SOUND_TAUNT1 8842
#define SOUND_TAUNT2 8843
#define SOUND_TAUNT3 8844
#define SOUND_AGGRO1 8835
#define SOUND_AGGRO2 8836
#define SOUND_AGGRO3 8837
#define SOUND_SLAY1 8839
#define SOUND_SLAY2 8840
#define SOUND_SPECIAL 8841
#define SOUND_DEATH 8838
#define SPIRIT_OF_MOGRAINE 16775
struct TRINITY_DLL_DECL boss_highlord_mograineAI : public ScriptedAI
{
boss_highlord_mograineAI(Creature *c) : ScriptedAI(c) {}
uint32 Mark_Timer;
uint32 RighteousFire_Timer;
bool ShieldWall1;
bool ShieldWall2;
void Reset()
{
Mark_Timer = 20000; // First Horsemen Mark is applied at 20 sec.
RighteousFire_Timer = 2000; // applied approx 1 out of 4 attacks
ShieldWall1 = true;
ShieldWall2 = true;
}
void InitialYell()
{
if (!me->isInCombat())
{
switch(rand()%3)
{
case 0:
DoYell(SAY_AGGRO1,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(me,SOUND_AGGRO1);
break;
case 1:
DoYell(SAY_AGGRO2,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(me,SOUND_AGGRO2);
break;
case 2:
DoYell(SAY_AGGRO3,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(me,SOUND_AGGRO3);
break;
}
}
}
void KilledUnit()
{
switch(rand()%2)
{
case 0:
DoYell(SAY_SLAY1,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(me,SOUND_SLAY1);
break;
case 1:
DoYell(SAY_SLAY2,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(me,SOUND_SLAY2);
break;
}
}
void JustDied(Unit* Killer)
{
DoYell(SAY_DEATH,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(me, SOUND_DEATH);
}
void Aggro(Unit *who)
{
InitialYell();
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
// Mark of Mograine
if (Mark_Timer < diff)
{
DoCast(me->getVictim(),SPELL_MARK_OF_MOGRAINE);
Mark_Timer = 12000;
}else Mark_Timer -= diff;
// Shield Wall - All 4 horsemen will shield wall at 50% hp and 20% hp for 20 seconds
if (ShieldWall1 && (me->GetHealth()*100 / me->GetMaxHealth()) < 50)
{
if (ShieldWall1)
{
DoCast(me,SPELL_SHIELDWALL);
ShieldWall1 = false;
}
}
if (ShieldWall2 && (me->GetHealth()*100 / me->GetMaxHealth()) < 20)
{
if (ShieldWall2)
{
DoCast(me,SPELL_SHIELDWALL);
ShieldWall2 = false;
}
}
// Righteous Fire
if (RighteousFire_Timer < diff)
{
if (rand()%4 == 1) // 1/4
{
DoCast(me->getVictim(),SPELL_RIGHTEOUS_FIRE);
}
RighteousFire_Timer = 2000;
}else RighteousFire_Timer -= diff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_highlord_mograine(Creature* pCreature)
{
return new boss_highlord_mograineAI (pCreature);
}
void AddSC_boss_highlord_mograine()
{
Script *newscript;
newscript = new Script;
newscript->Name="boss_highlord_mograine";
newscript->GetAI = &GetAI_boss_highlord_mograine;
newscript->RegisterSelf();
}
@@ -0,0 +1,706 @@
/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* ScriptData
SDName: Boss_KelThuzad
SD%Complete: 80%
SDComment: VERIFY SCRIPT
SDCategory: Naxxramas
EndScriptData */
#include "ScriptedPch.h"
#include "naxxramas.h"
enum Yells
{
//when shappiron dies. dialog between kel and lich king (in this order)
SAY_SAPP_DIALOG1 = -1533084, //not used
SAY_SAPP_DIALOG2_LICH = -1533085, //not used
SAY_SAPP_DIALOG3 = -1533086, //not used
SAY_SAPP_DIALOG4_LICH = -1533087, //not used
SAY_SAPP_DIALOG5 = -1533088, //not used
SAY_CAT_DIED = -1533089, //when cat dies, not used
//when each of the 4 wing bosses dies
SAY_TAUNT1 = -1533090, //not used
SAY_TAUNT2 = -1533091, //not used
SAY_TAUNT3 = -1533092, //not used
SAY_TAUNT4 = -1533093, //not used
SAY_SUMMON_MINIONS = -1533105, //start of phase 1
SAY_AGGRO_1 = -1533094, //start of phase 2
SAY_AGGRO_2 = -1533095,
SAY_AGGRO_3 = -1533096,
SAY_SLAY_1 = -1533097,
SAY_SLAY_2 = -1533098,
SAY_DEATH = -1533099,
SAY_CHAIN_1 = -1533100,
SAY_CHAIN_2 = -1533101,
SAY_FROST_BLAST = -1533102,
SAY_SPECIAL_1 = -1533106,
SAY_SPECIAL_2 = -1533107,
SAY_SPECIAL_3 = -1533108,
SAY_REQUEST_AID = -1533103, //start of phase 3
SAY_ANSWER_REQUEST = -1533104 //lich king answer
};
enum Event
{
EVENT_NONE,
EVENT_BOLT,
EVENT_NOVA,
EVENT_CHAIN,
EVENT_CHAINED_SPELL,
EVENT_DETONATE,
EVENT_FISSURE,
EVENT_BLAST,
EVENT_WASTE,
EVENT_ABOMIN,
EVENT_WEAVER,
EVENT_ICECROWN,
EVENT_TRIGGER,
EVENT_PHASE,
};
enum Spells
{
SPELL_FROST_BOLT = 28478,
H_SPELL_FROST_BOLT = 55802,
SPELL_FROST_BOLT_AOE = 28479,
H_SPELL_FROST_BOLT_AOE = 55807,
SPELL_SHADOW_FISURE = 27810,
SPELL_VOID_BLAST = 27812,
SPELL_MANA_DETONATION = 27819,
SPELL_FROST_BLAST = 27808,
SPELL_CHAINS_OF_KELTHUZAD = 28410, //28408 script effect
SPELL_KELTHUZAD_CHANNEL = 29423,
SPELL_BERSERK = 28498,
//spells for chained
//warlock
SPELL_CURSE_OF_AGONY = 47864,
SPELL_SHADOW_BOLT = 47809,
//shaman
SPELL_EARTH_SHOCK = 49231,
SPELL_HEALING_WAVE = 49273,
//mage
SPELL_FROST_FIREBOLT = 47610,
SPELL_ARCANE_MISSILES = 42846,
//rogue
SPELL_HEMORRHAGE = 48660,
SPELL_MUTILATE = 48666,
//paladin
SPELL_HOLY_SHOCK = 48825,
SPELL_HAMMER_OF_JUSTICE = 10308,
//priest
SPELL_VAMPIRIC_TOUCH = 48160,
SPELL_RENEW = 48068,
//hunter
SPELL_MULTI_SHOT = 49048,
SPELL_VOLLEY = 58434,
//warrior
SPELL_BLADESTORM = 46924,
SPELL_CLEAVE = 47520,
//druid
SPELL_MOONFIRE = 48463,
SPELL_LIFEBLOOM = 48451,
//death knight
SPELL_PLAGUE_STRIKE = 49921,
SPELL_HOWLING_BLAST = 51411,
};
enum Creatures
{
NPC_WASTE = 16427, // Soldiers of the Frozen Wastes
NPC_ABOMINATION = 16428, // Unstoppable Abominations
NPC_WEAVER = 16429, // Soul Weavers
NPC_ICECROWN = 16441 // Guardians of Icecrown
};
const Position Pos[12] =
{
{3783.272705, -5062.697266, 143.711203, 3.617599}, //LEFT_FAR
{3730.291260, -5027.239258, 143.956909, 4.461900}, //LEFT_MIDDLE
{3757.6, -5172.0, 143.7, 1.97}, //WINDOW_PORTAL05
{3759.355225, -5174.128418, 143.802383, 2.170104}, //RIGHT_FAR
{3700.724365, -5185.123047, 143.928024, 1.309310}, //RIGHT_MIDDLE
{3700.86, -5181.29, 143.928024, 1.42}, //WINDOW_PORTAL04
{3754.431396, -5080.727734, 142.036316, 3.736189}, //LEFT_FAR
{3724.396484, -5061.330566, 142.032700, 4.564785}, //LEFT_MIDDLE
{3732.02, -5028.53, 143.92, 4.49}, //WINDOW_PORTAL02
{3687.571777, -5126.831055, 142.017807, 0.604023}, //RIGHT_FAR
{3707.990733, -5151.450195, 142.032562, 1.376855}, //RIGHT_MIDDLE
{3782.76, -5062.97, 143.79, 3.82}, //WINDOW_PORTAL03
};
//creatures in corners
//Unstoppable Abominations
#define MAX_ABOMINATIONS 21
const Position PosAbominations[MAX_ABOMINATIONS] =
{
{3755.52, -5155.22, 143.480, 2.0},
{3744.35, -5164.03, 143.590, 2.00},
{3749.28, -5159.04, 143.190, 2.0},
{3774.47, -5076.28, 143.528, 2.15912},
{3765.94, -5074.15, 143.186, 3.77233},
{3763.15, -5063.36, 143.694, 3.77233},
{3737.81, -5045.69, 143.709, 4.9033},
{3728.13, -5045.01, 143.355, 1.45069},
{3721.56, -5048.35, 143.542, 1.45069},
{3689.55, -5049.66, 143.637, 5.2104},
{3681.71, -5053.03, 143.242, 2.47957},
{3677.64, -5061.44, 143.358, 2.47957},
{3654.2, -5090.87, 143.469, 1.0313},
{3650.39, -5097.45, 143.496, 2.5047},
{3658.7, -5103.59, 143.607, 3.3278},
{3659.02, -5133.97, 143.624, 3.84538},
{3666.33, -5139.34, 143.183, 3.84538},
{3669.74, -5149.63, 143.678, 0.528643},
{3695.53, -5169.53, 143.671, 2.11908},
{3701.98, -5166.51, 143.395, 1.24257},
{3709.62, -5169.15, 143.576, 5.97695},
};
//Soldiers of the Frozen Wastes
#define MAX_WASTES 49
const Position PosWastes[MAX_WASTES] =
{
{3754.41, -5147.24, 143.204, 2.0},
{3754.68, -5156.17, 143.418, 2.0},
{3757.91, -5160.12, 143.503, 2.0},
{3752.67, -5164.6, 143.395, 2.0},
{3745.42, -5164.47, 143.565, 2.74587},
{3741.2, -5155.92, 143.17, 5.29134},
{3746.57, -5148.82, 143.176, 5.07772},
{3778.14, -5070.1, 143.568, 3.16208},
{3775.09, -5078.97, 143.65, 2.81022},
{3773.54, -5083.47, 143.758, 3.21549},
{3765, -5078.29, 143.176, 4.36688},
{3766.94, -5072.63, 143.184, 5.27951},
{3762.68, -5064.94, 143.635, 3.95297},
{3769.9, -5059.94, 143.74, 3.36549},
{3736.33, -5042.18, 143.643, 5.9471},
{3727.51, -5040.58, 143.502, 0.871859},
{3719.89, -5049.64, 143.58, 4.75172},
{3720.69, -5044.43, 143.662, 1.87245},
{3725.69, -5048.99, 143.363, 2.48271},
{3732.33, -5054.01, 143.44, 3.59405},
{3738.09, -5051.06, 143.718, 4.70931},
{3682.76, -5063.5, 143.175, 0.636238},
{3686.7, -5060.58, 143.18, 0.636238},
{3682.45, -5057.21, 143.184, 5.61252},
{3677.57, -5053.34, 143.369, 1.52531},
{3677.3, -5062.26, 143.369, 2.73482},
{3691.21, -5053.02, 143.421, 5.93218},
{3685.22, -5053.34, 143.314, 4.70303},
{3652.11, -5088.47, 143.555, 0.793317},
{3648.23, -5093.21, 143.311, 1.18837},
{3648.14, -5100.11, 143.632, 2.12221},
{3653.88, -5099.7, 143.558, 3.04348},
{3661.23, -5100.33, 143.42, 4.08335},
{3663.49, -5092.77, 143.346, 4.47134},
{3661.85, -5087.99, 143.571, 1.0148},
{3664.56, -5149.01, 143.532, 0.0762528},
{3665.01, -5142.04, 143.201, 1.72009},
{3671.15, -5142.92, 143.174, 4.81535},
{3670.18, -5134.38, 143.177, 5.37534},
{3664.33, -5131.69, 143.262, 5.39576},
{3658.21, -5133.63, 143.662, 1.3863},
{3659.7, -5144.49, 143.363, 2.32328},
{3705.71, -5179.63, 143.746, 1.06743},
{3696.77, -5177.45, 143.759, 5.36748},
{3700.97, -5173.13, 143.52, 3.26575},
{3708.53, -5172.19, 143.573, 3.26575},
{3712.49, -5167.62, 143.657, 5.63295},
{3704.89, -5161.84, 143.239, 5.63295},
{3695.66, -5164.63, 143.674, 1.54416},
};
//Soul Weavers
#define MAX_WEAVERS 7
const Position PosWeavers[MAX_WEAVERS] =
{
{3752.45, -5168.35, 143.562, 1.6094},
{3772.2, -5070.04, 143.329, 1.93686},
{3732.28, -5032.88, 143.771, 3.08355},
{3689.05, -5055.7, 143.172, 6.09554},
{3649.45, -5093.17, 143.299, 2.51805},
{3659.7, -5144.49, 143.363, 4.08806},
{3704.71, -5175.96, 143.597, 3.36549},
};
// predicate function to select not charmed target
struct NotCharmedTargetSelector : public std::unary_function<Unit *, bool> {
NotCharmedTargetSelector() {}
bool operator() (const Unit *pTarget) {
return (!pTarget->isCharmed());
}
};
struct boss_kelthuzadAI : public BossAI
{
boss_kelthuzadAI(Creature* c) : BossAI(c, BOSS_KELTHUZAD), spawns(c)
{
uiFaction = me->getFaction();
}
uint32 Phase;
uint32 uiGuardiansOfIcecrownTimer;
uint32 uiFaction;
uint8 nGuardiansOfIcecrownCount;
uint8 nAbomination;
uint8 nWeaver;
std::map<uint64, float> chained;
uint64 PortalsGUID[4];
uint64 KTTriggerGUID;
SummonList spawns; // adds spawn by the trigger. kept in separated list (i.e. not in summons)
void Reset()
{
_Reset();
PortalsGUID[0] = PortalsGUID[1] = PortalsGUID[2] = PortalsGUID[3] = 0;
KTTriggerGUID = 0;
me->setFaction(35);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_NOT_SELECTABLE);
std::map<uint64, float>::const_iterator itr;
for (itr = chained.begin(); itr != chained.end(); ++itr)
{
if (Player* charmed = Unit::GetPlayer((*itr).first))
charmed->SetFloatValue(OBJECT_FIELD_SCALE_X, (*itr).second);
}
chained.clear();
spawns.DespawnAll();
FindGameObjects();
if (GameObject *pKTTrigger = me->GetMap()->GetGameObject(KTTriggerGUID))
{
pKTTrigger->ResetDoorOrButton();
pKTTrigger->SetPhaseMask(1, true);
}
for (uint8 i = 0; i <= 3; ++i)
{
if (GameObject *pPortal = me->GetMap()->GetGameObject(PortalsGUID[i]))
{
if (!((pPortal->getLootState() == GO_READY) || (pPortal->getLootState() == GO_NOT_READY)))
pPortal->ResetDoorOrButton();
}
}
nGuardiansOfIcecrownCount = 0;
uiGuardiansOfIcecrownTimer = 5000; //5 seconds for summoning each Guardian of Icecrown in phase 3
Phase = 0;
nAbomination = 0;
nWeaver = 0;
}
void KilledUnit()
{
DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), me);
}
void JustDied(Unit* /*Killer*/)
{
_JustDied();
DoScriptText(SAY_DEATH, me);
std::map<uint64, float>::const_iterator itr;
for (itr = chained.begin(); itr != chained.end(); ++itr)
{
if (Player* pPlayer = Unit::GetPlayer((*itr).first))
pPlayer->SetFloatValue(OBJECT_FIELD_SCALE_X, (*itr).second);
}
chained.clear();
}
void EnterCombat(Unit* /*who*/)
{
me->setFaction(uiFaction);
_EnterCombat();
FindGameObjects();
for (uint8 i = 0; i <= 3; ++i)
{
if (GameObject *pPortal = me->GetMap()->GetGameObject(PortalsGUID[i]))
pPortal->ResetDoorOrButton();
}
DoCast(me, SPELL_KELTHUZAD_CHANNEL, false);
DoScriptText(SAY_SUMMON_MINIONS, me);
Phase = 1;
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_NOT_SELECTABLE);
me->SetFloatValue(UNIT_FIELD_COMBATREACH, 4);
me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 4);
events.ScheduleEvent(EVENT_TRIGGER, 5000);
events.ScheduleEvent(EVENT_WASTE, 15000);
events.ScheduleEvent(EVENT_ABOMIN, 30000);
events.ScheduleEvent(EVENT_WEAVER, 50000);
events.ScheduleEvent(EVENT_PHASE, 228000);
}
void FindGameObjects()
{
PortalsGUID[0] = instance ? instance->GetData64(DATA_KELTHUZAD_PORTAL01) : 0;
PortalsGUID[1] = instance ? instance->GetData64(DATA_KELTHUZAD_PORTAL02) : 0;
PortalsGUID[2] = instance ? instance->GetData64(DATA_KELTHUZAD_PORTAL03) : 0;
PortalsGUID[3] = instance ? instance->GetData64(DATA_KELTHUZAD_PORTAL04) : 0;
KTTriggerGUID = instance ? instance->GetData64(DATA_KELTHUZAD_TRIGGER) : 0;
}
void UpdateAI(const uint32 diff)
{
if (!UpdateCombatState())
return;
events.Update(diff);
if (Phase == 1)
{
while (uint32 eventId = events.GetEvent())
{
switch(eventId)
{
case EVENT_WASTE:
DoSummon(NPC_WASTE, Pos[RAND(0,3,6,9)]);
events.RepeatEvent(urand(2000,5000));
break;
case EVENT_ABOMIN:
if (nAbomination < 8)
{
DoSummon(NPC_ABOMINATION, Pos[RAND(1,4,7,10)]);
nAbomination++;
events.RepeatEvent(20000);
}
else
events.PopEvent();
break;
case EVENT_WEAVER:
if (nWeaver < 8)
{
DoSummon(NPC_WEAVER, Pos[RAND(0,3,6,9)]);
nWeaver++;
events.RepeatEvent(25000);
}
else
events.PopEvent();
break;
case EVENT_TRIGGER:
if (GameObject *pKTTrigger = me->GetMap()->GetGameObject(KTTriggerGUID))
pKTTrigger->SetPhaseMask(2, true);
events.PopEvent();
break;
case EVENT_PHASE:
events.Reset();
DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2,SAY_AGGRO_3), me);
spawns.DespawnAll();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_NOT_SELECTABLE);
me->CastStop();
DoStartMovement(me->getVictim());
events.ScheduleEvent(EVENT_BOLT, urand(5000,10000));
events.ScheduleEvent(EVENT_NOVA, 15000);
events.ScheduleEvent(EVENT_DETONATE, urand(30000,40000));
events.ScheduleEvent(EVENT_FISSURE, urand(10000,30000));
events.ScheduleEvent(EVENT_BLAST, urand(60000,120000));
if (getDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL)
events.ScheduleEvent(EVENT_CHAIN, urand(30000,60000));
Phase = 2;
break;
default:
events.PopEvent();
break;
}
}
}
else
{
//start phase 3 when we are 45% health
if (Phase != 3)
{
if (HealthBelowPct(45))
{
Phase = 3 ;
DoScriptText(SAY_REQUEST_AID, me);
//here Lich King should respond to KelThuzad but I don't know which Creature to make talk
//so for now just make Kelthuzad says it.
DoScriptText(SAY_ANSWER_REQUEST, me);
for (uint8 i = 0; i <= 3; ++i)
{
if (GameObject *pPortal = me->GetMap()->GetGameObject(PortalsGUID[i]))
{
if (pPortal->getLootState() == GO_READY)
pPortal->UseDoorOrButton();
}
}
}
}
else if (nGuardiansOfIcecrownCount < RAID_MODE(2,4))
{
if (uiGuardiansOfIcecrownTimer <= diff)
{
// TODO : Add missing text
if (Creature* pGuardian = DoSummon(NPC_ICECROWN, Pos[RAND(2,5,8,11)]))
pGuardian->SetFloatValue(UNIT_FIELD_COMBATREACH, 2);
++nGuardiansOfIcecrownCount;
uiGuardiansOfIcecrownTimer = 5000;
}
else uiGuardiansOfIcecrownTimer -= diff;
}
if (me->hasUnitState(UNIT_STAT_CASTING))
return;
if (uint32 eventId = events.GetEvent())
{
switch(eventId)
{
case EVENT_BOLT:
DoCastVictim(RAID_MODE(SPELL_FROST_BOLT,H_SPELL_FROST_BOLT));
events.RepeatEvent(urand(5000,10000));
break;
case EVENT_NOVA:
DoCastAOE(RAID_MODE(SPELL_FROST_BOLT_AOE,H_SPELL_FROST_BOLT_AOE));
events.RepeatEvent(urand(15000,30000));
break;
case EVENT_CHAIN:
{
uint32 count = urand(1,3);
for (uint8 i = 1; i <= count; i++)
{
Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1, 200, true);
if (pTarget && !pTarget->isCharmed() && (chained.find(pTarget->GetGUID()) == chained.end()))
{
DoCast(pTarget, SPELL_CHAINS_OF_KELTHUZAD);
float scale = pTarget->GetFloatValue(OBJECT_FIELD_SCALE_X);
chained.insert(std::make_pair(pTarget->GetGUID(), scale));
pTarget->SetFloatValue(OBJECT_FIELD_SCALE_X, scale * 2);
events.ScheduleEvent(EVENT_CHAINED_SPELL, 2000); //core has 2000ms to set unit flag charm
}
}
if (!chained.empty())
DoScriptText(RAND(SAY_CHAIN_1,SAY_CHAIN_2), me);
events.RepeatEvent(urand(100000,180000));
break;
}
case EVENT_CHAINED_SPELL:
{
std::map<uint64, float>::iterator itr;
for (itr = chained.begin(); itr != chained.end();)
{
if (Unit* player = Unit::GetPlayer((*itr).first))
{
if (!player->isCharmed())
{
player->SetFloatValue(OBJECT_FIELD_SCALE_X, (*itr).second);
std::map<uint64, float>::iterator next = itr;
++next;
chained.erase(itr);
itr = next;
continue;
}
if (Unit *pTarget = SelectTarget(SELECT_TARGET_TOPAGGRO, 0, NotCharmedTargetSelector()))
{
switch(player->getClass())
{
case CLASS_DRUID:
if (urand(0,1))
player->CastSpell(pTarget, SPELL_MOONFIRE, false);
else
player->CastSpell(me, SPELL_LIFEBLOOM, false);
break;
case CLASS_HUNTER:
player->CastSpell(pTarget, RAND(SPELL_MULTI_SHOT, SPELL_VOLLEY), false);
break;
case CLASS_MAGE:
player->CastSpell(pTarget, RAND(SPELL_FROST_FIREBOLT, SPELL_ARCANE_MISSILES), false);
break;
case CLASS_WARLOCK:
player->CastSpell(pTarget, RAND(SPELL_CURSE_OF_AGONY, SPELL_SHADOW_BOLT), true);
break;
case CLASS_WARRIOR:
player->CastSpell(pTarget, RAND(SPELL_BLADESTORM, SPELL_CLEAVE), false);
break;
case CLASS_PALADIN:
if (urand(0,1))
player->CastSpell(pTarget, SPELL_HAMMER_OF_JUSTICE, false);
else
player->CastSpell(me, SPELL_HOLY_SHOCK, false);
break;
case CLASS_PRIEST:
if (urand(0,1))
player->CastSpell(pTarget, SPELL_VAMPIRIC_TOUCH, false);
else
player->CastSpell(me, SPELL_RENEW, false);
break;
case CLASS_SHAMAN:
if (urand(0,1))
player->CastSpell(pTarget, SPELL_EARTH_SHOCK, false);
else
player->CastSpell(me, SPELL_HEALING_WAVE, false);
break;
case CLASS_ROGUE:
player->CastSpell(pTarget, RAND(SPELL_HEMORRHAGE, SPELL_MUTILATE), false);
break;
case CLASS_DEATH_KNIGHT:
if (urand(0,1))
player->CastSpell(pTarget, SPELL_PLAGUE_STRIKE, true);
else
player->CastSpell(pTarget, SPELL_HOWLING_BLAST, true);
break;
}
}
}
++itr;
}
if (chained.empty())
events.PopEvent();
else
events.RepeatEvent(5000);
break;
}
case EVENT_DETONATE:
{
std::vector<Unit*> unitList;
std::list<HostileReference*> *threatList = &me->getThreatManager().getThreatList();
for (std::list<HostileReference*>::const_iterator itr = threatList->begin(); itr != threatList->end(); ++itr)
{
if ((*itr)->getTarget()->GetTypeId() == TYPEID_PLAYER
&& (*itr)->getTarget()->getPowerType() == POWER_MANA
&& (*itr)->getTarget()->GetPower(POWER_MANA))
unitList.push_back((*itr)->getTarget());
}
if (!unitList.empty())
{
std::vector<Unit*>::const_iterator itr = unitList.begin();
advance(itr, rand()%unitList.size());
DoCast(*itr, SPELL_MANA_DETONATION);
DoScriptText(RAND(SAY_SPECIAL_1,SAY_SPECIAL_2,SAY_SPECIAL_3), me);
}
events.RepeatEvent(urand(20000,50000));
break;
}
case EVENT_FISSURE:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(pTarget, SPELL_SHADOW_FISURE);
events.RepeatEvent(urand(10000,45000));
break;
case EVENT_BLAST:
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, RAID_MODE(1,0), 0, true))
DoCast(pTarget, SPELL_FROST_BLAST);
if (rand()%2)
DoScriptText(SAY_FROST_BLAST, me);
events.RepeatEvent(urand(30000,90000));
break;
default:
events.PopEvent();
break;
}
}
DoMeleeAttackIfReady();
}
}
};
CreatureAI* GetAI_boss_kelthuzadAI(Creature* pCreature)
{
return new boss_kelthuzadAI (pCreature);
}
bool AreaTrigger_at_kelthuzad_center(Player* pPlayer, const AreaTriggerEntry * /*at*/)
{
if (pPlayer->isGameMaster())
return false;
ScriptedInstance* pInstance = pPlayer->GetInstanceData();
if (!pInstance || pInstance->IsEncounterInProgress() || pInstance->GetBossState(BOSS_KELTHUZAD) == DONE)
return false;
Creature* pKelthuzad = CAST_CRE(Unit::GetUnit(*pPlayer, pInstance->GetData64(DATA_KELTHUZAD)));
if (!pKelthuzad)
return false;
boss_kelthuzadAI* pKelthuzadAI = CAST_AI(boss_kelthuzadAI, pKelthuzad->AI());
if (!pKelthuzadAI)
return false;
pKelthuzadAI->AttackStart(pPlayer);
if (GameObject* trigger = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_KELTHUZAD_TRIGGER)))
{
if (trigger->getLootState() == GO_READY)
trigger->UseDoorOrButton();
// Note: summon must be done by trigger and not by KT.
// Otherwise, they attack immediately as KT is in combat.
for (uint8 i = 0; i <= MAX_ABOMINATIONS; ++i)
{
if (Creature* sum = trigger->SummonCreature(NPC_ABOMINATION, PosAbominations[i]))
{
pKelthuzadAI->spawns.Summon(sum);
sum->GetMotionMaster()->MoveRandom(9.0f);
sum->SetReactState(REACT_DEFENSIVE);
}
}
for (uint8 i = 0; i <= MAX_WASTES; ++i)
{
if (Creature* sum = trigger->SummonCreature(NPC_WASTE, PosWastes[i]))
{
pKelthuzadAI->spawns.Summon(sum);
sum->GetMotionMaster()->MoveRandom(5.0f);
sum->SetReactState(REACT_DEFENSIVE);
}
}
for (uint8 i = 0; i <= MAX_WEAVERS; ++i)
{
if (Creature* sum = trigger->SummonCreature(NPC_WEAVER, PosWeavers[i]))
{
pKelthuzadAI->spawns.Summon(sum);
sum->GetMotionMaster()->MoveRandom(9.0f);
sum->SetReactState(REACT_DEFENSIVE);
}
}
}
return true;
}
void AddSC_boss_kelthuzad()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_kelthuzad";
newscript->GetAI = &GetAI_boss_kelthuzadAI;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "at_kelthuzad_center";
newscript->pAreaTrigger = &AreaTrigger_at_kelthuzad_center;
newscript->RegisterSelf();
}
@@ -0,0 +1,125 @@
/*
* Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "ScriptedPch.h"
#include "naxxramas.h"
enum Spells
{
SPELL_NECROTIC_AURA = 55593,
SPELL_SUMMON_SPORE = 29234,
SPELL_DEATHBLOOM = 29865,
H_SPELL_DEATHBLOOM = 55053,
SPELL_INEVITABLE_DOOM = 29204,
H_SPELL_INEVITABLE_DOOM = 55052
};
enum Events
{
EVENT_NONE,
EVENT_AURA,
EVENT_BLOOM,
EVENT_DOOM,
};
struct boss_loathebAI : public BossAI
{
boss_loathebAI(Creature *c) : BossAI(c, BOSS_LOATHEB) {}
void EnterCombat(Unit * /*who*/)
{
_EnterCombat();
events.ScheduleEvent(EVENT_AURA, 10000);
events.ScheduleEvent(EVENT_BLOOM, 5000);
events.ScheduleEvent(EVENT_DOOM, 120000);
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_AURA:
DoCastAOE(SPELL_NECROTIC_AURA);
events.ScheduleEvent(EVENT_AURA, 20000);
break;
case EVENT_BLOOM:
// TODO : Add missing text
DoCastAOE(SPELL_SUMMON_SPORE, true);
DoCastAOE(RAID_MODE(SPELL_DEATHBLOOM,H_SPELL_DEATHBLOOM));
events.ScheduleEvent(EVENT_BLOOM, 30000);
break;
case EVENT_DOOM:
DoCastAOE(RAID_MODE(SPELL_INEVITABLE_DOOM,H_SPELL_INEVITABLE_DOOM));
events.ScheduleEvent(EVENT_DOOM, events.GetTimer() < 5*60000 ? 30000 : 15000);
break;
}
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_loatheb(Creature* pCreature)
{
return new boss_loathebAI (pCreature);
}
enum SporeSpells
{
SPELL_FUNGAL_CREEP = 29232
};
struct mob_loatheb_sporeAI : public ScriptedAI
{
mob_loatheb_sporeAI(Creature *c) : ScriptedAI(c) {}
void JustDied(Unit* killer)
{
DoCast(killer, SPELL_FUNGAL_CREEP);
}
};
CreatureAI* GetAI_mob_loatheb_spore(Creature* pCreature)
{
return new mob_loatheb_sporeAI (pCreature);
}
void AddSC_boss_loatheb()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_loatheb";
newscript->GetAI = &GetAI_boss_loatheb;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "mob_loatheb_spore";
newscript->GetAI = &GetAI_mob_loatheb_spore;
newscript->RegisterSelf();
// Fungal Creep
//GetAISpellInfo(29232)->condition = AICOND_DIE;
}
@@ -0,0 +1,186 @@
/*
* Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "ScriptedPch.h"
#include "naxxramas.h"
enum Spells
{
SPELL_WEB_WRAP = 28622,
SPELL_WEB_SPRAY_10 = 29484,
SPELL_WEB_SPRAY_25 = 54125,
SPELL_POISON_SHOCK_10 = 28741,
SPELL_POISON_SHOCK_25 = 54122,
SPELL_NECROTIC_POISON_10 = 28776,
SPELL_NECROTIC_POISON_25 = 54121,
SPELL_FRENZY_10 = 54123,
SPELL_FRENZY_25 = 54124,
};
enum Creatures
{
MOB_WEB_WRAP = 16486,
MOB_SPIDERLING = 17055,
};
#define MAX_POS_WRAP 3
const Position PosWrap[MAX_POS_WRAP] =
{
{3546.796, -3869.082, 296.450, 0.0},
{3531.271, -3847.424, 299.450, 0.0},
{3497.067, -3843.384, 302.384, 0.0},
};
enum Events
{
EVENT_NONE,
EVENT_SPRAY,
EVENT_SHOCK,
EVENT_POISON,
EVENT_WRAP,
EVENT_SUMMON,
EVENT_FRENZY,
};
struct boss_maexxnaAI : public BossAI
{
boss_maexxnaAI(Creature *c) : BossAI(c, BOSS_MAEXXNA) {}
bool enraged;
void EnterCombat(Unit * /*who*/)
{
_EnterCombat();
enraged = false;
events.ScheduleEvent(EVENT_WRAP, 20000);
events.ScheduleEvent(EVENT_SPRAY, 40000);
events.ScheduleEvent(EVENT_SHOCK, urand(5000,10000));
events.ScheduleEvent(EVENT_POISON, urand(10000,15000));
events.ScheduleEvent(EVENT_SUMMON, 30000);
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim() || !CheckInRoom())
return;
if (!enraged && HealthBelowPct(30))
{
enraged = true;
events.ScheduleEvent(EVENT_FRENZY, 0); // will be cast immediately
}
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_WRAP:
// TODO : Add missing text
for (uint8 i = 0; i < RAID_MODE(1,2); ++i)
{
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1, 0, true, -SPELL_WEB_WRAP))
{
pTarget->RemoveAura(RAID_MODE(SPELL_WEB_SPRAY_10,SPELL_WEB_SPRAY_25));
uint8 pos = rand()%MAX_POS_WRAP;
pTarget->GetMotionMaster()->MoveJump(PosWrap[pos].GetPositionX(), PosWrap[pos].GetPositionY(), PosWrap[pos].GetPositionZ(), 20, 20);
if (Creature *wrap = DoSummon(MOB_WEB_WRAP, PosWrap[pos], 0, TEMPSUMMON_CORPSE_DESPAWN))
wrap->AI()->SetGUID(pTarget->GetGUID());
}
}
events.ScheduleEvent(EVENT_WRAP, 40000);
break;
case EVENT_SPRAY:
DoCastAOE(RAID_MODE(SPELL_WEB_SPRAY_10,SPELL_WEB_SPRAY_25));
events.ScheduleEvent(EVENT_SPRAY, 40000);
break;
case EVENT_SHOCK:
DoCastAOE(RAID_MODE(SPELL_POISON_SHOCK_10,SPELL_POISON_SHOCK_25));
events.ScheduleEvent(EVENT_SHOCK, urand(10000,20000));
break;
case EVENT_POISON:
DoCast(me->getVictim(), RAID_MODE(SPELL_NECROTIC_POISON_10,SPELL_NECROTIC_POISON_25));
events.ScheduleEvent(EVENT_POISON, urand(10000, 20000));
break;
case EVENT_FRENZY:
DoCast(me, RAID_MODE(SPELL_FRENZY_10,SPELL_FRENZY_25), true);
events.ScheduleEvent(EVENT_FRENZY, 600000);
break;
case EVENT_SUMMON:
// TODO : Add missing text
uint8 amount = urand(8,10);
for (uint8 i = 0; i < amount; ++i)
DoSummon(MOB_SPIDERLING, me, 0, TEMPSUMMON_CORPSE_DESPAWN);
events.ScheduleEvent(EVENT_SUMMON, 40000);
break;
}
}
DoMeleeAttackIfReady();
}
};
struct mob_webwrapAI : public NullCreatureAI
{
mob_webwrapAI(Creature *c) : NullCreatureAI(c), victimGUID(0) {}
uint64 victimGUID;
void SetGUID(const uint64 &guid, int32 /*param*/)
{
victimGUID = guid;
if (me->m_spells[0] && victimGUID)
if (Unit *victim = Unit::GetUnit(*me, victimGUID))
victim->CastSpell(victim, me->m_spells[0], true, NULL, NULL, me->GetGUID());
}
void JustDied(Unit * /*killer*/)
{
if (me->m_spells[0] && victimGUID)
if (Unit *victim = Unit::GetUnit(*me, victimGUID))
victim->RemoveAurasDueToSpell(me->m_spells[0], me->GetGUID());
}
};
CreatureAI* GetAI_boss_maexxna(Creature* pCreature)
{
return new boss_maexxnaAI (pCreature);
}
CreatureAI* GetAI_mob_webwrap(Creature* pCreature)
{
return new mob_webwrapAI (pCreature);
}
void AddSC_boss_maexxna()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_maexxna";
newscript->GetAI = &GetAI_boss_maexxna;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "mob_webwrap";
newscript->GetAI = &GetAI_mob_webwrap;
newscript->RegisterSelf();
}
@@ -0,0 +1,212 @@
/* Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "ScriptedPch.h"
#include "naxxramas.h"
#define SAY_AGGRO RAND(-1533075,-1533076,-1533077)
#define SAY_SUMMON -1533078
#define SAY_SLAY RAND(-1533079,-1533080)
#define SAY_DEATH -1533081
#define SOUND_DEATH 8848
#define SPELL_CURSE_PLAGUEBRINGER RAID_MODE(29213,54835)
#define SPELL_BLINK RAND(29208,29209,29210,29211)
#define SPELL_CRIPPLE RAID_MODE(29212,54814)
#define SPELL_TELEPORT 29216
#define MOB_WARRIOR 16984
#define MOB_CHAMPION 16983
#define MOB_GUARDIAN 16981
// Teleport position of Noth on his balcony
#define TELE_X 2631.370
#define TELE_Y -3529.680
#define TELE_Z 274.040
#define TELE_O 6.277
#define MAX_SUMMON_POS 5
const float SummonPos[MAX_SUMMON_POS][4] =
{
{2728.12, -3544.43, 261.91, 6.04},
{2729.05, -3544.47, 261.91, 5.58},
{2728.24, -3465.08, 264.20, 3.56},
{2704.11, -3456.81, 265.53, 4.51},
{2663.56, -3464.43, 262.66, 5.20},
};
enum Events
{
EVENT_NONE,
EVENT_BERSERK,
EVENT_CURSE,
EVENT_BLINK,
EVENT_WARRIOR,
EVENT_BALCONY,
EVENT_WAVE,
EVENT_GROUND,
};
struct boss_nothAI : public BossAI
{
boss_nothAI(Creature *c) : BossAI(c, BOSS_NOTH) {}
uint32 waveCount, balconyCount;
void Reset()
{
me->SetReactState(REACT_AGGRESSIVE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
_Reset();
}
void EnterCombat(Unit * /*who*/)
{
_EnterCombat();
DoScriptText(SAY_AGGRO, me);
balconyCount = 0;
EnterPhaseGround();
}
void EnterPhaseGround()
{
me->SetReactState(REACT_AGGRESSIVE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
DoZoneInCombat();
if (me->getThreatManager().isThreatListEmpty())
EnterEvadeMode();
else
{
events.ScheduleEvent(EVENT_BALCONY, 110000);
events.ScheduleEvent(EVENT_CURSE, 10000+rand()%15000);
events.ScheduleEvent(EVENT_WARRIOR, 30000);
if (getDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL)
events.ScheduleEvent(EVENT_BLINK, 20000 + rand()%20000);
}
}
void KilledUnit(Unit* /*victim*/)
{
if (!(rand()%5))
DoScriptText(SAY_SLAY, me);
}
void JustSummoned(Creature *summon)
{
summons.Summon(summon);
summon->setActive(true);
summon->AI()->DoZoneInCombat();
}
void JustDied(Unit* /*Killer*/)
{
_JustDied();
DoScriptText(SAY_DEATH, me);
}
void SummonUndead(uint32 entry, uint32 num)
{
for (uint32 i = 0; i < num; ++i)
{
uint32 pos = rand()%MAX_SUMMON_POS;
me->SummonCreature(entry, SummonPos[pos][0], SummonPos[pos][1], SummonPos[pos][2],
SummonPos[pos][3], TEMPSUMMON_CORPSE_DESPAWN, 60000);
}
}
void UpdateAI(const uint32 diff)
{
if (!UpdateCombatState() || !CheckInRoom())
return;
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_CURSE:
DoCastAOE(SPELL_CURSE_PLAGUEBRINGER);
events.ScheduleEvent(EVENT_CURSE, 50000 + rand()%10000);
return;
case EVENT_WARRIOR:
DoScriptText(SAY_SUMMON, me);
SummonUndead(MOB_WARRIOR, RAID_MODE(2,3));
events.ScheduleEvent(EVENT_WARRIOR, 30000);
return;
case EVENT_BLINK:
DoCastAOE(SPELL_CRIPPLE, true);
DoCastAOE(SPELL_BLINK);
DoResetThreat();
events.ScheduleEvent(EVENT_BLINK, 40000);
return;
case EVENT_BALCONY:
me->SetReactState(REACT_PASSIVE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->AttackStop();
me->RemoveAllAuras();
me->NearTeleportTo(TELE_X, TELE_Y, TELE_Z, TELE_O);
events.Reset();
events.ScheduleEvent(EVENT_WAVE, 2000 + rand()%3000);
waveCount = 0;
return;
case EVENT_WAVE:
DoScriptText(SAY_SUMMON, me);
switch(balconyCount)
{
case 0: SummonUndead(MOB_CHAMPION, RAID_MODE(2,4)); break;
case 1: SummonUndead(MOB_CHAMPION, RAID_MODE(1,2));
SummonUndead(MOB_GUARDIAN, RAID_MODE(1,2)); break;
case 2: SummonUndead(MOB_GUARDIAN, RAID_MODE(2,4)); break;
default:SummonUndead(MOB_CHAMPION, RAID_MODE(5,10));
SummonUndead(MOB_GUARDIAN, RAID_MODE(5,10));break;
}
++waveCount;
events.ScheduleEvent(waveCount < 2 ? EVENT_WAVE : EVENT_GROUND, 30000 + rand()%15000);
return;
case EVENT_GROUND:
{
++balconyCount;
float x, y, z, o;
me->GetHomePosition(x, y, z, o);
me->NearTeleportTo(x, y, z, o);
events.ScheduleEvent(EVENT_BALCONY, 110000);
EnterPhaseGround();
return;
}
}
}
if (me->HasReactState(REACT_AGGRESSIVE))
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_noth(Creature* pCreature)
{
return new boss_nothAI (pCreature);
}
void AddSC_boss_noth()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_noth";
newscript->GetAI = &GetAI_boss_noth;
newscript->RegisterSelf();
}
@@ -0,0 +1,159 @@
/* Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "ScriptedPch.h"
#include "naxxramas.h"
enum Spells
{
SPELL_HATEFUL_STRIKE = 41926,
H_SPELL_HATEFUL_STRIKE = 59192,
SPELL_FRENZY = 28131,
SPELL_BERSERK = 26662,
SPELL_SLIME_BOLT = 32309,
};
enum Yells
{
SAY_AGGRO_1 = -1533017,
SAY_AGGRO_2 = -1533018,
SAY_SLAY = -1533019,
SAY_DEATH = -1533020,
EMOTE_BERSERK = -1533021,
EMOTE_ENRAGE = -1533022,
};
enum Events
{
EVENT_NONE,
EVENT_BERSERK,
EVENT_HATEFUL,
EVENT_SLIME
};
enum
{
ACHIEV_MAKE_QUICK_WERK_OF_HIM_STARTING_EVENT = 10286,
};
struct boss_patchwerkAI : public BossAI
{
boss_patchwerkAI(Creature *c) : BossAI(c, BOSS_PATCHWERK) {}
bool Enraged;
void Reset()
{
_Reset();
if (instance)
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_MAKE_QUICK_WERK_OF_HIM_STARTING_EVENT);
}
void KilledUnit(Unit* /*Victim*/)
{
if (!(rand()%5))
DoScriptText(SAY_SLAY, me);
}
void JustDied(Unit* /*Killer*/)
{
_JustDied();
DoScriptText(SAY_DEATH, me);
}
void EnterCombat(Unit * /*who*/)
{
_EnterCombat();
Enraged = false;
DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2), me);
events.ScheduleEvent(EVENT_HATEFUL, 1200);
events.ScheduleEvent(EVENT_BERSERK, 360000);
if (instance)
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_MAKE_QUICK_WERK_OF_HIM_STARTING_EVENT);
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_HATEFUL:
{
//Cast Hateful strike on the player with the highest
//amount of HP within melee distance
uint32 MostHP = 0;
Unit* pMostHPTarget = NULL;
std::list<HostileReference*>::const_iterator i = me->getThreatManager().getThreatList().begin();
for (; i != me->getThreatManager().getThreatList().end(); ++i)
{
Unit *pTarget = (*i)->getTarget();
if (pTarget->isAlive() && pTarget->GetHealth() > MostHP && me->IsWithinMeleeRange(pTarget))
{
MostHP = pTarget->GetHealth();
pMostHPTarget = pTarget;
}
}
if (pMostHPTarget)
DoCast(pMostHPTarget, RAID_MODE(SPELL_HATEFUL_STRIKE,H_SPELL_HATEFUL_STRIKE), true);
events.ScheduleEvent(EVENT_HATEFUL, 1200);
break;
}
case EVENT_BERSERK:
DoCast(me, SPELL_BERSERK, true);
DoScriptText(EMOTE_BERSERK, me);
events.ScheduleEvent(EVENT_SLIME, 2000);
break;
case EVENT_SLIME:
DoCast(me->getVictim(), SPELL_SLIME_BOLT);
events.ScheduleEvent(EVENT_SLIME, 2000);
break;
}
}
if (!Enraged && HealthBelowPct(5))
{
DoCast(me, SPELL_FRENZY, true);
DoScriptText(EMOTE_ENRAGE, me);
Enraged = true;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_patchwerk(Creature* pCreature)
{
return new boss_patchwerkAI (pCreature);
}
void AddSC_boss_patchwerk()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_patchwerk";
newscript->GetAI = &GetAI_boss_patchwerk;
newscript->RegisterSelf();
}
@@ -0,0 +1,139 @@
/*
* Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "ScriptedPch.h"
#include "naxxramas.h"
//Razuvious - NO TEXT sound only
//8852 aggro01 - Hah hah, I'm just getting warmed up!
//8853 aggro02 Stand and fight!
//8854 aggro03 Show me what you've got!
//8861 slay1 - You should've stayed home!
//8863 slay2-
//8858 cmmnd3 - You disappoint me, students!
//8855 cmmnd1 - Do as I taught you!
//8856 cmmnd2 - Show them no mercy!
//8859 cmmnd4 - The time for practice is over! Show me what you've learned!
//8861 Sweep the leg! Do you have a problem with that?
//8860 death - An honorable... death...
//8947 - Aggro Mixed? - ?
#define SOUND_AGGRO RAND(8852,8853,8854)
#define SOUND_SLAY RAND(8861,8863)
#define SOUND_COMMND RAND(8855,8856,8858,8859,8861)
#define SOUND_DEATH 8860
#define SOUND_AGGROMIX 8847
#define SPELL_UNBALANCING_STRIKE 26613
#define SPELL_DISRUPTING_SHOUT RAID_MODE(29107,55543)
#define SPELL_JAGGED_KNIFE 55550
#define SPELL_HOPELESS 29125
enum Events
{
EVENT_NONE,
EVENT_STRIKE,
EVENT_SHOUT,
EVENT_KNIFE,
EVENT_COMMAND,
};
struct boss_razuviousAI : public BossAI
{
boss_razuviousAI(Creature *c) : BossAI(c, BOSS_RAZUVIOUS) {}
void KilledUnit(Unit* /*victim*/)
{
if (!(rand()%3))
DoPlaySoundToSet(me, SOUND_SLAY);
}
void DamageTaken(Unit* pDone_by, uint32& uiDamage)
{
// Damage done by the controlled Death Knight understudies should also count toward damage done by players
if (pDone_by->GetTypeId() == TYPEID_UNIT && (pDone_by->GetEntry() == 16803 || pDone_by->GetEntry() == 29941))
{
me->LowerPlayerDamageReq(uiDamage);
}
}
void JustDied(Unit* /*killer*/)
{
_JustDied();
DoPlaySoundToSet(me, SOUND_DEATH);
me->CastSpell(me, SPELL_HOPELESS, true); // TODO: this may affect other creatures
}
void EnterCombat(Unit * /*who*/)
{
_EnterCombat();
DoPlaySoundToSet(me, SOUND_AGGRO);
events.ScheduleEvent(EVENT_STRIKE, 30000);
events.ScheduleEvent(EVENT_SHOUT, 25000);
events.ScheduleEvent(EVENT_COMMAND, 40000);
events.ScheduleEvent(EVENT_KNIFE, 10000);
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_STRIKE:
DoCast(me->getVictim(), SPELL_UNBALANCING_STRIKE);
events.ScheduleEvent(EVENT_STRIKE, 30000);
return;
case EVENT_SHOUT:
DoCastAOE(SPELL_DISRUPTING_SHOUT);
events.ScheduleEvent(EVENT_SHOUT, 25000);
return;
case EVENT_KNIFE:
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f))
DoCast(pTarget, SPELL_JAGGED_KNIFE);
events.ScheduleEvent(EVENT_KNIFE, 10000);
return;
case EVENT_COMMAND:
DoPlaySoundToSet(me, SOUND_COMMND);
events.ScheduleEvent(EVENT_COMMAND, 40000);
return;
}
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_razuvious(Creature* pCreature)
{
return new boss_razuviousAI (pCreature);
}
void AddSC_boss_razuvious()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_razuvious";
newscript->GetAI = &GetAI_boss_razuvious;
newscript->RegisterSelf();
}
@@ -0,0 +1,403 @@
/*
* Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "ScriptedPch.h"
#include "naxxramas.h"
#define EMOTE_BREATH -1533082
#define EMOTE_ENRAGE -1533083
#define SPELL_FROST_AURA RAID_MODE(28531,55799)
#define SPELL_CLEAVE 19983
#define SPELL_TAIL_SWEEP RAID_MODE(55697,55696)
#define SPELL_SUMMON_BLIZZARD 28560
#define SPELL_LIFE_DRAIN RAID_MODE(28542,55665)
#define SPELL_ICEBOLT 28522
#define SPELL_FROST_BREATH 29318
#define SPELL_FROST_EXPLOSION 28524
#define SPELL_FROST_MISSILE 30101
#define SPELL_BERSERK 26662
#define SPELL_DIES 29357
#define SPELL_CHILL RAID_MODE(28547,55699)
#define MOB_BLIZZARD 16474
#define GO_ICEBLOCK 181247
#define ACHIEVEMENT_THE_HUNDRED_CLUB RAID_MODE(2146, 2147)
#define MAX_FROST_RESISTANCE 100
enum Phases
{
PHASE_NULL = 0,
PHASE_BIRTH,
PHASE_GROUND,
PHASE_FLIGHT,
};
enum Events
{
EVENT_NONE,
EVENT_BERSERK,
EVENT_CLEAVE,
EVENT_TAIL,
EVENT_DRAIN,
EVENT_BLIZZARD,
EVENT_FLIGHT,
EVENT_LIFTOFF,
EVENT_ICEBOLT,
EVENT_BREATH,
EVENT_EXPLOSION,
EVENT_LAND,
EVENT_GROUND,
EVENT_BIRTH,
};
typedef std::map<uint64, uint64> IceBlockMap;
struct boss_sapphironAI : public BossAI
{
boss_sapphironAI(Creature* c) : BossAI(c, BOSS_SAPPHIRON)
, phase(PHASE_NULL)
{
pMap = me->GetMap();
}
Phases phase;
uint32 iceboltCount;
IceBlockMap iceblocks;
bool CanTheHundredClub; // needed for achievement: The Hundred Club(2146, 2147)
uint32 CheckFrostResistTimer;
Map* pMap;
void InitializeAI()
{
float x, y, z;
me->GetPosition(x, y, z);
me->SummonGameObject(GO_BIRTH, x, y, z, 0, 0, 0, 0, 0, 0);
me->SetVisibility(VISIBILITY_OFF);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetReactState(REACT_PASSIVE);
ScriptedAI::InitializeAI();
}
void Reset()
{
_Reset();
if (phase == PHASE_FLIGHT)
ClearIceBlock();
phase = PHASE_NULL;
CanTheHundredClub = true;
CheckFrostResistTimer = 5000;
}
void EnterCombat(Unit * /*who*/)
{
_EnterCombat();
me->CastSpell(me, SPELL_FROST_AURA, true);
events.ScheduleEvent(EVENT_BERSERK, 15*60000);
EnterPhaseGround();
CheckPlayersFrostResist();
}
void SpellHitTarget(Unit *pTarget, const SpellEntry *spell)
{
if (spell->Id == SPELL_ICEBOLT)
{
IceBlockMap::iterator itr = iceblocks.find(pTarget->GetGUID());
if (itr != iceblocks.end() && !itr->second)
{
if (GameObject *iceblock = me->SummonGameObject(GO_ICEBLOCK, pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ(), 0, 0, 0, 0, 0, 25000))
itr->second = iceblock->GetGUID();
}
}
}
void JustDied(Unit* /*who*/)
{
_JustDied();
me->CastSpell(me, SPELL_DIES, true);
CheckPlayersFrostResist();
if (CanTheHundredClub)
{
AchievementEntry const *AchievTheHundredClub = GetAchievementStore()->LookupEntry(ACHIEVEMENT_THE_HUNDRED_CLUB);
if (AchievTheHundredClub)
{
if (pMap && pMap->IsDungeon())
{
Map::PlayerList const &players = pMap->GetPlayers();
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
itr->getSource()->CompletedAchievement(AchievTheHundredClub);
}
}
}
}
void MovementInform(uint32, uint32 id)
{
if (id == 1)
events.ScheduleEvent(EVENT_LIFTOFF, 0);
}
void DoAction(const int32 param)
{
if (param == DATA_SAPPHIRON_BIRTH)
{
phase = PHASE_BIRTH;
events.ScheduleEvent(EVENT_BIRTH, 23000);
}
}
void CheckPlayersFrostResist()
{
if (CanTheHundredClub && pMap && pMap->IsDungeon())
{
Map::PlayerList const &players = pMap->GetPlayers();
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
{
if (itr->getSource()->GetResistance(SPELL_SCHOOL_FROST) > MAX_FROST_RESISTANCE)
{
CanTheHundredClub = false;
break;
}
}
}
}
void EnterPhaseGround()
{
phase = PHASE_GROUND;
me->SetReactState(REACT_AGGRESSIVE);
events.SetPhase(PHASE_GROUND);
events.ScheduleEvent(EVENT_CLEAVE, 5000+rand()%10000, 0, PHASE_GROUND);
events.ScheduleEvent(EVENT_TAIL, 5000+rand()%10000, 0, PHASE_GROUND);
events.ScheduleEvent(EVENT_DRAIN, 24000, 0, PHASE_GROUND);
events.ScheduleEvent(EVENT_BLIZZARD, 5000+rand()%5000, 0, PHASE_GROUND);
events.ScheduleEvent(EVENT_FLIGHT, 45000);
}
void ClearIceBlock()
{
for (IceBlockMap::const_iterator itr = iceblocks.begin(); itr != iceblocks.end(); ++itr)
{
if (Player* pPlayer = Unit::GetPlayer(itr->first))
pPlayer->RemoveAura(SPELL_ICEBOLT);
if (GameObject* pGo = GameObject::GetGameObject(*me, itr->second))
pGo->Delete();
}
iceblocks.clear();
}
void UpdateAI(const uint32 diff)
{
if (!phase)
return;
events.Update(diff);
if (phase != PHASE_BIRTH && !UpdateCombatState() || !CheckInRoom())
return;
if (CanTheHundredClub)
{
if (CheckFrostResistTimer <= diff)
{
CheckPlayersFrostResist();
CheckFrostResistTimer = (rand() % 5 + 5) * 1000;
} else CheckFrostResistTimer -= diff;
}
if (phase == PHASE_GROUND)
{
while (uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_BERSERK:
DoScriptText(EMOTE_ENRAGE, me);
DoCast(me, SPELL_BERSERK);
return;
case EVENT_CLEAVE:
DoCast(me->getVictim(), SPELL_CLEAVE);
events.ScheduleEvent(EVENT_CLEAVE, 5000+rand()%10000, 0, PHASE_GROUND);
return;
case EVENT_TAIL:
DoCastAOE(SPELL_TAIL_SWEEP);
events.ScheduleEvent(EVENT_TAIL, 5000+rand()%10000, 0, PHASE_GROUND);
return;
case EVENT_DRAIN:
DoCastAOE(SPELL_LIFE_DRAIN);
events.ScheduleEvent(EVENT_DRAIN, 24000, 0, PHASE_GROUND);
return;
case EVENT_BLIZZARD:
{
//DoCastAOE(SPELL_SUMMON_BLIZZARD);
if (Creature *pSummon = DoSummon(MOB_BLIZZARD, me, 0.0f, urand(25000,30000), TEMPSUMMON_TIMED_DESPAWN))
pSummon->GetMotionMaster()->MoveRandom(40);
events.ScheduleEvent(EVENT_BLIZZARD, RAID_MODE(20000,7000), 0, PHASE_GROUND);
break;
}
case EVENT_FLIGHT:
phase = PHASE_FLIGHT;
events.SetPhase(PHASE_FLIGHT);
me->SetReactState(REACT_PASSIVE);
me->AttackStop();
float x, y, z, o;
me->GetHomePosition(x, y, z, o);
me->GetMotionMaster()->MovePoint(1, x, y, z);
return;
}
}
DoMeleeAttackIfReady();
}
else
{
if (uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_LIFTOFF:
me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
me->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
me->SendMovementFlagUpdate();
events.ScheduleEvent(EVENT_ICEBOLT, 1500);
iceboltCount = RAID_MODE(2,3);
return;
case EVENT_ICEBOLT:
{
std::vector<Unit*> targets;
std::list<HostileReference*>::const_iterator i = me->getThreatManager().getThreatList().begin();
for (; i != me->getThreatManager().getThreatList().end(); ++i)
if ((*i)->getTarget()->GetTypeId() == TYPEID_PLAYER && !(*i)->getTarget()->HasAura(SPELL_ICEBOLT))
targets.push_back((*i)->getTarget());
if (targets.empty())
iceboltCount = 0;
else
{
std::vector<Unit*>::const_iterator itr = targets.begin();
advance(itr, rand()%targets.size());
iceblocks.insert(std::make_pair((*itr)->GetGUID(), 0));
DoCast(*itr, SPELL_ICEBOLT);
--iceboltCount;
}
if (iceboltCount)
events.ScheduleEvent(EVENT_ICEBOLT, 1000);
else
events.ScheduleEvent(EVENT_BREATH, 1000);
return;
}
case EVENT_BREATH:
{
DoScriptText(EMOTE_BREATH, me);
DoCastAOE(SPELL_FROST_MISSILE);
events.ScheduleEvent(EVENT_EXPLOSION, 8000);
return;
}
case EVENT_EXPLOSION:
CastExplosion();
ClearIceBlock();
events.ScheduleEvent(EVENT_LAND, 3000);
return;
case EVENT_LAND:
me->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
me->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
me->SendMovementFlagUpdate();
events.ScheduleEvent(EVENT_GROUND, 1500);
return;
case EVENT_GROUND:
EnterPhaseGround();
return;
case EVENT_BIRTH:
me->SetVisibility(VISIBILITY_ON);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetReactState(REACT_AGGRESSIVE);
return;
}
}//if (uint32 eventId = events.ExecuteEvent())
}//if (phase == PHASE_GROUND)
}
void CastExplosion()
{
DoZoneInCombat(); // make sure everyone is in threatlist
std::vector<Unit*> targets;
std::list<HostileReference*>::const_iterator i = me->getThreatManager().getThreatList().begin();
for (; i != me->getThreatManager().getThreatList().end(); ++i)
{
Unit *pTarget = (*i)->getTarget();
if (pTarget->GetTypeId() != TYPEID_PLAYER)
continue;
if (pTarget->HasAura(SPELL_ICEBOLT))
{
pTarget->ApplySpellImmune(0, IMMUNITY_ID, SPELL_FROST_EXPLOSION, true);
targets.push_back(pTarget);
continue;
}
for (IceBlockMap::const_iterator itr = iceblocks.begin(); itr != iceblocks.end(); ++itr)
{
if (GameObject* pGo = GameObject::GetGameObject(*me, itr->second))
{
if (pGo->IsInBetween(me, pTarget, 2.0f)
&& me->GetExactDist2d(pTarget->GetPositionX(), pTarget->GetPositionY()) - me->GetExactDist2d(pGo->GetPositionX(), pGo->GetPositionY()) < 5.0f)
{
pTarget->ApplySpellImmune(0, IMMUNITY_ID, SPELL_FROST_EXPLOSION, true);
targets.push_back(pTarget);
break;
}
}
}
}
me->CastSpell(me, SPELL_FROST_EXPLOSION, true);
for (std::vector<Unit*>::const_iterator itr = targets.begin(); itr != targets.end(); ++itr)
(*itr)->ApplySpellImmune(0, IMMUNITY_ID, SPELL_FROST_EXPLOSION, false);
}
};
CreatureAI* GetAI_boss_sapphiron(Creature* pCreature)
{
return new boss_sapphironAI (pCreature);
}
void AddSC_boss_sapphiron()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_sapphiron";
newscript->GetAI = &GetAI_boss_sapphiron;
newscript->RegisterSelf();
// Chill
GetAISpellInfo(28547)->cooldown = 1000;
GetAISpellInfo(55699)->cooldown = 1000;
}
@@ -0,0 +1,400 @@
/*
* Copyright (C) 2008 - 2010 Trinity <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "ScriptedPch.h"
#include "naxxramas.h"
//Stalagg
enum StalaggYells
{
SAY_STAL_AGGRO = -1533023, //not used
SAY_STAL_SLAY = -1533024, //not used
SAY_STAL_DEATH = -1533025 //not used
};
enum StalagSpells
{
SPELL_POWERSURGE = 28134,
H_SPELL_POWERSURGE = 54529,
SPELL_MAGNETIC_PULL = 28338,
SPELL_STALAGG_TESLA = 28097
};
//Feugen
enum FeugenYells
{
SAY_FEUG_AGGRO = -1533026, //not used
SAY_FEUG_SLAY = -1533027, //not used
SAY_FEUG_DEATH = -1533028 //not used
};
enum FeugenSpells
{
SPELL_STATICFIELD = 28135,
H_SPELL_STATICFIELD = 54528,
SPELL_FEUGEN_TESLA = 28109
};
// Thaddius DoAction
enum ThaddiusActions
{
ACTION_FEUGEN_RESET,
ACTION_FEUGEN_DIED,
ACTION_STALAGG_RESET,
ACTION_STALAGG_DIED
};
//generic
#define C_TESLA_COIL 16218 //the coils (emotes "Tesla Coil overloads!")
//Thaddius
enum ThaddiusYells
{
SAY_GREET = -1533029, //not used
SAY_AGGRO_1 = -1533030,
SAY_AGGRO_2 = -1533031,
SAY_AGGRO_3 = -1533032,
SAY_SLAY = -1533033,
SAY_ELECT = -1533034, //not used
SAY_DEATH = -1533035,
SAY_SCREAM1 = -1533036, //not used
SAY_SCREAM2 = -1533037, //not used
SAY_SCREAM3 = -1533038, //not used
SAY_SCREAM4 = -1533039 //not used
};
enum ThaddiusSpells
{
SPELL_POLARITY_SHIFT = 28089,
SPELL_BALL_LIGHTNING = 28299,
SPELL_CHAIN_LIGHTNING = 28167,
H_SPELL_CHAIN_LIGHTNING = 54531,
SPELL_BERSERK = 27680
};
enum Events
{
EVENT_NONE,
EVENT_SHIFT,
EVENT_CHAIN,
EVENT_BERSERK,
};
struct boss_thaddiusAI : public BossAI
{
boss_thaddiusAI(Creature *c) : BossAI(c, BOSS_THADDIUS)
{
// init is a bit tricky because thaddius shall track the life of both adds, but not if there was a wipe
// and, in particular, if there was a crash after both adds were killed (should not respawn)
// Moreover, the adds may not yet be spawn. So just track down the status if mob is spawn
// and each mob will send its status at reset (meaning that it is alive)
checkFeugenAlive = false;
if (Creature *pFeugen = me->GetCreature(*me, instance->GetData64(DATA_FEUGEN)))
checkFeugenAlive = pFeugen->isAlive();
checkStalaggAlive = false;
if (Creature *pStalagg = me->GetCreature(*me, instance->GetData64(DATA_STALAGG)))
checkStalaggAlive = pStalagg->isAlive();
if (!checkFeugenAlive && !checkStalaggAlive)
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
me->SetReactState(REACT_AGGRESSIVE);
}
else
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
me->SetReactState(REACT_PASSIVE);
}
}
bool checkStalaggAlive;
bool checkFeugenAlive;
uint32 uiAddsTimer;
void KilledUnit(Unit* /*victim*/)
{
if (!(rand()%5))
DoScriptText(SAY_SLAY, me);
}
void JustDied(Unit* /*Killer*/)
{
_JustDied();
DoScriptText(SAY_DEATH, me);
}
void DoAction(const int32 action)
{
switch(action)
{
case ACTION_FEUGEN_RESET:
checkFeugenAlive = true;
break;
case ACTION_FEUGEN_DIED:
checkFeugenAlive = false;
break;
case ACTION_STALAGG_RESET:
checkStalaggAlive = true;
break;
case ACTION_STALAGG_DIED:
checkStalaggAlive = false;
break;
}
if (!checkFeugenAlive && !checkStalaggAlive)
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
// REACT_AGGRESSIVE only reset when he takes damage.
DoZoneInCombat();
}
else
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
me->SetReactState(REACT_PASSIVE);
}
}
void EnterCombat(Unit * /*who*/)
{
_EnterCombat();
DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2,SAY_AGGRO_3), me);
events.ScheduleEvent(EVENT_SHIFT, 30000);
events.ScheduleEvent(EVENT_CHAIN, urand(10000,20000));
events.ScheduleEvent(EVENT_BERSERK, 360000);
}
void DamageTaken(Unit * /*pDoneBy*/, uint32 & /*uiDamage*/)
{
me->SetReactState(REACT_AGGRESSIVE);
}
void UpdateAI(const uint32 diff)
{
if (checkFeugenAlive && checkStalaggAlive)
uiAddsTimer = 0;
if (checkStalaggAlive != checkFeugenAlive)
{
uiAddsTimer += diff;
if (uiAddsTimer > 5000)
{
if (!checkStalaggAlive)
{
if (instance)
if (Creature *pStalagg = me->GetCreature(*me, instance->GetData64(DATA_STALAGG)))
pStalagg->Respawn();
}
else
{
if (instance)
if (Creature *pFeugen = me->GetCreature(*me, instance->GetData64(DATA_FEUGEN)))
pFeugen->Respawn();
}
}
}
if (!UpdateVictim())
return;
events.Update(diff);
if (me->hasUnitState(UNIT_STAT_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_SHIFT:
DoCastAOE(SPELL_POLARITY_SHIFT);
events.ScheduleEvent(EVENT_SHIFT, 30000);
return;
case EVENT_CHAIN:
DoCast(me->getVictim(), RAID_MODE(SPELL_CHAIN_LIGHTNING, H_SPELL_CHAIN_LIGHTNING));
events.ScheduleEvent(EVENT_CHAIN, urand(10000,20000));
return;
case EVENT_BERSERK:
DoCast(me, SPELL_BERSERK);
return;
}
}
if (events.GetTimer() > 15000 && !me->IsWithinMeleeRange(me->getVictim()))
DoCast(me->getVictim(), SPELL_BALL_LIGHTNING);
else
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_thaddius(Creature* pCreature)
{
return new boss_thaddiusAI (pCreature);
}
struct mob_stalaggAI : public ScriptedAI
{
mob_stalaggAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance* pInstance;
uint32 powerSurgeTimer;
uint32 magneticPullTimer;
void Reset()
{
if (pInstance)
if (Creature *pThaddius = me->GetCreature(*me, pInstance->GetData64(DATA_THADDIUS)))
if (pThaddius->AI())
pThaddius->AI()->DoAction(ACTION_STALAGG_RESET);
powerSurgeTimer = urand(20000,25000);
magneticPullTimer = 20000;
}
void EnterCombat(Unit * /*pWho*/)
{
DoCast(SPELL_STALAGG_TESLA);
}
void JustDied(Unit * /*killer*/)
{
if (pInstance)
if (Creature *pThaddius = me->GetCreature(*me, pInstance->GetData64(DATA_THADDIUS)))
if (pThaddius->AI())
pThaddius->AI()->DoAction(ACTION_STALAGG_DIED);
}
void UpdateAI(const uint32 uiDiff)
{
if (!UpdateVictim())
return;
if (magneticPullTimer <= uiDiff)
{
if (Creature *pFeugen = me->GetCreature(*me, pInstance->GetData64(DATA_FEUGEN)))
{
Unit* pStalaggVictim = me->getVictim();
Unit* pFeugenVictim = pFeugen->getVictim();
if (pFeugenVictim && pStalaggVictim)
{
// magnetic pull is not working. So just jump.
// reset aggro to be sure that feugen will not follow the jump
pFeugen->getThreatManager().modifyThreatPercent(pFeugenVictim, -100);
pFeugenVictim->JumpTo(me, 0.3f);
me->getThreatManager().modifyThreatPercent(pStalaggVictim, -100);
pStalaggVictim->JumpTo(pFeugen, 0.3f);
}
}
magneticPullTimer = 20000;
}
else magneticPullTimer -= uiDiff;
if (powerSurgeTimer <= uiDiff)
{
DoCast(me, RAID_MODE(SPELL_POWERSURGE, H_SPELL_POWERSURGE));
powerSurgeTimer = urand(15000,20000);
} else powerSurgeTimer -= uiDiff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_mob_stalagg(Creature* pCreature)
{
return new mob_stalaggAI(pCreature);
}
struct mob_feugenAI : public ScriptedAI
{
mob_feugenAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance* pInstance;
uint32 staticFieldTimer;
void Reset()
{
if (pInstance)
if (Creature *pThaddius = me->GetCreature(*me, pInstance->GetData64(DATA_THADDIUS)))
if (pThaddius->AI())
pThaddius->AI()->DoAction(ACTION_FEUGEN_RESET);
staticFieldTimer = 5000;
}
void EnterCombat(Unit * /*pWho*/)
{
DoCast(SPELL_FEUGEN_TESLA);
}
void JustDied(Unit * /*killer*/)
{
if (pInstance)
if (Creature *pThaddius = me->GetCreature(*me, pInstance->GetData64(DATA_THADDIUS)))
if (pThaddius->AI())
pThaddius->AI()->DoAction(ACTION_FEUGEN_DIED);
}
void UpdateAI(const uint32 uiDiff)
{
if (!UpdateVictim())
return;
if (staticFieldTimer <= uiDiff)
{
DoCast(me, RAID_MODE(SPELL_STATICFIELD, H_SPELL_STATICFIELD));
staticFieldTimer = 5000;
} else staticFieldTimer -= uiDiff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_mob_feugen(Creature* pCreature)
{
return new mob_feugenAI(pCreature);
}
void AddSC_boss_thaddius()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_thaddius";
newscript->GetAI = &GetAI_boss_thaddius;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "mob_stalagg";
newscript->GetAI = &GetAI_mob_stalagg;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "mob_feugen";
newscript->GetAI = &GetAI_mob_feugen;
newscript->RegisterSelf();
}
@@ -0,0 +1,324 @@
/* Copyright (C) 2008 - 2010 Trinity <http://www.trinitycore.org/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "ScriptedPch.h"
#include "naxxramas.h"
const DoorData doorData[] =
{
{181126, BOSS_ANUBREKHAN,DOOR_TYPE_ROOM, BOUNDARY_S},
{181195, BOSS_ANUBREKHAN,DOOR_TYPE_PASSAGE, 0},
{194022, BOSS_FAERLINA, DOOR_TYPE_PASSAGE, 0},
{181209, BOSS_FAERLINA, DOOR_TYPE_PASSAGE, 0},
{181209, BOSS_MAEXXNA, DOOR_TYPE_ROOM, BOUNDARY_SW},
{181200, BOSS_NOTH, DOOR_TYPE_ROOM, BOUNDARY_N},
{181201, BOSS_NOTH, DOOR_TYPE_PASSAGE, BOUNDARY_E},
{181202, BOSS_NOTH, DOOR_TYPE_PASSAGE, 0},
{181202, BOSS_HEIGAN, DOOR_TYPE_ROOM, BOUNDARY_N},
{181203, BOSS_HEIGAN, DOOR_TYPE_PASSAGE, BOUNDARY_E},
{181241, BOSS_HEIGAN, DOOR_TYPE_PASSAGE, 0},
{181241, BOSS_LOATHEB, DOOR_TYPE_ROOM, BOUNDARY_W},
{181123, BOSS_PATCHWERK, DOOR_TYPE_PASSAGE, 0},
{181123, BOSS_GROBBULUS, DOOR_TYPE_ROOM, 0},
{181120, BOSS_GLUTH, DOOR_TYPE_PASSAGE, BOUNDARY_NW},
{181121, BOSS_GLUTH, DOOR_TYPE_PASSAGE, 0},
{181121, BOSS_THADDIUS, DOOR_TYPE_ROOM, 0},
{181124, BOSS_RAZUVIOUS, DOOR_TYPE_PASSAGE, 0},
{181124, BOSS_GOTHIK, DOOR_TYPE_ROOM, BOUNDARY_N},
{181125, BOSS_GOTHIK, DOOR_TYPE_PASSAGE, BOUNDARY_S},
{181119, BOSS_GOTHIK, DOOR_TYPE_PASSAGE, 0},
{181119, BOSS_HORSEMEN, DOOR_TYPE_ROOM, BOUNDARY_NE},
{181225, BOSS_SAPPHIRON, DOOR_TYPE_PASSAGE, BOUNDARY_W},
{181228, BOSS_KELTHUZAD, DOOR_TYPE_ROOM, BOUNDARY_S},
{0, 0, DOOR_TYPE_ROOM, 0}, // EOF
};
const MinionData minionData[] =
{
//{16573, BOSS_ANUBREKHAN}, there is no spawn point in db, so we do not add them here
{16506, BOSS_FAERLINA},
{16803, BOSS_RAZUVIOUS},
{16063, BOSS_HORSEMEN},
{16064, BOSS_HORSEMEN},
{16065, BOSS_HORSEMEN},
{30549, BOSS_HORSEMEN},
{0, 0,}
};
enum eEnums
{
GO_HORSEMEN_CHEST_HERO = 193426,
GO_HORSEMEN_CHEST = 181366, //four horsemen event, DoRespawnGameObject() when event == DONE
GO_GOTHIK_GATE = 181170,
GO_KELTHUZAD_PORTAL01 = 181402,
GO_KELTHUZAD_PORTAL02 = 181403,
GO_KELTHUZAD_PORTAL03 = 181404,
GO_KELTHUZAD_PORTAL04 = 181405,
GO_KELTHUZAD_TRIGGER = 181444,
SPELL_ERUPTION = 29371
};
const float HeiganPos[2] = {2796, -3707};
const float HeiganEruptionSlope[3] =
{
(-3685 - HeiganPos[1]) /(2724 - HeiganPos[0]),
(-3647 - HeiganPos[1]) /(2749 - HeiganPos[0]),
(-3637 - HeiganPos[1]) /(2771 - HeiganPos[0]),
};
// 0 H x
// 1 ^
// 2 |
// 3 y<--o
inline uint32 GetEruptionSection(float x, float y)
{
y -= HeiganPos[1];
if (y < 1.0f)
return 0;
x -= HeiganPos[0];
if (x > -1.0f)
return 3;
float slope = y/x;
for (uint32 i = 0; i < 3; ++i)
if (slope > HeiganEruptionSlope[i])
return i;
return 3;
}
struct instance_naxxramas : public InstanceData
{
instance_naxxramas(Map* pMap) : InstanceData(pMap)
{
SetBossNumber(MAX_BOSS_NUMBER);
LoadDoorData(doorData);
LoadMinionData(minionData);
}
std::set<uint64> HeiganEruptionGUID[4];
uint64 GothikGateGUID;
uint64 HorsemenChestGUID;
uint64 SapphironGUID;
uint64 uiFaerlina;
uint64 uiThane;
uint64 uiLady;
uint64 uiBaron;
uint64 uiSir;
uint64 uiThaddius;
uint64 uiFeugen;
uint64 uiStalagg;
uint64 uiKelthuzad;
uint64 uiKelthuzadTrigger;
uint64 uiPortals[4];
time_t minHorsemenDiedTime;
time_t maxHorsemenDiedTime;
void OnCreatureCreate(Creature* pCreature, bool add)
{
switch(pCreature->GetEntry())
{
case 15989: SapphironGUID = add ? pCreature->GetGUID() : 0; return;
case 15953: uiFaerlina = pCreature->GetGUID(); return;
case 16064: uiThane = pCreature->GetGUID(); return;
case 16065: uiLady = pCreature->GetGUID(); return;
case 30549: uiBaron = pCreature->GetGUID(); return;
case 16063: uiSir = pCreature->GetGUID(); return;
case 15928: uiThaddius = pCreature->GetGUID(); return;
case 15930: uiFeugen = pCreature->GetGUID(); return;
case 15929: uiStalagg = pCreature->GetGUID(); return;
case 15990: uiKelthuzad = pCreature->GetGUID(); return;
}
AddMinion(pCreature, add);
}
void OnGameObjectCreate(GameObject* pGo, bool add)
{
if (pGo->GetGOInfo()->displayId == 6785 || pGo->GetGOInfo()->displayId == 1287)
{
uint32 section = GetEruptionSection(pGo->GetPositionX(), pGo->GetPositionY());
if (add)
HeiganEruptionGUID[section].insert(pGo->GetGUID());
else
HeiganEruptionGUID[section].erase(pGo->GetGUID());
return;
}
switch(pGo->GetEntry())
{
case GO_BIRTH:
if (!add && SapphironGUID)
{
if (Creature *pSapphiron = instance->GetCreature(SapphironGUID))
pSapphiron->AI()->DoAction(DATA_SAPPHIRON_BIRTH);
return;
}
case GO_GOTHIK_GATE: GothikGateGUID = add ? pGo->GetGUID() : 0; break;
case GO_HORSEMEN_CHEST: HorsemenChestGUID = add ? pGo->GetGUID() : 0; break;
case GO_HORSEMEN_CHEST_HERO: HorsemenChestGUID = add ? pGo->GetGUID() : 0; break;
case GO_KELTHUZAD_PORTAL01: uiPortals[0] = pGo->GetGUID(); break;
case GO_KELTHUZAD_PORTAL02: uiPortals[1] = pGo->GetGUID(); break;
case GO_KELTHUZAD_PORTAL03: uiPortals[2] = pGo->GetGUID(); break;
case GO_KELTHUZAD_PORTAL04: uiPortals[3] = pGo->GetGUID(); break;
case GO_KELTHUZAD_TRIGGER: uiKelthuzadTrigger = pGo->GetGUID(); break;
}
AddDoor(pGo, add);
}
void SetData(uint32 id, uint32 value)
{
switch(id)
{
case DATA_HEIGAN_ERUPT:
HeiganErupt(value);
break;
case DATA_GOTHIK_GATE:
if (GameObject *pGothikGate = instance->GetGameObject(GothikGateGUID))
pGothikGate->SetGoState(GOState(value));
break;
case DATA_HORSEMEN0:
case DATA_HORSEMEN1:
case DATA_HORSEMEN2:
case DATA_HORSEMEN3:
if (value == NOT_STARTED)
{
minHorsemenDiedTime = 0;
maxHorsemenDiedTime = 0;
}
else if (value == DONE)
{
time_t now = time(NULL);
if (minHorsemenDiedTime == 0)
minHorsemenDiedTime = now;
maxHorsemenDiedTime = now;
}
break;
}
}
uint64 GetData64(uint32 id)
{
switch(id)
{
case DATA_FAERLINA:
return uiFaerlina;
case DATA_THANE:
return uiThane;
case DATA_LADY:
return uiLady;
case DATA_BARON:
return uiBaron;
case DATA_SIR:
return uiSir;
case DATA_THADDIUS:
return uiThaddius;
case DATA_FEUGEN:
return uiFeugen;
case DATA_STALAGG:
return uiStalagg;
case DATA_KELTHUZAD:
return uiKelthuzad;
case DATA_KELTHUZAD_PORTAL01:
return uiPortals[0];
case DATA_KELTHUZAD_PORTAL02:
return uiPortals[1];
case DATA_KELTHUZAD_PORTAL03:
return uiPortals[2];
case DATA_KELTHUZAD_PORTAL04:
return uiPortals[3];
case DATA_KELTHUZAD_TRIGGER:
return uiKelthuzadTrigger;
}
return 0;
}
bool SetBossState(uint32 id, EncounterState state)
{
if (!InstanceData::SetBossState(id, state))
return false;
if (id == BOSS_HORSEMEN && state == DONE)
{
if (GameObject *pHorsemenChest = instance->GetGameObject(HorsemenChestGUID))
pHorsemenChest->SetRespawnTime(pHorsemenChest->GetRespawnDelay());
}
return true;
}
void HeiganErupt(uint32 section)
{
for (uint32 i = 0; i < 4; ++i)
{
if (i == section)
continue;
for (std::set<uint64>::const_iterator itr = HeiganEruptionGUID[i].begin(); itr != HeiganEruptionGUID[i].end(); ++itr)
{
if (GameObject *pHeiganEruption = instance->GetGameObject(*itr))
{
pHeiganEruption->SendCustomAnim();
pHeiganEruption->CastSpell(NULL, SPELL_ERUPTION);
}
}
}
}
bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target = NULL*/, uint32 /*miscvalue1 = 0*/)
{
switch(criteria_id)
{
case 7600: // Criteria for achievement 2176: And They Would All Go Down Together 15sec of each other 10-man
if (Difficulty(instance->GetSpawnMode()) == RAID_DIFFICULTY_10MAN_NORMAL && (maxHorsemenDiedTime - minHorsemenDiedTime) < 15)
return true;
return false;
case 7601: // Criteria for achievement 2177: And They Would All Go Down Together 15sec of each other 25-man
if (Difficulty(instance->GetSpawnMode()) == RAID_DIFFICULTY_25MAN_NORMAL && (maxHorsemenDiedTime - minHorsemenDiedTime) < 15)
return true;
return false;
case 13233: // Criteria for achievement 2186: The Immortal (25-man)
// TODO.
break;
case 13237: // Criteria for achievement 2187: The Undying (10-man)
// TODO.
break;
}
return false;
}
};
InstanceData* GetInstanceData_instance_naxxramas(Map* pMap)
{
return new instance_naxxramas(pMap);
}
void AddSC_instance_naxxramas()
{
Script *newscript;
newscript = new Script;
newscript->Name = "instance_naxxramas";
newscript->GetInstanceData = &GetInstanceData_instance_naxxramas;
newscript->RegisterSelf();
}
@@ -0,0 +1,75 @@
/*
* Copyright (C) 2008 - 2010 Trinity <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef DEF_NAXXRAMAS_H
#define DEF_NAXXRAMAS_H
enum Encounter
{
BOSS_ANUBREKHAN,
BOSS_FAERLINA,
BOSS_MAEXXNA,
BOSS_NOTH,
BOSS_HEIGAN,
BOSS_LOATHEB,
BOSS_PATCHWERK,
BOSS_GROBBULUS,
BOSS_GLUTH,
BOSS_THADDIUS,
BOSS_RAZUVIOUS,
BOSS_GOTHIK,
BOSS_HORSEMEN,
BOSS_SAPPHIRON,
BOSS_KELTHUZAD,
MAX_BOSS_NUMBER
};
enum Data
{
DATA_HEIGAN_ERUPT,
DATA_GOTHIK_GATE,
DATA_SAPPHIRON_BIRTH,
DATA_HORSEMEN0,
DATA_HORSEMEN1,
DATA_HORSEMEN2,
DATA_HORSEMEN3,
};
enum Data64
{
DATA_FAERLINA,
DATA_THANE,
DATA_LADY,
DATA_BARON,
DATA_SIR,
DATA_THADDIUS,
DATA_FEUGEN,
DATA_STALAGG,
DATA_KELTHUZAD,
DATA_KELTHUZAD_PORTAL01,
DATA_KELTHUZAD_PORTAL02,
DATA_KELTHUZAD_PORTAL03,
DATA_KELTHUZAD_PORTAL04,
DATA_KELTHUZAD_TRIGGER,
};
#define GO_BIRTH 181356
#endif