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:
+746
@@ -0,0 +1,746 @@
|
||||
/* 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_Fathomlord_Karathress
|
||||
SD%Complete: 70
|
||||
SDComment: Cyclone workaround
|
||||
SDCategory: Coilfang Resevoir, Serpent Shrine Cavern
|
||||
EndScriptData */
|
||||
|
||||
#include "ScriptedPch.h"
|
||||
#include "serpent_shrine.h"
|
||||
#include "ScriptedEscortAI.h"
|
||||
|
||||
#define SAY_AGGRO -1548021
|
||||
#define SAY_GAIN_BLESSING -1548022
|
||||
#define SAY_GAIN_ABILITY1 -1548023
|
||||
#define SAY_GAIN_ABILITY2 -1548024
|
||||
#define SAY_GAIN_ABILITY3 -1548025
|
||||
#define SAY_SLAY1 -1548026
|
||||
#define SAY_SLAY2 -1548027
|
||||
#define SAY_SLAY3 -1548028
|
||||
#define SAY_DEATH -1548029
|
||||
|
||||
//Karathress spells
|
||||
#define SPELL_CATACLYSMIC_BOLT 38441
|
||||
#define SPELL_POWER_OF_SHARKKIS 38455
|
||||
#define SPELL_POWER_OF_TIDALVESS 38452
|
||||
#define SPELL_POWER_OF_CARIBDIS 38451
|
||||
#define SPELL_ENRAGE 24318
|
||||
#define SPELL_SEAR_NOVA 38445
|
||||
#define SPELL_BLESSING_OF_THE_TIDES 38449
|
||||
|
||||
//Sharkkis spells
|
||||
#define SPELL_LEECHING_THROW 29436
|
||||
#define SPELL_THE_BEAST_WITHIN 38373
|
||||
#define SPELL_MULTISHOT 38366
|
||||
#define SPELL_SUMMON_FATHOM_LURKER 38433
|
||||
#define SPELL_SUMMON_FATHOM_SPOREBAT 38431
|
||||
#define SPELL_PET_ENRAGE 19574
|
||||
|
||||
//Tidalvess spells
|
||||
#define SPELL_FROST_SHOCK 38234
|
||||
#define SPELL_SPITFIRE_TOTEM 38236
|
||||
#define SPELL_POISON_CLEANSING_TOTEM 38306
|
||||
// Spell obsolete
|
||||
// #define SPELL_POISON_CLEANSING_EFFECT 8167
|
||||
#define SPELL_EARTHBIND_TOTEM 38304
|
||||
#define SPELL_EARTHBIND_TOTEM_EFFECT 6474
|
||||
#define SPELL_WINDFURY_WEAPON 38184
|
||||
|
||||
//Caribdis Spells
|
||||
#define SPELL_WATER_BOLT_VOLLEY 38335
|
||||
#define SPELL_TIDAL_SURGE 38358
|
||||
#define SPELL_TIDAL_SURGE_FREEZE 38357
|
||||
#define SPELL_HEAL 38330
|
||||
#define SPELL_SUMMON_CYCLONE 38337
|
||||
#define SPELL_CYCLONE_CYCLONE 29538
|
||||
|
||||
//Yells and Quotes
|
||||
#define SAY_GAIN_BLESSING_OF_TIDES "Your overconfidence will be your undoing! Guards, lend me your strength!"
|
||||
#define SOUND_GAIN_BLESSING_OF_TIDES 11278
|
||||
#define SAY_MISC "Alana be'lendor!" //don't know what use this
|
||||
#define SOUND_MISC 11283
|
||||
|
||||
//Summoned Unit GUIDs
|
||||
#define CREATURE_CYCLONE 22104
|
||||
#define CREATURE_FATHOM_SPOREBAT 22120
|
||||
#define CREATURE_FATHOM_LURKER 22119
|
||||
#define CREATURE_SPITFIRE_TOTEM 22091
|
||||
#define CREATURE_EARTHBIND_TOTEM 22486
|
||||
#define CREATURE_POISON_CLEANSING_TOTEM 22487
|
||||
|
||||
//entry and position for Seer Olum
|
||||
#define SEER_OLUM 22820
|
||||
#define OLUM_X 446.78f
|
||||
#define OLUM_Y -542.76f
|
||||
#define OLUM_Z -7.54773f
|
||||
#define OLUM_O 0.401581f
|
||||
|
||||
//Fathom-Lord Karathress AI
|
||||
struct boss_fathomlord_karathressAI : public ScriptedAI
|
||||
{
|
||||
boss_fathomlord_karathressAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
Advisors[0] = 0;
|
||||
Advisors[1] = 0;
|
||||
Advisors[2] = 0;
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
uint32 CataclysmicBolt_Timer;
|
||||
uint32 Enrage_Timer;
|
||||
uint32 SearNova_Timer;
|
||||
|
||||
bool BlessingOfTides;
|
||||
|
||||
uint64 Advisors[3];
|
||||
|
||||
void Reset()
|
||||
{
|
||||
CataclysmicBolt_Timer = 10000;
|
||||
Enrage_Timer = 600000; //10 minutes
|
||||
SearNova_Timer = 20000+rand()%40000; // 20 - 60 seconds
|
||||
|
||||
BlessingOfTides = false;
|
||||
|
||||
if (pInstance)
|
||||
{
|
||||
uint64 RAdvisors[3];
|
||||
RAdvisors[0] = pInstance->GetData64(DATA_SHARKKIS);
|
||||
RAdvisors[1] = pInstance->GetData64(DATA_TIDALVESS);
|
||||
RAdvisors[2] = pInstance->GetData64(DATA_CARIBDIS);
|
||||
//Respawn of the 3 Advisors
|
||||
Creature* pAdvisor = NULL;
|
||||
for (int i=0; i<3; ++i)
|
||||
|
||||
if (RAdvisors[i])
|
||||
{
|
||||
pAdvisor = (Unit::GetCreature((*me), RAdvisors[i]));
|
||||
if (pAdvisor && !pAdvisor->isAlive())
|
||||
{
|
||||
pAdvisor->Respawn();
|
||||
pAdvisor->AI()->EnterEvadeMode();
|
||||
pAdvisor->GetMotionMaster()->MoveTargetedHome();
|
||||
}
|
||||
}
|
||||
pInstance->SetData(DATA_KARATHRESSEVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void EventSharkkisDeath()
|
||||
{
|
||||
DoScriptText(SAY_GAIN_ABILITY1, me);
|
||||
DoCast(me, SPELL_POWER_OF_SHARKKIS);
|
||||
}
|
||||
|
||||
void EventTidalvessDeath()
|
||||
{
|
||||
DoScriptText(SAY_GAIN_ABILITY2, me);
|
||||
DoCast(me, SPELL_POWER_OF_TIDALVESS);
|
||||
}
|
||||
|
||||
void EventCaribdisDeath()
|
||||
{
|
||||
DoScriptText(SAY_GAIN_ABILITY3, me);
|
||||
DoCast(me, SPELL_POWER_OF_CARIBDIS);
|
||||
}
|
||||
|
||||
void GetAdvisors()
|
||||
{
|
||||
if (!pInstance)
|
||||
return;
|
||||
|
||||
Advisors[0] = pInstance->GetData64(DATA_SHARKKIS);
|
||||
Advisors[1] = pInstance->GetData64(DATA_TIDALVESS);
|
||||
Advisors[2] = pInstance->GetData64(DATA_CARIBDIS);
|
||||
}
|
||||
|
||||
void StartEvent(Unit *who)
|
||||
{
|
||||
if (!pInstance)
|
||||
return;
|
||||
|
||||
GetAdvisors();
|
||||
|
||||
DoScriptText(SAY_AGGRO, me);
|
||||
DoZoneInCombat();
|
||||
|
||||
pInstance->SetData64(DATA_KARATHRESSEVENT_STARTER, who->GetGUID());
|
||||
pInstance->SetData(DATA_KARATHRESSEVENT, IN_PROGRESS);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit * /*victim*/)
|
||||
{
|
||||
DoScriptText(RAND(SAY_SLAY1,SAY_SLAY2,SAY_SLAY3), me);
|
||||
}
|
||||
|
||||
void JustDied(Unit * /*killer*/)
|
||||
{
|
||||
DoScriptText(SAY_DEATH, me);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_FATHOMLORDKARATHRESSEVENT, DONE);
|
||||
|
||||
//support for quest 10944
|
||||
me->SummonCreature(SEER_OLUM, OLUM_X, OLUM_Y, OLUM_Z, OLUM_O, TEMPSUMMON_TIMED_DESPAWN, 3600000);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * who)
|
||||
{
|
||||
StartEvent(who);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Only if not incombat check if the event is started
|
||||
if (!me->isInCombat() && pInstance && pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
{
|
||||
Unit *pTarget = Unit::GetUnit((*me), pInstance->GetData64(DATA_KARATHRESSEVENT_STARTER));
|
||||
|
||||
if (pTarget)
|
||||
{
|
||||
AttackStart(pTarget);
|
||||
GetAdvisors();
|
||||
}
|
||||
}
|
||||
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
//someone evaded!
|
||||
if (pInstance && !pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
{
|
||||
EnterEvadeMode();
|
||||
return;
|
||||
}
|
||||
|
||||
//CataclysmicBolt_Timer
|
||||
if (CataclysmicBolt_Timer <= diff)
|
||||
{
|
||||
//select a random unit other than the main tank
|
||||
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1);
|
||||
|
||||
//if there aren't other units, cast on the tank
|
||||
if (!pTarget)
|
||||
pTarget = me->getVictim();
|
||||
|
||||
if (pTarget)
|
||||
DoCast(pTarget, SPELL_CATACLYSMIC_BOLT);
|
||||
CataclysmicBolt_Timer = 10000;
|
||||
} else CataclysmicBolt_Timer -= diff;
|
||||
|
||||
//SearNova_Timer
|
||||
if (SearNova_Timer <= diff)
|
||||
{
|
||||
DoCast(me->getVictim(), SPELL_SEAR_NOVA);
|
||||
SearNova_Timer = 20000+rand()%40000;
|
||||
} else SearNova_Timer -= diff;
|
||||
|
||||
//Enrage_Timer
|
||||
if (Enrage_Timer <= diff)
|
||||
{
|
||||
DoCast(me, SPELL_ENRAGE);
|
||||
Enrage_Timer = 90000;
|
||||
} else Enrage_Timer -= diff;
|
||||
|
||||
//Blessing of Tides Trigger
|
||||
if ((me->GetHealth()*100 / me->GetMaxHealth()) <= 75 && !BlessingOfTides)
|
||||
{
|
||||
BlessingOfTides = true;
|
||||
bool continueTriggering = false;
|
||||
Creature* Advisor;
|
||||
for (uint8 i = 0; i < 4; ++i)
|
||||
if (Advisors[i])
|
||||
{
|
||||
Advisor = (Unit::GetCreature(*me, Advisors[i]));
|
||||
if (Advisor && Advisor->isAlive())
|
||||
{
|
||||
continueTriggering = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (continueTriggering)
|
||||
{
|
||||
DoCast(me, SPELL_BLESSING_OF_THE_TIDES);
|
||||
me->MonsterYell(SAY_GAIN_BLESSING_OF_TIDES, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(me, SOUND_GAIN_BLESSING_OF_TIDES);
|
||||
}
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
//Fathom-Guard Sharkkis AI
|
||||
struct boss_fathomguard_sharkkisAI : public ScriptedAI
|
||||
{
|
||||
boss_fathomguard_sharkkisAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
uint32 LeechingThrow_Timer;
|
||||
uint32 TheBeastWithin_Timer;
|
||||
uint32 Multishot_Timer;
|
||||
uint32 Pet_Timer;
|
||||
|
||||
bool pet;
|
||||
|
||||
uint64 SummonedPet;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
LeechingThrow_Timer = 20000;
|
||||
TheBeastWithin_Timer = 30000;
|
||||
Multishot_Timer = 15000;
|
||||
Pet_Timer = 10000;
|
||||
|
||||
pet = false;
|
||||
|
||||
Creature *Pet = Unit::GetCreature(*me, SummonedPet);
|
||||
if (Pet && Pet->isAlive())
|
||||
{
|
||||
Pet->DealDamage(Pet, Pet->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
}
|
||||
|
||||
SummonedPet = 0;
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_KARATHRESSEVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
void JustDied(Unit * /*victim*/)
|
||||
{
|
||||
if (pInstance)
|
||||
{
|
||||
Creature *Karathress = NULL;
|
||||
Karathress = (Unit::GetCreature((*me), pInstance->GetData64(DATA_KARATHRESS)));
|
||||
|
||||
if (Karathress)
|
||||
CAST_AI(boss_fathomlord_karathressAI, Karathress->AI())->EventSharkkisDeath();
|
||||
CAST_AI(boss_fathomlord_karathressAI, Karathress->AI())->EventSharkkisDeath();
|
||||
}
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * who)
|
||||
{
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData64(DATA_KARATHRESSEVENT_STARTER, who->GetGUID());
|
||||
pInstance->SetData(DATA_KARATHRESSEVENT, IN_PROGRESS);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Only if not incombat check if the event is started
|
||||
if (!me->isInCombat() && pInstance && pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
{
|
||||
Unit *pTarget = Unit::GetUnit((*me), pInstance->GetData64(DATA_KARATHRESSEVENT_STARTER));
|
||||
|
||||
if (pTarget)
|
||||
{
|
||||
AttackStart(pTarget);
|
||||
}
|
||||
}
|
||||
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
//someone evaded!
|
||||
if (pInstance && !pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
{
|
||||
EnterEvadeMode();
|
||||
return;
|
||||
}
|
||||
|
||||
//LeechingThrow_Timer
|
||||
if (LeechingThrow_Timer <= diff)
|
||||
{
|
||||
DoCast(me->getVictim(), SPELL_LEECHING_THROW);
|
||||
LeechingThrow_Timer = 20000;
|
||||
} else LeechingThrow_Timer -= diff;
|
||||
|
||||
//Multishot_Timer
|
||||
if (Multishot_Timer <= diff)
|
||||
{
|
||||
DoCast(me->getVictim(), SPELL_MULTISHOT);
|
||||
Multishot_Timer = 20000;
|
||||
} else Multishot_Timer -= diff;
|
||||
|
||||
//TheBeastWithin_Timer
|
||||
if (TheBeastWithin_Timer <= diff)
|
||||
{
|
||||
DoCast(me, SPELL_THE_BEAST_WITHIN);
|
||||
Creature *Pet = Unit::GetCreature(*me, SummonedPet);
|
||||
if (Pet && Pet->isAlive())
|
||||
{
|
||||
Pet->CastSpell(Pet, SPELL_PET_ENRAGE, true);
|
||||
}
|
||||
TheBeastWithin_Timer = 30000;
|
||||
} else TheBeastWithin_Timer -= diff;
|
||||
|
||||
//Pet_Timer
|
||||
if (Pet_Timer < diff && pet == false)
|
||||
{
|
||||
pet = true;
|
||||
//uint32 spell_id;
|
||||
uint32 pet_id;
|
||||
if (!urand(0,1))
|
||||
{
|
||||
//spell_id = SPELL_SUMMON_FATHOM_LURKER;
|
||||
pet_id = CREATURE_FATHOM_LURKER;
|
||||
}
|
||||
else
|
||||
{
|
||||
//spell_id = SPELL_SUMMON_FATHOM_SPOREBAT;
|
||||
pet_id = CREATURE_FATHOM_SPOREBAT;
|
||||
}
|
||||
//DoCast(me, spell_id, true);
|
||||
Creature *Pet = DoSpawnCreature(pet_id,0,0,0,0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
if (Pet && pTarget)
|
||||
{
|
||||
Pet->AI()->AttackStart(pTarget);
|
||||
SummonedPet = Pet->GetGUID();
|
||||
}
|
||||
} else Pet_Timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
//Fathom-Guard Tidalvess AI
|
||||
struct boss_fathomguard_tidalvessAI : public ScriptedAI
|
||||
{
|
||||
boss_fathomguard_tidalvessAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
uint32 FrostShock_Timer;
|
||||
uint32 Spitfire_Timer;
|
||||
uint32 PoisonCleansing_Timer;
|
||||
uint32 Earthbind_Timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
FrostShock_Timer = 25000;
|
||||
Spitfire_Timer = 60000;
|
||||
PoisonCleansing_Timer = 30000;
|
||||
Earthbind_Timer = 45000;
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_KARATHRESSEVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
void JustDied(Unit * /*victim*/)
|
||||
{
|
||||
if (pInstance)
|
||||
{
|
||||
Creature *Karathress = NULL;
|
||||
Karathress = (Unit::GetCreature((*me), pInstance->GetData64(DATA_KARATHRESS)));
|
||||
|
||||
if (Karathress)
|
||||
if (!me->isAlive() && Karathress)
|
||||
CAST_AI(boss_fathomlord_karathressAI, Karathress->AI())->EventTidalvessDeath();
|
||||
}
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * who)
|
||||
{
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData64(DATA_KARATHRESSEVENT_STARTER, who->GetGUID());
|
||||
pInstance->SetData(DATA_KARATHRESSEVENT, IN_PROGRESS);
|
||||
}
|
||||
DoCast(me, SPELL_WINDFURY_WEAPON);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Only if not incombat check if the event is started
|
||||
if (!me->isInCombat() && pInstance && pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
{
|
||||
Unit *pTarget = Unit::GetUnit((*me), pInstance->GetData64(DATA_KARATHRESSEVENT_STARTER));
|
||||
|
||||
if (pTarget)
|
||||
{
|
||||
AttackStart(pTarget);
|
||||
}
|
||||
}
|
||||
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
//someone evaded!
|
||||
if (pInstance && !pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
{
|
||||
EnterEvadeMode();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!me->HasAura(SPELL_WINDFURY_WEAPON))
|
||||
{
|
||||
DoCast(me, SPELL_WINDFURY_WEAPON);
|
||||
}
|
||||
|
||||
//FrostShock_Timer
|
||||
if (FrostShock_Timer <= diff)
|
||||
{
|
||||
DoCast(me->getVictim(), SPELL_FROST_SHOCK);
|
||||
FrostShock_Timer = 25000+rand()%5000;
|
||||
} else FrostShock_Timer -= diff;
|
||||
|
||||
//Spitfire_Timer
|
||||
if (Spitfire_Timer <= diff)
|
||||
{
|
||||
DoCast(me, SPELL_SPITFIRE_TOTEM);
|
||||
Unit *SpitfireTotem = Unit::GetUnit(*me, CREATURE_SPITFIRE_TOTEM);
|
||||
if (SpitfireTotem)
|
||||
{
|
||||
CAST_CRE(SpitfireTotem)->AI()->AttackStart(me->getVictim());
|
||||
}
|
||||
Spitfire_Timer = 60000;
|
||||
} else Spitfire_Timer -= diff;
|
||||
|
||||
//PoisonCleansing_Timer
|
||||
if (PoisonCleansing_Timer <= diff)
|
||||
{
|
||||
DoCast(me, SPELL_POISON_CLEANSING_TOTEM);
|
||||
PoisonCleansing_Timer = 30000;
|
||||
} else PoisonCleansing_Timer -= diff;
|
||||
|
||||
//Earthbind_Timer
|
||||
if (Earthbind_Timer <= diff)
|
||||
{
|
||||
DoCast(me, SPELL_EARTHBIND_TOTEM);
|
||||
Earthbind_Timer = 45000;
|
||||
} else Earthbind_Timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
//Fathom-Guard Caribdis AI
|
||||
struct boss_fathomguard_caribdisAI : public ScriptedAI
|
||||
{
|
||||
boss_fathomguard_caribdisAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
uint32 WaterBoltVolley_Timer;
|
||||
uint32 TidalSurge_Timer;
|
||||
uint32 Heal_Timer;
|
||||
uint32 Cyclone_Timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
WaterBoltVolley_Timer = 35000;
|
||||
TidalSurge_Timer = 15000+rand()%5000;
|
||||
Heal_Timer = 55000;
|
||||
Cyclone_Timer = 30000+rand()%10000;
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_KARATHRESSEVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
void JustDied(Unit * /*victim*/)
|
||||
{
|
||||
if (pInstance)
|
||||
{
|
||||
Creature *Karathress = NULL;
|
||||
Karathress = (Unit::GetCreature((*me), pInstance->GetData64(DATA_KARATHRESS)));
|
||||
|
||||
if (Karathress)
|
||||
if (!me->isAlive() && Karathress)
|
||||
CAST_AI(boss_fathomlord_karathressAI, Karathress->AI())->EventCaribdisDeath();
|
||||
}
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * who)
|
||||
{
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData64(DATA_KARATHRESSEVENT_STARTER, who->GetGUID());
|
||||
pInstance->SetData(DATA_KARATHRESSEVENT, IN_PROGRESS);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Only if not incombat check if the event is started
|
||||
if (!me->isInCombat() && pInstance && pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
{
|
||||
Unit *pTarget = Unit::GetUnit((*me), pInstance->GetData64(DATA_KARATHRESSEVENT_STARTER));
|
||||
|
||||
if (pTarget)
|
||||
{
|
||||
AttackStart(pTarget);
|
||||
}
|
||||
}
|
||||
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
//someone evaded!
|
||||
if (pInstance && !pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
{
|
||||
EnterEvadeMode();
|
||||
return;
|
||||
}
|
||||
|
||||
//WaterBoltVolley_Timer
|
||||
if (WaterBoltVolley_Timer <= diff)
|
||||
{
|
||||
DoCast(me->getVictim(), SPELL_WATER_BOLT_VOLLEY);
|
||||
WaterBoltVolley_Timer = 30000;
|
||||
} else WaterBoltVolley_Timer -= diff;
|
||||
|
||||
//TidalSurge_Timer
|
||||
if (TidalSurge_Timer <= diff)
|
||||
{
|
||||
DoCast(me->getVictim(), SPELL_TIDAL_SURGE);
|
||||
// Hacky way to do it - won't trigger elseways
|
||||
me->getVictim()->CastSpell(me->getVictim(), SPELL_TIDAL_SURGE_FREEZE, true);
|
||||
TidalSurge_Timer = 15000+rand()%5000;
|
||||
} else TidalSurge_Timer -= diff;
|
||||
|
||||
//Cyclone_Timer
|
||||
if (Cyclone_Timer <= diff)
|
||||
{
|
||||
//DoCast(me, SPELL_SUMMON_CYCLONE); // Doesn't work
|
||||
Cyclone_Timer = 30000+rand()%10000;
|
||||
Creature *Cyclone = me->SummonCreature(CREATURE_CYCLONE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), (rand()%5), TEMPSUMMON_TIMED_DESPAWN, 15000);
|
||||
if (Cyclone)
|
||||
{
|
||||
CAST_CRE(Cyclone)->SetFloatValue(OBJECT_FIELD_SCALE_X, 3.0f);
|
||||
Cyclone->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
Cyclone->setFaction(me->getFaction());
|
||||
Cyclone->CastSpell(Cyclone, SPELL_CYCLONE_CYCLONE, true);
|
||||
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
if (pTarget)
|
||||
{
|
||||
Cyclone->AI()->AttackStart(pTarget);
|
||||
}
|
||||
}
|
||||
} else Cyclone_Timer -= diff;
|
||||
|
||||
//Heal_Timer
|
||||
if (Heal_Timer <= diff)
|
||||
{
|
||||
// It can be cast on any of the mobs
|
||||
Unit *pUnit = NULL;
|
||||
|
||||
while (pUnit == NULL || !pUnit->isAlive())
|
||||
{
|
||||
pUnit = selectAdvisorUnit();
|
||||
}
|
||||
|
||||
if (pUnit && pUnit->isAlive())
|
||||
DoCast(pUnit, SPELL_HEAL);
|
||||
Heal_Timer = 60000;
|
||||
} else Heal_Timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
Unit* selectAdvisorUnit()
|
||||
{
|
||||
Unit* pUnit = NULL;
|
||||
if (pInstance)
|
||||
{
|
||||
switch(rand()%4)
|
||||
{
|
||||
case 0:
|
||||
pUnit = Unit::GetUnit((*me), pInstance->GetData64(DATA_KARATHRESS));
|
||||
break;
|
||||
case 1:
|
||||
pUnit = Unit::GetUnit((*me), pInstance->GetData64(DATA_SHARKKIS));
|
||||
break;
|
||||
case 2:
|
||||
pUnit = Unit::GetUnit((*me), pInstance->GetData64(DATA_TIDALVESS));
|
||||
break;
|
||||
case 3:
|
||||
pUnit = me;
|
||||
break;
|
||||
}
|
||||
} else pUnit = me;
|
||||
|
||||
return pUnit;
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_boss_fathomlord_karathress(Creature* pCreature)
|
||||
{
|
||||
return new boss_fathomlord_karathressAI (pCreature);
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_boss_fathomguard_sharkkis(Creature* pCreature)
|
||||
{
|
||||
return new boss_fathomguard_sharkkisAI (pCreature);
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_boss_fathomguard_tidalvess(Creature* pCreature)
|
||||
{
|
||||
return new boss_fathomguard_tidalvessAI (pCreature);
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_boss_fathomguard_caribdis(Creature* pCreature)
|
||||
{
|
||||
return new boss_fathomguard_caribdisAI (pCreature);
|
||||
}
|
||||
|
||||
void AddSC_boss_fathomlord_karathress()
|
||||
{
|
||||
Script *newscript;
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_fathomlord_karathress";
|
||||
newscript->GetAI = &GetAI_boss_fathomlord_karathress;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_fathomguard_sharkkis";
|
||||
newscript->GetAI = &GetAI_boss_fathomguard_sharkkis;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_fathomguard_tidalvess";
|
||||
newscript->GetAI = &GetAI_boss_fathomguard_tidalvess;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_fathomguard_caribdis";
|
||||
newscript->GetAI = &GetAI_boss_fathomguard_caribdis;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
+379
@@ -0,0 +1,379 @@
|
||||
/* 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_Hydross_The_Unstable
|
||||
SD%Complete: 90
|
||||
SDComment: Some details and adjustments left to do, probably nothing major. Spawns may be spawned in different way/location.
|
||||
SDCategory: Coilfang Resevoir, Serpent Shrine Cavern
|
||||
EndScriptData */
|
||||
|
||||
#include "ScriptedPch.h"
|
||||
#include "serpent_shrine.h"
|
||||
|
||||
#define SAY_AGGRO -1548000
|
||||
#define SAY_SWITCH_TO_CLEAN -1548001
|
||||
#define SAY_CLEAN_SLAY1 -1548002
|
||||
#define SAY_CLEAN_SLAY2 -1548003
|
||||
#define SAY_CLEAN_DEATH -1548004
|
||||
#define SAY_SWITCH_TO_CORRUPT -1548005
|
||||
#define SAY_CORRUPT_SLAY1 -1548006
|
||||
#define SAY_CORRUPT_SLAY2 -1548007
|
||||
#define SAY_CORRUPT_DEATH -1548008
|
||||
|
||||
#define SWITCH_RADIUS 18
|
||||
|
||||
#define MODEL_CORRUPT 20609
|
||||
#define MODEL_CLEAN 20162
|
||||
|
||||
#define SPELL_WATER_TOMB 38235
|
||||
#define SPELL_MARK_OF_HYDROSS1 38215
|
||||
#define SPELL_MARK_OF_HYDROSS2 38216
|
||||
#define SPELL_MARK_OF_HYDROSS3 38217
|
||||
#define SPELL_MARK_OF_HYDROSS4 38218
|
||||
#define SPELL_MARK_OF_HYDROSS5 38231
|
||||
#define SPELL_MARK_OF_HYDROSS6 40584
|
||||
#define SPELL_MARK_OF_CORRUPTION1 38219
|
||||
#define SPELL_MARK_OF_CORRUPTION2 38220
|
||||
#define SPELL_MARK_OF_CORRUPTION3 38221
|
||||
#define SPELL_MARK_OF_CORRUPTION4 38222
|
||||
#define SPELL_MARK_OF_CORRUPTION5 38230
|
||||
#define SPELL_MARK_OF_CORRUPTION6 40583
|
||||
#define SPELL_VILE_SLUDGE 38246
|
||||
#define SPELL_ENRAGE 27680 //this spell need verification
|
||||
#define SPELL_SUMMON_WATER_ELEMENT 36459 //not in use yet(in use ever?)
|
||||
#define SPELL_ELEMENTAL_SPAWNIN 25035
|
||||
#define SPELL_BLUE_BEAM 40227 //channeled Hydross Beam Helper (not in use yet)
|
||||
|
||||
#define ENTRY_PURE_SPAWN 22035
|
||||
#define ENTRY_TAINTED_SPAWN 22036
|
||||
#define ENTRY_BEAM_DUMMY 21934
|
||||
|
||||
#define HYDROSS_X -239.439
|
||||
#define HYDROSS_Y -363.481
|
||||
|
||||
#define SPAWN_X_DIFF1 6.934003
|
||||
#define SPAWN_Y_DIFF1 -11.255012
|
||||
#define SPAWN_X_DIFF2 -6.934003
|
||||
#define SPAWN_Y_DIFF2 11.255012
|
||||
#define SPAWN_X_DIFF3 -12.577011
|
||||
#define SPAWN_Y_DIFF3 -4.72702
|
||||
#define SPAWN_X_DIFF4 12.577011
|
||||
#define SPAWN_Y_DIFF4 4.72702
|
||||
|
||||
struct boss_hydross_the_unstableAI : public ScriptedAI
|
||||
{
|
||||
boss_hydross_the_unstableAI(Creature *c) : ScriptedAI(c), Summons(me)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
uint64 beams[2];
|
||||
uint32 PosCheck_Timer;
|
||||
uint32 MarkOfHydross_Timer;
|
||||
uint32 MarkOfCorruption_Timer;
|
||||
uint32 WaterTomb_Timer;
|
||||
uint32 VileSludge_Timer;
|
||||
uint32 MarkOfHydross_Count;
|
||||
uint32 MarkOfCorruption_Count;
|
||||
uint32 EnrageTimer;
|
||||
bool CorruptedForm;
|
||||
bool beam;
|
||||
SummonList Summons;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
DeSummonBeams();
|
||||
beams[0] = 0;
|
||||
beams[1] = 0;
|
||||
PosCheck_Timer = 2500;
|
||||
MarkOfHydross_Timer = 15000;
|
||||
MarkOfCorruption_Timer = 15000;
|
||||
WaterTomb_Timer = 7000;
|
||||
VileSludge_Timer = 7000;
|
||||
MarkOfHydross_Count = 0;
|
||||
MarkOfCorruption_Count = 0;
|
||||
EnrageTimer = 600000;
|
||||
|
||||
CorruptedForm = false;
|
||||
me->SetMeleeDamageSchool(SPELL_SCHOOL_FROST);
|
||||
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true);
|
||||
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false);
|
||||
|
||||
me->SetDisplayId(MODEL_CLEAN);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, NOT_STARTED);
|
||||
beam = false;
|
||||
Summons.DespawnAll();
|
||||
}
|
||||
|
||||
void SummonBeams()
|
||||
{
|
||||
Creature* beamer = me->SummonCreature(ENTRY_BEAM_DUMMY,-258.333,-356.34,22.0499,5.90835,TEMPSUMMON_CORPSE_DESPAWN,0);
|
||||
if (beamer)
|
||||
{
|
||||
beamer->CastSpell(me,SPELL_BLUE_BEAM,true);
|
||||
beamer->SetDisplayId(11686); //invisible
|
||||
beamer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
beams[0]=beamer->GetGUID();
|
||||
}
|
||||
beamer = beamer = me->SummonCreature(ENTRY_BEAM_DUMMY,-219.918,-371.308,22.0042,2.73072,TEMPSUMMON_CORPSE_DESPAWN,0);
|
||||
if (beamer)
|
||||
{
|
||||
beamer->CastSpell(me,SPELL_BLUE_BEAM,true);
|
||||
beamer->SetDisplayId(11686); //invisible
|
||||
beamer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
beams[1]=beamer->GetGUID();
|
||||
}
|
||||
}
|
||||
void DeSummonBeams()
|
||||
{
|
||||
for (uint8 i=0; i<2; ++i)
|
||||
{
|
||||
Creature* mob = Unit::GetCreature(*me,beams[i]);
|
||||
if (mob)
|
||||
{
|
||||
mob->setDeathState(DEAD);
|
||||
mob->RemoveCorpse();
|
||||
}
|
||||
}
|
||||
}
|
||||
void EnterCombat(Unit * /*who*/)
|
||||
{
|
||||
DoScriptText(SAY_AGGRO, me);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, IN_PROGRESS);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit * /*victim*/)
|
||||
{
|
||||
if (CorruptedForm)
|
||||
{
|
||||
DoScriptText(RAND(SAY_CORRUPT_SLAY1,SAY_CORRUPT_SLAY2), me);
|
||||
}
|
||||
else
|
||||
{
|
||||
DoScriptText(RAND(SAY_CLEAN_SLAY1,SAY_CLEAN_SLAY2), me);
|
||||
}
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summoned)
|
||||
{
|
||||
if (summoned->GetEntry() == ENTRY_PURE_SPAWN)
|
||||
{
|
||||
summoned->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true);
|
||||
summoned->CastSpell(summoned,SPELL_ELEMENTAL_SPAWNIN,true);
|
||||
Summons.Summon(summoned);
|
||||
}
|
||||
if (summoned->GetEntry() == ENTRY_TAINTED_SPAWN)
|
||||
{
|
||||
summoned->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true);
|
||||
summoned->CastSpell(summoned,SPELL_ELEMENTAL_SPAWNIN,true);
|
||||
Summons.Summon(summoned);
|
||||
}
|
||||
}
|
||||
|
||||
void SummonedCreatureDespawn(Creature *summon)
|
||||
{
|
||||
Summons.Despawn(summon);
|
||||
}
|
||||
|
||||
void JustDied(Unit * /*victim*/)
|
||||
{
|
||||
if (CorruptedForm)
|
||||
DoScriptText(SAY_CORRUPT_DEATH, me);
|
||||
else
|
||||
DoScriptText(SAY_CLEAN_DEATH, me);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, DONE);
|
||||
Summons.DespawnAll();
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!beam)
|
||||
{
|
||||
SummonBeams();
|
||||
beam=true;
|
||||
}
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
// corrupted form
|
||||
if (CorruptedForm)
|
||||
{
|
||||
//MarkOfCorruption_Timer
|
||||
if (MarkOfCorruption_Timer <= diff)
|
||||
{
|
||||
if (MarkOfCorruption_Count <= 5)
|
||||
{
|
||||
uint32 mark_spell = 0;
|
||||
|
||||
switch (MarkOfCorruption_Count)
|
||||
{
|
||||
case 0: mark_spell = SPELL_MARK_OF_CORRUPTION1; break;
|
||||
case 1: mark_spell = SPELL_MARK_OF_CORRUPTION2; break;
|
||||
case 2: mark_spell = SPELL_MARK_OF_CORRUPTION3; break;
|
||||
case 3: mark_spell = SPELL_MARK_OF_CORRUPTION4; break;
|
||||
case 4: mark_spell = SPELL_MARK_OF_CORRUPTION5; break;
|
||||
case 5: mark_spell = SPELL_MARK_OF_CORRUPTION6; break;
|
||||
}
|
||||
|
||||
DoCast(me->getVictim(), mark_spell);
|
||||
|
||||
if (MarkOfCorruption_Count < 5)
|
||||
++MarkOfCorruption_Count;
|
||||
}
|
||||
|
||||
MarkOfCorruption_Timer = 15000;
|
||||
} else MarkOfCorruption_Timer -= diff;
|
||||
|
||||
//VileSludge_Timer
|
||||
if (VileSludge_Timer <= diff)
|
||||
{
|
||||
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
if (pTarget)
|
||||
DoCast(pTarget, SPELL_VILE_SLUDGE);
|
||||
|
||||
VileSludge_Timer = 15000;
|
||||
} else VileSludge_Timer -= diff;
|
||||
|
||||
//PosCheck_Timer
|
||||
if (PosCheck_Timer <= diff)
|
||||
{
|
||||
if (me->IsWithinDist2d(HYDROSS_X, HYDROSS_Y, SWITCH_RADIUS))
|
||||
{
|
||||
// switch to clean form
|
||||
me->SetDisplayId(MODEL_CLEAN);
|
||||
CorruptedForm = false;
|
||||
MarkOfHydross_Count = 0;
|
||||
|
||||
DoScriptText(SAY_SWITCH_TO_CLEAN, me);
|
||||
DoResetThreat();
|
||||
SummonBeams();
|
||||
|
||||
// spawn 4 adds
|
||||
DoSpawnCreature(ENTRY_PURE_SPAWN, SPAWN_X_DIFF1, SPAWN_Y_DIFF1, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
DoSpawnCreature(ENTRY_PURE_SPAWN, SPAWN_X_DIFF2, SPAWN_Y_DIFF2, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
DoSpawnCreature(ENTRY_PURE_SPAWN, SPAWN_X_DIFF3, SPAWN_Y_DIFF3, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
DoSpawnCreature(ENTRY_PURE_SPAWN, SPAWN_X_DIFF4, SPAWN_Y_DIFF4, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
|
||||
me->SetMeleeDamageSchool(SPELL_SCHOOL_FROST);
|
||||
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true);
|
||||
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false);
|
||||
}
|
||||
|
||||
PosCheck_Timer = 2500;
|
||||
} else PosCheck_Timer -=diff;
|
||||
}
|
||||
// clean form
|
||||
else
|
||||
{
|
||||
//MarkOfHydross_Timer
|
||||
if (MarkOfHydross_Timer <= diff)
|
||||
{
|
||||
if (MarkOfHydross_Count <= 5)
|
||||
{
|
||||
uint32 mark_spell = NULL;
|
||||
|
||||
switch(MarkOfHydross_Count)
|
||||
{
|
||||
case 0: mark_spell = SPELL_MARK_OF_HYDROSS1; break;
|
||||
case 1: mark_spell = SPELL_MARK_OF_HYDROSS2; break;
|
||||
case 2: mark_spell = SPELL_MARK_OF_HYDROSS3; break;
|
||||
case 3: mark_spell = SPELL_MARK_OF_HYDROSS4; break;
|
||||
case 4: mark_spell = SPELL_MARK_OF_HYDROSS5; break;
|
||||
case 5: mark_spell = SPELL_MARK_OF_HYDROSS6; break;
|
||||
}
|
||||
|
||||
DoCast(me->getVictim(), mark_spell);
|
||||
|
||||
if (MarkOfHydross_Count < 5)
|
||||
++MarkOfHydross_Count;
|
||||
}
|
||||
|
||||
MarkOfHydross_Timer = 15000;
|
||||
} else MarkOfHydross_Timer -= diff;
|
||||
|
||||
//WaterTomb_Timer
|
||||
if (WaterTomb_Timer <= diff)
|
||||
{
|
||||
Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
|
||||
if (pTarget)
|
||||
DoCast(pTarget, SPELL_WATER_TOMB);
|
||||
|
||||
WaterTomb_Timer = 7000;
|
||||
} else WaterTomb_Timer -= diff;
|
||||
|
||||
//PosCheck_Timer
|
||||
if (PosCheck_Timer <= diff)
|
||||
{
|
||||
if (!me->IsWithinDist2d(HYDROSS_X, HYDROSS_Y, SWITCH_RADIUS))
|
||||
{
|
||||
// switch to corrupted form
|
||||
me->SetDisplayId(MODEL_CORRUPT);
|
||||
MarkOfCorruption_Count = 0;
|
||||
CorruptedForm = true;
|
||||
|
||||
DoScriptText(SAY_SWITCH_TO_CORRUPT, me);
|
||||
DoResetThreat();
|
||||
DeSummonBeams();
|
||||
|
||||
// spawn 4 adds
|
||||
DoSpawnCreature(ENTRY_TAINTED_SPAWN, SPAWN_X_DIFF1, SPAWN_Y_DIFF1, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
DoSpawnCreature(ENTRY_TAINTED_SPAWN, SPAWN_X_DIFF2, SPAWN_Y_DIFF2, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
DoSpawnCreature(ENTRY_TAINTED_SPAWN, SPAWN_X_DIFF3, SPAWN_Y_DIFF3, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
DoSpawnCreature(ENTRY_TAINTED_SPAWN, SPAWN_X_DIFF4, SPAWN_Y_DIFF4, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
|
||||
me->SetMeleeDamageSchool(SPELL_SCHOOL_NATURE);
|
||||
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true);
|
||||
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, false);
|
||||
}
|
||||
|
||||
PosCheck_Timer = 2500;
|
||||
} else PosCheck_Timer -=diff;
|
||||
}
|
||||
|
||||
//EnrageTimer
|
||||
if (EnrageTimer <= diff)
|
||||
{
|
||||
DoCast(me, SPELL_ENRAGE);
|
||||
EnrageTimer = 60000;
|
||||
} else EnrageTimer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
CreatureAI* GetAI_boss_hydross_the_unstable(Creature* pCreature)
|
||||
{
|
||||
return new boss_hydross_the_unstableAI (pCreature);
|
||||
}
|
||||
|
||||
void AddSC_boss_hydross_the_unstable()
|
||||
{
|
||||
Script *newscript;
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_hydross_the_unstable";
|
||||
newscript->GetAI = &GetAI_boss_hydross_the_unstable;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+787
@@ -0,0 +1,787 @@
|
||||
/* 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_Leotheras_The_Blind
|
||||
SD%Complete: 80
|
||||
SDComment: Possesion Support
|
||||
SDCategory: Coilfang Resevoir, Serpent Shrine Cavern
|
||||
EndScriptData */
|
||||
|
||||
#include "ScriptedPch.h"
|
||||
#include "serpent_shrine.h"
|
||||
|
||||
// --- Spells used by Leotheras The Blind
|
||||
#define SPELL_WHIRLWIND 37640
|
||||
#define SPELL_CHAOS_BLAST 37674
|
||||
#define SPELL_BERSERK 26662
|
||||
#define SPELL_INSIDIOUS_WHISPER 37676
|
||||
#define SPELL_DUAL_WIELD 42459
|
||||
|
||||
// --- Spells used in banish phase ---
|
||||
#define BANISH_BEAM 38909
|
||||
#define AURA_BANISH 37833
|
||||
|
||||
// --- Spells used by Greyheart Spellbinders
|
||||
#define SPELL_EARTHSHOCK 39076
|
||||
#define SPELL_MINDBLAST 37531
|
||||
|
||||
// --- Spells used by Inner Demons and Creature ID
|
||||
#define INNER_DEMON_ID 21857
|
||||
#define AURA_DEMONIC_ALIGNMENT 37713
|
||||
#define SPELL_SHADOWBOLT 39309
|
||||
#define SPELL_SOUL_LINK 38007
|
||||
#define SPELL_CONSUMING_MADNESS 37749 //not supported by core yet
|
||||
|
||||
//Misc.
|
||||
#define MODEL_DEMON 20125
|
||||
#define MODEL_NIGHTELF 20514
|
||||
#define DEMON_FORM 21875
|
||||
#define MOB_SPELLBINDER 21806
|
||||
|
||||
#define SAY_AGGRO -1548009
|
||||
#define SAY_SWITCH_TO_DEMON -1548010
|
||||
#define SAY_INNER_DEMONS -1548011
|
||||
#define SAY_DEMON_SLAY1 -1548012
|
||||
#define SAY_DEMON_SLAY2 -1548013
|
||||
#define SAY_DEMON_SLAY3 -1548014
|
||||
#define SAY_NIGHTELF_SLAY1 -1548015
|
||||
#define SAY_NIGHTELF_SLAY2 -1548016
|
||||
#define SAY_NIGHTELF_SLAY3 -1548017
|
||||
#define SAY_FINAL_FORM -1548018
|
||||
#define SAY_FREE -1548019
|
||||
#define SAY_DEATH -1548020
|
||||
|
||||
struct mob_inner_demonAI : public ScriptedAI
|
||||
{
|
||||
mob_inner_demonAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
victimGUID = 0;
|
||||
}
|
||||
|
||||
uint32 ShadowBolt_Timer;
|
||||
|
||||
uint32 Link_Timer;
|
||||
uint64 victimGUID;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
ShadowBolt_Timer = 10000;
|
||||
Link_Timer = 1000;
|
||||
}
|
||||
void JustDied(Unit * /*victim*/)
|
||||
{
|
||||
Unit* pUnit = Unit::GetUnit((*me),victimGUID);
|
||||
if (pUnit && pUnit->HasAura(SPELL_INSIDIOUS_WHISPER))
|
||||
pUnit->RemoveAurasDueToSpell(SPELL_INSIDIOUS_WHISPER);
|
||||
}
|
||||
|
||||
void DamageTaken(Unit *done_by, uint32 &damage)
|
||||
{
|
||||
if (done_by->GetGUID() != victimGUID && done_by->GetGUID() != me->GetGUID())
|
||||
{
|
||||
damage = 0;
|
||||
DoModifyThreatPercent(done_by, -100);
|
||||
}
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/)
|
||||
{
|
||||
if (!victimGUID) return;
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (me->getVictim()->GetGUID() != victimGUID)
|
||||
{
|
||||
DoModifyThreatPercent(me->getVictim(), -100);
|
||||
Unit* owner = Unit::GetUnit((*me),victimGUID);
|
||||
if (owner && owner->isAlive())
|
||||
{
|
||||
me->AddThreat(owner,999999);
|
||||
AttackStart(owner);
|
||||
} else if (owner && owner->isDead())
|
||||
{
|
||||
me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (Link_Timer <= diff)
|
||||
{
|
||||
DoCast(me->getVictim(), SPELL_SOUL_LINK, true);
|
||||
Link_Timer = 1000;
|
||||
} else Link_Timer -= diff;
|
||||
|
||||
if (!me->HasAura(AURA_DEMONIC_ALIGNMENT))
|
||||
DoCast(me, AURA_DEMONIC_ALIGNMENT, true);
|
||||
|
||||
if (ShadowBolt_Timer <= diff)
|
||||
{
|
||||
DoCast(me->getVictim(), SPELL_SHADOWBOLT, false);
|
||||
ShadowBolt_Timer = 10000;
|
||||
} else ShadowBolt_Timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
//Original Leotheras the Blind AI
|
||||
struct boss_leotheras_the_blindAI : public ScriptedAI
|
||||
{
|
||||
boss_leotheras_the_blindAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
c->GetPosition(x,y,z);
|
||||
pInstance = c->GetInstanceData();
|
||||
Demon = 0;
|
||||
|
||||
for (uint8 i = 0; i < 3; ++i)//clear guids
|
||||
SpellBinderGUID[i] = 0;
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
uint32 Whirlwind_Timer;
|
||||
uint32 ChaosBlast_Timer;
|
||||
uint32 SwitchToDemon_Timer;
|
||||
uint32 SwitchToHuman_Timer;
|
||||
uint32 Berserk_Timer;
|
||||
uint32 InnerDemons_Timer;
|
||||
uint32 BanishTimer;
|
||||
|
||||
bool DealDamage;
|
||||
bool NeedThreatReset;
|
||||
bool DemonForm;
|
||||
bool IsFinalForm;
|
||||
bool EnrageUsed;
|
||||
float x,y,z;
|
||||
|
||||
uint64 InnderDemon[5];
|
||||
uint32 InnerDemon_Count;
|
||||
uint64 Demon;
|
||||
uint64 SpellBinderGUID[3];
|
||||
|
||||
void Reset()
|
||||
{
|
||||
CheckChannelers();
|
||||
BanishTimer = 1000;
|
||||
Whirlwind_Timer = 15000;
|
||||
ChaosBlast_Timer = 1000;
|
||||
SwitchToDemon_Timer = 45000;
|
||||
SwitchToHuman_Timer = 60000;
|
||||
Berserk_Timer = 600000;
|
||||
InnerDemons_Timer = 30000;
|
||||
me->SetCanDualWield(true);
|
||||
DealDamage = true;
|
||||
DemonForm = false;
|
||||
IsFinalForm = false;
|
||||
NeedThreatReset = false;
|
||||
EnrageUsed = false;
|
||||
InnerDemon_Count = 0;
|
||||
me->SetSpeed(MOVE_RUN, 2.0f, true);
|
||||
me->SetDisplayId(MODEL_NIGHTELF);
|
||||
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID , 0);
|
||||
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID+1, 0);
|
||||
DoCast(me, SPELL_DUAL_WIELD, true);
|
||||
me->SetCorpseDelay(1000*60*60);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_LEOTHERASTHEBLINDEVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
void CheckChannelers(/*bool DoEvade = true*/)
|
||||
{
|
||||
for (uint8 i = 0; i < 3; ++i)
|
||||
{
|
||||
if (Creature *add = Unit::GetCreature(*me,SpellBinderGUID[i]))
|
||||
add->DisappearAndDie();
|
||||
|
||||
float nx = x;
|
||||
float ny = y;
|
||||
float o = 2.4f;
|
||||
if (i == 0) {nx += 10; ny -= 5; o=2.5f;}
|
||||
if (i == 1) {nx -= 8; ny -= 7; o=0.9f;}
|
||||
if (i == 2) {nx -= 3; ny += 9; o=5.0f;}
|
||||
Creature* binder = me->SummonCreature(MOB_SPELLBINDER,nx,ny,z,o,TEMPSUMMON_DEAD_DESPAWN,0);
|
||||
if (binder)
|
||||
SpellBinderGUID[i] = binder->GetGUID();
|
||||
|
||||
}
|
||||
}
|
||||
void MoveInLineOfSight(Unit *who)
|
||||
{
|
||||
if (me->HasAura(AURA_BANISH))
|
||||
return;
|
||||
|
||||
if (!me->getVictim() && who->isTargetableForAttack() && (me->IsHostileTo(who)) && who->isInAccessiblePlaceFor(me))
|
||||
{
|
||||
if (me->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
|
||||
return;
|
||||
|
||||
float attackRadius = me->GetAttackDistance(who);
|
||||
if (me->IsWithinDistInMap(who, attackRadius))
|
||||
{
|
||||
// Check first that object is in an angle in front of this one before LoS check
|
||||
if (me->HasInArc(M_PI/2.0f, who) && me->IsWithinLOSInMap(who))
|
||||
{
|
||||
AttackStart(who);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void StartEvent()
|
||||
{
|
||||
DoScriptText(SAY_AGGRO, me);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_LEOTHERASTHEBLINDEVENT, IN_PROGRESS);
|
||||
}
|
||||
|
||||
void CheckBanish()
|
||||
{
|
||||
uint8 AliveChannelers = 0;
|
||||
for (uint8 i = 0; i < 3; ++i)
|
||||
{
|
||||
Unit *add = Unit::GetUnit(*me,SpellBinderGUID[i]);
|
||||
if (add && add->isAlive())
|
||||
++AliveChannelers;
|
||||
}
|
||||
|
||||
// channelers == 0 remove banish aura
|
||||
if (AliveChannelers == 0 && me->HasAura(AURA_BANISH))
|
||||
{
|
||||
// removing banish aura
|
||||
me->RemoveAurasDueToSpell(AURA_BANISH);
|
||||
|
||||
// Leotheras is getting immune again
|
||||
me->ApplySpellImmune(AURA_BANISH, IMMUNITY_MECHANIC, MECHANIC_BANISH, true);
|
||||
|
||||
// changing model to bloodelf
|
||||
me->SetDisplayId(MODEL_NIGHTELF);
|
||||
|
||||
// and reseting equipment
|
||||
me->LoadEquipment(me->GetEquipmentId());
|
||||
|
||||
if (pInstance && pInstance->GetData64(DATA_LEOTHERAS_EVENT_STARTER))
|
||||
{
|
||||
Unit *victim = NULL;
|
||||
victim = Unit::GetUnit(*me, pInstance->GetData64(DATA_LEOTHERAS_EVENT_STARTER));
|
||||
if (victim)
|
||||
me->getThreatManager().addThreat(victim, 1);
|
||||
StartEvent();
|
||||
}
|
||||
}
|
||||
else if (AliveChannelers != 0 && !me->HasAura(AURA_BANISH))
|
||||
{
|
||||
// channelers != 0 apply banish aura
|
||||
// removing Leotheras banish immune to apply AURA_BANISH
|
||||
me->ApplySpellImmune(AURA_BANISH, IMMUNITY_MECHANIC, MECHANIC_BANISH, false);
|
||||
DoCast(me, AURA_BANISH);
|
||||
|
||||
// changing model
|
||||
me->SetDisplayId(MODEL_DEMON);
|
||||
|
||||
// and removing weapons
|
||||
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID , 0);
|
||||
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID+1, 0);
|
||||
}
|
||||
}
|
||||
|
||||
//Despawn all Inner Demon summoned
|
||||
void DespawnDemon()
|
||||
{
|
||||
for (uint8 i=0; i<5; ++i)
|
||||
{
|
||||
if (InnderDemon[i])
|
||||
{
|
||||
//delete creature
|
||||
Creature* pCreature = Unit::GetCreature((*me), InnderDemon[i]);
|
||||
if (pCreature && pCreature->isAlive())
|
||||
{
|
||||
pCreature->ForcedDespawn();
|
||||
}
|
||||
InnderDemon[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
InnerDemon_Count = 0;
|
||||
}
|
||||
|
||||
void CastConsumingMadness() //remove this once SPELL_INSIDIOUS_WHISPER is supported by core
|
||||
{
|
||||
for (uint8 i=0; i<5; ++i)
|
||||
{
|
||||
if (InnderDemon[i] > 0)
|
||||
{
|
||||
Creature* pUnit = Unit::GetCreature((*me), InnderDemon[i]);
|
||||
if (pUnit && pUnit->isAlive())
|
||||
{
|
||||
Unit* pUnit_pTarget = Unit::GetUnit(*pUnit, CAST_AI(mob_inner_demonAI, pUnit->AI())->victimGUID);
|
||||
if (pUnit_pTarget && pUnit_pTarget->isAlive())
|
||||
{
|
||||
pUnit->CastSpell(pUnit_pTarget, SPELL_CONSUMING_MADNESS, true);
|
||||
DoModifyThreatPercent(pUnit_pTarget, -100);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void KilledUnit(Unit * victim)
|
||||
{
|
||||
if (victim->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
if (DemonForm)
|
||||
{
|
||||
DoScriptText(RAND(SAY_DEMON_SLAY1,SAY_DEMON_SLAY2,SAY_DEMON_SLAY3), me);
|
||||
}
|
||||
else
|
||||
{
|
||||
DoScriptText(RAND(SAY_NIGHTELF_SLAY1,SAY_NIGHTELF_SLAY2,SAY_NIGHTELF_SLAY3), me);
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit * /*victim*/)
|
||||
{
|
||||
DoScriptText(SAY_DEATH, me);
|
||||
|
||||
//despawn copy
|
||||
if (Demon)
|
||||
{
|
||||
if (Creature* pDemon = Unit::GetCreature(*me, Demon))
|
||||
pDemon->ForcedDespawn();
|
||||
}
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_LEOTHERASTHEBLINDEVENT, DONE);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/)
|
||||
{
|
||||
if (me->HasAura(AURA_BANISH))
|
||||
return;
|
||||
|
||||
me->LoadEquipment(me->GetEquipmentId());
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Return since we have no target
|
||||
if (me->HasAura(AURA_BANISH) || !UpdateVictim())
|
||||
{
|
||||
if (BanishTimer <= diff)
|
||||
{
|
||||
CheckBanish();//no need to check every update tick
|
||||
BanishTimer = 1000;
|
||||
} else BanishTimer -= diff;
|
||||
return;
|
||||
}
|
||||
if (me->HasAura(SPELL_WHIRLWIND))
|
||||
if (Whirlwind_Timer <= diff)
|
||||
{
|
||||
Unit *newTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
if (newTarget)
|
||||
{
|
||||
DoResetThreat();
|
||||
me->GetMotionMaster()->Clear();
|
||||
me->GetMotionMaster()->MovePoint(0,newTarget->GetPositionX(),newTarget->GetPositionY(),newTarget->GetPositionZ());
|
||||
}
|
||||
Whirlwind_Timer = 2000;
|
||||
} else Whirlwind_Timer -= diff;
|
||||
|
||||
// reseting after changing forms and after ending whirlwind
|
||||
if (NeedThreatReset && !me->HasAura(SPELL_WHIRLWIND))
|
||||
{
|
||||
// when changing forms seting timers (or when ending whirlwind - to avoid adding new variable i use Whirlwind_Timer to countdown 2s while whirlwinding)
|
||||
if (DemonForm)
|
||||
InnerDemons_Timer = 30000;
|
||||
else
|
||||
Whirlwind_Timer = 15000;
|
||||
|
||||
NeedThreatReset = false;
|
||||
DoResetThreat();
|
||||
me->GetMotionMaster()->Clear();
|
||||
me->GetMotionMaster()->MoveChase(me->getVictim());
|
||||
}
|
||||
|
||||
//Enrage_Timer (10 min)
|
||||
if (Berserk_Timer < diff && !EnrageUsed)
|
||||
{
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
DoCast(me, SPELL_BERSERK);
|
||||
EnrageUsed = true;
|
||||
} else Berserk_Timer -= diff;
|
||||
|
||||
if (!DemonForm)
|
||||
{
|
||||
//Whirldind Timer
|
||||
if (!me->HasAura(SPELL_WHIRLWIND))
|
||||
{
|
||||
if (Whirlwind_Timer <= diff)
|
||||
{
|
||||
DoCast(me, SPELL_WHIRLWIND);
|
||||
// while whirlwinding this variable is used to countdown target's change
|
||||
Whirlwind_Timer = 2000;
|
||||
NeedThreatReset = true;
|
||||
} else Whirlwind_Timer -= diff;
|
||||
}
|
||||
//Switch_Timer
|
||||
|
||||
if (!IsFinalForm)
|
||||
if (SwitchToDemon_Timer <= diff)
|
||||
{
|
||||
//switch to demon form
|
||||
me->RemoveAurasDueToSpell(SPELL_WHIRLWIND,0);
|
||||
me->SetDisplayId(MODEL_DEMON);
|
||||
DoScriptText(SAY_SWITCH_TO_DEMON, me);
|
||||
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID , 0);
|
||||
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID+1, 0);
|
||||
DemonForm = true;
|
||||
NeedThreatReset = true;
|
||||
SwitchToDemon_Timer = 45000;
|
||||
} else SwitchToDemon_Timer -= diff;
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
else
|
||||
{
|
||||
//ChaosBlast_Timer
|
||||
if (!me->getVictim())
|
||||
return;
|
||||
if (me->IsWithinDist(me->getVictim(), 30))
|
||||
me->StopMoving();
|
||||
if (ChaosBlast_Timer <= diff)
|
||||
{
|
||||
// will cast only when in range of spell
|
||||
if (me->IsWithinDist(me->getVictim(), 30))
|
||||
{
|
||||
//DoCast(me->getVictim(), SPELL_CHAOS_BLAST, true);
|
||||
int damage = 100;
|
||||
me->CastCustomSpell(me->getVictim(), SPELL_CHAOS_BLAST, &damage, NULL, NULL, false, NULL, NULL, me->GetGUID());
|
||||
}
|
||||
ChaosBlast_Timer = 3000;
|
||||
} else ChaosBlast_Timer -= diff;
|
||||
//Summon Inner Demon
|
||||
if (InnerDemons_Timer <= diff)
|
||||
{
|
||||
std::list<HostileReference *>& ThreatList = me->getThreatManager().getThreatList();
|
||||
std::vector<Unit *> TargetList;
|
||||
for (std::list<HostileReference *>::const_iterator itr = ThreatList.begin(); itr != ThreatList.end(); ++itr)
|
||||
{
|
||||
Unit *tempTarget = Unit::GetUnit(*me, (*itr)->getUnitGuid());
|
||||
if (tempTarget && tempTarget->GetTypeId() == TYPEID_PLAYER && tempTarget->GetGUID() != me->getVictim()->GetGUID() && TargetList.size()<5)
|
||||
TargetList.push_back(tempTarget);
|
||||
}
|
||||
//SpellEntry *spell = GET_SPELL(SPELL_INSIDIOUS_WHISPER);
|
||||
for (std::vector<Unit *>::const_iterator itr = TargetList.begin(); itr != TargetList.end(); ++itr)
|
||||
{
|
||||
if ((*itr) && (*itr)->isAlive())
|
||||
{
|
||||
Creature * demon = me->SummonCreature(INNER_DEMON_ID, (*itr)->GetPositionX()+10, (*itr)->GetPositionY()+10, (*itr)->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
|
||||
if (demon)
|
||||
{
|
||||
demon->AI()->AttackStart((*itr));
|
||||
CAST_AI(mob_inner_demonAI, demon->AI())->victimGUID = (*itr)->GetGUID();
|
||||
|
||||
(*itr)->AddAura(SPELL_INSIDIOUS_WHISPER, *itr);
|
||||
|
||||
if (InnerDemon_Count > 4)
|
||||
InnerDemon_Count = 0;
|
||||
|
||||
//Safe storing of creatures
|
||||
InnderDemon[InnerDemon_Count] = demon->GetGUID();
|
||||
|
||||
//Update demon count
|
||||
++InnerDemon_Count;
|
||||
}
|
||||
}
|
||||
}
|
||||
DoScriptText(SAY_INNER_DEMONS, me);
|
||||
|
||||
InnerDemons_Timer = 999999;
|
||||
} else InnerDemons_Timer -= diff;
|
||||
|
||||
//Switch_Timer
|
||||
if (SwitchToHuman_Timer <= diff)
|
||||
{
|
||||
//switch to nightelf form
|
||||
me->SetDisplayId(MODEL_NIGHTELF);
|
||||
me->LoadEquipment(me->GetEquipmentId());
|
||||
|
||||
CastConsumingMadness();
|
||||
DespawnDemon();
|
||||
|
||||
DemonForm = false;
|
||||
NeedThreatReset = true;
|
||||
|
||||
SwitchToHuman_Timer = 60000;
|
||||
} else SwitchToHuman_Timer -= diff;
|
||||
}
|
||||
|
||||
if (!IsFinalForm && (me->GetHealth()*100 / me->GetMaxHealth()) < 15)
|
||||
{
|
||||
//at this point he divides himself in two parts
|
||||
CastConsumingMadness();
|
||||
DespawnDemon();
|
||||
Creature *Copy = NULL;
|
||||
Copy = DoSpawnCreature(DEMON_FORM, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 6000);
|
||||
if (Copy)
|
||||
{
|
||||
Demon = Copy->GetGUID();
|
||||
if (me->getVictim())
|
||||
Copy->AI()->AttackStart(me->getVictim());
|
||||
}
|
||||
//set nightelf final form
|
||||
IsFinalForm = true;
|
||||
DemonForm = false;
|
||||
|
||||
DoScriptText(SAY_FINAL_FORM, me);
|
||||
me->SetDisplayId(MODEL_NIGHTELF);
|
||||
me->LoadEquipment(me->GetEquipmentId());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
//Leotheras the Blind Demon Form AI
|
||||
struct boss_leotheras_the_blind_demonformAI : public ScriptedAI
|
||||
{
|
||||
boss_leotheras_the_blind_demonformAI(Creature *c) : ScriptedAI(c) {}
|
||||
|
||||
uint32 ChaosBlast_Timer;
|
||||
bool DealDamage;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
ChaosBlast_Timer = 1000;
|
||||
DealDamage = true;
|
||||
}
|
||||
|
||||
void StartEvent()
|
||||
{
|
||||
DoScriptText(SAY_FREE, me);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit * victim)
|
||||
{
|
||||
if (victim->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
DoScriptText(RAND(SAY_DEMON_SLAY1,SAY_DEMON_SLAY2,SAY_DEMON_SLAY3), me);
|
||||
}
|
||||
|
||||
void JustDied(Unit * /*victim*/)
|
||||
{
|
||||
//invisibility (blizzlike, at the end of the fight he doesn't die, he disappears)
|
||||
DoCast(me, 8149, true);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/)
|
||||
{
|
||||
StartEvent();
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
//ChaosBlast_Timer
|
||||
if (me->IsWithinDist(me->getVictim(), 30))
|
||||
me->StopMoving();
|
||||
|
||||
if (ChaosBlast_Timer <= diff)
|
||||
{
|
||||
// will cast only when in range od spell
|
||||
if (me->IsWithinDist(me->getVictim(), 30))
|
||||
{
|
||||
//DoCast(me->getVictim(), SPELL_CHAOS_BLAST, true);
|
||||
int damage = 100;
|
||||
me->CastCustomSpell(me->getVictim(), SPELL_CHAOS_BLAST, &damage, NULL, NULL, false, NULL, NULL, me->GetGUID());
|
||||
ChaosBlast_Timer = 3000;
|
||||
}
|
||||
} else ChaosBlast_Timer -= diff;
|
||||
|
||||
//Do NOT deal any melee damage to the target.
|
||||
}
|
||||
};
|
||||
struct mob_greyheart_spellbinderAI : public ScriptedAI
|
||||
{
|
||||
mob_greyheart_spellbinderAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
leotherasGUID = 0;
|
||||
AddedBanish = false;
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
uint64 leotherasGUID;
|
||||
|
||||
uint32 Mindblast_Timer;
|
||||
uint32 Earthshock_Timer;
|
||||
|
||||
bool AddedBanish;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Mindblast_Timer = 3000 + rand()%5000;
|
||||
Earthshock_Timer = 5000 + rand()%5000;
|
||||
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData64(DATA_LEOTHERAS_EVENT_STARTER, 0);
|
||||
Creature *leotheras = Unit::GetCreature(*me, leotherasGUID);
|
||||
if (leotheras && leotheras->isAlive())
|
||||
CAST_AI(boss_leotheras_the_blindAI, leotheras->AI())->CheckChannelers(/*false*/);
|
||||
}
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * who)
|
||||
{
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
if (pInstance)
|
||||
pInstance->SetData64(DATA_LEOTHERAS_EVENT_STARTER, who->GetGUID());
|
||||
}
|
||||
|
||||
void JustRespawned()
|
||||
{
|
||||
AddedBanish = false;
|
||||
Reset();
|
||||
}
|
||||
|
||||
void CastChanneling()
|
||||
{
|
||||
if (!me->isInCombat() && !me->GetCurrentSpell(CURRENT_CHANNELED_SPELL))
|
||||
{
|
||||
if (leotherasGUID)
|
||||
{
|
||||
Creature *leotheras = Unit::GetCreature(*me, leotherasGUID);
|
||||
if (leotheras && leotheras->isAlive())
|
||||
DoCast(leotheras, BANISH_BEAM);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (pInstance)
|
||||
{
|
||||
if (!leotherasGUID)
|
||||
leotherasGUID = pInstance->GetData64(DATA_LEOTHERAS);
|
||||
|
||||
if (!me->isInCombat() && pInstance->GetData64(DATA_LEOTHERAS_EVENT_STARTER))
|
||||
{
|
||||
Unit *victim = NULL;
|
||||
victim = Unit::GetUnit(*me, pInstance->GetData64(DATA_LEOTHERAS_EVENT_STARTER));
|
||||
if (victim)
|
||||
AttackStart(victim);
|
||||
}
|
||||
}
|
||||
|
||||
if (!UpdateVictim())
|
||||
{
|
||||
CastChanneling();
|
||||
return;
|
||||
}
|
||||
|
||||
if (pInstance && !pInstance->GetData64(DATA_LEOTHERAS_EVENT_STARTER))
|
||||
{
|
||||
EnterEvadeMode();
|
||||
return;
|
||||
}
|
||||
|
||||
if (Mindblast_Timer <= diff)
|
||||
{
|
||||
Unit *pTarget = NULL;
|
||||
pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
|
||||
if (pTarget)DoCast(pTarget, SPELL_MINDBLAST);
|
||||
|
||||
Mindblast_Timer = 10000 + rand()%5000;
|
||||
} else Mindblast_Timer -= diff;
|
||||
|
||||
if (Earthshock_Timer <= diff)
|
||||
{
|
||||
Map* pMap = me->GetMap();
|
||||
Map::PlayerList const &PlayerList = pMap->GetPlayers();
|
||||
for (Map::PlayerList::const_iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr)
|
||||
{
|
||||
if (Player* i_pl = itr->getSource())
|
||||
{
|
||||
bool isCasting = false;
|
||||
for (uint8 i = 0; i < CURRENT_MAX_SPELL; ++i)
|
||||
if (i_pl->GetCurrentSpell(i))
|
||||
isCasting = true;
|
||||
|
||||
if (isCasting)
|
||||
{
|
||||
DoCast(i_pl, SPELL_EARTHSHOCK);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
Earthshock_Timer = 8000 + rand()%7000;
|
||||
} else Earthshock_Timer -= diff;
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
void JustDied(Unit * /*killer*/) {}
|
||||
};
|
||||
CreatureAI* GetAI_boss_leotheras_the_blind(Creature* pCreature)
|
||||
{
|
||||
return new boss_leotheras_the_blindAI (pCreature);
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_boss_leotheras_the_blind_demonform(Creature* pCreature)
|
||||
{
|
||||
return new boss_leotheras_the_blind_demonformAI (pCreature);
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_mob_greyheart_spellbinder(Creature* pCreature)
|
||||
{
|
||||
return new mob_greyheart_spellbinderAI (pCreature);
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_mob_inner_demon(Creature* pCreature)
|
||||
{
|
||||
return new mob_inner_demonAI (pCreature);
|
||||
}
|
||||
void AddSC_boss_leotheras_the_blind()
|
||||
{
|
||||
Script *newscript;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_leotheras_the_blind";
|
||||
newscript->GetAI = &GetAI_boss_leotheras_the_blind;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_leotheras_the_blind_demonform";
|
||||
newscript->GetAI = &GetAI_boss_leotheras_the_blind_demonform;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "mob_greyheart_spellbinder";
|
||||
newscript->GetAI = &GetAI_mob_greyheart_spellbinder;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "mob_inner_demon";
|
||||
newscript->GetAI = &GetAI_mob_inner_demon;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,458 @@
|
||||
/* 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_the_lurker_below
|
||||
SD%Complete: 80
|
||||
SDComment: Coilfang Frenzy, find out how could we fishing in the strangepool
|
||||
SDCategory: The Lurker Below
|
||||
EndScriptData */
|
||||
|
||||
#include "ScriptedPch.h"
|
||||
#include "serpent_shrine.h"
|
||||
#include "ScriptedSimpleAI.h"
|
||||
#include "Spell.h"
|
||||
|
||||
#define SPELL_SPOUT 37433
|
||||
#define SPELL_SPOUT_ANIM 42835
|
||||
#define SPELL_SPOUT_BREATH 37431
|
||||
#define SPELL_KNOCKBACK 19813
|
||||
#define SPELL_GEYSER 37478
|
||||
#define SPELL_WHIRL 37660
|
||||
#define SPELL_WATERBOLT 37138
|
||||
#define SPELL_SUBMERGE 37550
|
||||
#define SPELL_EMERGE 20568
|
||||
|
||||
#define EMOTE_SPOUT "The Lurker Below takes a deep breath."
|
||||
|
||||
#define SPOUT_DIST 100
|
||||
|
||||
#define MOB_COILFANG_GUARDIAN 21873
|
||||
#define MOB_COILFANG_AMBUSHER 21865
|
||||
|
||||
//Ambusher spells
|
||||
#define SPELL_SPREAD_SHOT 37790
|
||||
#define SPELL_SHOOT 37770
|
||||
|
||||
//Guardian spells
|
||||
#define SPELL_ARCINGSMASH 38761 // Wrong SpellId. Can't find the right one.
|
||||
#define SPELL_HAMSTRING 26211
|
||||
|
||||
float AddPos[9][3] =
|
||||
{
|
||||
{2.8553810, -459.823914, -19.182686}, //MOVE_AMBUSHER_1 X, Y, Z
|
||||
{12.400000, -466.042267, -19.182686}, //MOVE_AMBUSHER_2 X, Y, Z
|
||||
{51.366653, -460.836060, -19.182686}, //MOVE_AMBUSHER_3 X, Y, Z
|
||||
{62.597980, -457.433044, -19.182686}, //MOVE_AMBUSHER_4 X, Y, Z
|
||||
{77.607452, -384.302765, -19.182686}, //MOVE_AMBUSHER_5 X, Y, Z
|
||||
{63.897900, -378.984924, -19.182686}, //MOVE_AMBUSHER_6 X, Y, Z
|
||||
{34.447250, -387.333618, -19.182686}, //MOVE_GUARDIAN_1 X, Y, Z
|
||||
{14.388216, -423.468018, -19.625271}, //MOVE_GUARDIAN_2 X, Y, Z
|
||||
{42.471519, -445.115295, -19.769423} //MOVE_GUARDIAN_3 X, Y, Z
|
||||
};
|
||||
|
||||
struct boss_the_lurker_belowAI : public Scripted_NoMovementAI
|
||||
{
|
||||
boss_the_lurker_belowAI(Creature *c) : Scripted_NoMovementAI(c), Summons(me)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
SpellEntry *TempSpell = GET_SPELL(SPELL_SPOUT_ANIM);
|
||||
if (TempSpell)
|
||||
{
|
||||
TempSpell->Effect[0] = 0;//remove all spell effect, only anim is needed
|
||||
TempSpell->Effect[1] = 0;
|
||||
TempSpell->Effect[2] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
SummonList Summons;
|
||||
|
||||
bool Spawned;
|
||||
bool Submerged;
|
||||
bool InRange;
|
||||
bool CanStartEvent;
|
||||
uint32 RotTimer;
|
||||
uint32 SpoutAnimTimer;
|
||||
uint32 WaterboltTimer;
|
||||
uint32 SpoutTimer;
|
||||
uint32 WhirlTimer;
|
||||
uint32 PhaseTimer;
|
||||
uint32 GeyserTimer;
|
||||
uint32 CheckTimer;
|
||||
uint32 WaitTimer;
|
||||
uint32 WaitTimer2;
|
||||
|
||||
bool CheckCanStart()//check if players fished
|
||||
{
|
||||
if (pInstance && pInstance->GetData(DATA_STRANGE_POOL) == NOT_STARTED)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
void Reset()
|
||||
{
|
||||
me->AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_LEVITATING);
|
||||
SpoutAnimTimer = 1000;
|
||||
RotTimer = 0;
|
||||
WaterboltTimer = 15000;//give time to get in range when fight starts
|
||||
SpoutTimer = 45000;
|
||||
WhirlTimer = 18000;//after avery spout
|
||||
PhaseTimer = 120000;
|
||||
GeyserTimer = rand()%5000 + 15000;
|
||||
CheckTimer = 15000;//give time to get in range when fight starts
|
||||
WaitTimer = 60000;//never reached
|
||||
WaitTimer2 = 60000;//never reached
|
||||
|
||||
Submerged = true;//will be false at combat start
|
||||
Spawned = false;
|
||||
InRange = false;
|
||||
CanStartEvent = false;
|
||||
|
||||
Summons.DespawnAll();
|
||||
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_THELURKERBELOWEVENT, NOT_STARTED);
|
||||
pInstance->SetData(DATA_STRANGE_POOL, NOT_STARTED);
|
||||
}
|
||||
DoCast(me, SPELL_SUBMERGE);//submerge anim
|
||||
me->SetVisibility(VISIBILITY_OFF);//we start invis under water, submerged
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*Killer*/)
|
||||
{
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_THELURKERBELOWEVENT, DONE);
|
||||
|
||||
Summons.DespawnAll();
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * who)
|
||||
{
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_THELURKERBELOWEVENT, IN_PROGRESS);
|
||||
Scripted_NoMovementAI::EnterCombat(who);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit *who)
|
||||
{
|
||||
if (!CanStartEvent)//boss is invisible, don't attack
|
||||
return;
|
||||
if (!me->getVictim() && who->isTargetableForAttack() && (me->IsHostileTo(who)))
|
||||
{
|
||||
float attackRadius = me->GetAttackDistance(who);
|
||||
if (me->IsWithinDistInMap(who, attackRadius))
|
||||
{
|
||||
AttackStart(who);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MovementInform(uint32 type, uint32 /*id*/)
|
||||
{
|
||||
if (type == ROTATE_MOTION_TYPE)
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!CanStartEvent)//boss is invisible, don't attack
|
||||
{
|
||||
if (CheckCanStart())
|
||||
{
|
||||
if (Submerged)
|
||||
{
|
||||
me->SetVisibility(VISIBILITY_ON);
|
||||
Submerged = false;
|
||||
WaitTimer2 = 500;
|
||||
}
|
||||
if (!Submerged && WaitTimer2 <= diff)//wait 500ms before emerge anim
|
||||
{
|
||||
me->RemoveAllAuras();
|
||||
me->RemoveFlag(UNIT_NPC_EMOTESTATE,EMOTE_STATE_SUBMERGED);
|
||||
DoCast(me, SPELL_EMERGE, false);
|
||||
WaitTimer2 = 60000;//never reached
|
||||
WaitTimer = 3000;
|
||||
} else WaitTimer2 -= diff;
|
||||
|
||||
if (WaitTimer <= diff)//wait 3secs for emerge anim, then attack
|
||||
{
|
||||
WaitTimer = 3000;
|
||||
CanStartEvent=true;//fresh fished from pool
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
} else WaitTimer -= diff;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (me->getThreatManager().getThreatList().empty())//check if should evade
|
||||
{
|
||||
if (me->isInCombat())
|
||||
EnterEvadeMode();
|
||||
return;
|
||||
}
|
||||
if (!Submerged)
|
||||
{
|
||||
if (PhaseTimer <= diff)
|
||||
{
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
DoCast(me, SPELL_SUBMERGE);
|
||||
PhaseTimer = 60000;//60secs submerged
|
||||
Submerged = true;
|
||||
} else PhaseTimer-=diff;
|
||||
|
||||
if (SpoutTimer <= diff)
|
||||
{
|
||||
me->MonsterTextEmote(EMOTE_SPOUT,0,true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->GetMotionMaster()->MoveRotate(20000, rand()%2 ? ROTATE_DIRECTION_LEFT : ROTATE_DIRECTION_RIGHT);
|
||||
SpoutTimer = 45000;
|
||||
WhirlTimer = 20000;//whirl directly after spout
|
||||
RotTimer = 20000;
|
||||
return;
|
||||
} else SpoutTimer -= diff;
|
||||
|
||||
//Whirl directly after a Spout and at random times
|
||||
if (WhirlTimer <= diff)
|
||||
{
|
||||
WhirlTimer = 18000;
|
||||
DoCast(me, SPELL_WHIRL);
|
||||
} else WhirlTimer -= diff;
|
||||
|
||||
if (CheckTimer <= diff)//check if there are players in melee range
|
||||
{
|
||||
InRange = false;
|
||||
Map* pMap = me->GetMap();
|
||||
Map::PlayerList const &PlayerList = pMap->GetPlayers();
|
||||
if (!PlayerList.isEmpty())
|
||||
{
|
||||
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
|
||||
{
|
||||
if (me->IsWithinMeleeRange(i->getSource()))
|
||||
InRange = true;
|
||||
}
|
||||
}
|
||||
CheckTimer = 2000;
|
||||
} else CheckTimer -= diff;
|
||||
|
||||
if (RotTimer)
|
||||
{
|
||||
Map* pMap = me->GetMap();
|
||||
if (pMap->IsDungeon())
|
||||
{
|
||||
Map::PlayerList const &PlayerList = pMap->GetPlayers();
|
||||
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
|
||||
{
|
||||
if (i->getSource() && i->getSource()->isAlive() && me->HasInArc((double)diff/20000*(double)M_PI*2,i->getSource()) && me->IsWithinDist(i->getSource(), SPOUT_DIST) && !i->getSource()->IsInWater())
|
||||
DoCast(i->getSource(), SPELL_SPOUT, true);//only knock back palyers in arc, in 100yards, not in water
|
||||
}
|
||||
}
|
||||
|
||||
if (SpoutAnimTimer <= diff)
|
||||
{
|
||||
DoCast(me, SPELL_SPOUT_ANIM, true);
|
||||
SpoutAnimTimer = 1000;
|
||||
} else SpoutAnimTimer -= diff;
|
||||
|
||||
if (RotTimer <= diff)
|
||||
{
|
||||
RotTimer = 0;
|
||||
} else RotTimer -= diff;
|
||||
return;
|
||||
}
|
||||
|
||||
if (GeyserTimer <= diff)
|
||||
{
|
||||
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,1);
|
||||
if (!pTarget && me->getVictim())
|
||||
pTarget = me->getVictim();
|
||||
if (pTarget)
|
||||
DoCast(pTarget, SPELL_GEYSER, true);
|
||||
GeyserTimer = rand()%5000 + 15000;
|
||||
} else GeyserTimer -= diff;
|
||||
|
||||
if (!InRange)//if on players in melee range cast Waterbolt
|
||||
{
|
||||
if (WaterboltTimer <= diff)
|
||||
{
|
||||
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
if (!pTarget && me->getVictim())
|
||||
pTarget = me->getVictim();
|
||||
if (pTarget)
|
||||
DoCast(pTarget, SPELL_WATERBOLT, true);
|
||||
WaterboltTimer = 3000;
|
||||
} else WaterboltTimer -= diff;
|
||||
}
|
||||
|
||||
if (!UpdateCombatState())
|
||||
return;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
|
||||
}else//submerged
|
||||
{
|
||||
if (PhaseTimer <= diff)
|
||||
{
|
||||
Submerged = false;
|
||||
me->InterruptNonMeleeSpells(false);//shouldn't be any
|
||||
me->RemoveAllAuras();
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
|
||||
me->RemoveFlag(UNIT_NPC_EMOTESTATE,EMOTE_STATE_SUBMERGED);
|
||||
DoCast(me, SPELL_EMERGE, true);
|
||||
Spawned = false;
|
||||
SpoutTimer = 3000; // directly cast Spout after emerging!
|
||||
PhaseTimer = 120000;
|
||||
return;
|
||||
} else PhaseTimer-=diff;
|
||||
|
||||
if (me->getThreatManager().getThreatList().empty())//check if should evade
|
||||
{
|
||||
EnterEvadeMode();
|
||||
return;
|
||||
}
|
||||
if (!me->isInCombat())
|
||||
DoZoneInCombat();
|
||||
|
||||
if (!Spawned)
|
||||
{
|
||||
me->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
|
||||
//spawn adds
|
||||
for (uint8 i = 0; i < 9; ++i)
|
||||
{
|
||||
Creature* Summoned;
|
||||
if (i < 6)
|
||||
Summoned = me->SummonCreature(MOB_COILFANG_AMBUSHER,AddPos[i][0],AddPos[i][1],AddPos[i][2], 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
else Summoned = me->SummonCreature(MOB_COILFANG_GUARDIAN,AddPos[i][0],AddPos[i][1],AddPos[i][2], 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
|
||||
if (Summoned)
|
||||
Summons.Summon(Summoned);
|
||||
}
|
||||
Spawned = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_mob_coilfang_guardian(Creature* pCreature)
|
||||
{
|
||||
SimpleAI* ai = new SimpleAI (pCreature);
|
||||
|
||||
ai->Spell[0].Enabled = true;
|
||||
ai->Spell[0].Spell_Id = SPELL_ARCINGSMASH;
|
||||
ai->Spell[0].Cooldown = 15000;
|
||||
ai->Spell[0].First_Cast = 5000;
|
||||
ai->Spell[0].Cast_Target_Type = CAST_HOSTILE_TARGET;
|
||||
|
||||
ai->Spell[1].Enabled = true;
|
||||
ai->Spell[1].Spell_Id = SPELL_HAMSTRING;
|
||||
ai->Spell[1].Cooldown = 10000;
|
||||
ai->Spell[1].First_Cast = 2000;
|
||||
ai->Spell[1].Cast_Target_Type = CAST_HOSTILE_TARGET;
|
||||
|
||||
return ai;
|
||||
}
|
||||
|
||||
struct mob_coilfang_ambusherAI : public Scripted_NoMovementAI
|
||||
{
|
||||
mob_coilfang_ambusherAI(Creature *c) : Scripted_NoMovementAI(c)
|
||||
{
|
||||
SpellEntry *TempSpell = GET_SPELL(SPELL_SHOOT);
|
||||
if (TempSpell)
|
||||
TempSpell->Effect[0] = 2;//change spell effect from weapon % dmg to simple phisical dmg
|
||||
}
|
||||
|
||||
uint32 MultiShotTimer;
|
||||
uint32 ShootBowTimer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
MultiShotTimer = 10000;
|
||||
ShootBowTimer = 4000;
|
||||
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit *who)
|
||||
{
|
||||
if (!who || me->getVictim()) return;
|
||||
|
||||
if (who->isTargetableForAttack() && who->isInAccessiblePlaceFor(me) && me->IsHostileTo(who) && me->IsWithinDistInMap(who, 45))
|
||||
{
|
||||
AttackStart(who);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (MultiShotTimer <= diff)
|
||||
{
|
||||
if (me->getVictim())
|
||||
DoCast(me->getVictim(), SPELL_SPREAD_SHOT, true);
|
||||
|
||||
MultiShotTimer = 10000+rand()%10000;
|
||||
ShootBowTimer += 1500;//add global cooldown
|
||||
} else MultiShotTimer -= diff;
|
||||
|
||||
if (ShootBowTimer <= diff)
|
||||
{
|
||||
Unit *pTarget = NULL;
|
||||
pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
int bp0 = 1100;
|
||||
if (pTarget)
|
||||
me->CastCustomSpell(pTarget,SPELL_SHOOT,&bp0,NULL,NULL,true);
|
||||
ShootBowTimer = 4000+rand()%5000;
|
||||
MultiShotTimer += 1500;//add global cooldown
|
||||
} else ShootBowTimer -= diff;
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_mob_coilfang_ambusher(Creature* pCreature)
|
||||
{
|
||||
return new mob_coilfang_ambusherAI (pCreature);
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_boss_the_lurker_below(Creature* pCreature)
|
||||
{
|
||||
return new boss_the_lurker_belowAI (pCreature);
|
||||
}
|
||||
|
||||
void AddSC_boss_the_lurker_below()
|
||||
{
|
||||
Script *newscript;
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_the_lurker_below";
|
||||
newscript->GetAI = &GetAI_boss_the_lurker_below;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "mob_coilfang_guardian";
|
||||
newscript->GetAI = &GetAI_mob_coilfang_guardian;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "mob_coilfang_ambusher";
|
||||
newscript->GetAI = &GetAI_mob_coilfang_ambusher;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
|
||||
+369
@@ -0,0 +1,369 @@
|
||||
/* 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_Morogrim_Tidewalker
|
||||
SD%Complete: 90
|
||||
SDComment: Water globules don't explode properly, remove hacks
|
||||
SDCategory: Coilfang Resevoir, Serpent Shrine Cavern
|
||||
EndScriptData */
|
||||
|
||||
#include "ScriptedPch.h"
|
||||
#include "serpent_shrine.h"
|
||||
|
||||
#define SAY_AGGRO -1548030
|
||||
#define SAY_SUMMON1 -1548031
|
||||
#define SAY_SUMMON2 -1548032
|
||||
#define SAY_SUMMON_BUBL1 -1548033
|
||||
#define SAY_SUMMON_BUBL2 -1548034
|
||||
#define SAY_SLAY1 -1548035
|
||||
#define SAY_SLAY2 -1548036
|
||||
#define SAY_SLAY3 -1548037
|
||||
#define SAY_DEATH -1548038
|
||||
#define EMOTE_WATERY_GRAVE -1548039
|
||||
#define EMOTE_EARTHQUAKE -1548040
|
||||
#define EMOTE_WATERY_GLOBULES -1548041
|
||||
|
||||
#define SPELL_TIDAL_WAVE 37730
|
||||
#define SPELL_WATERY_GRAVE 38049
|
||||
#define SPELL_EARTHQUAKE 37764
|
||||
#define SPELL_WATERY_GRAVE_EXPLOSION 37852
|
||||
|
||||
#define WATERY_GRAVE_X1 334.64
|
||||
#define WATERY_GRAVE_Y1 -728.89
|
||||
#define WATERY_GRAVE_Z1 -14.42
|
||||
#define WATERY_GRAVE_X2 365.51
|
||||
#define WATERY_GRAVE_Y2 -737.14
|
||||
#define WATERY_GRAVE_Z2 -14.44
|
||||
#define WATERY_GRAVE_X3 366.19
|
||||
#define WATERY_GRAVE_Y3 -709.59
|
||||
#define WATERY_GRAVE_Z3 -14.36
|
||||
#define WATERY_GRAVE_X4 372.93
|
||||
#define WATERY_GRAVE_Y4 -690.96
|
||||
#define WATERY_GRAVE_Z4 -14.44
|
||||
|
||||
#define SPELL_WATERY_GRAVE_1 38023
|
||||
#define SPELL_WATERY_GRAVE_2 38024
|
||||
#define SPELL_WATERY_GRAVE_3 38025
|
||||
#define SPELL_WATERY_GRAVE_4 37850
|
||||
|
||||
#define SPELL_SUMMON_WATER_GLOBULE_1 37854
|
||||
#define SPELL_SUMMON_WATER_GLOBULE_2 37858
|
||||
#define SPELL_SUMMON_WATER_GLOBULE_3 37860
|
||||
#define SPELL_SUMMON_WATER_GLOBULE_4 37861
|
||||
|
||||
/*#define SPELL_SUMMON_MURLOC_A6 39813
|
||||
#define SPELL_SUMMON_MURLOC_A7 39814
|
||||
#define SPELL_SUMMON_MURLOC_A8 39815
|
||||
#define SPELL_SUMMON_MURLOC_A9 39816
|
||||
#define SPELL_SUMMON_MURLOC_A10 39817
|
||||
|
||||
#define SPELL_SUMMON_MURLOC_B6 39818
|
||||
#define SPELL_SUMMON_MURLOC_B7 39819
|
||||
#define SPELL_SUMMON_MURLOC_B8 39820
|
||||
#define SPELL_SUMMON_MURLOC_B9 39821
|
||||
#define SPELL_SUMMON_MURLOC_B10 39822*/
|
||||
|
||||
float MurlocCords[10][5] =
|
||||
{
|
||||
{21920, 424.36, -715.4, -7.14, 0.124},
|
||||
{21920, 425.13, -719.3, -7.14, 0.124},
|
||||
{21920, 425.05, -724.23, -7.14, 0.124},
|
||||
{21920, 424.91, -728.68, -7.14, 0.124},
|
||||
{21920, 424.84, -732.18, -7.14, 0.124},
|
||||
{21920, 321.05, -734.2, -13.15, 0.124},
|
||||
{21920, 321.05, -729.4, -13.15, 0.124},
|
||||
{21920, 321.05, -724.03, -13.15, 0.124},
|
||||
{21920, 321.05, -718.73, -13.15, 0.124},
|
||||
{21920, 321.05, -714.24, -13.15, 0.124}
|
||||
};
|
||||
|
||||
//Creatures
|
||||
#define WATER_GLOBULE 21913
|
||||
#define TIDEWALKER_LURKER 21920
|
||||
|
||||
//Morogrim Tidewalker AI
|
||||
struct boss_morogrim_tidewalkerAI : public ScriptedAI
|
||||
{
|
||||
boss_morogrim_tidewalkerAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
Map::PlayerList const *PlayerList;
|
||||
|
||||
uint32 TidalWave_Timer;
|
||||
uint32 WateryGrave_Timer;
|
||||
uint32 Earthquake_Timer;
|
||||
uint32 WateryGlobules_Timer;
|
||||
uint32 globulespell[4];
|
||||
int8 Playercount;
|
||||
int8 counter;
|
||||
|
||||
bool Earthquake;
|
||||
bool Phase2;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
TidalWave_Timer = 10000;
|
||||
WateryGrave_Timer = 30000;
|
||||
Earthquake_Timer = 40000;
|
||||
WateryGlobules_Timer = 0;
|
||||
globulespell[0] = SPELL_SUMMON_WATER_GLOBULE_1;
|
||||
globulespell[1] = SPELL_SUMMON_WATER_GLOBULE_2;
|
||||
globulespell[2] = SPELL_SUMMON_WATER_GLOBULE_3;
|
||||
globulespell[3] = SPELL_SUMMON_WATER_GLOBULE_4;
|
||||
|
||||
Earthquake = false;
|
||||
Phase2 = false;
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
void StartEvent()
|
||||
{
|
||||
DoScriptText(SAY_AGGRO, me);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, IN_PROGRESS);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit * /*victim*/)
|
||||
{
|
||||
DoScriptText(RAND(SAY_SLAY1,SAY_SLAY2,SAY_SLAY3), me);
|
||||
}
|
||||
|
||||
void JustDied(Unit * /*victim*/)
|
||||
{
|
||||
DoScriptText(SAY_DEATH, me);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, DONE);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/)
|
||||
{
|
||||
PlayerList = &me->GetMap()->GetPlayers();
|
||||
Playercount = PlayerList->getSize();
|
||||
StartEvent();
|
||||
}
|
||||
|
||||
void ApplyWateryGrave(Unit* pPlayer, uint8 i)
|
||||
{
|
||||
switch(i)
|
||||
{
|
||||
case 0: pPlayer->CastSpell(pPlayer, SPELL_WATERY_GRAVE_1, true); break;
|
||||
case 1: pPlayer->CastSpell(pPlayer, SPELL_WATERY_GRAVE_2, true); break;
|
||||
case 2: pPlayer->CastSpell(pPlayer, SPELL_WATERY_GRAVE_3, true); break;
|
||||
case 3: pPlayer->CastSpell(pPlayer, SPELL_WATERY_GRAVE_4, true); break;
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
//Earthquake_Timer
|
||||
if (Earthquake_Timer <= diff)
|
||||
{
|
||||
if (!Earthquake)
|
||||
{
|
||||
DoCast(me->getVictim(), SPELL_EARTHQUAKE);
|
||||
Earthquake = true;
|
||||
Earthquake_Timer = 10000;
|
||||
}
|
||||
else
|
||||
{
|
||||
DoScriptText(RAND(SAY_SUMMON1,SAY_SUMMON2), me);
|
||||
|
||||
for (uint8 i = 0; i < 10; ++i)
|
||||
{
|
||||
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
Creature* Murloc = me->SummonCreature(MurlocCords[i][0],MurlocCords[i][1],MurlocCords[i][2],MurlocCords[i][3],MurlocCords[i][4], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);
|
||||
if (pTarget && Murloc)
|
||||
Murloc->AI()->AttackStart(pTarget);
|
||||
}
|
||||
DoScriptText(EMOTE_EARTHQUAKE, me);
|
||||
Earthquake = false;
|
||||
Earthquake_Timer = 40000+rand()%5000;
|
||||
}
|
||||
} else Earthquake_Timer -= diff;
|
||||
|
||||
//TidalWave_Timer
|
||||
if (TidalWave_Timer <= diff)
|
||||
{
|
||||
DoCast(me->getVictim(), SPELL_TIDAL_WAVE);
|
||||
TidalWave_Timer = 20000;
|
||||
} else TidalWave_Timer -= diff;
|
||||
|
||||
if (!Phase2)
|
||||
{
|
||||
//WateryGrave_Timer
|
||||
if (WateryGrave_Timer <= diff)
|
||||
{
|
||||
//Teleport 4 players under the waterfalls
|
||||
Unit *pTarget;
|
||||
using std::set;
|
||||
set<int>list;
|
||||
set<int>::const_iterator itr;
|
||||
for (uint8 i = 0; i < 4; ++i)
|
||||
{
|
||||
counter = 0;
|
||||
do
|
||||
{
|
||||
pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1, 50, true); //target players only
|
||||
if (counter < Playercount)
|
||||
break;
|
||||
if (pTarget)
|
||||
itr = list.find(pTarget->GetGUID());
|
||||
++counter;
|
||||
} while (itr != list.end());
|
||||
|
||||
if (pTarget)
|
||||
{
|
||||
list.insert(pTarget->GetGUID());
|
||||
ApplyWateryGrave(pTarget, i);
|
||||
}
|
||||
}
|
||||
|
||||
DoScriptText(RAND(SAY_SUMMON_BUBL1,SAY_SUMMON_BUBL2), me);
|
||||
|
||||
DoScriptText(EMOTE_WATERY_GRAVE, me);
|
||||
WateryGrave_Timer = 30000;
|
||||
} else WateryGrave_Timer -= diff;
|
||||
|
||||
//Start Phase2
|
||||
if ((me->GetHealth()*100 / me->GetMaxHealth()) < 25)
|
||||
Phase2 = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//WateryGlobules_Timer
|
||||
if (WateryGlobules_Timer <= diff)
|
||||
{
|
||||
Unit* pGlobuleTarget;
|
||||
using std::set;
|
||||
set<int>globulelist;
|
||||
set<int>::const_iterator itr;
|
||||
for (uint8 g = 0; g < 4; g++) //one unit can't cast more than one spell per update, so some players have to cast for us XD
|
||||
{
|
||||
counter = 0;
|
||||
do {
|
||||
pGlobuleTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 50, true);
|
||||
if (pGlobuleTarget)
|
||||
itr = globulelist.find(pGlobuleTarget->GetGUID());
|
||||
if (counter > Playercount)
|
||||
break;
|
||||
++counter;
|
||||
} while (itr != globulelist.end());
|
||||
if (pGlobuleTarget)
|
||||
globulelist.insert(pGlobuleTarget->GetGUID());
|
||||
pGlobuleTarget->CastSpell(pGlobuleTarget, globulespell[g], true);
|
||||
}
|
||||
DoScriptText(EMOTE_WATERY_GLOBULES, me);
|
||||
WateryGlobules_Timer = 25000;
|
||||
} else WateryGlobules_Timer -= diff;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
//Water Globule AI
|
||||
#define SPELL_GLOBULE_EXPLOSION 37871
|
||||
|
||||
struct mob_water_globuleAI : public ScriptedAI
|
||||
{
|
||||
mob_water_globuleAI(Creature *c) : ScriptedAI(c) {}
|
||||
|
||||
uint32 Check_Timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Check_Timer = 1000;
|
||||
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->setFaction(14);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/) {}
|
||||
|
||||
void MoveInLineOfSight(Unit *who)
|
||||
{
|
||||
if (!who || me->getVictim())
|
||||
return;
|
||||
|
||||
if (who->isTargetableForAttack() && who->isInAccessiblePlaceFor(me) && me->IsHostileTo(who))
|
||||
{
|
||||
//no attack radius check - it attacks the first target that moves in his los
|
||||
//who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
|
||||
AttackStart(who);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (Check_Timer <= diff)
|
||||
{
|
||||
if (me->IsWithinDistInMap(me->getVictim(), 5))
|
||||
{
|
||||
DoCast(me->getVictim(), SPELL_GLOBULE_EXPLOSION);
|
||||
|
||||
//despawn
|
||||
me->ForcedDespawn();
|
||||
return;
|
||||
}
|
||||
Check_Timer = 500;
|
||||
} else Check_Timer -= diff;
|
||||
|
||||
//do NOT deal any melee damage to the target.
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_boss_morogrim_tidewalker(Creature* pCreature)
|
||||
{
|
||||
return new boss_morogrim_tidewalkerAI (pCreature);
|
||||
}
|
||||
CreatureAI* GetAI_mob_water_globule(Creature* pCreature)
|
||||
{
|
||||
return new mob_water_globuleAI (pCreature);
|
||||
}
|
||||
|
||||
void AddSC_boss_morogrim_tidewalker()
|
||||
{
|
||||
Script *newscript;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_morogrim_tidewalker";
|
||||
newscript->GetAI = &GetAI_boss_morogrim_tidewalker;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "mob_water_globule";
|
||||
newscript->GetAI = &GetAI_mob_water_globule;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
+398
@@ -0,0 +1,398 @@
|
||||
/* 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_Serpent_Shrine
|
||||
SD%Complete: 100
|
||||
SDComment: Instance Data Scripts and functions to acquire mobs and set encounter status for use in various Serpent Shrine Scripts
|
||||
SDCategory: Coilfang Resevoir, Serpent Shrine Cavern
|
||||
EndScriptData */
|
||||
|
||||
#include "ScriptedPch.h"
|
||||
#include "serpent_shrine.h"
|
||||
|
||||
#define MAX_ENCOUNTER 6
|
||||
#define SPELL_SCALDINGWATER 37284
|
||||
#define MOB_COILFANG_FRENZY 21508
|
||||
#define TRASHMOB_COILFANG_PRIESTESS 21220 //6*2
|
||||
#define TRASHMOB_COILFANG_SHATTERER 21301 //6*3
|
||||
|
||||
#define MIN_KILLS 30
|
||||
|
||||
//NOTE: there are 6 platforms
|
||||
//there should be 3 shatterers and 2 priestess on all platforms, total of 30 elites, else it won't work!
|
||||
//delete all other elites not on platforms! these mobs should only be on those platforms nowhere else.
|
||||
|
||||
/* Serpentshrine cavern encounters:
|
||||
0 - Hydross The Unstable event
|
||||
1 - Leotheras The Blind Event
|
||||
2 - The Lurker Below Event
|
||||
3 - Fathom-Lord Karathress Event
|
||||
4 - Morogrim Tidewalker Event
|
||||
5 - Lady Vashj Event
|
||||
*/
|
||||
|
||||
bool GOHello_go_bridge_console(Player* /*pPlayer*/, GameObject* pGo)
|
||||
{
|
||||
ScriptedInstance* pInstance = pGo->GetInstanceData();
|
||||
|
||||
if (!pInstance)
|
||||
return false;
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_CONTROL_CONSOLE, DONE);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
struct instance_serpentshrine_cavern : public ScriptedInstance
|
||||
{
|
||||
instance_serpentshrine_cavern(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
|
||||
|
||||
uint64 LurkerBelow;
|
||||
uint64 Sharkkis;
|
||||
uint64 Tidalvess;
|
||||
uint64 Caribdis;
|
||||
uint64 LadyVashj;
|
||||
uint64 Karathress;
|
||||
uint64 KarathressEvent_Starter;
|
||||
uint64 LeotherasTheBlind;
|
||||
uint64 LeotherasEventStarter;
|
||||
|
||||
uint64 ControlConsole;
|
||||
uint64 BridgePart[3];
|
||||
uint32 StrangePool;
|
||||
uint32 FishingTimer;
|
||||
uint32 LurkerSubEvent;
|
||||
uint32 WaterCheckTimer;
|
||||
uint32 FrenzySpawnTimer;
|
||||
uint32 Water;
|
||||
uint32 TrashCount;
|
||||
|
||||
bool ShieldGeneratorDeactivated[4];
|
||||
uint32 m_auiEncounter[MAX_ENCOUNTER];
|
||||
bool DoSpawnFrenzy;
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
|
||||
|
||||
LurkerBelow = 0;
|
||||
Sharkkis = 0;
|
||||
Tidalvess = 0;
|
||||
Caribdis = 0;
|
||||
LadyVashj = 0;
|
||||
Karathress = 0;
|
||||
KarathressEvent_Starter = 0;
|
||||
LeotherasTheBlind = 0;
|
||||
LeotherasEventStarter = 0;
|
||||
|
||||
ControlConsole = 0;
|
||||
BridgePart[0] = 0;
|
||||
BridgePart[1] = 0;
|
||||
BridgePart[2] = 0;
|
||||
StrangePool = 0;
|
||||
Water = WATERSTATE_FRENZY;
|
||||
|
||||
ShieldGeneratorDeactivated[0] = false;
|
||||
ShieldGeneratorDeactivated[1] = false;
|
||||
ShieldGeneratorDeactivated[2] = false;
|
||||
ShieldGeneratorDeactivated[3] = false;
|
||||
FishingTimer = 1000;
|
||||
LurkerSubEvent = 0;
|
||||
WaterCheckTimer = 500;
|
||||
FrenzySpawnTimer = 2000;
|
||||
DoSpawnFrenzy = false;
|
||||
TrashCount = 0;
|
||||
|
||||
}
|
||||
|
||||
bool IsEncounterInProgress() const
|
||||
{
|
||||
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
|
||||
if (m_auiEncounter[i] == IN_PROGRESS) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void Update (uint32 diff)
|
||||
{
|
||||
//Lurker Fishing event
|
||||
if (LurkerSubEvent == LURKER_FISHING)
|
||||
{
|
||||
if (FishingTimer <= diff)
|
||||
{
|
||||
LurkerSubEvent = LURKER_HOOKED;
|
||||
SetData(DATA_STRANGE_POOL, IN_PROGRESS);//just fished, signal Lurker script to emerge and start fight, we use IN_PROGRESS so it won't get saved and lurker will be alway invis at start if server restarted
|
||||
} else FishingTimer -= diff;
|
||||
}
|
||||
//Water checks
|
||||
if (WaterCheckTimer <= diff)
|
||||
{
|
||||
if (TrashCount >= MIN_KILLS)
|
||||
Water = WATERSTATE_SCALDING;
|
||||
else
|
||||
Water = WATERSTATE_FRENZY;
|
||||
|
||||
Map::PlayerList const &PlayerList = instance->GetPlayers();
|
||||
if (PlayerList.isEmpty())
|
||||
return;
|
||||
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
|
||||
{
|
||||
if (Player* pPlayer = i->getSource())
|
||||
{
|
||||
if (pPlayer->isAlive() && /*i->getSource()->GetPositionZ() <= -21.434931f*/pPlayer->IsInWater())
|
||||
{
|
||||
if (Water == WATERSTATE_SCALDING)
|
||||
{
|
||||
|
||||
if (!pPlayer->HasAura(SPELL_SCALDINGWATER))
|
||||
{
|
||||
pPlayer->CastSpell(pPlayer, SPELL_SCALDINGWATER,true);
|
||||
}
|
||||
} else if (Water == WATERSTATE_FRENZY)
|
||||
{
|
||||
//spawn frenzy
|
||||
if (DoSpawnFrenzy)
|
||||
{
|
||||
if (Creature* frenzy = pPlayer->SummonCreature(MOB_COILFANG_FRENZY,pPlayer->GetPositionX(),pPlayer->GetPositionY(),pPlayer->GetPositionZ(),pPlayer->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,2000))
|
||||
{
|
||||
frenzy->Attack(pPlayer,false);
|
||||
frenzy->AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_LEVITATING);
|
||||
}
|
||||
DoSpawnFrenzy = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!pPlayer->IsInWater())
|
||||
pPlayer->RemoveAurasDueToSpell(SPELL_SCALDINGWATER);
|
||||
}
|
||||
|
||||
}
|
||||
WaterCheckTimer = 500;//remove stress from core
|
||||
} else WaterCheckTimer -= diff;
|
||||
if (FrenzySpawnTimer <= diff)
|
||||
{
|
||||
DoSpawnFrenzy = true;
|
||||
FrenzySpawnTimer = 2000;
|
||||
} else FrenzySpawnTimer -= diff;
|
||||
}
|
||||
|
||||
void OnGameObjectCreate(GameObject* pGo, bool /*add*/)
|
||||
{
|
||||
switch(pGo->GetEntry())
|
||||
{
|
||||
case 184568:
|
||||
ControlConsole = pGo->GetGUID();
|
||||
pGo->setActive(true);
|
||||
break;
|
||||
|
||||
case 184203:
|
||||
BridgePart[0] = pGo->GetGUID();
|
||||
pGo->setActive(true);
|
||||
break;
|
||||
|
||||
case 184204:
|
||||
BridgePart[1] = pGo->GetGUID();
|
||||
pGo->setActive(true);
|
||||
break;
|
||||
|
||||
case 184205:
|
||||
BridgePart[2] = pGo->GetGUID();
|
||||
pGo->setActive(true);
|
||||
break;
|
||||
case GAMEOBJECT_FISHINGNODE_ENTRY://no way checking if fish is hooked, so we create a timed event
|
||||
if (LurkerSubEvent == LURKER_NOT_STARTED)
|
||||
{
|
||||
FishingTimer = 10000+rand()%30000;//random time before lurker emerges
|
||||
LurkerSubEvent = LURKER_FISHING;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* pCreature, bool /*add*/)
|
||||
{
|
||||
switch(pCreature->GetEntry())
|
||||
{
|
||||
case 21212: LadyVashj = pCreature->GetGUID(); break;
|
||||
case 21214: Karathress = pCreature->GetGUID(); break;
|
||||
case 21966: Sharkkis = pCreature->GetGUID(); break;
|
||||
case 21217: LurkerBelow = pCreature->GetGUID(); break;
|
||||
case 21965: Tidalvess = pCreature->GetGUID(); break;
|
||||
case 21964: Caribdis = pCreature->GetGUID(); break;
|
||||
case 21215: LeotherasTheBlind = pCreature->GetGUID(); break;
|
||||
/*case TRASHMOB_COILFANG_PRIESTESS:
|
||||
case TRASHMOB_COILFANG_SHATTERER:
|
||||
if (pCreature->isAlive())
|
||||
++TrashCount;
|
||||
break;*/
|
||||
}
|
||||
}
|
||||
|
||||
void SetData64(uint32 type, uint64 data)
|
||||
{
|
||||
if (type == DATA_KARATHRESSEVENT_STARTER)
|
||||
KarathressEvent_Starter = data;
|
||||
if (type == DATA_LEOTHERAS_EVENT_STARTER)
|
||||
LeotherasEventStarter = data;
|
||||
}
|
||||
|
||||
uint64 GetData64(uint32 identifier)
|
||||
{
|
||||
switch(identifier)
|
||||
{
|
||||
case DATA_THELURKERBELOW: return LurkerBelow;
|
||||
case DATA_SHARKKIS: return Sharkkis;
|
||||
case DATA_TIDALVESS: return Tidalvess;
|
||||
case DATA_CARIBDIS: return Caribdis;
|
||||
case DATA_LADYVASHJ: return LadyVashj;
|
||||
case DATA_KARATHRESS: return Karathress;
|
||||
case DATA_KARATHRESSEVENT_STARTER: return KarathressEvent_Starter;
|
||||
case DATA_LEOTHERAS: return LeotherasTheBlind;
|
||||
case DATA_LEOTHERAS_EVENT_STARTER: return LeotherasEventStarter;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case DATA_STRANGE_POOL:
|
||||
{
|
||||
StrangePool = data;
|
||||
if (data == NOT_STARTED)
|
||||
LurkerSubEvent = LURKER_NOT_STARTED;
|
||||
}
|
||||
break;
|
||||
case DATA_CONTROL_CONSOLE:
|
||||
if (data == DONE)
|
||||
{
|
||||
HandleGameObject(BridgePart[0], true);
|
||||
HandleGameObject(BridgePart[0], true);
|
||||
HandleGameObject(BridgePart[0], true);
|
||||
}
|
||||
ControlConsole = data;break;
|
||||
case DATA_TRASH :
|
||||
{
|
||||
if (data == 1 && TrashCount < MIN_KILLS)
|
||||
++TrashCount;//+1 died
|
||||
SaveToDB();
|
||||
break;
|
||||
}
|
||||
case DATA_WATER : Water = data;break;
|
||||
case DATA_HYDROSSTHEUNSTABLEEVENT: m_auiEncounter[0] = data; break;
|
||||
case DATA_LEOTHERASTHEBLINDEVENT: m_auiEncounter[1] = data; break;
|
||||
case DATA_THELURKERBELOWEVENT: m_auiEncounter[2] = data; break;
|
||||
case DATA_KARATHRESSEVENT: m_auiEncounter[3] = data; break;
|
||||
case DATA_MOROGRIMTIDEWALKEREVENT: m_auiEncounter[4] = data; break;
|
||||
//Lady Vashj
|
||||
case DATA_LADYVASHJEVENT:
|
||||
if (data == NOT_STARTED)
|
||||
{
|
||||
ShieldGeneratorDeactivated[0] = false;
|
||||
ShieldGeneratorDeactivated[1] = false;
|
||||
ShieldGeneratorDeactivated[2] = false;
|
||||
ShieldGeneratorDeactivated[3] = false;
|
||||
}
|
||||
m_auiEncounter[5] = data; break;
|
||||
case DATA_SHIELDGENERATOR1:ShieldGeneratorDeactivated[0] = (data) ? true : false; break;
|
||||
case DATA_SHIELDGENERATOR2:ShieldGeneratorDeactivated[1] = (data) ? true : false; break;
|
||||
case DATA_SHIELDGENERATOR3:ShieldGeneratorDeactivated[2] = (data) ? true : false; break;
|
||||
case DATA_SHIELDGENERATOR4:ShieldGeneratorDeactivated[3] = (data) ? true : false; break;
|
||||
}
|
||||
|
||||
if (data == DONE)
|
||||
SaveToDB();
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case DATA_HYDROSSTHEUNSTABLEEVENT: return m_auiEncounter[0];
|
||||
case DATA_LEOTHERASTHEBLINDEVENT: return m_auiEncounter[1];
|
||||
case DATA_THELURKERBELOWEVENT: return m_auiEncounter[2];
|
||||
case DATA_KARATHRESSEVENT: return m_auiEncounter[3];
|
||||
case DATA_MOROGRIMTIDEWALKEREVENT: return m_auiEncounter[4];
|
||||
//Lady Vashj
|
||||
case DATA_LADYVASHJEVENT: return m_auiEncounter[5];
|
||||
case DATA_SHIELDGENERATOR1: return ShieldGeneratorDeactivated[0];
|
||||
case DATA_SHIELDGENERATOR2: return ShieldGeneratorDeactivated[1];
|
||||
case DATA_SHIELDGENERATOR3: return ShieldGeneratorDeactivated[2];
|
||||
case DATA_SHIELDGENERATOR4: return ShieldGeneratorDeactivated[3];
|
||||
case DATA_CANSTARTPHASE3:
|
||||
if (ShieldGeneratorDeactivated[0] && ShieldGeneratorDeactivated[1] && ShieldGeneratorDeactivated[2] && ShieldGeneratorDeactivated[3])return 1;break;
|
||||
case DATA_STRANGE_POOL: return StrangePool;
|
||||
case DATA_WATER: return Water;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
std::string GetSaveData()
|
||||
{
|
||||
OUT_SAVE_INST_DATA;
|
||||
std::ostringstream stream;
|
||||
stream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " "
|
||||
<< m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " " << TrashCount;
|
||||
char* out = new char[stream.str().length() + 1];
|
||||
strcpy(out, stream.str().c_str());
|
||||
if (out)
|
||||
{
|
||||
OUT_SAVE_INST_DATA_COMPLETE;
|
||||
return out;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void Load(const char* in)
|
||||
{
|
||||
if (!in)
|
||||
{
|
||||
OUT_LOAD_INST_DATA_FAIL;
|
||||
return;
|
||||
}
|
||||
OUT_LOAD_INST_DATA(in);
|
||||
std::istringstream stream(in);
|
||||
stream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3]
|
||||
>> m_auiEncounter[4] >> m_auiEncounter[5] >> TrashCount;
|
||||
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
|
||||
if (m_auiEncounter[i] == IN_PROGRESS) // Do not load an encounter as "In Progress" - reset it instead.
|
||||
m_auiEncounter[i] = NOT_STARTED;
|
||||
OUT_LOAD_INST_DATA_COMPLETE;
|
||||
}
|
||||
};
|
||||
|
||||
InstanceData* GetInstanceData_instance_serpentshrine_cavern(Map* pMap)
|
||||
{
|
||||
return new instance_serpentshrine_cavern(pMap);
|
||||
}
|
||||
|
||||
void AddSC_instance_serpentshrine_cavern()
|
||||
{
|
||||
Script *newscript;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "instance_serpent_shrine";
|
||||
newscript->GetInstanceData = &GetInstanceData_instance_serpentshrine_cavern;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "go_bridge_console";
|
||||
newscript->pGOHello = &GOHello_go_bridge_console;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
/* 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_SERPENT_SHRINE_H
|
||||
#define DEF_SERPENT_SHRINE_H
|
||||
enum LurkerEventState
|
||||
{
|
||||
LURKER_NOT_STARTED = 0,
|
||||
LURKER_FISHING = 1,
|
||||
LURKER_HOOKED = 2
|
||||
};
|
||||
enum WaterEventState
|
||||
{
|
||||
WATERSTATE_NONE = 0,
|
||||
WATERSTATE_FRENZY = 1,
|
||||
WATERSTATE_SCALDING = 2
|
||||
};
|
||||
#define DATA_CANSTARTPHASE3 1
|
||||
#define DATA_CARIBDIS 2
|
||||
#define DATA_HYDROSSTHEUNSTABLEEVENT 3
|
||||
#define DATA_KARATHRESS 4
|
||||
#define DATA_KARATHRESSEVENT 5
|
||||
#define DATA_KARATHRESSEVENT_STARTER 6
|
||||
#define DATA_LADYVASHJ 7
|
||||
#define DATA_LADYVASHJEVENT 8
|
||||
#define DATA_LEOTHERASTHEBLINDEVENT 9
|
||||
#define DATA_MOROGRIMTIDEWALKEREVENT 10
|
||||
#define DATA_SHARKKIS 11
|
||||
#define DATA_SHIELDGENERATOR1 12
|
||||
#define DATA_SHIELDGENERATOR2 13
|
||||
#define DATA_SHIELDGENERATOR3 14
|
||||
#define DATA_SHIELDGENERATOR4 15
|
||||
#define DATA_THELURKERBELOW 16
|
||||
#define DATA_THELURKERBELOWEVENT 17
|
||||
#define DATA_TIDALVESS 18
|
||||
#define DATA_FATHOMLORDKARATHRESSEVENT 19
|
||||
#define DATA_LEOTHERAS 20
|
||||
#define DATA_LEOTHERAS_EVENT_STARTER 21
|
||||
#define DATA_CONTROL_CONSOLE 22
|
||||
#define DATA_STRANGE_POOL 23
|
||||
#define DATA_WATER 24
|
||||
#define DATA_TRASH 25
|
||||
#endif
|
||||
|
||||
+187
@@ -0,0 +1,187 @@
|
||||
/* 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_Hydromancer_Thespia
|
||||
SD%Complete: 80
|
||||
SDComment: Needs additional adjustments (when instance script is adjusted)
|
||||
SDCategory: Coilfang Resevoir, The Steamvault
|
||||
EndScriptData */
|
||||
|
||||
/* ContentData
|
||||
boss_hydromancer_thespia
|
||||
mob_coilfang_waterelemental
|
||||
EndContentData */
|
||||
|
||||
#include "ScriptedPch.h"
|
||||
#include "steam_vault.h"
|
||||
|
||||
#define SAY_SUMMON -1545000
|
||||
#define SAY_AGGRO_1 -1545001
|
||||
#define SAY_AGGRO_2 -1545002
|
||||
#define SAY_AGGRO_3 -1545003
|
||||
#define SAY_SLAY_1 -1545004
|
||||
#define SAY_SLAY_2 -1545005
|
||||
#define SAY_DEAD -1545006
|
||||
|
||||
#define SPELL_LIGHTNING_CLOUD 25033
|
||||
#define SPELL_LUNG_BURST 31481
|
||||
#define SPELL_ENVELOPING_WINDS 31718
|
||||
|
||||
struct boss_thespiaAI : public ScriptedAI
|
||||
{
|
||||
boss_thespiaAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
uint32 LightningCloud_Timer;
|
||||
uint32 LungBurst_Timer;
|
||||
uint32 EnvelopingWinds_Timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
LightningCloud_Timer = 15000;
|
||||
LungBurst_Timer = 7000;
|
||||
EnvelopingWinds_Timer = 9000;
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(TYPE_HYDROMANCER_THESPIA, NOT_STARTED);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*Killer*/)
|
||||
{
|
||||
DoScriptText(SAY_DEAD, me);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(TYPE_HYDROMANCER_THESPIA, DONE);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/)
|
||||
{
|
||||
DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), me);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/)
|
||||
{
|
||||
DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2,SAY_AGGRO_3), me);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(TYPE_HYDROMANCER_THESPIA, IN_PROGRESS);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
//LightningCloud_Timer
|
||||
if (LightningCloud_Timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_LIGHTNING_CLOUD);
|
||||
|
||||
//cast twice in Heroic mode
|
||||
if (IsHeroic())
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_LIGHTNING_CLOUD);
|
||||
|
||||
LightningCloud_Timer = 15000+rand()%10000;
|
||||
} else LightningCloud_Timer -=diff;
|
||||
|
||||
//LungBurst_Timer
|
||||
if (LungBurst_Timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_LUNG_BURST);
|
||||
LungBurst_Timer = 7000+rand()%5000;
|
||||
} else LungBurst_Timer -=diff;
|
||||
|
||||
//EnvelopingWinds_Timer
|
||||
if (EnvelopingWinds_Timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_ENVELOPING_WINDS);
|
||||
|
||||
//cast twice in Heroic mode
|
||||
if (IsHeroic())
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_ENVELOPING_WINDS);
|
||||
EnvelopingWinds_Timer = 10000+rand()%5000;
|
||||
} else EnvelopingWinds_Timer -=diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
#define SPELL_WATER_BOLT_VOLLEY 34449
|
||||
#define H_SPELL_WATER_BOLT_VOLLEY 37924
|
||||
|
||||
struct mob_coilfang_waterelementalAI : public ScriptedAI
|
||||
{
|
||||
mob_coilfang_waterelementalAI(Creature *c) : ScriptedAI(c) {}
|
||||
|
||||
uint32 WaterBoltVolley_Timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
WaterBoltVolley_Timer = 3000+rand()%3000;
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/) { }
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (WaterBoltVolley_Timer <= diff)
|
||||
{
|
||||
DoCast(me, SPELL_WATER_BOLT_VOLLEY);
|
||||
WaterBoltVolley_Timer = 7000+rand()%5000;
|
||||
} else WaterBoltVolley_Timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_boss_thespiaAI(Creature* pCreature)
|
||||
{
|
||||
return new boss_thespiaAI (pCreature);
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_mob_coilfang_waterelementalAI(Creature* pCreature)
|
||||
{
|
||||
return new mob_coilfang_waterelementalAI (pCreature);
|
||||
}
|
||||
|
||||
void AddSC_boss_hydromancer_thespia()
|
||||
{
|
||||
Script *newscript;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_hydromancer_thespia";
|
||||
newscript->GetAI = &GetAI_boss_thespiaAI;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "mob_coilfang_waterelemental";
|
||||
newscript->GetAI = &GetAI_mob_coilfang_waterelementalAI;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
+264
@@ -0,0 +1,264 @@
|
||||
/* 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_Mekgineer_Steamrigger
|
||||
SD%Complete: 60
|
||||
SDComment: Mechanics' interrrupt heal doesn't work very well, also a proper movement needs to be implemented -> summon further away and move towards pTarget to repair.
|
||||
SDCategory: Coilfang Resevoir, The Steamvault
|
||||
EndScriptData */
|
||||
|
||||
/* ContentData
|
||||
boss_mekgineer_steamrigger
|
||||
mob_steamrigger_mechanic
|
||||
EndContentData */
|
||||
|
||||
#include "ScriptedPch.h"
|
||||
#include "steam_vault.h"
|
||||
|
||||
#define SAY_MECHANICS -1545007
|
||||
#define SAY_AGGRO_1 -1545008
|
||||
#define SAY_AGGRO_2 -1545009
|
||||
#define SAY_AGGRO_3 -1545010
|
||||
#define SAY_AGGRO_4 -1545011
|
||||
#define SAY_SLAY_1 -1545012
|
||||
#define SAY_SLAY_2 -1545013
|
||||
#define SAY_SLAY_3 -1545014
|
||||
#define SAY_DEATH -1545015
|
||||
|
||||
#define SPELL_SUPER_SHRINK_RAY 31485
|
||||
#define SPELL_SAW_BLADE 31486
|
||||
#define SPELL_ELECTRIFIED_NET 35107
|
||||
#define H_SPELL_ENRAGE 1 //corrent enrage spell not known
|
||||
|
||||
#define ENTRY_STREAMRIGGER_MECHANIC 17951
|
||||
|
||||
struct boss_mekgineer_steamriggerAI : public ScriptedAI
|
||||
{
|
||||
boss_mekgineer_steamriggerAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
uint32 Shrink_Timer;
|
||||
uint32 Saw_Blade_Timer;
|
||||
uint32 Electrified_Net_Timer;
|
||||
bool Summon75;
|
||||
bool Summon50;
|
||||
bool Summon25;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Shrink_Timer = 20000;
|
||||
Saw_Blade_Timer = 15000;
|
||||
Electrified_Net_Timer = 10000;
|
||||
|
||||
Summon75 = false;
|
||||
Summon50 = false;
|
||||
Summon25 = false;
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(TYPE_MEKGINEER_STEAMRIGGER, NOT_STARTED);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*Killer*/)
|
||||
{
|
||||
DoScriptText(SAY_DEATH, me);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(TYPE_MEKGINEER_STEAMRIGGER, DONE);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/)
|
||||
{
|
||||
DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2,SAY_SLAY_3), me);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/)
|
||||
{
|
||||
DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2,SAY_AGGRO_3), me);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(TYPE_MEKGINEER_STEAMRIGGER, IN_PROGRESS);
|
||||
}
|
||||
|
||||
//no known summon spells exist
|
||||
void SummonMechanichs()
|
||||
{
|
||||
DoScriptText(SAY_MECHANICS, me);
|
||||
|
||||
DoSpawnCreature(ENTRY_STREAMRIGGER_MECHANIC,5,5,0,0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 240000);
|
||||
DoSpawnCreature(ENTRY_STREAMRIGGER_MECHANIC,-5,5,0,0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 240000);
|
||||
DoSpawnCreature(ENTRY_STREAMRIGGER_MECHANIC,-5,-5,0,0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 240000);
|
||||
|
||||
if (rand()%2)
|
||||
DoSpawnCreature(ENTRY_STREAMRIGGER_MECHANIC,5,-7,0,0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 240000);
|
||||
if (rand()%2)
|
||||
DoSpawnCreature(ENTRY_STREAMRIGGER_MECHANIC,7,-5,0,0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 240000);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (Shrink_Timer <= diff)
|
||||
{
|
||||
DoCast(me->getVictim(), SPELL_SUPER_SHRINK_RAY);
|
||||
Shrink_Timer = 20000;
|
||||
} else Shrink_Timer -= diff;
|
||||
|
||||
if (Saw_Blade_Timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,1))
|
||||
DoCast(pTarget, SPELL_SAW_BLADE);
|
||||
else
|
||||
DoCast(me->getVictim(), SPELL_SAW_BLADE);
|
||||
|
||||
Saw_Blade_Timer = 15000;
|
||||
} else Saw_Blade_Timer -= diff;
|
||||
|
||||
if (Electrified_Net_Timer <= diff)
|
||||
{
|
||||
DoCast(me->getVictim(), SPELL_ELECTRIFIED_NET);
|
||||
Electrified_Net_Timer = 10000;
|
||||
}
|
||||
else Electrified_Net_Timer -= diff;
|
||||
|
||||
if (!Summon75)
|
||||
{
|
||||
if ((me->GetHealth()*100 / me->GetMaxHealth()) < 75)
|
||||
{
|
||||
SummonMechanichs();
|
||||
Summon75 = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!Summon50)
|
||||
{
|
||||
if ((me->GetHealth()*100 / me->GetMaxHealth()) < 50)
|
||||
{
|
||||
SummonMechanichs();
|
||||
Summon50 = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!Summon25)
|
||||
{
|
||||
if ((me->GetHealth()*100 / me->GetMaxHealth()) < 25)
|
||||
{
|
||||
SummonMechanichs();
|
||||
Summon25 = true;
|
||||
}
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_boss_mekgineer_steamrigger(Creature* pCreature)
|
||||
{
|
||||
return new boss_mekgineer_steamriggerAI (pCreature);
|
||||
}
|
||||
|
||||
#define SPELL_DISPEL_MAGIC 17201
|
||||
#define SPELL_REPAIR 31532
|
||||
#define H_SPELL_REPAIR 37936
|
||||
|
||||
#define MAX_REPAIR_RANGE (13.0f) //we should be at least at this range for repair
|
||||
#define MIN_REPAIR_RANGE (7.0f) //we can stop movement at this range to repair but not required
|
||||
|
||||
struct mob_steamrigger_mechanicAI : public ScriptedAI
|
||||
{
|
||||
mob_steamrigger_mechanicAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
uint32 Repair_Timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Repair_Timer = 2000;
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* /*who*/)
|
||||
{
|
||||
//react only if attacked
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/) { }
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (Repair_Timer <= diff)
|
||||
{
|
||||
if (pInstance && pInstance->GetData64(DATA_MEKGINEERSTEAMRIGGER) && pInstance->GetData(TYPE_MEKGINEER_STEAMRIGGER) == IN_PROGRESS)
|
||||
{
|
||||
if (Unit* pMekgineer = Unit::GetUnit((*me), pInstance->GetData64(DATA_MEKGINEERSTEAMRIGGER)))
|
||||
{
|
||||
if (me->IsWithinDistInMap(pMekgineer, MAX_REPAIR_RANGE))
|
||||
{
|
||||
//are we already channeling? Doesn't work very well, find better check?
|
||||
if (!me->GetUInt32Value(UNIT_CHANNEL_SPELL))
|
||||
{
|
||||
//me->GetMotionMaster()->MovementExpired();
|
||||
//me->GetMotionMaster()->MoveIdle();
|
||||
|
||||
DoCast(me, SPELL_REPAIR, true);
|
||||
}
|
||||
Repair_Timer = 5000;
|
||||
}
|
||||
else
|
||||
{
|
||||
//me->GetMotionMaster()->MovementExpired();
|
||||
//me->GetMotionMaster()->MoveFollow(pMekgineer,0,0);
|
||||
}
|
||||
}
|
||||
} else Repair_Timer = 5000;
|
||||
} else Repair_Timer -= diff;
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_mob_steamrigger_mechanic(Creature* pCreature)
|
||||
{
|
||||
return new mob_steamrigger_mechanicAI (pCreature);
|
||||
}
|
||||
|
||||
void AddSC_boss_mekgineer_steamrigger()
|
||||
{
|
||||
Script *newscript;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_mekgineer_steamrigger";
|
||||
newscript->GetAI = &GetAI_boss_mekgineer_steamrigger;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "mob_steamrigger_mechanic";
|
||||
newscript->GetAI = &GetAI_mob_steamrigger_mechanic;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,204 @@
|
||||
/* 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_Kalithres
|
||||
SD%Complete: 65
|
||||
SDComment: Contains workarounds regarding warlord's rage spells not acting as expected. Both scripts here require review and fine tuning.
|
||||
SDCategory: Coilfang Resevoir, The Steamvault
|
||||
EndScriptData */
|
||||
|
||||
#include "ScriptedPch.h"
|
||||
#include "steam_vault.h"
|
||||
|
||||
#define SAY_INTRO -1545016
|
||||
#define SAY_REGEN -1545017
|
||||
#define SAY_AGGRO1 -1545018
|
||||
#define SAY_AGGRO2 -1545019
|
||||
#define SAY_AGGRO3 -1545020
|
||||
#define SAY_SLAY1 -1545021
|
||||
#define SAY_SLAY2 -1545022
|
||||
#define SAY_DEATH -1545023
|
||||
|
||||
#define SPELL_SPELL_REFLECTION 31534
|
||||
#define SPELL_IMPALE 39061
|
||||
#define SPELL_WARLORDS_RAGE 37081
|
||||
#define SPELL_WARLORDS_RAGE_NAGA 31543
|
||||
|
||||
#define SPELL_WARLORDS_RAGE_PROC 36453
|
||||
|
||||
struct mob_naga_distillerAI : public ScriptedAI
|
||||
{
|
||||
mob_naga_distillerAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
|
||||
//hack, due to really weird spell behaviour :(
|
||||
if (pInstance)
|
||||
{
|
||||
if (pInstance->GetData(TYPE_DISTILLER) == IN_PROGRESS)
|
||||
{
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/) { }
|
||||
|
||||
void StartRageGen(Unit * /*caster*/)
|
||||
{
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
|
||||
DoCast(me, SPELL_WARLORDS_RAGE_NAGA, true);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(TYPE_DISTILLER,IN_PROGRESS);
|
||||
}
|
||||
|
||||
void DamageTaken(Unit * /*done_by*/, uint32 &damage)
|
||||
{
|
||||
if (me->GetHealth() <= damage)
|
||||
if (pInstance)
|
||||
pInstance->SetData(TYPE_DISTILLER,DONE);
|
||||
}
|
||||
};
|
||||
|
||||
struct boss_warlord_kalithreshAI : public ScriptedAI
|
||||
{
|
||||
boss_warlord_kalithreshAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
uint32 Reflection_Timer;
|
||||
uint32 Impale_Timer;
|
||||
uint32 Rage_Timer;
|
||||
bool CanRage;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Reflection_Timer = 10000;
|
||||
Impale_Timer = 7000+rand()%7000;
|
||||
Rage_Timer = 45000;
|
||||
CanRage = false;
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(TYPE_WARLORD_KALITHRESH, NOT_STARTED);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/)
|
||||
{
|
||||
DoScriptText(RAND(SAY_AGGRO1,SAY_AGGRO2,SAY_AGGRO3), me);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(TYPE_WARLORD_KALITHRESH, IN_PROGRESS);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/)
|
||||
{
|
||||
DoScriptText(RAND(SAY_SLAY1,SAY_SLAY2), me);
|
||||
}
|
||||
|
||||
void SpellHit(Unit * /*caster*/, const SpellEntry *spell)
|
||||
{
|
||||
//hack :(
|
||||
if (spell->Id == SPELL_WARLORDS_RAGE_PROC)
|
||||
if (pInstance)
|
||||
if (pInstance->GetData(TYPE_DISTILLER) == DONE)
|
||||
me->RemoveAurasDueToSpell(SPELL_WARLORDS_RAGE_PROC);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*Killer*/)
|
||||
{
|
||||
DoScriptText(SAY_DEATH, me);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(TYPE_WARLORD_KALITHRESH, DONE);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (Rage_Timer <= diff)
|
||||
{
|
||||
if (Creature* distiller = me->FindNearestCreature(17954, 100.0f))
|
||||
{
|
||||
DoScriptText(SAY_REGEN, me);
|
||||
DoCast(me, SPELL_WARLORDS_RAGE);
|
||||
CAST_AI(mob_naga_distillerAI, distiller->AI())->StartRageGen(me);
|
||||
}
|
||||
Rage_Timer = 3000+rand()%15000;
|
||||
} else Rage_Timer -= diff;
|
||||
|
||||
//Reflection_Timer
|
||||
if (Reflection_Timer <= diff)
|
||||
{
|
||||
DoCast(me, SPELL_SPELL_REFLECTION);
|
||||
Reflection_Timer = 15000+rand()%10000;
|
||||
} else Reflection_Timer -= diff;
|
||||
|
||||
//Impale_Timer
|
||||
if (Impale_Timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_IMPALE);
|
||||
|
||||
Impale_Timer = 7500+rand()%5000;
|
||||
} else Impale_Timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_mob_naga_distiller(Creature* pCreature)
|
||||
{
|
||||
return new mob_naga_distillerAI (pCreature);
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_boss_warlord_kalithresh(Creature* pCreature)
|
||||
{
|
||||
return new boss_warlord_kalithreshAI (pCreature);
|
||||
}
|
||||
|
||||
void AddSC_boss_warlord_kalithresh()
|
||||
{
|
||||
Script *newscript;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "mob_naga_distiller";
|
||||
newscript->GetAI = &GetAI_mob_naga_distiller;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_warlord_kalithresh";
|
||||
newscript->GetAI = &GetAI_boss_warlord_kalithresh;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,231 @@
|
||||
/* 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_Steam_Vault
|
||||
SD%Complete: 80
|
||||
SDComment: Instance script and access panel GO
|
||||
SDCategory: Coilfang Resevoir, The Steamvault
|
||||
EndScriptData */
|
||||
|
||||
#include "ScriptedPch.h"
|
||||
#include "steam_vault.h"
|
||||
|
||||
#define MAX_ENCOUNTER 4
|
||||
|
||||
#define MAIN_CHAMBERS_DOOR 183049
|
||||
#define ACCESS_PANEL_HYDRO 184125
|
||||
#define ACCESS_PANEL_MEK 184126
|
||||
|
||||
/* Steam Vaults encounters:
|
||||
1 - Hydromancer Thespia Event
|
||||
2 - Mekgineer Steamrigger Event
|
||||
3 - Warlord Kalithresh Event
|
||||
*/
|
||||
|
||||
bool GOHello_go_main_chambers_access_panel(Player* /*pPlayer*/, GameObject* pGo)
|
||||
{
|
||||
ScriptedInstance* pInstance = pGo->GetInstanceData();
|
||||
|
||||
if (!pInstance)
|
||||
return false;
|
||||
|
||||
if (pGo->GetEntry() == ACCESS_PANEL_HYDRO && (pInstance->GetData(TYPE_HYDROMANCER_THESPIA) == DONE || pInstance->GetData(TYPE_HYDROMANCER_THESPIA) == SPECIAL))
|
||||
pInstance->SetData(TYPE_HYDROMANCER_THESPIA,SPECIAL);
|
||||
|
||||
if (pGo->GetEntry() == ACCESS_PANEL_MEK && (pInstance->GetData(TYPE_MEKGINEER_STEAMRIGGER) == DONE || pInstance->GetData(TYPE_MEKGINEER_STEAMRIGGER) == SPECIAL))
|
||||
pInstance->SetData(TYPE_MEKGINEER_STEAMRIGGER,SPECIAL);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
struct instance_steam_vault : public ScriptedInstance
|
||||
{
|
||||
instance_steam_vault(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
|
||||
|
||||
uint32 m_auiEncounter[MAX_ENCOUNTER];
|
||||
|
||||
uint64 ThespiaGUID;
|
||||
uint64 MekgineerGUID;
|
||||
uint64 KalithreshGUID;
|
||||
|
||||
uint64 MainChambersDoor;
|
||||
uint64 AccessPanelHydro;
|
||||
uint64 AccessPanelMek;
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
|
||||
|
||||
ThespiaGUID = 0;
|
||||
MekgineerGUID = 0;
|
||||
KalithreshGUID = 0;
|
||||
MainChambersDoor = 0;
|
||||
AccessPanelHydro = 0;
|
||||
AccessPanelMek = 0;
|
||||
}
|
||||
|
||||
bool IsEncounterInProgress() const
|
||||
{
|
||||
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
|
||||
if (m_auiEncounter[i] == IN_PROGRESS)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* pCreature, bool /*add*/)
|
||||
{
|
||||
switch(pCreature->GetEntry())
|
||||
{
|
||||
case 17797: ThespiaGUID = pCreature->GetGUID(); break;
|
||||
case 17796: MekgineerGUID = pCreature->GetGUID(); break;
|
||||
case 17798: KalithreshGUID = pCreature->GetGUID(); break;
|
||||
}
|
||||
}
|
||||
|
||||
void OnGameObjectCreate(GameObject* pGo, bool /*add*/)
|
||||
{
|
||||
switch(pGo->GetEntry())
|
||||
{
|
||||
case MAIN_CHAMBERS_DOOR: MainChambersDoor = pGo->GetGUID(); break;
|
||||
case ACCESS_PANEL_HYDRO: AccessPanelHydro = pGo->GetGUID(); break;
|
||||
case ACCESS_PANEL_MEK: AccessPanelMek = pGo->GetGUID(); break;
|
||||
}
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case TYPE_HYDROMANCER_THESPIA:
|
||||
if (data == SPECIAL)
|
||||
{
|
||||
HandleGameObject(AccessPanelHydro, true);
|
||||
|
||||
if (GetData(TYPE_MEKGINEER_STEAMRIGGER) == SPECIAL)
|
||||
HandleGameObject(MainChambersDoor, true);
|
||||
|
||||
debug_log("TSCR: Instance Steamvault: Access panel used.");
|
||||
}
|
||||
m_auiEncounter[0] = data;
|
||||
break;
|
||||
case TYPE_MEKGINEER_STEAMRIGGER:
|
||||
if (data == SPECIAL)
|
||||
{
|
||||
HandleGameObject(AccessPanelMek, true);
|
||||
|
||||
if (GetData(TYPE_HYDROMANCER_THESPIA) == SPECIAL)
|
||||
HandleGameObject(MainChambersDoor, true);
|
||||
|
||||
debug_log("TSCR: Instance Steamvault: Access panel used.");
|
||||
}
|
||||
m_auiEncounter[1] = data;
|
||||
break;
|
||||
case TYPE_WARLORD_KALITHRESH:
|
||||
m_auiEncounter[2] = data;
|
||||
break;
|
||||
case TYPE_DISTILLER:
|
||||
m_auiEncounter[3] = data;
|
||||
break;
|
||||
}
|
||||
|
||||
if (data == DONE || data == SPECIAL)
|
||||
SaveToDB();
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case TYPE_HYDROMANCER_THESPIA:
|
||||
return m_auiEncounter[0];
|
||||
case TYPE_MEKGINEER_STEAMRIGGER:
|
||||
return m_auiEncounter[1];
|
||||
case TYPE_WARLORD_KALITHRESH:
|
||||
return m_auiEncounter[2];
|
||||
case TYPE_DISTILLER:
|
||||
return m_auiEncounter[3];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64 GetData64(uint32 data)
|
||||
{
|
||||
switch(data)
|
||||
{
|
||||
case DATA_THESPIA:
|
||||
return ThespiaGUID;
|
||||
case DATA_MEKGINEERSTEAMRIGGER:
|
||||
return MekgineerGUID;
|
||||
case DATA_KALITRESH:
|
||||
return KalithreshGUID;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::string GetSaveData()
|
||||
{
|
||||
OUT_SAVE_INST_DATA;
|
||||
std::ostringstream stream;
|
||||
stream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3];
|
||||
char* out = new char[stream.str().length() + 1];
|
||||
strcpy(out, stream.str().c_str());
|
||||
if (out)
|
||||
{
|
||||
OUT_SAVE_INST_DATA_COMPLETE;
|
||||
return out;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void Load(const char* in)
|
||||
{
|
||||
if (!in)
|
||||
{
|
||||
OUT_LOAD_INST_DATA_FAIL;
|
||||
return;
|
||||
}
|
||||
OUT_LOAD_INST_DATA(in);
|
||||
std::istringstream stream(in);
|
||||
stream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3];
|
||||
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_steam_vault(Map* pMap)
|
||||
{
|
||||
return new instance_steam_vault(pMap);
|
||||
}
|
||||
|
||||
void AddSC_instance_steam_vault()
|
||||
{
|
||||
Script *newscript;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "go_main_chambers_access_panel";
|
||||
newscript->pGOHello = &GOHello_go_main_chambers_access_panel;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "instance_steam_vault";
|
||||
newscript->GetInstanceData = &GetInstanceData_instance_steam_vault;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
/* 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_STEAM_VAULT_H
|
||||
#define DEF_STEAM_VAULT_H
|
||||
|
||||
#define TYPE_HYDROMANCER_THESPIA 1
|
||||
#define TYPE_MEKGINEER_STEAMRIGGER 2
|
||||
#define TYPE_WARLORD_KALITHRESH 3
|
||||
#define TYPE_DISTILLER 4
|
||||
|
||||
#define DATA_MEKGINEERSTEAMRIGGER 5
|
||||
#define DATA_KALITRESH 6
|
||||
#define DATA_THESPIA 7
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,154 @@
|
||||
/* 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_Hungarfen
|
||||
SD%Complete: 95
|
||||
SDComment: Need confirmation if spell data are same in both modes. Summons should have faster rate in heroic
|
||||
SDCategory: Coilfang Resevoir, Underbog
|
||||
EndScriptData */
|
||||
|
||||
#include "ScriptedPch.h"
|
||||
|
||||
#define SPELL_FOUL_SPORES 31673
|
||||
#define SPELL_ACID_GEYSER 38739
|
||||
|
||||
struct boss_hungarfenAI : public ScriptedAI
|
||||
{
|
||||
boss_hungarfenAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
}
|
||||
|
||||
bool Root;
|
||||
uint32 Mushroom_Timer;
|
||||
uint32 AcidGeyser_Timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Root = false;
|
||||
Mushroom_Timer = 5000; // 1 mushroom after 5s, then one per 10s. This should be different in heroic mode
|
||||
AcidGeyser_Timer = 10000;
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/)
|
||||
{
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if ((me->GetHealth()*100) / me->GetMaxHealth() <= 20)
|
||||
{
|
||||
if (!Root)
|
||||
{
|
||||
DoCast(me, SPELL_FOUL_SPORES);
|
||||
Root = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (Mushroom_Timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
me->SummonCreature(17990, pTarget->GetPositionX()+(rand()%8), pTarget->GetPositionY()+(rand()%8), pTarget->GetPositionZ(), (rand()%5), TEMPSUMMON_TIMED_DESPAWN, 22000);
|
||||
else
|
||||
me->SummonCreature(17990, me->GetPositionX()+(rand()%8), me->GetPositionY()+(rand()%8), me->GetPositionZ(), (rand()%5), TEMPSUMMON_TIMED_DESPAWN, 22000);
|
||||
|
||||
Mushroom_Timer = 10000;
|
||||
} else Mushroom_Timer -= diff;
|
||||
|
||||
if (AcidGeyser_Timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_ACID_GEYSER);
|
||||
AcidGeyser_Timer = 10000+rand()%7500;
|
||||
} else AcidGeyser_Timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
CreatureAI* GetAI_boss_hungarfen(Creature* pCreature)
|
||||
{
|
||||
return new boss_hungarfenAI (pCreature);
|
||||
}
|
||||
|
||||
#define SPELL_SPORE_CLOUD 34168
|
||||
#define SPELL_PUTRID_MUSHROOM 31690
|
||||
#define SPELL_GROW 31698
|
||||
|
||||
struct mob_underbog_mushroomAI : public ScriptedAI
|
||||
{
|
||||
mob_underbog_mushroomAI(Creature *c) : ScriptedAI(c) {}
|
||||
|
||||
bool Stop;
|
||||
uint32 Grow_Timer;
|
||||
uint32 Shrink_Timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Stop = false;
|
||||
Grow_Timer = 0;
|
||||
Shrink_Timer = 20000;
|
||||
|
||||
DoCast(me, SPELL_PUTRID_MUSHROOM, true);
|
||||
DoCast(me, SPELL_SPORE_CLOUD, true);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit * /*who*/) {}
|
||||
|
||||
void AttackStart(Unit* /*who*/) {}
|
||||
|
||||
void EnterCombat(Unit* /*who*/) {}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (Stop)
|
||||
return;
|
||||
|
||||
if (Grow_Timer <= diff)
|
||||
{
|
||||
DoCast(me, SPELL_GROW);
|
||||
Grow_Timer = 3000;
|
||||
} else Grow_Timer -= diff;
|
||||
|
||||
if (Shrink_Timer <= diff)
|
||||
{
|
||||
me->RemoveAurasDueToSpell(SPELL_GROW);
|
||||
Stop = true;
|
||||
} else Shrink_Timer -= diff;
|
||||
}
|
||||
};
|
||||
CreatureAI* GetAI_mob_underbog_mushroom(Creature* pCreature)
|
||||
{
|
||||
return new mob_underbog_mushroomAI (pCreature);
|
||||
}
|
||||
|
||||
void AddSC_boss_hungarfen()
|
||||
{
|
||||
Script *newscript;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_hungarfen";
|
||||
newscript->GetAI = &GetAI_boss_hungarfen;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "mob_underbog_mushroom";
|
||||
newscript->GetAI = &GetAI_mob_underbog_mushroom;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,185 @@
|
||||
/* 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_the_black_stalker
|
||||
SD%Complete: 95
|
||||
SDComment: Timers may be incorrect
|
||||
SDCategory: Coilfang Resevoir, Underbog
|
||||
EndScriptData */
|
||||
|
||||
#include "ScriptedPch.h"
|
||||
|
||||
#define SPELL_LEVITATE 31704
|
||||
#define SPELL_SUSPENSION 31719
|
||||
#define SPELL_LEVITATION_PULSE 31701
|
||||
#define SPELL_MAGNETIC_PULL 31705
|
||||
#define SPELL_CHAIN_LIGHTNING 31717
|
||||
#define SPELL_STATIC_CHARGE 31715
|
||||
#define SPELL_SUMMON_SPORE_STRIDER 38755
|
||||
|
||||
#define ENTRY_SPORE_STRIDER 22299
|
||||
|
||||
struct boss_the_black_stalkerAI : public ScriptedAI
|
||||
{
|
||||
boss_the_black_stalkerAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
}
|
||||
|
||||
uint32 SporeStriders_Timer;
|
||||
uint32 Levitate_Timer;
|
||||
uint32 ChainLightning_Timer;
|
||||
uint32 StaticCharge_Timer;
|
||||
uint64 LevitatedTarget;
|
||||
uint32 LevitatedTarget_Timer;
|
||||
bool InAir;
|
||||
uint32 check_Timer;
|
||||
std::list<uint64> Striders;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Levitate_Timer = 12000;
|
||||
ChainLightning_Timer = 6000;
|
||||
StaticCharge_Timer = 10000;
|
||||
SporeStriders_Timer = 10000+rand()%5000;
|
||||
check_Timer = 5000;
|
||||
LevitatedTarget = 0;
|
||||
LevitatedTarget_Timer = 0;
|
||||
Striders.clear();
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/) {}
|
||||
|
||||
void JustSummoned(Creature *summon)
|
||||
{
|
||||
if (summon && summon->GetEntry() == ENTRY_SPORE_STRIDER)
|
||||
{
|
||||
Striders.push_back(summon->GetGUID());
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,1))
|
||||
summon->AI()->AttackStart(pTarget);
|
||||
else
|
||||
if (me->getVictim())
|
||||
summon->AI()->AttackStart(me->getVictim());
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit * /*who*/)
|
||||
{
|
||||
for (std::list<uint64>::const_iterator i = Striders.begin(); i != Striders.end(); ++i)
|
||||
if (Creature *strider = Unit::GetCreature(*me, *i))
|
||||
strider->DisappearAndDie();
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
// Evade if too far
|
||||
if (check_Timer <= diff)
|
||||
{
|
||||
float x,y,z,o;
|
||||
me->GetHomePosition(x,y,z,o);
|
||||
if (!me->IsWithinDist3d(x,y,z, 60))
|
||||
{
|
||||
EnterEvadeMode();
|
||||
return;
|
||||
}
|
||||
check_Timer = 1000;
|
||||
} else check_Timer -= diff;
|
||||
|
||||
// Spore Striders
|
||||
if (IsHeroic() && SporeStriders_Timer <= diff)
|
||||
{
|
||||
DoCast(me, SPELL_SUMMON_SPORE_STRIDER);
|
||||
SporeStriders_Timer = 10000+rand()%5000;
|
||||
} else SporeStriders_Timer -= diff;
|
||||
|
||||
// Levitate
|
||||
if (LevitatedTarget)
|
||||
{
|
||||
if (LevitatedTarget_Timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = Unit::GetUnit(*me, LevitatedTarget))
|
||||
{
|
||||
if (!pTarget->HasAura(SPELL_LEVITATE))
|
||||
{
|
||||
LevitatedTarget = 0;
|
||||
return;
|
||||
}
|
||||
if (InAir)
|
||||
{
|
||||
pTarget->AddAura(SPELL_SUSPENSION, pTarget);
|
||||
LevitatedTarget = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
pTarget->CastSpell(pTarget, SPELL_MAGNETIC_PULL, true);
|
||||
InAir = true;
|
||||
LevitatedTarget_Timer = 1500;
|
||||
}
|
||||
}
|
||||
else
|
||||
LevitatedTarget = 0;
|
||||
} else LevitatedTarget_Timer -= diff;
|
||||
}
|
||||
if (Levitate_Timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,1))
|
||||
{
|
||||
DoCast(pTarget, SPELL_LEVITATE);
|
||||
LevitatedTarget = pTarget->GetGUID();
|
||||
LevitatedTarget_Timer = 2000;
|
||||
InAir = false;
|
||||
}
|
||||
Levitate_Timer = 12000+rand()%3000;
|
||||
} else Levitate_Timer -= diff;
|
||||
|
||||
// Chain Lightning
|
||||
if (ChainLightning_Timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_CHAIN_LIGHTNING);
|
||||
ChainLightning_Timer = 7000;
|
||||
} else ChainLightning_Timer -= diff;
|
||||
|
||||
// Static Charge
|
||||
if (StaticCharge_Timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM,0,30,true))
|
||||
DoCast(pTarget, SPELL_STATIC_CHARGE);
|
||||
StaticCharge_Timer = 10000;
|
||||
} else StaticCharge_Timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_boss_the_black_stalker(Creature* pCreature)
|
||||
{
|
||||
return new boss_the_black_stalkerAI (pCreature);
|
||||
}
|
||||
|
||||
void AddSC_boss_the_black_stalker()
|
||||
{
|
||||
Script *newscript;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_the_black_stalker";
|
||||
newscript->GetAI = &GetAI_boss_the_black_stalker;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user