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,69 @@
/* 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: Black_Temple
SD%Complete: 95
SDComment: Spirit of Olum: Player Teleporter to Seer Kanai Teleport after defeating Naj'entus and Supremus. TODO: Find proper gossip.
SDCategory: Black Temple
EndScriptData */
/* ContentData
npc_spirit_of_olum
EndContentData */
#include "ScriptedPch.h"
#include "black_temple.h"
/*###
# npc_spirit_of_olum
####*/
#define SPELL_TELEPORT 41566 // s41566 - Teleport to Ashtongue NPC's
#define GOSSIP_OLUM1 "Teleport me to the other Ashtongue Deathsworn"
bool GossipHello_npc_spirit_of_olum(Player* pPlayer, Creature* pCreature)
{
ScriptedInstance* pInstance = pCreature->GetInstanceData();
if (pInstance && (pInstance->GetData(DATA_SUPREMUSEVENT) >= DONE) && (pInstance->GetData(DATA_HIGHWARLORDNAJENTUSEVENT) >= DONE))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_OLUM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
bool GossipSelect_npc_spirit_of_olum(Player* pPlayer, Creature* /*pCreature*/, uint32 /*uiSender*/, uint32 uiAction)
{
if (uiAction == GOSSIP_ACTION_INFO_DEF + 1)
pPlayer->CLOSE_GOSSIP_MENU();
pPlayer->InterruptNonMeleeSpells(false);
pPlayer->CastSpell(pPlayer, SPELL_TELEPORT, false);
return true;
}
void AddSC_black_temple()
{
Script *newscript;
newscript = new Script;
newscript->Name = "npc_spirit_of_olum";
newscript->pGossipHello = &GossipHello_npc_spirit_of_olum;
newscript->pGossipSelect = &GossipSelect_npc_spirit_of_olum;
newscript->RegisterSelf();
}
@@ -0,0 +1,39 @@
/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
* This program is free software licensed under GPL version 2
* Please see the included DOCS/LICENSE.TXT for more information */
#ifndef DEF_BLACK_TEMPLE_H
#define DEF_BLACK_TEMPLE_H
enum eTypes
{
DATA_AKAMA = 1,
DATA_AKAMA_SHADE = 2,
DATA_GURTOGGBLOODBOILEVENT = 3,
DATA_HIGHWARLORDNAJENTUS = 4,
DATA_HIGHWARLORDNAJENTUSEVENT = 5,
DATA_ILLIDANSTORMRAGE = 6,
DATA_ILLIDANSTORMRAGEEVENT = 7,
DATA_ILLIDARICOUNCILEVENT = 8,
DATA_ILLIDARICOUNCIL = 9,
DATA_LADYMALANDE = 10,
DATA_HIGHNETHERMANCERZEREVOR = 11,
DATA_GATHIOSTHESHATTERER = 12,
DATA_VERASDARKSHADOW = 13,
DATA_MOTHERSHAHRAZEVENT = 14,
DATA_RELIQUARYOFSOULSEVENT = 15,
DATA_SHADEOFAKAMA = 16,
DATA_SHADEOFAKAMAEVENT = 17,
DATA_SUPREMUS = 18,
DATA_SUPREMUSEVENT = 19,
DATA_TERONGOREFIENDEVENT = 20,
DATA_GAMEOBJECT_NAJENTUS_GATE = 21,
DATA_GAMEOBJECT_ILLIDAN_GATE = 22,
DATA_GAMEOBJECT_ILLIDAN_DOOR_R = 23,
DATA_GAMEOBJECT_ILLIDAN_DOOR_L = 24,
DATA_GAMEOBJECT_SUPREMUS_DOORS = 25,
DATA_BLOOD_ELF_COUNCIL_VOICE = 26
};
#endif
@@ -0,0 +1,332 @@
/* 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_Bloodboil
SD%Complete: 80
SDComment: Bloodboil not working correctly, missing enrage
SDCategory: Black Temple
EndScriptData */
#include "ScriptedPch.h"
#include "black_temple.h"
//Speech'n'Sound
#define SAY_AGGRO -1564029
#define SAY_SLAY1 -1564030
#define SAY_SLAY2 -1564031
#define SAY_SPECIAL1 -1564032
#define SAY_SPECIAL2 -1564033
#define SAY_ENRAGE1 -1564034
#define SAY_ENRAGE2 -1564035
#define SAY_DEATH -1564036
//Spells
#define SPELL_ACID_GEYSER 40630
#define SPELL_ACIDIC_WOUND 40481
#define SPELL_ARCING_SMASH 40599
#define SPELL_BLOODBOIL 42005 // This spell is AoE whereas it shouldn't be
#define SPELL_FEL_ACID 40508
#define SPELL_FEL_RAGE_SELF 40594
#define SPELL_FEL_RAGE_TARGET 40604
#define SPELL_FEL_RAGE_2 40616
#define SPELL_FEL_RAGE_3 41625
#define SPELL_BEWILDERING_STRIKE 40491
#define SPELL_EJECT1 40486 // 1000 Physical damage + knockback + script effect (should handle threat reduction I think)
#define SPELL_EJECT2 40597 // 1000 Physical damage + Stun (used in phase 2?)
#define SPELL_TAUNT_GURTOGG 40603
#define SPELL_INSIGNIFIGANCE 40618
#define SPELL_BERSERK 45078
//This is used to sort the players by distance in preparation for the Bloodboil cast.
struct boss_gurtogg_bloodboilAI : public ScriptedAI
{
boss_gurtogg_bloodboilAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance* pInstance;
uint64 TargetGUID;
float TargetThreat;
uint32 BloodboilTimer;
uint32 BloodboilCount;
uint32 AcidGeyserTimer;
uint32 AcidicWoundTimer;
uint32 ArcingSmashTimer;
uint32 EnrageTimer;
uint32 FelAcidTimer;
uint32 EjectTimer;
uint32 BewilderingStrikeTimer;
uint32 PhaseChangeTimer;
bool Phase1;
void Reset()
{
if (pInstance)
pInstance->SetData(DATA_GURTOGGBLOODBOILEVENT, NOT_STARTED);
TargetGUID = 0;
TargetThreat = 0;
BloodboilTimer = 10000;
BloodboilCount = 0;
AcidGeyserTimer = 1000;
AcidicWoundTimer = 6000;
ArcingSmashTimer = 19000;
EnrageTimer = 600000;
FelAcidTimer = 25000;
EjectTimer = 10000;
BewilderingStrikeTimer = 15000;
PhaseChangeTimer = 60000;
Phase1 = true;
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, false);
me->ApplySpellImmune(0, IMMUNITY_EFFECT,SPELL_EFFECT_ATTACK_ME, false);
}
void EnterCombat(Unit * /*who*/)
{
DoZoneInCombat();
DoScriptText(SAY_AGGRO, me);
if (pInstance)
pInstance->SetData(DATA_GURTOGGBLOODBOILEVENT, IN_PROGRESS);
}
void KilledUnit(Unit * /*victim*/)
{
DoScriptText(RAND(SAY_SLAY1,SAY_SLAY2), me);
}
void JustDied(Unit * /*victim*/)
{
if (pInstance)
pInstance->SetData(DATA_GURTOGGBLOODBOILEVENT, DONE);
DoScriptText(SAY_DEATH, me);
}
// Note: This seems like a very complicated fix. The fix needs to be handled by the core, as implementation of limited-target AoE spells are still not limited.
void CastBloodboil()
{
// Get the Threat List
std::list<HostileReference *> m_threatlist = me->getThreatManager().getThreatList();
if (!m_threatlist.size()) // He doesn't have anyone in his threatlist, useless to continue
return;
std::list<Unit *> targets;
std::list<HostileReference *>::const_iterator itr = m_threatlist.begin();
for (; itr!= m_threatlist.end(); ++itr) //store the threat list in a different container
{
Unit *pTarget = Unit::GetUnit(*me, (*itr)->getUnitGuid());
//only on alive players
if (pTarget && pTarget->isAlive() && pTarget->GetTypeId() == TYPEID_PLAYER)
targets.push_back(pTarget);
}
//Sort the list of players
targets.sort(Trinity::ObjectDistanceOrderPred(me, false));
//Resize so we only get top 5
targets.resize(5);
//Aura each player in the targets list with Bloodboil. Aura code copied+pasted from Aura command in Level3.cpp
/*SpellEntry const *spellInfo = GetSpellStore()->LookupEntry(SPELL_BLOODBOIL);
if (spellInfo)
{
for (std::list<Unit *>::const_iterator itr = targets.begin(); itr != targets.end(); ++itr)
{
Unit *pTarget = *itr;
if (!pTarget) return;
for (uint32 i = 0; i<3; ++i)
{
uint8 eff = spellInfo->Effect[i];
if (eff >= TOTAL_SPELL_EFFECTS)
continue;
Aura *Aur = new Aura(spellInfo, i, pTarget, pTarget, pTarget);
pTarget->AddAura(Aur);
}
}
}*/
}
void RevertThreatOnTarget(uint64 guid)
{
Unit* pUnit = NULL;
pUnit = Unit::GetUnit((*me), guid);
if (pUnit)
{
if (DoGetThreat(pUnit))
DoModifyThreatPercent(pUnit, -100);
if (TargetThreat)
me->AddThreat(pUnit, TargetThreat);
}
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
if (ArcingSmashTimer <= diff)
{
DoCast(me->getVictim(), SPELL_ARCING_SMASH);
ArcingSmashTimer = 10000;
} else ArcingSmashTimer -= diff;
if (FelAcidTimer <= diff)
{
DoCast(me->getVictim(), SPELL_FEL_ACID);
FelAcidTimer = 25000;
} else FelAcidTimer -= diff;
if (!me->HasAura(SPELL_BERSERK))
{
if (EnrageTimer <= diff)
{
DoCast(me, SPELL_BERSERK);
DoScriptText(RAND(SAY_ENRAGE1,SAY_ENRAGE2), me);
} else EnrageTimer -= diff;
}
if (Phase1)
{
if (BewilderingStrikeTimer <= diff)
{
DoCast(me->getVictim(), SPELL_BEWILDERING_STRIKE);
float mt_threat = DoGetThreat(me->getVictim());
if (Unit *pTarget = SelectUnit(SELECT_TARGET_TOPAGGRO, 1))
me->AddThreat(pTarget, mt_threat);
BewilderingStrikeTimer = 20000;
} else BewilderingStrikeTimer -= diff;
if (EjectTimer <= diff)
{
DoCast(me->getVictim(), SPELL_EJECT1);
DoModifyThreatPercent(me->getVictim(), -40);
EjectTimer = 15000;
} else EjectTimer -= diff;
if (AcidicWoundTimer <= diff)
{
DoCast(me->getVictim(), SPELL_ACIDIC_WOUND);
AcidicWoundTimer = 10000;
} else AcidicWoundTimer -= diff;
if (BloodboilTimer <= diff)
{
if (BloodboilCount < 5) // Only cast it five times.
{
//CastBloodboil(); // Causes issues on windows, so is commented out.
DoCast(me->getVictim(), SPELL_BLOODBOIL);
++BloodboilCount;
BloodboilTimer = 10000*BloodboilCount;
}
} else BloodboilTimer -= diff;
}
if (!Phase1)
{
if (AcidGeyserTimer <= diff)
{
DoCast(me->getVictim(), SPELL_ACID_GEYSER);
AcidGeyserTimer = 30000;
} else AcidGeyserTimer -= diff;
if (EjectTimer <= diff)
{
DoCast(me->getVictim(), SPELL_EJECT2);
EjectTimer = 15000;
} else EjectTimer -= diff;
}
if (PhaseChangeTimer <= diff)
{
if (Phase1)
{
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
if (pTarget && pTarget->isAlive())
{
Phase1 = false;
TargetThreat = DoGetThreat(pTarget);
TargetGUID = pTarget->GetGUID();
pTarget->CastSpell(me, SPELL_TAUNT_GURTOGG, true);
if (DoGetThreat(pTarget))
DoModifyThreatPercent(pTarget, -100);
me->AddThreat(pTarget, 50000000.0f);
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
me->ApplySpellImmune(0, IMMUNITY_EFFECT,SPELL_EFFECT_ATTACK_ME, true);
// If VMaps are disabled, this spell can call the whole instance
DoCast(me, SPELL_INSIGNIFIGANCE, true);
DoCast(pTarget, SPELL_FEL_RAGE_TARGET, true);
DoCast(pTarget, SPELL_FEL_RAGE_2, true);
/* These spells do not work, comment them out for now.
DoCast(pTarget, SPELL_FEL_RAGE_2, true);
DoCast(pTarget, SPELL_FEL_RAGE_3, true);*/
//Cast this without triggered so that it appears in combat logs and shows visual.
DoCast(me, SPELL_FEL_RAGE_SELF);
DoScriptText(RAND(SAY_SPECIAL1,SAY_SPECIAL2), me);
AcidGeyserTimer = 1000;
PhaseChangeTimer = 30000;
}
} else // Encounter is a loop pretty much. Phase 1 -> Phase 2 -> Phase 1 -> Phase 2 till death or enrage
{
if (TargetGUID)
RevertThreatOnTarget(TargetGUID);
TargetGUID = 0;
Phase1 = true;
BloodboilTimer = 10000;
BloodboilCount = 0;
AcidicWoundTimer += 2000;
ArcingSmashTimer += 2000;
FelAcidTimer += 2000;
EjectTimer += 2000;
PhaseChangeTimer = 60000;
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, false);
me->ApplySpellImmune(0, IMMUNITY_EFFECT,SPELL_EFFECT_ATTACK_ME, false);
}
} else PhaseChangeTimer -= diff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_gurtogg_bloodboil(Creature* pCreature)
{
return new boss_gurtogg_bloodboilAI (pCreature);
}
void AddSC_boss_gurtogg_bloodboil()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_gurtogg_bloodboil";
newscript->GetAI = &GetAI_boss_gurtogg_bloodboil;
newscript->RegisterSelf();
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,302 @@
/* 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_Mother_Shahraz
SD%Complete: 80
SDComment: Saber Lash missing, Fatal Attraction slightly incorrect; need to damage only if affected players are within range of each other
SDCategory: Black Temple
EndScriptData */
#include "ScriptedPch.h"
#include "black_temple.h"
//Speech'n'Sounds
#define SAY_TAUNT1 -1564018
#define SAY_TAUNT2 -1564019
#define SAY_TAUNT3 -1564020
#define SAY_AGGRO -1564021
#define SAY_SPELL1 -1564022
#define SAY_SPELL2 -1564023
#define SAY_SPELL3 -1564024
#define SAY_SLAY1 -1564025
#define SAY_SLAY2 -1564026
#define SAY_ENRAGE -1564027
#define SAY_DEATH -1564028
//Spells
#define SPELL_BEAM_SINISTER 40859
#define SPELL_BEAM_VILE 40860
#define SPELL_BEAM_WICKED 40861
#define SPELL_BEAM_SINFUL 40827
#define SPELL_ATTRACTION 40871
#define SPELL_SILENCING_SHRIEK 40823
#define SPELL_ENRAGE 23537
#define SPELL_SABER_LASH 40810//43267
#define SPELL_SABER_LASH_IMM 43690
#define SPELL_TELEPORT_VISUAL 40869
#define SPELL_BERSERK 45078
uint32 PrismaticAuras[]=
{
40880, // Shadow
40882, // Fire
40883, // Nature
40891, // Arcane
40896, // Frost
40897, // Holy
};
struct Locations
{
float x,y,z;
};
static Locations TeleportPoint[]=
{
{959.996, 212.576, 193.843},
{932.537, 231.813, 193.838},
{958.675, 254.767, 193.822},
{946.955, 201.316, 192.535},
{944.294, 149.676, 197.551},
{930.548, 284.888, 193.367},
{965.997, 278.398, 195.777}
};
struct boss_shahrazAI : public ScriptedAI
{
boss_shahrazAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance* pInstance;
uint64 TargetGUID[3];
uint32 BeamTimer;
uint32 BeamCount;
uint32 CurrentBeam;
uint32 PrismaticShieldTimer;
uint32 FatalAttractionTimer;
uint32 FatalAttractionExplodeTimer;
uint32 ShriekTimer;
uint32 SaberTimer;
uint32 RandomYellTimer;
uint32 EnrageTimer;
uint32 ExplosionCount;
bool Enraged;
void Reset()
{
if (pInstance)
pInstance->SetData(DATA_MOTHERSHAHRAZEVENT, NOT_STARTED);
for (uint8 i = 0; i<3; ++i)
TargetGUID[i] = 0;
BeamTimer = 20000; // Timers may be incorrect
BeamCount = 0;
CurrentBeam = 0; // 0 - Sinister, 1 - Vile, 2 - Wicked, 3 - Sinful
PrismaticShieldTimer = 0;
FatalAttractionTimer = 60000;
FatalAttractionExplodeTimer = 70000;
ShriekTimer = 30000;
SaberTimer = 35000;
RandomYellTimer = 70000 + rand()%41 * 1000;
EnrageTimer = 600000;
ExplosionCount = 0;
Enraged = false;
}
void EnterCombat(Unit * /*who*/)
{
if (pInstance)
pInstance->SetData(DATA_MOTHERSHAHRAZEVENT, IN_PROGRESS);
DoZoneInCombat();
DoScriptText(SAY_AGGRO, me);
}
void KilledUnit(Unit * /*victim*/)
{
DoScriptText(RAND(SAY_SLAY1,SAY_SLAY2), me);
}
void JustDied(Unit * /*victim*/)
{
if (pInstance)
pInstance->SetData(DATA_MOTHERSHAHRAZEVENT, DONE);
DoScriptText(SAY_DEATH, me);
}
void TeleportPlayers()
{
uint32 random = rand()%7;
float X = TeleportPoint[random].x;
float Y = TeleportPoint[random].y;
float Z = TeleportPoint[random].z;
for (uint8 i = 0; i < 3; ++i)
{
Unit* pUnit = SelectUnit(SELECT_TARGET_RANDOM, 1);
if (pUnit && pUnit->isAlive() && (pUnit->GetTypeId() == TYPEID_PLAYER))
{
TargetGUID[i] = pUnit->GetGUID();
pUnit->CastSpell(pUnit, SPELL_TELEPORT_VISUAL, true);
DoTeleportPlayer(pUnit, X, Y, Z, pUnit->GetOrientation());
}
}
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
if (((me->GetHealth()*100 / me->GetMaxHealth()) < 10) && !Enraged)
{
Enraged = true;
DoCast(me, SPELL_ENRAGE, true);
DoScriptText(SAY_ENRAGE, me);
}
//Randomly cast one beam.
if (BeamTimer <= diff)
{
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
if (!pTarget || !pTarget->isAlive())
return;
BeamTimer = 9000;
switch(CurrentBeam)
{
case 0:
DoCast(pTarget, SPELL_BEAM_SINISTER);
break;
case 1:
DoCast(pTarget, SPELL_BEAM_VILE);
break;
case 2:
DoCast(pTarget, SPELL_BEAM_WICKED);
break;
case 3:
DoCast(pTarget, SPELL_BEAM_SINFUL);
break;
}
++BeamCount;
uint32 Beam = CurrentBeam;
if (BeamCount > 3)
while (CurrentBeam == Beam)
CurrentBeam = rand()%3;
} else BeamTimer -= diff;
// Random Prismatic Shield every 15 seconds.
if (PrismaticShieldTimer <= diff)
{
uint32 random = rand()%6;
if (PrismaticAuras[random])
DoCast(me, PrismaticAuras[random]);
PrismaticShieldTimer = 15000;
} else PrismaticShieldTimer -= diff;
// Select 3 random targets (can select same target more than once), teleport to a random location then make them cast explosions until they get away from each other.
if (FatalAttractionTimer <= diff)
{
ExplosionCount = 0;
TeleportPlayers();
DoScriptText(RAND(SAY_SPELL2,SAY_SPELL3), me);
FatalAttractionExplodeTimer = 2000;
FatalAttractionTimer = 40000 + rand()%31 * 1000;
} else FatalAttractionTimer -= diff;
if (FatalAttractionExplodeTimer <= diff)
{
// Just make them explode three times... they're supposed to keep exploding while they are in range, but it'll take too much code. I'll try to think of an efficient way for it later.
if (ExplosionCount < 3)
{
for (uint8 i = 0; i < 3; ++i)
{
Unit* pUnit = NULL;
if (TargetGUID[i])
{
pUnit = Unit::GetUnit((*me), TargetGUID[i]);
if (pUnit)
pUnit->CastSpell(pUnit, SPELL_ATTRACTION, true);
TargetGUID[i] = 0;
}
}
++ExplosionCount;
FatalAttractionExplodeTimer = 1000;
}
else
{
FatalAttractionExplodeTimer = FatalAttractionTimer + 2000;
ExplosionCount = 0;
}
} else FatalAttractionExplodeTimer -= diff;
if (ShriekTimer <= diff)
{
DoCast(me->getVictim(), SPELL_SILENCING_SHRIEK);
ShriekTimer = 25000+rand()%10 * 1000;
} else ShriekTimer -= diff;
if (SaberTimer <= diff)
{
DoCast(me->getVictim(), SPELL_SABER_LASH);
SaberTimer = 25000+rand()%10 * 1000;
} else SaberTimer -= diff;
//Enrage
if (!me->HasAura(SPELL_BERSERK))
if (EnrageTimer <= diff)
{
DoCast(me, SPELL_BERSERK);
DoScriptText(SAY_ENRAGE, me);
} else EnrageTimer -= diff;
//Random taunts
if (RandomYellTimer <= diff)
{
DoScriptText(RAND(SAY_TAUNT1,SAY_TAUNT2,SAY_TAUNT3), me);
RandomYellTimer = 60000 + rand()%91 * 1000;
} else RandomYellTimer -= diff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_shahraz(Creature* pCreature)
{
return new boss_shahrazAI (pCreature);
}
void AddSC_boss_mother_shahraz()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_mother_shahraz";
newscript->GetAI = &GetAI_boss_shahraz;
newscript->RegisterSelf();
}
@@ -0,0 +1,690 @@
/* 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_Reliquary_of_Souls
SD%Complete: 90
SDComment:
SDCategory: Black Temple
EndScriptData */
#include "ScriptedPch.h"
#include "black_temple.h"
#include "Spell.h"
//Sound'n'speech
//Suffering
#define SUFF_SAY_FREED -1564047
#define SUFF_SAY_AGGRO -1564048
#define SUFF_SAY_SLAY1 -1564049
#define SUFF_SAY_SLAY2 -1564050
#define SUFF_SAY_SLAY3 -1564051
#define SUFF_SAY_RECAP -1564052
#define SUFF_SAY_AFTER -1564053
#define SUFF_EMOTE_ENRAGE -1564054
//Desire
#define DESI_SAY_FREED -1564055
#define DESI_SAY_SLAY1 -1564056
#define DESI_SAY_SLAY2 -1564057
#define DESI_SAY_SLAY3 -1564058
#define DESI_SAY_SPEC -1564059
#define DESI_SAY_RECAP -1564060
#define DESI_SAY_AFTER -1564061
//Anger
#define ANGER_SAY_FREED -1564062
#define ANGER_SAY_FREED2 -1564063
#define ANGER_SAY_SLAY1 -1564064
#define ANGER_SAY_SLAY2 -1564065
#define ANGER_SAY_SPEC -1564066
#define ANGER_SAY_BEFORE -1564067
#define ANGER_SAY_DEATH -1564068
//Spells
#define AURA_OF_SUFFERING 41292
#define AURA_OF_SUFFERING_ARMOR 42017 // linked aura, need core support
#define ESSENCE_OF_SUFFERING_PASSIVE 41296 // periodic trigger 41294
#define ESSENCE_OF_SUFFERING_PASSIVE2 41623
#define SPELL_FIXATE_TARGET 41294 // dummy, select target
#define SPELL_FIXATE_TAUNT 41295 // force taunt
#define SPELL_ENRAGE 41305
#define SPELL_SOUL_DRAIN 41303
#define AURA_OF_DESIRE 41350
#define AURA_OF_DESIRE_DAMAGE 41352
#define SPELL_RUNE_SHIELD 41431
#define SPELL_DEADEN 41410
#define SPELL_SOUL_SHOCK 41426
#define AURA_OF_ANGER 41337
#define SPELL_SELF_SEETHE 41364 // force cast 41520
#define SPELL_ENEMY_SEETHE 41520
#define SPELL_SOUL_SCREAM 41545
#define SPELL_SPITE_TARGET 41376 // cast 41377 after 6 sec
#define SPELL_SPITE_DAMAGE 41377
#define ENSLAVED_SOUL_PASSIVE 41535
#define SPELL_SOUL_RELEASE 41542
#define SPELL_SUBMERGE 37550 //dropout 'head'
#define CREATURE_ENSLAVED_SOUL 23469
#define NUMBER_ENSLAVED_SOUL 8
struct Position2d
{
float x,y;
};
static Position2d Coords[]=
{
{450.4, 212.3},
{542.1, 212.3},
{542.1, 168.3},
{542.1, 137.4},
{450.4, 137.4},
{450.4, 168.3}
};
struct npc_enslaved_soulAI : public ScriptedAI
{
npc_enslaved_soulAI(Creature *c) : ScriptedAI(c) {}
uint64 ReliquaryGUID;
void Reset() {ReliquaryGUID = 0;}
void EnterCombat(Unit* /*who*/)
{
DoCast(me, ENSLAVED_SOUL_PASSIVE, true);
DoZoneInCombat();
}
void JustDied(Unit *killer);
};
struct boss_reliquary_of_soulsAI : public ScriptedAI
{
boss_reliquary_of_soulsAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
EssenceGUID = 0;
}
ScriptedInstance* pInstance;
uint64 EssenceGUID;
uint32 Phase;
uint32 Counter;
uint32 Timer;
uint32 SoulCount;
uint32 SoulDeathCount;
void Reset()
{
if (pInstance)
pInstance->SetData(DATA_RELIQUARYOFSOULSEVENT, NOT_STARTED);
if (EssenceGUID)
{
if (Creature* Essence = Unit::GetCreature(*me, EssenceGUID))
{
Essence->ForcedDespawn();
}
EssenceGUID = 0;
}
Phase = 0;
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
me->RemoveAurasDueToSpell(SPELL_SUBMERGE);
}
void EnterCombat(Unit* who)
{
me->AddThreat(who, 10000.0f);
DoZoneInCombat();
if (pInstance)
pInstance->SetData(DATA_RELIQUARYOFSOULSEVENT, IN_PROGRESS);
Phase = 1;
Counter = 0;
Timer = 0;
}
bool SummonSoul()
{
uint32 random = rand()%6;
float x = Coords[random].x;
float y = Coords[random].y;
Creature* Soul = me->SummonCreature(CREATURE_ENSLAVED_SOUL, x, y, me->GetPositionZ(), me->GetOrientation(), TEMPSUMMON_CORPSE_DESPAWN, 0);
if (!Soul) return false;
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
{
CAST_AI(npc_enslaved_soulAI, Soul->AI())->ReliquaryGUID = me->GetGUID();
Soul->AI()->AttackStart(pTarget);
} else EnterEvadeMode();
return true;
}
void MergeThreatList(Creature *pTarget)
{
if (!pTarget)
return;
std::list<HostileReference*>& m_threatlist = pTarget->getThreatManager().getThreatList();
std::list<HostileReference*>::const_iterator itr = m_threatlist.begin();
for (; itr != m_threatlist.end(); ++itr)
{
Unit* pUnit = Unit::GetUnit((*me), (*itr)->getUnitGuid());
if (pUnit)
{
DoModifyThreatPercent(pUnit, -100);
float threat = pTarget->getThreatManager().getThreat(pUnit);
me->AddThreat(pUnit, threat); // This makes it so that the unit has the same amount of threat in Reliquary's threatlist as in the target creature's (One of the Essences).
}
}
}
void JustDied(Unit* /*killer*/)
{
if (pInstance)
pInstance->SetData(DATA_RELIQUARYOFSOULSEVENT, DONE);
}
void UpdateAI(const uint32 diff)
{
if (!Phase)
return;
if (me->getThreatManager().getThreatList().empty()) // Reset if event is begun and we don't have a threatlist
{
EnterEvadeMode();
return;
}
Creature* Essence = NULL;
if (EssenceGUID)
{
Essence = Unit::GetCreature(*me, EssenceGUID);
if (!Essence)
{
EnterEvadeMode();
return;
}
}
if (Timer <= diff)
{
switch(Counter)
{
case 0:
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H); // I R ANNNGRRRY!
DoStartNoMovement(me);
Timer = 3000;
break;
case 1:
Timer = 2800;
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_SUBMERGE); // Release the cube
DoCast(me, SPELL_SUBMERGE);
DoStartNoMovement(me);
break;
case 2:
Timer = 5000;
if (Creature* Summon = DoSpawnCreature(23417+Phase, 0, 0, 0, 0, TEMPSUMMON_DEAD_DESPAWN, 0))
{
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_SUBMERGED); // Ribs: open
Summon->AI()->AttackStart(SelectUnit(SELECT_TARGET_TOPAGGRO, 0));
EssenceGUID = Summon->GetGUID();
DoStartNoMovement(me);
} else EnterEvadeMode();
break;
case 3:
Timer = 1000;
if (Phase == 3)
{
if (!Essence->isAlive())
DoCast(me, 7, true);
else return;
}
else
{
if (Essence->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
{
MergeThreatList(Essence);
Essence->RemoveAllAuras();
Essence->DeleteThreatList();
Essence->GetMotionMaster()->MoveFollow(me,0.0f,0.0f);
} else return;
}
break;
case 4:
Timer = 1500;
if (Essence->IsWithinDistInMap(me, 10))
{
Essence->SetUInt32Value(UNIT_NPC_EMOTESTATE,374); //rotate and disappear
Timer = 2000;
me->RemoveAurasDueToSpell(SPELL_SUBMERGE);
}
else
{
MergeThreatList(Essence);
Essence->RemoveAllAuras();
Essence->DeleteThreatList();
Essence->GetMotionMaster()->MoveFollow(me, 0, 0);
return;
}
break;
case 5:
if (Phase == 1)
{
DoScriptText(SUFF_SAY_AFTER, Essence);
}
else
{
DoScriptText(DESI_SAY_AFTER, Essence);
}
Essence->ForcedDespawn();
me->SetUInt32Value(UNIT_NPC_EMOTESTATE,0);
EssenceGUID = 0;
SoulCount = 0;
SoulDeathCount = 0;
Timer = 3000;
break;
case 6:
if (SoulCount < NUMBER_ENSLAVED_SOUL)
{
if (SummonSoul())
++SoulCount;
Timer = 500;
return;
}
break;
case 7:
if (SoulDeathCount >= SoulCount)
{
Counter = 1;
++Phase;
Timer = 5000;
}
return;
default:
break;
}
++Counter;
} else Timer -= diff;
}
};
struct boss_essence_of_sufferingAI : public ScriptedAI
{
boss_essence_of_sufferingAI(Creature *c) : ScriptedAI(c) {}
uint64 StatAuraGUID;
uint32 AggroYellTimer;
uint32 FixateTimer;
uint32 EnrageTimer;
uint32 SoulDrainTimer;
uint32 AuraTimer;
void Reset()
{
StatAuraGUID = 0;
AggroYellTimer = 5000;
FixateTimer = 8000;
EnrageTimer = 30000;
SoulDrainTimer = 45000;
AuraTimer = 5000;
}
void DamageTaken(Unit * /*done_by*/, uint32 &damage)
{
if (damage >= me->GetHealth())
{
damage = 0;
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->Yell(SUFF_SAY_RECAP,LANG_UNIVERSAL,0);
DoScriptText(SUFF_SAY_RECAP, me);
}
}
void EnterCombat(Unit * /*who*/)
{
if (!me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
{
DoScriptText(SUFF_SAY_FREED, me);
DoZoneInCombat();
DoCast(me, AURA_OF_SUFFERING, true); // linked aura need core support
DoCast(me, ESSENCE_OF_SUFFERING_PASSIVE, true);
DoCast(me, ESSENCE_OF_SUFFERING_PASSIVE2, true);
}
else return;
}
void KilledUnit(Unit * /*victim*/)
{
DoScriptText(RAND(SUFF_SAY_SLAY1,SUFF_SAY_SLAY2,SUFF_SAY_SLAY3), me);
}
void CastFixate()
{
std::list<HostileReference*>& m_threatlist = me->getThreatManager().getThreatList();
if (m_threatlist.empty())
return; // No point continuing if empty threatlist.
std::list<Unit*> targets;
std::list<HostileReference*>::const_iterator itr = m_threatlist.begin();
for (; itr != m_threatlist.end(); ++itr)
{
Unit* pUnit = Unit::GetUnit((*me), (*itr)->getUnitGuid());
if (pUnit && pUnit->isAlive() && (pUnit->GetTypeId() == TYPEID_PLAYER)) // Only alive players
targets.push_back(pUnit);
}
if (targets.empty())
return; // No targets added for some reason. No point continuing.
targets.sort(Trinity::ObjectDistanceOrderPred(me)); // Sort players by distance.
targets.resize(1); // Only need closest target.
Unit *pTarget = targets.front(); // Get the first target.
if (pTarget)
pTarget->CastSpell(me, SPELL_FIXATE_TAUNT, true);
DoResetThreat();
me->AddThreat(pTarget,1000000);
}
void UpdateAI(const uint32 diff)
{
if (me->isInCombat())
{
//Supposed to be cast on nearest target
if (FixateTimer <= diff)
{
CastFixate();
FixateTimer = 5000;
if (!(rand()%16))
{
DoScriptText(SUFF_SAY_AGGRO, me);
}
} else FixateTimer -= diff;
}
//Return since we have no target
if (!UpdateVictim())
return;
if (EnrageTimer <= diff)
{
DoCast(me, SPELL_ENRAGE);
EnrageTimer = 60000;
DoScriptText(SUFF_EMOTE_ENRAGE, me);
} else EnrageTimer -= diff;
if (SoulDrainTimer <= diff)
{
DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), SPELL_SOUL_DRAIN);
SoulDrainTimer = 60000;
} else SoulDrainTimer -= diff;
DoMeleeAttackIfReady();
}
};
struct boss_essence_of_desireAI : public ScriptedAI
{
boss_essence_of_desireAI(Creature *c) : ScriptedAI(c) {}
uint32 RuneShieldTimer;
uint32 DeadenTimer;
uint32 SoulShockTimer;
void Reset()
{
RuneShieldTimer = 60000;
DeadenTimer = 30000;
SoulShockTimer = 5000;
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_CONFUSE, true);
}
void DamageTaken(Unit *done_by, uint32 &damage)
{
if (done_by == me)
return;
if (damage >= me->GetHealth())
{
damage = 0;
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
DoScriptText(SUFF_SAY_RECAP, me);
}
else
{
int32 bp0 = damage / 2;
me->CastCustomSpell(done_by, AURA_OF_DESIRE_DAMAGE, &bp0, NULL, NULL, true);
}
}
void SpellHit(Unit * /*caster*/, const SpellEntry *spell)
{
if (me->GetCurrentSpell(CURRENT_GENERIC_SPELL))
for (uint8 i = 0; i < 3; ++i)
if (spell->Effect[i] == SPELL_EFFECT_INTERRUPT_CAST)
if (me->GetCurrentSpell(CURRENT_GENERIC_SPELL)->m_spellInfo->Id == SPELL_SOUL_SHOCK
|| me->GetCurrentSpell(CURRENT_GENERIC_SPELL)->m_spellInfo->Id == SPELL_DEADEN)
me->InterruptSpell(CURRENT_GENERIC_SPELL, false);
}
void EnterCombat(Unit * /*who*/)
{
DoScriptText(DESI_SAY_FREED, me);
DoZoneInCombat();
DoCast(me, AURA_OF_DESIRE, true);
}
void KilledUnit(Unit * /*victim*/)
{
DoScriptText(RAND(DESI_SAY_SLAY1,DESI_SAY_SLAY2,DESI_SAY_SLAY3), me);
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
if (RuneShieldTimer <= diff)
{
me->InterruptNonMeleeSpells(false);
DoCast(me, SPELL_RUNE_SHIELD, true);
SoulShockTimer += 2000;
DeadenTimer += 2000;
RuneShieldTimer = 60000;
} else RuneShieldTimer -= diff;
if (SoulShockTimer <= diff)
{
DoCast(me->getVictim(), SPELL_SOUL_SHOCK);
SoulShockTimer = 5000;
} else SoulShockTimer -= diff;
if (DeadenTimer <= diff)
{
me->InterruptNonMeleeSpells(false);
DoCast(me->getVictim(), SPELL_DEADEN);
DeadenTimer = 25000 + rand()%10000;
if (!(rand()%2))
{
DoScriptText(DESI_SAY_SPEC, me);
}
} else DeadenTimer -= diff;
DoMeleeAttackIfReady();
}
};
struct boss_essence_of_angerAI : public ScriptedAI
{
boss_essence_of_angerAI(Creature *c) : ScriptedAI(c) {}
uint64 AggroTargetGUID;
uint32 CheckTankTimer;
uint32 SoulScreamTimer;
uint32 SpiteTimer;
std::list<uint64> SpiteTargetGUID;
bool CheckedAggro;
void Reset()
{
AggroTargetGUID = 0;
CheckTankTimer = 5000;
SoulScreamTimer = 10000;
SpiteTimer = 30000;
SpiteTargetGUID.clear();
CheckedAggro = false;
}
void EnterCombat(Unit * /*who*/)
{
DoScriptText(RAND(ANGER_SAY_FREED,ANGER_SAY_FREED2), me);
DoZoneInCombat();
DoCast(me, AURA_OF_ANGER, true);
}
void JustDied(Unit * /*victim*/)
{
DoScriptText(ANGER_SAY_DEATH, me);
}
void KilledUnit(Unit * /*victim*/)
{
DoScriptText(RAND(ANGER_SAY_SLAY1,ANGER_SAY_SLAY2), me);
}
void UpdateAI(const uint32 diff)
{
//Return since we have no target
if (!UpdateVictim())
return;
if (!CheckedAggro)
{
AggroTargetGUID = me->getVictim()->GetGUID();
CheckedAggro = true;
}
if (CheckTankTimer <= diff)
{
if (me->getVictim()->GetGUID() != AggroTargetGUID)
{
DoScriptText(ANGER_SAY_BEFORE, me);
DoCast(me, SPELL_SELF_SEETHE, true);
AggroTargetGUID = me->getVictim()->GetGUID();
}
CheckTankTimer = 2000;
} else CheckTankTimer -= diff;
if (SoulScreamTimer <= diff)
{
DoCast(me->getVictim(), SPELL_SOUL_SCREAM);
SoulScreamTimer = 9000 + rand()%2000;
if (!(rand()%3))
{
DoScriptText(ANGER_SAY_SPEC, me);
}
} else SoulScreamTimer -= diff;
if (SpiteTimer <= diff)
{
DoCast(me, SPELL_SPITE_TARGET);
SpiteTimer = 30000;
DoScriptText(ANGER_SAY_SPEC, me);
} else SpiteTimer -= diff;
DoMeleeAttackIfReady();
}
};
void npc_enslaved_soulAI::JustDied(Unit * /*killer*/)
{
if (ReliquaryGUID)
if (Creature *Reliquary = (Unit::GetCreature((*me), ReliquaryGUID)))
++(CAST_AI(boss_reliquary_of_soulsAI, Reliquary->AI())->SoulDeathCount);
DoCast(me, SPELL_SOUL_RELEASE, true);
}
CreatureAI* GetAI_boss_reliquary_of_souls(Creature* pCreature)
{
return new boss_reliquary_of_soulsAI (pCreature);
}
CreatureAI* GetAI_boss_essence_of_suffering(Creature* pCreature)
{
return new boss_essence_of_sufferingAI (pCreature);
}
CreatureAI* GetAI_boss_essence_of_desire(Creature* pCreature)
{
return new boss_essence_of_desireAI (pCreature);
}
CreatureAI* GetAI_boss_essence_of_anger(Creature* pCreature)
{
return new boss_essence_of_angerAI (pCreature);
}
CreatureAI* GetAI_npc_enslaved_soul(Creature* pCreature)
{
return new npc_enslaved_soulAI (pCreature);
}
void AddSC_boss_reliquary_of_souls()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_reliquary_of_souls";
newscript->GetAI = &GetAI_boss_reliquary_of_souls;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "boss_essence_of_suffering";
newscript->GetAI = &GetAI_boss_essence_of_suffering;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "boss_essence_of_desire";
newscript->GetAI = &GetAI_boss_essence_of_desire;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "boss_essence_of_anger";
newscript->GetAI = &GetAI_boss_essence_of_anger;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_enslaved_soul";
newscript->GetAI = &GetAI_npc_enslaved_soul;
newscript->RegisterSelf();
}
@@ -0,0 +1,871 @@
/* 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_Shade_of_Akama
SD%Complete: 90
SDComment: Seems to be complete.
SDCategory: Black Temple
EndScriptData */
#include "ScriptedPch.h"
#include "black_temple.h"
#define SAY_DEATH -1564013
#define SAY_LOW_HEALTH -1564014
// Ending cinematic text
#define SAY_FREE -1564015
#define SAY_BROKEN_FREE_01 -1564016
#define SAY_BROKEN_FREE_02 -1564017
#define GOSSIP_ITEM "We are ready to fight alongside you, Akama"
struct Location
{
float x, y, o, z;
};
static Location ChannelerLocations[]=
{
{463.161285, 401.219757, 3.141592},
{457.377625, 391.227661, 2.106461},
{446.012421, 391.227661, 1.071904},
{439.533783, 401.219757, 0.000000},
{446.012421, 411.211853, 5.210546},
{457.377625, 411.211853, 4.177494}
};
static Location SpawnLocations[]=
{
{498.652740, 461.728119, 0},
{498.505003, 339.619324, 0}
};
static Location AkamaWP[]=
{
{482.352448, 401.162720, 0, 112.783928},
{469.597443, 402.264404, 0, 118.537910}
};
static Location BrokenCoords[]=
{
{541.375916, 401.439575, M_PI, 112.783997}, // The place where Akama channels
{534.130005, 352.394531, 2.164150, 112.783737}, // Behind a 'pillar' which is behind the east alcove
{499.621185, 341.534729, 1.652856, 112.783730}, // East Alcove
{499.151093, 461.036438, 4.770888, 112.78370}, // West Alcove
};
static Location BrokenWP[]=
{
{492.491638, 400.744690, 3.122336, 112.783737},
{494.335724, 382.221771, 2.676230, 112.783737},
{489.555939, 373.507202, 2.416263, 112.783737},
{491.136353, 427.868774, 3.519748, 112.783737},
};
// Locations
#define Z1 118.543144
#define Z2 120.783768
#define Z_SPAWN 113.537949
#define AGGRO_X 482.793182
#define AGGRO_Y 401.270172
#define AGGRO_Z 112.783928
#define AKAMA_X 514.583984
#define AKAMA_Y 400.601013
#define AKAMA_Z 112.783997
// Spells
#define SPELL_VERTEX_SHADE_BLACK 39833
#define SPELL_SHADE_SOUL_CHANNEL 40401
#define SPELL_DESTRUCTIVE_POISON 40874
#define SPELL_LIGHTNING_BOLT 42024
#define SPELL_AKAMA_SOUL_CHANNEL 40447
#define SPELL_AKAMA_SOUL_RETRIEVE 40902
#define AKAMA_SOUL_EXPEL 40855
#define SPELL_SHADE_SOUL_CHANNEL_2 40520
// Channeler entry
#define CREATURE_CHANNELER 23421
#define CREATURE_SORCERER 23215
#define CREATURE_DEFENDER 23216
#define CREATURE_BROKEN 23319
const uint32 spawnEntries[4]= { 23523, 23318, 23524 };
struct mob_ashtongue_channelerAI : public ScriptedAI
{
mob_ashtongue_channelerAI(Creature* c) : ScriptedAI(c) {ShadeGUID = 0;}
uint64 ShadeGUID;
void Reset() {}
void JustDied(Unit* /*killer*/);
void EnterCombat(Unit* /*who*/) {}
void AttackStart(Unit* /*who*/) {}
void MoveInLineOfSight(Unit* /*who*/) {}
void UpdateAI(const uint32 /*diff*/) {}
};
struct mob_ashtongue_sorcererAI : public ScriptedAI
{
mob_ashtongue_sorcererAI(Creature* c) : ScriptedAI(c) {ShadeGUID = 0;}
uint64 ShadeGUID;
uint32 CheckTimer;
bool StartBanishing;
void Reset()
{
StartBanishing = false;
CheckTimer = 5000;
}
void JustDied(Unit* /*killer*/);
void EnterCombat(Unit* /*who*/) {}
void AttackStart(Unit* /*who*/) {}
void MoveInLineOfSight(Unit* /*who*/) {}
void UpdateAI(const uint32 diff)
{
if (StartBanishing)
return;
if (CheckTimer <= diff)
{
Creature* Shade = Unit::GetCreature((*me), ShadeGUID);
if (Shade && Shade->isAlive() && me->isAlive())
{
if (me->IsWithinDist(Shade, 20,false))
{
me->GetMotionMaster()->Clear(false);
me->GetMotionMaster()->MoveIdle();
DoCast(Shade, SPELL_SHADE_SOUL_CHANNEL, true);
DoCast(Shade, SPELL_SHADE_SOUL_CHANNEL_2, true);
StartBanishing = true;
}
}
CheckTimer = 2000;
} else CheckTimer -= diff;
}
};
struct boss_shade_of_akamaAI : public ScriptedAI
{
boss_shade_of_akamaAI(Creature* c) : ScriptedAI(c), summons(me)
{
pInstance = c->GetInstanceData();
AkamaGUID = pInstance ? pInstance->GetData64(DATA_AKAMA_SHADE) : 0;
me->setActive(true);//if view distance is too low
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
me->ApplySpellImmune(0, IMMUNITY_EFFECT,SPELL_EFFECT_ATTACK_ME, true);
}
ScriptedInstance* pInstance;
std::list<uint64> Channelers;
std::list<uint64> Sorcerers;
uint64 AkamaGUID;
uint32 SorcererCount;
uint32 DeathCount;
uint32 ReduceHealthTimer;
uint32 SummonTimer;
uint32 ResetTimer;
uint32 DefenderTimer; // They are on a flat 15 second timer, independant of the other summon Creature timer.
bool IsBanished;
bool HasKilledAkama;
bool reseting;
bool GridSearcherSucceeded;
bool HasKilledAkamaAndReseting;
SummonList summons;
void Reset()
{
reseting = true;
HasKilledAkamaAndReseting = false;
GridSearcherSucceeded = false;
Sorcerers.clear();
summons.DespawnAll();//despawn all adds
if (Creature* Akama = Unit::GetCreature(*me, AkamaGUID))
{
Akama->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);//turn gossip on so players can restart the event
if (Akama->isDead())
{
Akama->Respawn();//respawn akama if dead
Akama->AI()->EnterEvadeMode();
}
}
SorcererCount = 0;
DeathCount = 0;
SummonTimer = 10000;
ReduceHealthTimer = 0;
ResetTimer = 60000;
DefenderTimer = 15000;
IsBanished = true;
HasKilledAkama = false;
me->SetVisibility(VISIBILITY_ON);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
//me->GetMotionMaster()->Clear();
//me->GetMotionMaster()->MoveIdle();
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_STUN);
if (pInstance)
pInstance->SetData(DATA_SHADEOFAKAMAEVENT, NOT_STARTED);
reseting = false;
}
void JustDied(Unit* /*killer*/)
{
summons.DespawnAll();
}
void JustSummoned(Creature *summon)
{
if (summon->GetEntry() == CREATURE_DEFENDER || summon->GetEntry() == 23523 || summon->GetEntry() == 23318 || summon->GetEntry() == 23524)
summons.Summon(summon);
}
void SummonedCreatureDespawn(Creature *summon)
{
if (summon->GetEntry() == CREATURE_DEFENDER || summon->GetEntry() == 23523 || summon->GetEntry() == 23318 || summon->GetEntry() == 23524)
summons.Despawn(summon);
}
void MoveInLineOfSight(Unit * /*who*/)
{
if (!GridSearcherSucceeded)
{
FindChannelers();
if (!Channelers.empty())
{
for (std::list<uint64>::const_iterator itr = Channelers.begin(); itr != Channelers.end(); ++itr)
{
Creature* Channeler = (Unit::GetCreature(*me, *itr));
if (Channeler)
{
if (Channeler->isDead())
{
Channeler->RemoveCorpse();
Channeler->Respawn();
}
Channeler->CastSpell(me, SPELL_SHADE_SOUL_CHANNEL, true);
Channeler->CastSpell(me, SPELL_SHADE_SOUL_CHANNEL_2, true);
Channeler->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
GridSearcherSucceeded = true;
}
}
} else error_log("SD2 ERROR: No Channelers are stored in the list. This encounter will not work properly");
}
}
void AttackStart(Unit* who)
{
if (!who || IsBanished) return;
if (who->isTargetableForAttack() && who != me)
DoStartMovement(who);
}
void IncrementDeathCount(uint64 guid = 0) // If guid is set, will remove it from list of sorcerer
{
if (reseting)
return;
debug_log("TSCR: Increasing Death Count for Shade of Akama encounter");
++DeathCount;
me->RemoveAuraFromStack(SPELL_SHADE_SOUL_CHANNEL_2);
if (guid)
{
if (Sorcerers.empty())
error_log("SD2 ERROR: Shade of Akama - attempt to remove guid %u from Sorcerers list but list is already empty", guid);
else Sorcerers.remove(guid);
}
}
void SummonCreature()
{
uint32 random = rand()%2;
float X = SpawnLocations[random].x;
float Y = SpawnLocations[random].y;
// max of 6 sorcerers can be summoned
if ((rand()%3 == 0) && (DeathCount > 0) && (SorcererCount < 7))
{
Creature* Sorcerer = me->SummonCreature(CREATURE_SORCERER, X, Y, Z_SPAWN, 0, TEMPSUMMON_DEAD_DESPAWN, 0);
if (Sorcerer)
{
CAST_AI(mob_ashtongue_sorcererAI, Sorcerer->AI())->ShadeGUID = me->GetGUID();
Sorcerer->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
Sorcerer->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
Sorcerer->SetUInt64Value(UNIT_FIELD_TARGET, me->GetGUID());
Sorcerers.push_back(Sorcerer->GetGUID());
--DeathCount;
++SorcererCount;
}
}
else
{
for (uint8 i = 0; i < 3; ++i)
{
Creature* Spawn = me->SummonCreature(spawnEntries[i], X, Y, Z_SPAWN, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 25000);
if (Spawn)
{
Spawn->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
Spawn->GetMotionMaster()->MovePoint(0, AGGRO_X, AGGRO_Y, AGGRO_Z);
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1);
Spawn->AI()->AttackStart(pTarget);
}
}
}
}
void FindChannelers()
{
std::list<Creature*> ChannelerList;
me->GetCreatureListWithEntryInGrid(ChannelerList,CREATURE_CHANNELER,50.0f);
if (!ChannelerList.empty())
{
for (std::list<Creature*>::const_iterator itr = ChannelerList.begin(); itr != ChannelerList.end(); ++itr)
{
CAST_AI(mob_ashtongue_channelerAI, (*itr)->AI())->ShadeGUID = me->GetGUID();
Channelers.push_back((*itr)->GetGUID());
debug_log("TSCR: Shade of Akama Grid Search found channeler %u. Adding to list", (*itr)->GetGUID());
}
}
else error_log("SD2 ERROR: Grid Search was unable to find any channelers. Shade of Akama encounter will be buggy");
}
void SetSelectableChannelers()
{
if (Channelers.empty())
{
error_log("SD2 ERROR: Channeler List is empty, Shade of Akama encounter will be buggy");
return;
}
for (std::list<uint64>::const_iterator itr = Channelers.begin(); itr != Channelers.end(); ++itr)
if (Creature* Channeler = (Unit::GetCreature(*me, *itr)))
Channeler->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
void SetAkamaGUID(uint64 guid) { AkamaGUID = guid; }
void UpdateAI(const uint32 diff)
{
if (!me->isInCombat())
return;
if (IsBanished)
{
// Akama is set in the threatlist so when we reset, we make sure that he is not included in our check
if (me->getThreatManager().getThreatList().size() < 2)
{
EnterEvadeMode();
return;
}
if (DefenderTimer <= diff)
{
uint32 ran = rand()%2;
Creature* Defender = me->SummonCreature(CREATURE_DEFENDER, SpawnLocations[ran].x, SpawnLocations[ran].y, Z_SPAWN, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 25000);
if (Defender)
{
Defender->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
bool move = true;
if (AkamaGUID)
{
if (Creature* Akama = Unit::GetCreature(*me, AkamaGUID))
{
float x, y, z;
Akama->GetPosition(x,y,z);
// They move towards AKama
Defender->GetMotionMaster()->MovePoint(0, x, y, z);
Defender->AI()->AttackStart(Akama);
} else move = false;
} else move = false;
if (!move)
Defender->GetMotionMaster()->MovePoint(0, AKAMA_X, AKAMA_Y, AKAMA_Z);
}
DefenderTimer = 15000;
} else DefenderTimer -= diff;
if (SummonTimer <= diff)
{
SummonCreature();
SummonTimer = 35000;
} else SummonTimer -= diff;
if (DeathCount >= 6)
{
if (AkamaGUID)
{
Creature* Akama = Unit::GetCreature((*me), AkamaGUID);
if (Akama && Akama->isAlive())
{
IsBanished = false;
me->GetMotionMaster()->Clear(false);
me->GetMotionMaster()->MoveChase(Akama);
Akama->GetMotionMaster()->Clear();
// Shade should move to Akama, not the other way around
Akama->GetMotionMaster()->MoveIdle();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
// Crazy amount of threat
me->AddThreat(Akama, 10000000.0f);
Akama->AddThreat(me, 10000000.0f);
me->Attack(Akama, true);
Akama->Attack(me, true);
}
}
}
}
else // No longer banished, let's fight Akama now
{
if (ReduceHealthTimer <= diff)
{
if (AkamaGUID)
{
Creature* Akama = Unit::GetCreature((*me), AkamaGUID);
if (Akama && Akama->isAlive())
{
//10 % less health every few seconds.
me->DealDamage(Akama, Akama->GetMaxHealth()/10, NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
ReduceHealthTimer = 12000;
}
}
} else ReduceHealthTimer -= diff;
if (HasKilledAkama)
{
if (!HasKilledAkamaAndReseting)//do not let players kill Shade if Akama is dead and Shade is waiting for ResetTimer!! event would bug
{
HasKilledAkamaAndReseting = true;
me->RemoveAllAuras();
me->DeleteThreatList();
me->CombatStop();
//me->SetHealth(me->GetMaxHealth());
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->GetMotionMaster()->MoveTargetedHome();
}
if (ResetTimer <= diff)
{
EnterEvadeMode();// Reset a little while after killing Akama, evade and respawn Akama
return;
} else ResetTimer -= diff;
}
DoMeleeAttackIfReady();
}
}
};
void mob_ashtongue_channelerAI::JustDied(Unit* /*killer*/)
{
Creature* Shade = (Unit::GetCreature((*me), ShadeGUID));
if (Shade && Shade->isAlive())
CAST_AI(boss_shade_of_akamaAI, Shade->AI())->IncrementDeathCount();
else error_log("SD2 ERROR: Channeler dead but unable to increment DeathCount for Shade of Akama.");
}
void mob_ashtongue_sorcererAI::JustDied(Unit* /*killer*/)
{
Creature* Shade = (Unit::GetCreature((*me), ShadeGUID));
if (Shade && Shade->isAlive())
CAST_AI(boss_shade_of_akamaAI, Shade->AI())->IncrementDeathCount(me->GetGUID());
else error_log("SD2 ERROR: Sorcerer dead but unable to increment DeathCount for Shade of Akama.");
}
struct npc_akamaAI : public ScriptedAI
{
npc_akamaAI(Creature* c) : ScriptedAI(c), summons(me)
{
ShadeHasDied = false;
StartCombat = false;
pInstance = c->GetInstanceData();
ShadeGUID = pInstance ? pInstance->GetData64(DATA_SHADEOFAKAMA) : NOT_STARTED;
me->setActive(true);
EventBegun = false;
CastSoulRetrieveTimer = 0;
SoulRetrieveTimer = 0;
SummonBrokenTimer = 0;
EndingTalkCount = 0;
WayPointId = 0;
BrokenSummonIndex = 0;
BrokenList.clear();
HasYelledOnce = false;
}
ScriptedInstance* pInstance;
uint64 ShadeGUID;
uint32 DestructivePoisonTimer;
uint32 LightningBoltTimer;
uint32 CheckTimer;
uint32 CastSoulRetrieveTimer;
uint32 SoulRetrieveTimer;
uint32 SummonBrokenTimer;
uint32 EndingTalkCount;
uint32 WayPointId;
uint32 BrokenSummonIndex;
std::list<uint64> BrokenList;
bool EventBegun;
bool ShadeHasDied;
bool StartCombat;
bool HasYelledOnce;
SummonList summons;
void Reset()
{
DestructivePoisonTimer = 15000;
LightningBoltTimer = 10000;
CheckTimer = 2000;
if (!EventBegun)
{
me->SetUInt32Value(UNIT_NPC_FLAGS, 0); // Database sometimes has very very strange values
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
}
summons.DespawnAll();
}
void JustSummoned(Creature *summon)
{
if (summon->GetEntry() == CREATURE_BROKEN)
summons.Summon(summon);
}
void SummonedCreatureDespawn(Creature *summon)
{
if (summon->GetEntry() == CREATURE_BROKEN)
summons.Despawn(summon);
}
void EnterCombat(Unit* /*who*/) {}
void BeginEvent(Player* pl)
{
if (!pInstance)
return;
ShadeGUID = pInstance->GetData64(DATA_SHADEOFAKAMA);
if (!ShadeGUID)
return;
Creature* Shade = (Unit::GetCreature((*me), ShadeGUID));
if (Shade)
{
pInstance->SetData(DATA_SHADEOFAKAMAEVENT, IN_PROGRESS);
// Prevent players from trying to restart event
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
CAST_AI(boss_shade_of_akamaAI, Shade->AI())->SetAkamaGUID(me->GetGUID());
CAST_AI(boss_shade_of_akamaAI, Shade->AI())->SetSelectableChannelers();
Shade->AddThreat(me, 1000000.0f);
me->CombatStart(Shade);
Shade->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
Shade->SetUInt64Value(UNIT_FIELD_TARGET, me->GetGUID());
if (pl) Shade->AddThreat(pl, 1.0f);
DoZoneInCombat(Shade);
EventBegun = true;
}
}
void MovementInform(uint32 type, uint32 id)
{
if (type != POINT_MOTION_TYPE)
return;
switch(id)
{
case 0: ++WayPointId; break;
case 1:
if (Creature* Shade = Unit::GetCreature(*me, ShadeGUID))
{
me->SetUInt64Value(UNIT_FIELD_TARGET, ShadeGUID);
DoCast(Shade, SPELL_AKAMA_SOUL_RETRIEVE);
EndingTalkCount = 0;
SoulRetrieveTimer = 16000;
}
break;
}
}
void JustDied(Unit* /*killer*/)
{
DoScriptText(SAY_DEATH, me);
EventBegun = false;
ShadeHasDied = false;
StartCombat = false;
CastSoulRetrieveTimer = 0;
SoulRetrieveTimer = 0;
SummonBrokenTimer = 0;
EndingTalkCount = 0;
WayPointId = 0;
BrokenSummonIndex = 0;
BrokenList.clear();
HasYelledOnce = false;
Creature* Shade = Unit::GetCreature((*me), ShadeGUID);
if (Shade && Shade->isAlive())
CAST_AI(boss_shade_of_akamaAI, Shade->AI())->HasKilledAkama = true;
summons.DespawnAll();
}
void UpdateAI(const uint32 diff)
{
if (!EventBegun)
return;
if ((me->GetHealth()*100 / me->GetMaxHealth()) < 15 && !HasYelledOnce)
{
DoScriptText(SAY_LOW_HEALTH, me);
HasYelledOnce = true;
}
if (ShadeGUID && !StartCombat)
{
Creature* Shade = (Unit::GetCreature((*me), ShadeGUID));
if (Shade && Shade->isAlive())
{
if (CAST_AI(boss_shade_of_akamaAI, Shade->AI())->IsBanished)
{
if (CastSoulRetrieveTimer <= diff)
{
DoCast(Shade, SPELL_AKAMA_SOUL_CHANNEL);
CastSoulRetrieveTimer = 500;
} else CastSoulRetrieveTimer -= diff;
}
else
{
me->InterruptNonMeleeSpells(false);
StartCombat = true;
}
}
}
if (ShadeHasDied && (WayPointId == 1))
{
if (pInstance)
pInstance->SetData(DATA_SHADEOFAKAMAEVENT, DONE);
me->GetMotionMaster()->MovePoint(WayPointId, AkamaWP[1].x, AkamaWP[1].y, AkamaWP[1].z);
++WayPointId;
}
if (!ShadeHasDied && StartCombat)
{
if (CheckTimer <= diff)
{
if (ShadeGUID)
{
Creature* Shade = Unit::GetCreature((*me), ShadeGUID);
if (Shade && !Shade->isAlive())
{
ShadeHasDied = true;
WayPointId = 0;
me->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
me->GetMotionMaster()->MovePoint(WayPointId, AkamaWP[0].x, AkamaWP[0].y, AkamaWP[0].z);
}
if (Shade && Shade->isAlive())
{
if (Shade->getThreatManager().getThreatList().size() < 2)
Shade->AI()->EnterEvadeMode();
}
}
CheckTimer = 5000;
} else CheckTimer -= diff;
}
if (SummonBrokenTimer && BrokenSummonIndex < 4)
{
if (SummonBrokenTimer <= diff)
{
for (uint8 i = 0; i < 4; ++i)
{
float x = BrokenCoords[BrokenSummonIndex].x + (i*5);
float y = BrokenCoords[BrokenSummonIndex].y + (1*5);
float z = BrokenCoords[BrokenSummonIndex].z;
float o = BrokenCoords[BrokenSummonIndex].o;
Creature* Broken = me->SummonCreature(CREATURE_BROKEN, x, y, z, o, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 360000);
if (Broken)
{
float wx = BrokenWP[BrokenSummonIndex].x + (i*5);
float wy = BrokenWP[BrokenSummonIndex].y + (i*5);
float wz = BrokenWP[BrokenSummonIndex].z;
Broken->GetMotionMaster()->MovePoint(0, wx, wy, wz);
Broken->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
BrokenList.push_back(Broken->GetGUID());
}
}
++BrokenSummonIndex;
SummonBrokenTimer = 1000;
} else SummonBrokenTimer -= diff;
}
if (SoulRetrieveTimer)
if (SoulRetrieveTimer <= diff)
{
switch(EndingTalkCount)
{
case 0:
me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
++EndingTalkCount;
SoulRetrieveTimer = 2000;
SummonBrokenTimer = 1;
break;
case 1:
DoScriptText(SAY_FREE, me);
++EndingTalkCount;
SoulRetrieveTimer = 25000;
break;
case 2:
if (!BrokenList.empty())
{
bool Yelled = false;
for (std::list<uint64>::const_iterator itr = BrokenList.begin(); itr != BrokenList.end(); ++itr)
if (Creature* pUnit = Unit::GetCreature(*me, *itr))
{
if (!Yelled)
{
DoScriptText(SAY_BROKEN_FREE_01, pUnit);
Yelled = true;
}
pUnit->HandleEmoteCommand(EMOTE_ONESHOT_KNEEL);
}
}
++EndingTalkCount;
SoulRetrieveTimer = 1500;
break;
case 3:
if (!BrokenList.empty())
{
for (std::list<uint64>::const_iterator itr = BrokenList.begin(); itr != BrokenList.end(); ++itr)
if (Creature* pUnit = Unit::GetCreature(*me, *itr))
// This is the incorrect spell, but can't seem to find the right one.
pUnit->CastSpell(pUnit, 39656, true);
}
++EndingTalkCount;
SoulRetrieveTimer = 5000;
break;
case 4:
if (!BrokenList.empty())
{
for (std::list<uint64>::const_iterator itr = BrokenList.begin(); itr != BrokenList.end(); ++itr)
if (Creature* pUnit = Unit::GetCreature((*me), *itr))
pUnit->MonsterYell(SAY_BROKEN_FREE_02, LANG_UNIVERSAL, 0);
}
SoulRetrieveTimer = 0;
break;
}
} else SoulRetrieveTimer -= diff;
if (!UpdateVictim())
return;
if (DestructivePoisonTimer <= diff)
{
Creature* Shade = Unit::GetCreature((*me), ShadeGUID);
if (Shade && Shade->isAlive())
DoCast(Shade, SPELL_DESTRUCTIVE_POISON);
DestructivePoisonTimer = 15000;
} else DestructivePoisonTimer -= diff;
if (LightningBoltTimer <= diff)
{
DoCast(me->getVictim(), SPELL_LIGHTNING_BOLT);
LightningBoltTimer = 10000;
} else LightningBoltTimer -= diff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_shade_of_akama(Creature* pCreature)
{
return new boss_shade_of_akamaAI (pCreature);
}
CreatureAI* GetAI_mob_ashtongue_channeler(Creature* pCreature)
{
return new mob_ashtongue_channelerAI (pCreature);
}
CreatureAI* GetAI_mob_ashtongue_sorcerer(Creature* pCreature)
{
return new mob_ashtongue_sorcererAI (pCreature);
}
CreatureAI* GetAI_npc_akama_shade(Creature* pCreature)
{
return new npc_akamaAI (pCreature);
}
bool GossipSelect_npc_akama(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) //Fight time
{
pPlayer->CLOSE_GOSSIP_MENU();
CAST_AI(npc_akamaAI, pCreature->AI())->BeginEvent(pPlayer);
}
return true;
}
bool GossipHello_npc_akama(Player* pPlayer, Creature* pCreature)
{
if (pPlayer->isAlive())
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
pPlayer->SEND_GOSSIP_MENU(907, pCreature->GetGUID());
}
return true;
}
void AddSC_boss_shade_of_akama()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_shade_of_akama";
newscript->GetAI = &GetAI_boss_shade_of_akama;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "mob_ashtongue_channeler";
newscript->GetAI = &GetAI_mob_ashtongue_channeler;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "mob_ashtongue_sorcerer";
newscript->GetAI = &GetAI_mob_ashtongue_sorcerer;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_akama_shade";
newscript->GetAI = &GetAI_npc_akama_shade;
newscript->pGossipHello = &GossipHello_npc_akama;
newscript->pGossipSelect = &GossipSelect_npc_akama;
newscript->RegisterSelf();
}
@@ -0,0 +1,296 @@
/* 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_Supremus
SD%Complete: 95
SDComment: Need to implement molten punch
SDCategory: Black Temple
EndScriptData */
#include "ScriptedPch.h"
#include "black_temple.h"
#define EMOTE_NEW_TARGET -1564010
#define EMOTE_PUNCH_GROUND -1564011 //DoScriptText(EMOTE_PUNCH_GROUND, me);
#define EMOTE_GROUND_CRACK -1564012
//Spells
#define SPELL_MOLTEN_PUNCH 40126
#define SPELL_HATEFUL_STRIKE 41926
#define SPELL_MOLTEN_FLAME 40980
#define SPELL_VOLCANIC_ERUPTION 40117
#define SPELL_VOLCANIC_SUMMON 40276
#define SPELL_BERSERK 45078
#define CREATURE_VOLCANO 23085
#define CREATURE_STALKER 23095
#define PHASE_STRIKE 1
#define PHASE_CHASE 2
#define EVENT_BERSERK 1
#define EVENT_SWITCH_PHASE 2
#define EVENT_FLAME 3
#define EVENT_VOLCANO 4
#define EVENT_SWITCH_TARGET 5
#define EVENT_HATEFUL_STRIKE 6
#define GCD_CAST 1
struct molten_flameAI : public NullCreatureAI
{
molten_flameAI(Creature *c) : NullCreatureAI(c) {}
void InitializeAI()
{
float x, y, z;
me->GetNearPoint(me, x, y, z, 1, 100, M_PI*2*rand_norm());
me->GetMotionMaster()->MovePoint(0, x, y, z);
me->SetVisibility(VISIBILITY_OFF);
me->CastSpell(me,SPELL_MOLTEN_FLAME,true);
}
};
struct boss_supremusAI : public ScriptedAI
{
boss_supremusAI(Creature *c) : ScriptedAI(c), summons(me)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance* pInstance;
EventMap events;
SummonList summons;
uint32 phase;
void Reset()
{
if (pInstance)
{
if (me->isAlive())
{
pInstance->SetData(DATA_SUPREMUSEVENT, NOT_STARTED);
//ToggleDoors(true);
}
//else ToggleDoors(false);
}
phase = 0;
events.Reset();
summons.DespawnAll();
}
void EnterCombat(Unit * /*who*/)
{
if (pInstance)
pInstance->SetData(DATA_SUPREMUSEVENT, IN_PROGRESS);
ChangePhase();
events.ScheduleEvent(EVENT_BERSERK, 900000, GCD_CAST);
events.ScheduleEvent(EVENT_FLAME, 20000, GCD_CAST);
}
void ChangePhase()
{
if (!phase || phase == PHASE_CHASE)
{
phase = PHASE_STRIKE;
summons.DoAction(EVENT_VOLCANO, 0);
events.ScheduleEvent(EVENT_HATEFUL_STRIKE, 5000, GCD_CAST, PHASE_STRIKE);
me->SetSpeed(MOVE_RUN, 1.2f);
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, false);
me->ApplySpellImmune(0, IMMUNITY_EFFECT,SPELL_EFFECT_ATTACK_ME, false);
}
else
{
phase = PHASE_CHASE;
events.ScheduleEvent(EVENT_VOLCANO, 5000, GCD_CAST, PHASE_CHASE);
events.ScheduleEvent(EVENT_SWITCH_TARGET, 10000, 0, PHASE_CHASE);
me->SetSpeed(MOVE_RUN, 0.9f);
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
me->ApplySpellImmune(0, IMMUNITY_EFFECT,SPELL_EFFECT_ATTACK_ME, true);
}
DoResetThreat();
DoZoneInCombat();
events.SetPhase(phase);
events.ScheduleEvent(EVENT_SWITCH_PHASE, 60000, GCD_CAST);
}
void JustDied(Unit * /*killer*/)
{
if (pInstance)
{
pInstance->SetData(DATA_SUPREMUSEVENT, DONE);
pInstance->HandleGameObject(pInstance->GetData64(DATA_GAMEOBJECT_SUPREMUS_DOORS), true);
}
summons.DespawnAll();
}
void JustSummoned(Creature *summon) {summons.Summon(summon);}
void SummonedCreatureDespawn(Creature *summon) {summons.Despawn(summon);}
Unit* CalculateHatefulStrikeTarget()
{
uint32 health = 0;
Unit *pTarget = NULL;
std::list<HostileReference*>& m_threatlist = me->getThreatManager().getThreatList();
std::list<HostileReference*>::const_iterator i = m_threatlist.begin();
for (i = m_threatlist.begin(); i!= m_threatlist.end(); ++i)
{
Unit* pUnit = Unit::GetUnit((*me), (*i)->getUnitGuid());
if (pUnit && me->IsWithinMeleeRange(pUnit))
{
if (pUnit->GetHealth() > health)
{
health = pUnit->GetHealth();
pTarget = pUnit;
}
}
}
return pTarget;
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_BERSERK:
DoCast(me, SPELL_BERSERK, true);
break;
case EVENT_FLAME:
DoCast(me, SPELL_MOLTEN_PUNCH);
events.DelayEvents(1500, GCD_CAST);
events.ScheduleEvent(EVENT_FLAME, 20000, GCD_CAST);
break;
case EVENT_HATEFUL_STRIKE:
if (Unit *pTarget = CalculateHatefulStrikeTarget())
DoCast(pTarget, SPELL_HATEFUL_STRIKE);
events.DelayEvents(1000, GCD_CAST);
events.ScheduleEvent(EVENT_HATEFUL_STRIKE, 5000, GCD_CAST, PHASE_STRIKE);
break;
case EVENT_SWITCH_TARGET:
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true))
{
DoResetThreat();
me->AddThreat(pTarget, 5000000.0f);
DoScriptText(EMOTE_NEW_TARGET, me);
}
events.ScheduleEvent(EVENT_SWITCH_TARGET, 10000, 0, PHASE_CHASE);
break;
case EVENT_VOLCANO:
{
Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 999, true);
if (!pTarget) pTarget = me->getVictim();
if (pTarget)
{
//DoCast(pTarget, SPELL_VOLCANIC_SUMMON);//movement bugged
me->SummonCreature(CREATURE_VOLCANO,pTarget->GetPositionX(),pTarget->GetPositionY(),pTarget->GetPositionZ(),0,TEMPSUMMON_TIMED_DESPAWN,30000);
DoScriptText(EMOTE_GROUND_CRACK, me);
events.DelayEvents(1500, GCD_CAST);
}
events.ScheduleEvent(EVENT_VOLCANO, 10000, GCD_CAST, PHASE_CHASE);
return;
}
case EVENT_SWITCH_PHASE:
ChangePhase();
break;
}
}
DoMeleeAttackIfReady();
}
};
struct npc_volcanoAI : public Scripted_NoMovementAI
{
npc_volcanoAI(Creature *c) : Scripted_NoMovementAI(c) {}
void Reset()
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
//DoCast(me, SPELL_VOLCANIC_ERUPTION);
me->SetReactState(REACT_PASSIVE);
wait = 3000;
}
uint32 wait;
void EnterCombat(Unit * /*who*/) {}
void MoveInLineOfSight(Unit * /*who*/) {}
void DoAction(const uint32 /*info*/)
{
me->RemoveAura(SPELL_VOLCANIC_ERUPTION);
}
void UpdateAI(const uint32 diff)
{
if (wait <= diff)//wait 3secs before casting
{
DoCast(me, SPELL_VOLCANIC_ERUPTION);
wait = 60000;
}
else wait -= diff;
}
};
CreatureAI* GetAI_boss_supremus(Creature* pCreature)
{
return new boss_supremusAI (pCreature);
}
CreatureAI* GetAI_molten_flame(Creature* pCreature)
{
return new molten_flameAI (pCreature);
}
CreatureAI* GetAI_npc_volcano(Creature* pCreature)
{
return new npc_volcanoAI (pCreature);
}
void AddSC_boss_supremus()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_supremus";
newscript->GetAI = &GetAI_boss_supremus;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "molten_flame";
newscript->GetAI = &GetAI_molten_flame;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_volcano";
newscript->GetAI = &GetAI_npc_volcano;
newscript->RegisterSelf();
}
@@ -0,0 +1,508 @@
/* 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_Teron_Gorefiend
SD%Complete: 60
SDComment: Requires Mind Control support for Ghosts.
SDCategory: Black Temple
EndScriptData */
#include "ScriptedPch.h"
#include "black_temple.h"
//Speech'n'sound
#define SAY_INTRO -1564037
#define SAY_AGGRO -1564038
#define SAY_SLAY1 -1564039
#define SAY_SLAY2 -1564040
#define SAY_SPELL1 -1564041
#define SAY_SPELL2 -1564042
#define SAY_SPECIAL1 -1564043
#define SAY_SPECIAL2 -1564044
#define SAY_ENRAGE -1564045
#define SAY_DEATH -1564046
//Spells
#define SPELL_INCINERATE 40239
#define SPELL_CRUSHING_SHADOWS 40243
#define SPELL_SHADOWBOLT 40185
#define SPELL_PASSIVE_SHADOWFORM 40326
#define SPELL_SHADOW_OF_DEATH 40251
#define SPELL_BERSERK 45078
#define SPELL_ATROPHY 40327 // Shadowy Constructs use this when they get within melee range of a player
#define CREATURE_DOOM_BLOSSOM 23123
#define CREATURE_SHADOWY_CONSTRUCT 23111
struct mob_doom_blossomAI : public ScriptedAI
{
mob_doom_blossomAI(Creature *c) : ScriptedAI(c) {}
uint32 CheckTeronTimer;
uint32 ShadowBoltTimer;
uint64 TeronGUID;
void Reset()
{
CheckTeronTimer = 5000;
ShadowBoltTimer = 12000;
TeronGUID = 0;
}
void EnterCombat(Unit * /*who*/) { }
void AttackStart(Unit* /*who*/) {}
void MoveInLineOfSight(Unit* /*who*/) {}
void Despawn()
{
me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
me->RemoveCorpse();
}
void UpdateAI(const uint32 diff)
{
if (CheckTeronTimer <= diff)
{
if (TeronGUID)
{
DoZoneInCombat();
Creature* Teron = (Unit::GetCreature((*me), TeronGUID));
if ((Teron) && (!Teron->isAlive() || Teron->IsInEvadeMode()))
Despawn();
}
else
Despawn();
CheckTeronTimer = 5000;
} else CheckTeronTimer -= diff;
if (ShadowBoltTimer < diff && me->isInCombat())
{
DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), SPELL_SHADOWBOLT);
ShadowBoltTimer = 10000;
} else ShadowBoltTimer -= diff;
return;
}
void SetTeronGUID(uint64 guid){ TeronGUID = guid; }
};
struct mob_shadowy_constructAI : public ScriptedAI
{
mob_shadowy_constructAI(Creature* c) : ScriptedAI(c) {}
uint64 GhostGUID;
uint64 TeronGUID;
uint32 CheckPlayerTimer;
uint32 CheckTeronTimer;
void Reset()
{
GhostGUID = 0;
TeronGUID = 0;
CheckPlayerTimer = 2000;
CheckTeronTimer = 5000;
}
void EnterCombat(Unit* /*who*/) {}
void MoveInLineOfSight(Unit *who)
{
if (!who || (!who->isAlive()) || (who->GetGUID() == GhostGUID))
return;
ScriptedAI::MoveInLineOfSight(who);
}
/* Comment it out for now. NOTE TO FUTURE DEV: UNCOMMENT THIS OUT ONLY AFTER MIND CONTROL IS IMPLEMENTED
void DamageTaken(Unit* done_by, uint32 &damage)
{
if (done_by->GetGUID() != GhostGUID)
damage = 0; // Only the ghost can deal damage.
}
*/
void CheckPlayers()
{
std::list<HostileReference*>& m_threatlist = me->getThreatManager().getThreatList();
if (m_threatlist.empty())
return; // No threat list. Don't continue.
std::list<HostileReference*>::const_iterator itr = m_threatlist.begin();
std::list<Unit*> targets;
for (; itr != m_threatlist.end(); ++itr)
{
Unit* pUnit = Unit::GetUnit((*me), (*itr)->getUnitGuid());
if (pUnit && pUnit->isAlive())
targets.push_back(pUnit);
}
targets.sort(Trinity::ObjectDistanceOrderPred(me));
Unit *pTarget = targets.front();
if (pTarget && me->IsWithinDistInMap(pTarget, me->GetAttackDistance(pTarget)))
{
DoCast(pTarget, SPELL_ATROPHY);
me->AI()->AttackStart(pTarget);
}
}
void UpdateAI(const uint32 diff)
{
if (CheckPlayerTimer <= diff)
{
CheckPlayers();
CheckPlayerTimer = 3000;
} else CheckPlayerTimer -= diff;
if (CheckTeronTimer <= diff)
{
Creature* Teron = (Unit::GetCreature((*me), TeronGUID));
if (!Teron || !Teron->isAlive() || Teron->IsInEvadeMode())
me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
CheckTeronTimer = 5000;
} else CheckTeronTimer -= diff;
}
};
struct boss_teron_gorefiendAI : public ScriptedAI
{
boss_teron_gorefiendAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance* pInstance;
uint32 IncinerateTimer;
uint32 SummonDoomBlossomTimer;
uint32 EnrageTimer;
uint32 CrushingShadowsTimer;
uint32 ShadowOfDeathTimer;
uint32 SummonShadowsTimer;
uint32 RandomYellTimer;
uint32 AggroTimer;
uint64 AggroTargetGUID;
uint64 GhostGUID; // Player that gets killed by Shadow of Death and gets turned into a ghost
bool Intro;
bool Done;
void Reset()
{
if (pInstance)
pInstance->SetData(DATA_TERONGOREFIENDEVENT, NOT_STARTED);
IncinerateTimer = 20000 + rand()%11000;
SummonDoomBlossomTimer = 12000;
EnrageTimer = 600000;
CrushingShadowsTimer = 22000;
SummonShadowsTimer = 60000;
RandomYellTimer = 50000;
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
// Start off unattackable so that the intro is done properly
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
AggroTimer = 20000;
AggroTargetGUID = 0;
Intro = false;
Done = false;
}
void EnterCombat(Unit * /*who*/) {}
void MoveInLineOfSight(Unit* pWho)
{
if (!Intro && pWho->GetTypeId() == TYPEID_PLAYER && pWho->isTargetableForAttack() && me->IsHostileTo(pWho) && pWho->isInAccessiblePlaceFor(me))
{
if (me->IsWithinDistInMap(pWho, VISIBLE_RANGE) && me->IsWithinLOSInMap(pWho))
{
if (pInstance)
pInstance->SetData(DATA_TERONGOREFIENDEVENT, IN_PROGRESS);
me->GetMotionMaster()->Clear(false);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
DoScriptText(SAY_INTRO, me);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_TALK);
AggroTargetGUID = pWho->GetGUID();
Intro = true;
}
}
if (Done)
ScriptedAI::MoveInLineOfSight(pWho);
}
void KilledUnit(Unit * /*victim*/)
{
DoScriptText(RAND(SAY_SLAY1,SAY_SLAY2), me);
}
void JustDied(Unit * /*victim*/)
{
if (pInstance)
pInstance->SetData(DATA_TERONGOREFIENDEVENT, DONE);
DoScriptText(SAY_DEATH, me);
}
float CalculateRandomLocation(float Loc, uint32 radius)
{
float coord = Loc;
switch (urand(0,1))
{
case 0:
coord += rand()%radius;
break;
case 1:
coord -= rand()%radius;
break;
}
return coord;
}
void SetThreatList(Creature* Blossom)
{
if (!Blossom) return;
std::list<HostileReference*>& m_threatlist = me->getThreatManager().getThreatList();
std::list<HostileReference*>::const_iterator i = m_threatlist.begin();
for (i = m_threatlist.begin(); i != m_threatlist.end(); ++i)
{
Unit* pUnit = Unit::GetUnit((*me), (*i)->getUnitGuid());
if (pUnit && pUnit->isAlive())
{
float threat = DoGetThreat(pUnit);
Blossom->AddThreat(pUnit, threat);
}
}
}
void MindControlGhost()
{
/************************************************************************/
/** NOTE FOR FUTURE DEVELOPER: PROPERLY IMPLEMENT THE GHOST PORTION *****/
/** ONLY AFTER TrinIty FULLY IMPLEMENTS MIND CONTROL ABILITIES *****/
/** THE CURRENT CODE IN THIS FUNCTION IS ONLY THE BEGINNING OF *****/
/** WHAT IS FULLY NECESSARY FOR GOREFIEND TO BE 100% COMPLETE *****/
/************************************************************************/
Unit* Ghost = NULL;
if (GhostGUID)
Ghost = Unit::GetUnit((*me), GhostGUID);
if (Ghost && Ghost->isAlive() && Ghost->HasAura(SPELL_SHADOW_OF_DEATH))
{
/*float x,y,z;
Ghost->GetPosition(x,y,z);
Creature* control = me->SummonCreature(CREATURE_GHOST, x, y, z, 0, TEMPSUMMON_TIMED_DESAWN, 30000);
if (control)
{
CAST_PLR(Ghost)->Possess(control);
Ghost->DealDamage(Ghost, Ghost->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL,
false);
}*/
for (uint8 i = 0; i < 4; ++i)
{
Creature* Construct = NULL;
float X = CalculateRandomLocation(Ghost->GetPositionX(), 10);
float Y = CalculateRandomLocation(Ghost->GetPositionY(), 10);
Construct = me->SummonCreature(CREATURE_SHADOWY_CONSTRUCT, X, Y, Ghost->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 45000);
if (Construct)
{
Construct->CastSpell(Construct, SPELL_PASSIVE_SHADOWFORM, true);
SetThreatList(Construct); // Use same function as Doom Blossom to set Threat List.
CAST_AI(mob_shadowy_constructAI, Construct->AI())->GhostGUID = GhostGUID;
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1);
if (!pTarget) // someone's trying to solo.
pTarget = me->getVictim();
if (pTarget)
Construct->GetMotionMaster()->MoveChase(pTarget);
}
}
}
}
void UpdateAI(const uint32 diff)
{
if (Intro && !Done)
{
if (AggroTimer <= diff)
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
DoScriptText(SAY_AGGRO, me);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
Done = true;
if (AggroTargetGUID)
{
Unit* pUnit = Unit::GetUnit((*me), AggroTargetGUID);
if (pUnit)
AttackStart(pUnit);
DoZoneInCombat();
}
else
{
EnterEvadeMode();
return;
}
} else AggroTimer -= diff;
}
if (!UpdateVictim() || !Done)
return;
if (SummonShadowsTimer <= diff)
{
//MindControlGhost();
for (uint8 i = 0; i < 2; ++i)
{
Creature* Shadow = NULL;
float X = CalculateRandomLocation(me->GetPositionX(), 10);
Shadow = me->SummonCreature(CREATURE_SHADOWY_CONSTRUCT, X, me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 0);
if (Shadow)
{
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1);
if (!pTarget)
pTarget = me->getVictim();
if (pTarget)
Shadow->AI()->AttackStart(pTarget);
}
}
SummonShadowsTimer = 60000;
} else SummonShadowsTimer -= diff;
if (SummonDoomBlossomTimer <= diff)
{
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
{
float X = CalculateRandomLocation(pTarget->GetPositionX(), 20);
float Y = CalculateRandomLocation(pTarget->GetPositionY(), 20);
float Z = pTarget->GetPositionZ();
Z = me->GetMap()->GetHeight(X, Y, Z);
Creature* DoomBlossom = me->SummonCreature(CREATURE_DOOM_BLOSSOM, X, Y, Z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 20000);
if (DoomBlossom)
{
DoomBlossom->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
DoomBlossom->setFaction(me->getFaction());
DoomBlossom->AddThreat(pTarget, 1.0f);
CAST_AI(mob_doom_blossomAI, DoomBlossom->AI())->SetTeronGUID(me->GetGUID());
pTarget->CombatStart(DoomBlossom);
SetThreatList(DoomBlossom);
SummonDoomBlossomTimer = 35000;
}
}
} else SummonDoomBlossomTimer -= diff;
if (IncinerateTimer <= diff)
{
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1);
if (!pTarget)
pTarget = me->getVictim();
if (pTarget)
{
DoScriptText(RAND(SAY_SPECIAL1,SAY_SPECIAL2), me);
DoCast(pTarget, SPELL_INCINERATE);
IncinerateTimer = 20000 + rand()%31 * 1000;
}
} else IncinerateTimer -= diff;
if (CrushingShadowsTimer <= diff)
{
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
if (pTarget && pTarget->isAlive())
DoCast(pTarget, SPELL_CRUSHING_SHADOWS);
CrushingShadowsTimer = 10000 + rand()%16 * 1000;
} else CrushingShadowsTimer -= diff;
/*** NOTE FOR FUTURE DEV: UNCOMMENT BELOW ONLY IF MIND CONTROL IS FULLY IMPLEMENTED **/
/*if (ShadowOfDeathTimer <= diff)
{
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1);
if (!pTarget)
pTarget = me->getVictim();
if (pTarget && pTarget->isAlive() && pTarget->GetTypeId() == TYPEID_PLAYER)
{
DoCast(pTarget, SPELL_SHADOW_OF_DEATH);
GhostGUID = pTarget->GetGUID();
ShadowOfDeathTimer = 30000;
SummonShadowsTimer = 53000; // Make it VERY close but slightly less so that we can check if the aura is still on the player
}
} else ShadowOfDeathTimer -= diff;*/
if (RandomYellTimer <= diff)
{
DoScriptText(RAND(SAY_SPELL1,SAY_SPELL2), me);
RandomYellTimer = 50000 + rand()%51 * 1000;
} else RandomYellTimer -= diff;
if (!me->HasAura(SPELL_BERSERK))
{
if (EnrageTimer <= diff)
{
DoCast(me, SPELL_BERSERK);
DoScriptText(SAY_ENRAGE, me);
} else EnrageTimer -= diff;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_mob_doom_blossom(Creature* pCreature)
{
return new mob_doom_blossomAI(pCreature);
}
CreatureAI* GetAI_mob_shadowy_construct(Creature* pCreature)
{
return new mob_shadowy_constructAI(pCreature);
}
CreatureAI* GetAI_boss_teron_gorefiend(Creature* pCreature)
{
return new boss_teron_gorefiendAI (pCreature);
}
void AddSC_boss_teron_gorefiend()
{
Script *newscript;
newscript = new Script;
newscript->Name = "mob_doom_blossom";
newscript->GetAI = &GetAI_mob_doom_blossom;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "mob_shadowy_construct";
newscript->GetAI = &GetAI_mob_shadowy_construct;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "boss_teron_gorefiend";
newscript->GetAI = &GetAI_boss_teron_gorefiend;
newscript->RegisterSelf();
}
@@ -0,0 +1,226 @@
/* 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_Warlord_Najentus
SD%Complete: 95
SDComment:
SDCategory: Black Temple
EndScriptData */
#include "ScriptedPch.h"
#include "black_temple.h"
enum eEnums
{
SAY_AGGRO = -1564000,
SAY_NEEDLE1 = -1564001,
SAY_NEEDLE2 = -1564002,
SAY_SLAY1 = -1564003,
SAY_SLAY2 = -1564004,
SAY_SPECIAL1 = -1564005,
SAY_SPECIAL2 = -1564006,
SAY_ENRAGE1 = -1564007, //is this text actually in use?
SAY_ENRAGE2 = -1564008,
SAY_DEATH = -1564009,
//Spells
SPELL_NEEDLE_SPINE = 39992,
SPELL_TIDAL_BURST = 39878,
SPELL_TIDAL_SHIELD = 39872,
SPELL_IMPALING_SPINE = 39837,
SPELL_CREATE_NAJENTUS_SPINE = 39956,
SPELL_HURL_SPINE = 39948,
SPELL_BERSERK = 26662,
GOBJECT_SPINE = 185584,
EVENT_BERSERK = 1,
EVENT_YELL = 2,
EVENT_NEEDLE = 3,
EVENT_SPINE = 4,
EVENT_SHIELD = 5,
GCD_CAST = 1,
GCD_YELL = 2
};
struct boss_najentusAI : public ScriptedAI
{
boss_najentusAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance* pInstance;
EventMap events;
uint64 SpineTargetGUID;
void Reset()
{
events.Reset();
SpineTargetGUID = 0;
if (pInstance)
pInstance->SetData(DATA_HIGHWARLORDNAJENTUSEVENT, NOT_STARTED);
}
void KilledUnit(Unit * /*victim*/)
{
DoScriptText(rand()%2 ? SAY_SLAY1 : SAY_SLAY2, me);
events.DelayEvents(5000, GCD_YELL);
}
void JustDied(Unit * /*victim*/)
{
if (pInstance)
pInstance->SetData(DATA_HIGHWARLORDNAJENTUSEVENT, DONE);
DoScriptText(SAY_DEATH, me);
}
void SpellHit(Unit * /*caster*/, const SpellEntry *spell)
{
if (spell->Id == SPELL_HURL_SPINE && me->HasAura(SPELL_TIDAL_SHIELD))
{
me->RemoveAurasDueToSpell(SPELL_TIDAL_SHIELD);
DoCast(me, SPELL_TIDAL_BURST, true);
ResetTimer();
}
}
void EnterCombat(Unit * /*who*/)
{
if (pInstance)
pInstance->SetData(DATA_HIGHWARLORDNAJENTUSEVENT, IN_PROGRESS);
DoScriptText(SAY_AGGRO, me);
DoZoneInCombat();
events.ScheduleEvent(EVENT_BERSERK, 480000, GCD_CAST);
events.ScheduleEvent(EVENT_YELL, 45000 + (rand()%76)*1000, GCD_YELL);
ResetTimer();
}
bool RemoveImpalingSpine()
{
if (!SpineTargetGUID) return false;
Unit *pTarget = Unit::GetUnit(*me, SpineTargetGUID);
if (pTarget && pTarget->HasAura(SPELL_IMPALING_SPINE))
pTarget->RemoveAurasDueToSpell(SPELL_IMPALING_SPINE);
SpineTargetGUID=0;
return true;
}
void ResetTimer(uint32 inc = 0)
{
events.RescheduleEvent(EVENT_NEEDLE, 10000 + inc, GCD_CAST);
events.RescheduleEvent(EVENT_SPINE, 20000 + inc, GCD_CAST);
events.RescheduleEvent(EVENT_SHIELD, 60000 + inc);
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_SHIELD:
DoCast(me, SPELL_TIDAL_SHIELD, true);
ResetTimer(45000);
break;
case EVENT_BERSERK:
DoScriptText(SAY_ENRAGE2, me);
DoCast(me, SPELL_BERSERK, true);
events.DelayEvents(15000, GCD_YELL);
break;
case EVENT_SPINE:
{
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1);
if (!pTarget) pTarget = me->getVictim();
if (pTarget)
{
DoCast(pTarget, SPELL_IMPALING_SPINE, true);
SpineTargetGUID = pTarget->GetGUID();
//must let target summon, otherwise you cannot click the spine
pTarget->SummonGameObject(GOBJECT_SPINE, pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ(), me->GetOrientation(), 0, 0, 0, 0, 30);
DoScriptText(rand()%2 ? SAY_NEEDLE1 : SAY_NEEDLE2, me);
events.DelayEvents(1500, GCD_CAST);
events.DelayEvents(15000, GCD_YELL);
}
events.ScheduleEvent(EVENT_SPINE, 21000, GCD_CAST);
return;
}
case EVENT_NEEDLE:
{
//DoCast(me, SPELL_NEEDLE_SPINE, true);
std::list<Unit*> pTargets;
SelectTargetList(pTargets, 3, SELECT_TARGET_RANDOM, 80, true);
for (std::list<Unit*>::const_iterator i = pTargets.begin(); i != pTargets.end(); ++i)
DoCast(*i, 39835, true);
events.ScheduleEvent(EVENT_NEEDLE, urand(15000,25000), GCD_CAST);
events.DelayEvents(1500, GCD_CAST);
return;
}
case EVENT_YELL:
DoScriptText(RAND(SAY_SPECIAL1, SAY_SPECIAL2), me);
events.ScheduleEvent(EVENT_YELL, urand(25000,100000), GCD_YELL);
events.DelayEvents(15000, GCD_YELL);
break;
}
}
DoMeleeAttackIfReady();
}
};
bool GOHello_go_najentus_spine(Player* pPlayer, GameObject* pGo)
{
if (ScriptedInstance* pInstance = pGo->GetInstanceData())
if (Creature* Najentus = Unit::GetCreature(*pGo, pInstance->GetData64(DATA_HIGHWARLORDNAJENTUS)))
if (CAST_AI(boss_najentusAI, Najentus->AI())->RemoveImpalingSpine())
{
pPlayer->CastSpell(pPlayer, SPELL_CREATE_NAJENTUS_SPINE, true);
pGo->Delete();
}
return true;
}
CreatureAI* GetAI_boss_najentus(Creature* pCreature)
{
return new boss_najentusAI (pCreature);
}
void AddSC_boss_najentus()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_najentus";
newscript->GetAI = &GetAI_boss_najentus;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "go_najentus_spine";
newscript->pGOHello = &GOHello_go_najentus_spine;
newscript->RegisterSelf();
}
@@ -0,0 +1,874 @@
/* 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: Illidari_Council
SD%Complete: 95
SDComment: Circle of Healing not working properly.
SDCategory: Black Temple
EndScriptData */
#include "ScriptedPch.h"
#include "black_temple.h"
//Speech'n'Sounds
#define SAY_GATH_SLAY -1564085
#define SAY_GATH_SLAY_COMNT -1564089
#define SAY_GATH_DEATH -1564093
#define SAY_GATH_SPECIAL1 -1564077
#define SAY_GATH_SPECIAL2 -1564081
#define SAY_VERA_SLAY -1564086
#define SAY_VERA_COMNT -1564089 //signed for 22949
#define SAY_VERA_DEATH -1564094
#define SAY_VERA_SPECIAL1 -1564078
#define SAY_VERA_SPECIAL2 -1564082
#define SAY_MALA_SLAY -1564087
#define SAY_MALA_COMNT -1564090
#define SAY_MALA_DEATH -1564095
#define SAY_MALA_SPECIAL1 -1564079
#define SAY_MALA_SPECIAL2 -1564083
#define SAY_ZERE_SLAY -1564088
#define SAY_ZERE_COMNT -1564091
#define SAY_ZERE_DEATH -1564096
#define SAY_ZERE_SPECIAL1 -1564080
#define SAY_ZERE_SPECIAL2 -1564084
#define ERROR_INST_DATA "SD2 ERROR: Instance Data for Black Temple not set properly; Illidari Council event will not function properly."
#define AKAMAID 23089
struct CouncilYells
{
int32 entry;
uint32 timer;
};
static CouncilYells CouncilAggro[]=
{
{-1564069, 5000}, // Gathios
{-1564070, 5500}, // Veras
{-1564071, 5000}, // Malande
{-1564072, 0}, // Zerevor
};
// Need to get proper timers for this later
static CouncilYells CouncilEnrage[]=
{
{-1564073, 2000}, // Gathios
{-1564074, 6000}, // Veras
{-1564075, 5000}, // Malande
{-1564076, 0}, // Zerevor
};
// High Nethermancer Zerevor's spells
#define SPELL_FLAMESTRIKE 41481
#define SPELL_BLIZZARD 41482
#define SPELL_ARCANE_BOLT 41483
#define SPELL_ARCANE_EXPLOSION 41524
#define SPELL_DAMPEN_MAGIC 41478
// Lady Malande's spells
#define SPELL_EMPOWERED_SMITE 41471
#define SPELL_CIRCLE_OF_HEALING 41455
#define SPELL_REFLECTIVE_SHIELD 41475
#define SPELL_DIVINE_WRATH 41472
#define SPELL_HEAL_VISUAL 24171
// Gathios the Shatterer's spells
#define SPELL_BLESS_PROTECTION 41450
#define SPELL_BLESS_SPELLWARD 41451
#define SPELL_CONSECRATION 41541
#define SPELL_HAMMER_OF_JUSTICE 41468
#define SPELL_SEAL_OF_COMMAND 41469
#define SPELL_SEAL_OF_BLOOD 41459
#define SPELL_CHROMATIC_AURA 41453
#define SPELL_DEVOTION_AURA 41452
// Veras Darkshadow's spells
#define SPELL_DEADLY_POISON 41485
#define SPELL_ENVENOM 41487
#define SPELL_VANISH 41479
#define SPELL_BERSERK 45078
struct mob_blood_elf_council_voice_triggerAI : public ScriptedAI
{
mob_blood_elf_council_voice_triggerAI(Creature* c) : ScriptedAI(c)
{
for (uint8 i = 0; i < 4; ++i)
Council[i] = 0;
}
uint64 Council[4];
uint32 EnrageTimer;
uint32 AggroYellTimer;
uint8 YellCounter; // Serves as the counter for both the aggro and enrage yells
bool EventStarted;
void Reset()
{
EnrageTimer = 900000; // 15 minutes
AggroYellTimer = 500;
YellCounter = 0;
EventStarted = false;
}
// finds and stores the GUIDs for each Council member using instance data system.
void LoadCouncilGUIDs()
{
if (ScriptedInstance* pInstance = me->GetInstanceData())
{
Council[0] = pInstance->GetData64(DATA_GATHIOSTHESHATTERER);
Council[1] = pInstance->GetData64(DATA_VERASDARKSHADOW);
Council[2] = pInstance->GetData64(DATA_LADYMALANDE);
Council[3] = pInstance->GetData64(DATA_HIGHNETHERMANCERZEREVOR);
} else error_log(ERROR_INST_DATA);
}
void EnterCombat(Unit* /*who*/) {}
void AttackStart(Unit* /*who*/) {}
void MoveInLineOfSight(Unit* /*who*/) {}
void UpdateAI(const uint32 diff)
{
if (!EventStarted)
return;
if (YellCounter > 3)
return;
if (AggroYellTimer)
{
if (AggroYellTimer <= diff)
{
if (Unit* pMember = Unit::GetUnit(*me, Council[YellCounter]))
{
DoScriptText(CouncilAggro[YellCounter].entry, pMember);
AggroYellTimer = CouncilAggro[YellCounter].timer;
}
++YellCounter;
if (YellCounter > 3)
YellCounter = 0; // Reuse for Enrage Yells
} else AggroYellTimer -= diff;
}
if (EnrageTimer)
{
if (EnrageTimer <= diff)
{
if (Unit* pMember = Unit::GetUnit(*me, Council[YellCounter]))
{
pMember->CastSpell(pMember, SPELL_BERSERK, true);
DoScriptText(CouncilEnrage[YellCounter].entry, pMember);
EnrageTimer = CouncilEnrage[YellCounter].timer;
}
++YellCounter;
} else EnrageTimer -= diff;
}
}
};
struct mob_illidari_councilAI : public ScriptedAI
{
mob_illidari_councilAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
for (uint8 i = 0; i < 4; ++i)
Council[i] = 0;
}
ScriptedInstance* pInstance;
uint64 Council[4];
uint32 CheckTimer;
uint32 EndEventTimer;
uint8 DeathCount;
bool EventBegun;
void Reset()
{
CheckTimer = 2000;
EndEventTimer = 0;
DeathCount = 0;
Creature* pMember = NULL;
for (uint8 i = 0; i < 4; ++i)
{
pMember = Unit::GetCreature((*me), Council[i]);
if (!pMember)
continue;
if (!pMember->isAlive())
{
pMember->RemoveCorpse();
pMember->Respawn();
}
pMember->AI()->EnterEvadeMode();
}
if (pInstance)
{
pInstance->SetData(DATA_ILLIDARICOUNCILEVENT, NOT_STARTED);
if (Creature* VoiceTrigger = (Unit::GetCreature(*me, pInstance->GetData64(DATA_BLOOD_ELF_COUNCIL_VOICE))))
VoiceTrigger->AI()->EnterEvadeMode();
}
EventBegun = false;
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetDisplayId(11686);
}
void EnterCombat(Unit * /*who*/) {}
void AttackStart(Unit* /*who*/) {}
void MoveInLineOfSight(Unit* /*who*/) {}
void StartEvent(Unit *pTarget)
{
if (!pInstance)
return;
if (pTarget && pTarget->isAlive())
{
Council[0] = pInstance->GetData64(DATA_GATHIOSTHESHATTERER);
Council[1] = pInstance->GetData64(DATA_HIGHNETHERMANCERZEREVOR);
Council[2] = pInstance->GetData64(DATA_LADYMALANDE);
Council[3] = pInstance->GetData64(DATA_VERASDARKSHADOW);
// Start the event for the Voice Trigger
if (Creature* VoiceTrigger = (Unit::GetCreature(*me, pInstance->GetData64(DATA_BLOOD_ELF_COUNCIL_VOICE))))
{
CAST_AI(mob_blood_elf_council_voice_triggerAI, VoiceTrigger->AI())->LoadCouncilGUIDs();
CAST_AI(mob_blood_elf_council_voice_triggerAI, VoiceTrigger->AI())->EventStarted = true;
}
for (uint8 i = 0; i < 4; ++i)
{
Unit* Member = NULL;
if (Council[i])
{
Member = Unit::GetUnit((*me), Council[i]);
if (Member && Member->isAlive())
CAST_CRE(Member)->AI()->AttackStart(pTarget);
}
}
pInstance->SetData(DATA_ILLIDARICOUNCILEVENT, IN_PROGRESS);
EventBegun = true;
}
}
void UpdateAI(const uint32 diff)
{
if (!EventBegun) return;
if (EndEventTimer)
{
if (EndEventTimer <= diff)
{
if (DeathCount > 3)
{
if (pInstance)
{
if (Creature* VoiceTrigger = (Unit::GetCreature(*me, pInstance->GetData64(DATA_BLOOD_ELF_COUNCIL_VOICE))))
VoiceTrigger->DealDamage(VoiceTrigger, VoiceTrigger->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
pInstance->SetData(DATA_ILLIDARICOUNCILEVENT, DONE);
//me->SummonCreature(AKAMAID,746.466980f,304.394989f,311.90208f,6.272870f,TEMPSUMMON_DEAD_DESPAWN,0);
}
me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
return;
}
Creature* pMember = (Unit::GetCreature(*me, Council[DeathCount]));
if (pMember && pMember->isAlive())
pMember->DealDamage(pMember, pMember->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
++DeathCount;
EndEventTimer = 1500;
} else EndEventTimer -= diff;
}
if (CheckTimer)
{
if (CheckTimer <= diff)
{
uint8 EvadeCheck = 0;
for (uint8 i = 0; i < 4; ++i)
{
if (Council[i])
{
if (Creature* Member = (Unit::GetCreature((*me), Council[i])))
{
// This is the evade/death check.
if (Member->isAlive() && !Member->getVictim())
++EvadeCheck; //If all members evade, we reset so that players can properly reset the event
else if (!Member->isAlive()) // If even one member dies, kill the rest, set instance data, and kill self.
{
EndEventTimer = 1000;
CheckTimer = 0;
return;
}
}
}
}
if (EvadeCheck > 3)
Reset();
CheckTimer = 2000;
} else CheckTimer -= diff;
}
}
};
struct boss_illidari_councilAI : public ScriptedAI
{
boss_illidari_councilAI(Creature* c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
for (uint8 i = 0; i < 4; ++i)
Council[i] = 0;
LoadedGUIDs = false;
}
uint64 Council[4];
ScriptedInstance* pInstance;
bool LoadedGUIDs;
void EnterCombat(Unit* who)
{
if (pInstance)
{
Creature* Controller = (Unit::GetCreature(*me, pInstance->GetData64(DATA_ILLIDARICOUNCIL)));
if (Controller)
CAST_AI(mob_illidari_councilAI, Controller->AI())->StartEvent(who);
}
else
{
error_log(ERROR_INST_DATA);
EnterEvadeMode();
return;
}
DoZoneInCombat();
// Load GUIDs on first aggro because the Creature guids are only set as the creatures are created in world-
// this means that for each pCreature, it will attempt to LoadGUIDs even though some of the other creatures are
// not in world, and thus have no GUID set in the instance data system. Putting it in aggro ensures that all the creatures
// have been loaded and have their GUIDs set in the instance data system.
if (!LoadedGUIDs)
LoadGUIDs();
}
void EnterEvadeMode()
{
for (uint8 i = 0; i < 4; ++i)
{
if (Unit* pUnit = Unit::GetUnit(*me, Council[i]))
if (pUnit != me && pUnit->getVictim())
{
AttackStart(pUnit->getVictim());
return;
}
}
ScriptedAI::EnterEvadeMode();
}
void DamageTaken(Unit* done_by, uint32 &damage)
{
if (done_by == me)
return;
damage /= 4;
for (uint8 i = 0; i < 4; ++i)
{
if (Creature* pUnit = Unit::GetCreature(*me, Council[i]))
if (pUnit != me && damage < pUnit->GetHealth())
{
pUnit->SetHealth(pUnit->GetHealth() - damage);
pUnit->LowerPlayerDamageReq(damage);
}
}
}
void LoadGUIDs()
{
if (!pInstance)
{
error_log(ERROR_INST_DATA);
return;
}
Council[0] = pInstance->GetData64(DATA_LADYMALANDE);
Council[1] = pInstance->GetData64(DATA_HIGHNETHERMANCERZEREVOR);
Council[2] = pInstance->GetData64(DATA_GATHIOSTHESHATTERER);
Council[3] = pInstance->GetData64(DATA_VERASDARKSHADOW);
LoadedGUIDs = true;
}
};
struct boss_gathios_the_shattererAI : public boss_illidari_councilAI
{
boss_gathios_the_shattererAI(Creature *c) : boss_illidari_councilAI(c) {}
uint32 ConsecrationTimer;
uint32 HammerOfJusticeTimer;
uint32 SealTimer;
uint32 AuraTimer;
uint32 BlessingTimer;
void Reset()
{
ConsecrationTimer = 40000;
HammerOfJusticeTimer = 10000;
SealTimer = 40000;
AuraTimer = 90000;
BlessingTimer = 60000;
}
void KilledUnit(Unit * /*victim*/)
{
DoScriptText(SAY_GATH_SLAY, me);
}
void JustDied(Unit * /*victim*/)
{
DoScriptText(SAY_GATH_DEATH, me);
}
Unit* SelectCouncilMember()
{
Unit* pUnit = me;
uint32 member = 0; // He chooses Lady Malande most often
if (rand()%10 == 0) // But there is a chance he picks someone else.
member = urand(1, 3);
if (member != 2) // No need to create another pointer to us using Unit::GetUnit
pUnit = Unit::GetUnit((*me), Council[member]);
return pUnit;
}
void CastAuraOnCouncil()
{
uint32 spellid = 0;
switch (urand(0,1))
{
case 0: spellid = SPELL_DEVOTION_AURA; break;
case 1: spellid = SPELL_CHROMATIC_AURA; break;
}
for (uint8 i = 0; i < 4; ++i)
{
Unit* pUnit = Unit::GetUnit((*me), Council[i]);
if (pUnit)
pUnit->CastSpell(pUnit, spellid, true, 0, 0, me->GetGUID());
}
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
if (BlessingTimer <= diff)
{
if (Unit* pUnit = SelectCouncilMember())
{
switch (urand(0,1))
{
case 0: DoCast(pUnit, SPELL_BLESS_SPELLWARD); break;
case 1: DoCast(pUnit, SPELL_BLESS_PROTECTION); break;
}
}
BlessingTimer = 60000;
} else BlessingTimer -= diff;
if (ConsecrationTimer <= diff)
{
DoCast(me, SPELL_CONSECRATION);
ConsecrationTimer = 40000;
} else ConsecrationTimer -= diff;
if (HammerOfJusticeTimer <= diff)
{
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
{
// is in ~10-40 yd range
if (me->IsInRange(pTarget, 10.0f, 40.0f, false))
{
DoCast(pTarget, SPELL_HAMMER_OF_JUSTICE);
HammerOfJusticeTimer = 20000;
}
}
} else HammerOfJusticeTimer -= diff;
if (SealTimer <= diff)
{
switch (urand(0,1))
{
case 0: DoCast(me, SPELL_SEAL_OF_COMMAND); break;
case 1: DoCast(me, SPELL_SEAL_OF_BLOOD); break;
}
SealTimer = 40000;
} else SealTimer -= diff;
if (AuraTimer <= diff)
{
CastAuraOnCouncil();
AuraTimer = 90000;
} else AuraTimer -= diff;
DoMeleeAttackIfReady();
}
};
struct boss_high_nethermancer_zerevorAI : public boss_illidari_councilAI
{
boss_high_nethermancer_zerevorAI(Creature *c) : boss_illidari_councilAI(c) {}
uint32 BlizzardTimer;
uint32 FlamestrikeTimer;
uint32 ArcaneBoltTimer;
uint32 DampenMagicTimer;
uint32 Cooldown;
uint32 ArcaneExplosionTimer;
void Reset()
{
BlizzardTimer = 30000 + rand()%61 * 1000;
FlamestrikeTimer = 30000 + rand()%61 * 1000;
ArcaneBoltTimer = 10000;
DampenMagicTimer = 2000;
ArcaneExplosionTimer = 14000;
Cooldown = 0;
}
void KilledUnit(Unit * /*victim*/)
{
DoScriptText(SAY_ZERE_SLAY, me);
}
void JustDied(Unit * /*victim*/)
{
DoScriptText(SAY_ZERE_DEATH, me);
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
if (Cooldown)
{
if (Cooldown <= diff) Cooldown = 0;
else
{
Cooldown -= diff;
return; // Don't cast any other spells if global cooldown is still ticking
}
}
if (DampenMagicTimer <= diff)
{
DoCast(me, SPELL_DAMPEN_MAGIC);
Cooldown = 1000;
DampenMagicTimer = 67200; // almost 1,12 minutes
ArcaneBoltTimer += 1000; // Give the Mage some time to spellsteal Dampen.
} else DampenMagicTimer -= diff;
if (ArcaneExplosionTimer <= diff)
{
DoCast(me->getVictim(), SPELL_ARCANE_EXPLOSION);
Cooldown = 1000;
ArcaneExplosionTimer = 14000;
} else ArcaneExplosionTimer -= diff;
if (ArcaneBoltTimer <= diff)
{
DoCast(me->getVictim(), SPELL_ARCANE_BOLT);
ArcaneBoltTimer = 3000;
Cooldown = 2000;
} else ArcaneBoltTimer -= diff;
if (BlizzardTimer <= diff)
{
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
{
DoCast(pTarget, SPELL_BLIZZARD);
BlizzardTimer = 45000 + rand()%46 * 1000;
FlamestrikeTimer += 10000;
Cooldown = 1000;
}
} else BlizzardTimer -= diff;
if (FlamestrikeTimer <= diff)
{
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
{
DoCast(pTarget, SPELL_FLAMESTRIKE);
FlamestrikeTimer = 55000 + rand()%46 * 1000;
BlizzardTimer += 10000;
Cooldown = 2000;
}
} else FlamestrikeTimer -= diff;
}
};
struct boss_lady_malandeAI : public boss_illidari_councilAI
{
boss_lady_malandeAI(Creature *c) : boss_illidari_councilAI(c) {}
uint32 EmpoweredSmiteTimer;
uint32 CircleOfHealingTimer;
uint32 DivineWrathTimer;
uint32 ReflectiveShieldTimer;
void Reset()
{
EmpoweredSmiteTimer = 38000;
CircleOfHealingTimer = 20000;
DivineWrathTimer = 40000;
ReflectiveShieldTimer = 0;
}
void KilledUnit(Unit * /*victim*/)
{
DoScriptText(SAY_MALA_SLAY, me);
}
void JustDied(Unit * /*victim*/)
{
DoScriptText(SAY_MALA_DEATH, me);
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
if (EmpoweredSmiteTimer <= diff)
{
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
{
DoCast(pTarget, SPELL_EMPOWERED_SMITE);
EmpoweredSmiteTimer = 38000;
}
} else EmpoweredSmiteTimer -= diff;
if (CircleOfHealingTimer <= diff)
{
DoCast(me, SPELL_CIRCLE_OF_HEALING);
CircleOfHealingTimer = 60000;
} else CircleOfHealingTimer -= diff;
if (DivineWrathTimer <= diff)
{
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
{
DoCast(pTarget, SPELL_DIVINE_WRATH);
DivineWrathTimer = 40000 + rand()%41 * 1000;
}
} else DivineWrathTimer -= diff;
if (ReflectiveShieldTimer <= diff)
{
DoCast(me, SPELL_REFLECTIVE_SHIELD);
ReflectiveShieldTimer = 65000;
} else ReflectiveShieldTimer -= diff;
DoMeleeAttackIfReady();
}
};
struct boss_veras_darkshadowAI : public boss_illidari_councilAI
{
boss_veras_darkshadowAI(Creature *c) : boss_illidari_councilAI(c) {}
uint64 EnvenomTargetGUID;
uint32 DeadlyPoisonTimer;
uint32 VanishTimer;
uint32 AppearEnvenomTimer;
bool HasVanished;
void Reset()
{
EnvenomTargetGUID = 0;
DeadlyPoisonTimer = 20000;
VanishTimer = 60000 + rand()%61 * 1000;
AppearEnvenomTimer = 150000;
HasVanished = false;
me->SetVisibility(VISIBILITY_ON);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
void KilledUnit(Unit * /*victim*/)
{
DoScriptText(SAY_VERA_SLAY, me);
}
void JustDied(Unit * /*victim*/)
{
DoScriptText(SAY_VERA_DEATH, me);
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
if (!HasVanished)
{
if (DeadlyPoisonTimer <= diff)
{
DoCast(me->getVictim(), SPELL_DEADLY_POISON);
DeadlyPoisonTimer = 15000 + rand()%31 * 1000;
} else DeadlyPoisonTimer -= diff;
if (AppearEnvenomTimer <= diff) // Cast Envenom. This is cast 4 seconds after Vanish is over
{
DoCast(me->getVictim(), SPELL_ENVENOM);
AppearEnvenomTimer = 90000;
} else AppearEnvenomTimer -= diff;
if (VanishTimer <= diff) // Disappear and stop attacking, but follow a random unit
{
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
{
VanishTimer = 30000;
AppearEnvenomTimer= 28000;
HasVanished = true;
me->SetVisibility(VISIBILITY_OFF);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
DoResetThreat();
// Chase a unit. Check before DoMeleeAttackIfReady prevents from attacking
me->AddThreat(pTarget, 500000.0f);
me->GetMotionMaster()->MoveChase(pTarget);
}
} else VanishTimer -= diff;
DoMeleeAttackIfReady();
}
else
{
if (VanishTimer <= diff) // Become attackable and poison current target
{
Unit *pTarget = me->getVictim();
DoCast(pTarget, SPELL_DEADLY_POISON);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
DoResetThreat();
me->AddThreat(pTarget, 3000.0f); // Make Veras attack his target for a while, he will cast Envenom 4 seconds after.
DeadlyPoisonTimer += 6000;
VanishTimer = 90000;
AppearEnvenomTimer = 4000;
HasVanished = false;
} else VanishTimer -= diff;
if (AppearEnvenomTimer <= diff) // Appear 2 seconds before becoming attackable (Shifting out of vanish)
{
me->GetMotionMaster()->Clear();
me->GetMotionMaster()->MoveChase(me->getVictim());
me->SetVisibility(VISIBILITY_ON);
AppearEnvenomTimer = 6000;
} else AppearEnvenomTimer -= diff;
}
}
};
CreatureAI* GetAI_mob_blood_elf_council_voice_trigger(Creature* c)
{
return new mob_blood_elf_council_voice_triggerAI(c);
}
CreatureAI* GetAI_mob_illidari_council(Creature* pCreature)
{
return new mob_illidari_councilAI (pCreature);
}
CreatureAI* GetAI_boss_gathios_the_shatterer(Creature* pCreature)
{
return new boss_gathios_the_shattererAI (pCreature);
}
CreatureAI* GetAI_boss_lady_malande(Creature* pCreature)
{
return new boss_lady_malandeAI (pCreature);
}
CreatureAI* GetAI_boss_veras_darkshadow(Creature* pCreature)
{
return new boss_veras_darkshadowAI (pCreature);
}
CreatureAI* GetAI_boss_high_nethermancer_zerevor(Creature* pCreature)
{
return new boss_high_nethermancer_zerevorAI (pCreature);
}
void AddSC_boss_illidari_council()
{
Script *newscript;
newscript = new Script;
newscript->Name = "mob_illidari_council";
newscript->GetAI = &GetAI_mob_illidari_council;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "mob_blood_elf_council_voice_trigger";
newscript->GetAI = &GetAI_mob_blood_elf_council_voice_trigger;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "boss_gathios_the_shatterer";
newscript->GetAI = &GetAI_boss_gathios_the_shatterer;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "boss_lady_malande";
newscript->GetAI = &GetAI_boss_lady_malande;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "boss_veras_darkshadow";
newscript->GetAI = &GetAI_boss_veras_darkshadow;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "boss_high_nethermancer_zerevor";
newscript->GetAI = &GetAI_boss_high_nethermancer_zerevor;
newscript->RegisterSelf();
}
@@ -0,0 +1,346 @@
/* 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: Instance_Black_Temple
SD%Complete: 100
SDComment: Instance Data Scripts and functions to acquire mobs and set encounter status for use in various Black Temple Scripts
SDCategory: Black Temple
EndScriptData */
#include "ScriptedPch.h"
#include "black_temple.h"
#define MAX_ENCOUNTER 9
/* Black Temple encounters:
0 - High Warlord Naj'entus event
1 - Supremus Event
2 - Shade of Akama Event
3 - Teron Gorefiend Event
4 - Gurtogg Bloodboil Event
5 - Reliquary Of Souls Event
6 - Mother Shahraz Event
7 - Illidari Council Event
8 - Illidan Stormrage Event
*/
struct instance_black_temple : public ScriptedInstance
{
instance_black_temple(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
uint32 m_auiEncounter[MAX_ENCOUNTER];
std::string str_data;
uint64 Najentus;
uint64 Akama; // This is the Akama that starts the Illidan encounter.
uint64 Akama_Shade; // This is the Akama that starts the Shade of Akama encounter.
uint64 ShadeOfAkama;
uint64 Supremus;
uint64 LadyMalande;
uint64 GathiosTheShatterer;
uint64 HighNethermancerZerevor;
uint64 VerasDarkshadow;
uint64 IllidariCouncil;
uint64 BloodElfCouncilVoice;
uint64 IllidanStormrage;
uint64 NajentusGate;
uint64 MainTempleDoors;
uint64 ShadeOfAkamaDoor;
uint64 CommonDoor;//Teron
uint64 TeronDoor;
uint64 GuurtogDoor;
uint64 MotherDoor;
uint64 TempleDoor;//Befor mother
uint64 CouncilDoor;
uint64 SimpleDoor;//council
uint64 IllidanGate;
uint64 IllidanDoor[2];
void Initialize()
{
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
Najentus = 0;
Akama = 0;
Akama_Shade = 0;
ShadeOfAkama = 0;
Supremus = 0;
LadyMalande = 0;
GathiosTheShatterer = 0;
HighNethermancerZerevor = 0;
VerasDarkshadow = 0;
IllidariCouncil = 0;
BloodElfCouncilVoice = 0;
IllidanStormrage = 0;
NajentusGate = 0;
MainTempleDoors = 0;
ShadeOfAkamaDoor= 0;
CommonDoor = 0;//teron
TeronDoor = 0;
GuurtogDoor = 0;
MotherDoor = 0;
TempleDoor = 0;
SimpleDoor = 0;//Bycouncil
CouncilDoor = 0;
IllidanGate = 0;
IllidanDoor[0] = 0;
IllidanDoor[1] = 0;
}
bool IsEncounterInProgress() const
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS) return true;
return false;
}
Player* GetPlayerInMap()
{
Map::PlayerList const& players = instance->GetPlayers();
if (!players.isEmpty())
{
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
{
if (Player* plr = itr->getSource())
return plr;
}
}
debug_log("TSCR: Instance Black Temple: GetPlayerInMap, but PlayerList is empty!");
return NULL;
}
void OnCreatureCreate(Creature* pCreature, bool /*add*/)
{
switch(pCreature->GetEntry())
{
case 22887: Najentus = pCreature->GetGUID(); break;
case 23089: Akama = pCreature->GetGUID(); break;
case 22990: Akama_Shade = pCreature->GetGUID(); break;
case 22841: ShadeOfAkama = pCreature->GetGUID(); break;
case 22898: Supremus = pCreature->GetGUID(); break;
case 22917: IllidanStormrage = pCreature->GetGUID(); break;
case 22949: GathiosTheShatterer = pCreature->GetGUID(); break;
case 22950: HighNethermancerZerevor = pCreature->GetGUID(); break;
case 22951: LadyMalande = pCreature->GetGUID(); break;
case 22952: VerasDarkshadow = pCreature->GetGUID(); break;
case 23426: IllidariCouncil = pCreature->GetGUID(); break;
case 23499: BloodElfCouncilVoice = pCreature->GetGUID(); break;
}
}
void OnGameObjectCreate(GameObject* pGo, bool /*add*/)
{
switch(pGo->GetEntry())
{
case 185483: NajentusGate = pGo->GetGUID();// Gate past Naj'entus (at the entrance to Supermoose's courtyards)
if (m_auiEncounter[0] == DONE)HandleGameObject(NULL,true,pGo);break;
case 185882: MainTempleDoors = pGo->GetGUID();// Main Temple Doors - right past Supermoose (Supremus)
if (m_auiEncounter[1] == DONE)HandleGameObject(NULL,true,pGo);break;
case 185478: ShadeOfAkamaDoor = pGo->GetGUID();break;
case 185480: CommonDoor = pGo->GetGUID();
if (m_auiEncounter[3] == DONE)HandleGameObject(NULL,true,pGo);break;
case 186153: TeronDoor = pGo->GetGUID();
if (m_auiEncounter[3] == DONE)HandleGameObject(NULL,true,pGo);break;
case 185892: GuurtogDoor = pGo->GetGUID();
if (m_auiEncounter[4] == DONE)HandleGameObject(NULL,true,pGo);break;
case 185479: TempleDoor = pGo->GetGUID();
if (m_auiEncounter[5] == DONE)HandleGameObject(NULL,true,pGo);break;
case 185482: MotherDoor = pGo->GetGUID();
if (m_auiEncounter[6] == DONE)HandleGameObject(NULL,true,pGo);break;
case 185481: CouncilDoor = pGo->GetGUID();
if (m_auiEncounter[7] == DONE)HandleGameObject(NULL,true,pGo);break;
case 186152: SimpleDoor = pGo->GetGUID();
if (m_auiEncounter[7] == DONE)HandleGameObject(NULL,true,pGo);break;
case 185905: IllidanGate = pGo->GetGUID(); break; // Gate leading to Temple Summit
case 186261: IllidanDoor[0] = pGo->GetGUID(); break; // Right door at Temple Summit
case 186262: IllidanDoor[1] = pGo->GetGUID(); break; // Left door at Temple Summit
}
}
uint64 GetData64(uint32 identifier)
{
switch(identifier)
{
case DATA_HIGHWARLORDNAJENTUS: return Najentus;
case DATA_AKAMA: return Akama;
case DATA_AKAMA_SHADE: return Akama_Shade;
case DATA_SHADEOFAKAMA: return ShadeOfAkama;
case DATA_SUPREMUS: return Supremus;
case DATA_ILLIDANSTORMRAGE: return IllidanStormrage;
case DATA_GATHIOSTHESHATTERER: return GathiosTheShatterer;
case DATA_HIGHNETHERMANCERZEREVOR: return HighNethermancerZerevor;
case DATA_LADYMALANDE: return LadyMalande;
case DATA_VERASDARKSHADOW: return VerasDarkshadow;
case DATA_ILLIDARICOUNCIL: return IllidariCouncil;
case DATA_GAMEOBJECT_NAJENTUS_GATE: return NajentusGate;
case DATA_GAMEOBJECT_ILLIDAN_GATE: return IllidanGate;
case DATA_GAMEOBJECT_ILLIDAN_DOOR_R: return IllidanDoor[0];
case DATA_GAMEOBJECT_ILLIDAN_DOOR_L: return IllidanDoor[1];
case DATA_GAMEOBJECT_SUPREMUS_DOORS: return MainTempleDoors;
case DATA_BLOOD_ELF_COUNCIL_VOICE: return BloodElfCouncilVoice;
}
return 0;
}
void SetData(uint32 type, uint32 data)
{
switch(type)
{
case DATA_HIGHWARLORDNAJENTUSEVENT:
if (data == DONE)
{
HandleGameObject(NajentusGate, true);
}
m_auiEncounter[0] = data;break;
case DATA_SUPREMUSEVENT:
if (data == DONE)
{
HandleGameObject(NajentusGate, true);
}
m_auiEncounter[1] = data; break;
case DATA_SHADEOFAKAMAEVENT:
if (data == IN_PROGRESS)
{
HandleGameObject(ShadeOfAkamaDoor, false);
} else HandleGameObject(ShadeOfAkamaDoor, true);
m_auiEncounter[2] = data; break;
case DATA_TERONGOREFIENDEVENT:
if (data == IN_PROGRESS)
{
HandleGameObject(TeronDoor, false);
HandleGameObject(CommonDoor, false);
}else
{
HandleGameObject(TeronDoor, true);
HandleGameObject(CommonDoor, true);
}
m_auiEncounter[3] = data; break;
case DATA_GURTOGGBLOODBOILEVENT:
if (data == DONE)
{
HandleGameObject(GuurtogDoor, true);
}
m_auiEncounter[4] = data; break;
case DATA_RELIQUARYOFSOULSEVENT:
if (data == DONE)
{
HandleGameObject(TempleDoor, true);
}
m_auiEncounter[5] = data; break;
case DATA_MOTHERSHAHRAZEVENT:
if (data == DONE)
{
HandleGameObject(MotherDoor, true);
}
m_auiEncounter[6] = data; break;
case DATA_ILLIDARICOUNCILEVENT:
if (data == IN_PROGRESS)
{
HandleGameObject(CouncilDoor, false);
HandleGameObject(SimpleDoor, false);
}else
{
HandleGameObject(CouncilDoor, true);
HandleGameObject(SimpleDoor, true);
}
m_auiEncounter[7] = data; break;
case DATA_ILLIDANSTORMRAGEEVENT: m_auiEncounter[8] = data; break;
}
if (data == DONE)
{
OUT_SAVE_INST_DATA;
std::ostringstream saveStream;
saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " "
<< m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4]
<< " " << m_auiEncounter[5] << " " << m_auiEncounter[6] << " " << m_auiEncounter[7]
<< " " << m_auiEncounter[8];
str_data = saveStream.str();
SaveToDB();
OUT_SAVE_INST_DATA_COMPLETE;
}
}
uint32 GetData(uint32 type)
{
switch(type)
{
case DATA_HIGHWARLORDNAJENTUSEVENT: return m_auiEncounter[0];
case DATA_SUPREMUSEVENT: return m_auiEncounter[1];
case DATA_SHADEOFAKAMAEVENT: return m_auiEncounter[2];
case DATA_TERONGOREFIENDEVENT: return m_auiEncounter[3];
case DATA_GURTOGGBLOODBOILEVENT: return m_auiEncounter[4];
case DATA_RELIQUARYOFSOULSEVENT: return m_auiEncounter[5];
case DATA_MOTHERSHAHRAZEVENT: return m_auiEncounter[6];
case DATA_ILLIDARICOUNCILEVENT: return m_auiEncounter[7];
case DATA_ILLIDANSTORMRAGEEVENT: return m_auiEncounter[8];
}
return 0;
}
std::string GetSaveData()
{
return str_data;
}
void Load(const char* in)
{
if (!in)
{
OUT_LOAD_INST_DATA_FAIL;
return;
}
OUT_LOAD_INST_DATA(in);
std::istringstream loadStream(in);
loadStream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2]
>> m_auiEncounter[3] >> m_auiEncounter[4] >> m_auiEncounter[5] >> m_auiEncounter[6]
>> m_auiEncounter[7] >> m_auiEncounter[8];
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
m_auiEncounter[i] = NOT_STARTED;
OUT_LOAD_INST_DATA_COMPLETE;
}
};
InstanceData* GetInstanceData_instance_black_temple(Map* pMap)
{
return new instance_black_temple(pMap);
}
void AddSC_instance_black_temple()
{
Script *newscript;
newscript = new Script;
newscript->Name = "instance_black_temple";
newscript->GetInstanceData = &GetInstanceData_instance_black_temple;
newscript->RegisterSelf();
}